Skip to content

Prepare for v1.5.0 release (#85) #124

Prepare for v1.5.0 release (#85)

Prepare for v1.5.0 release (#85) #124

Workflow file for this run

# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
name: Go Pipeline
# Enable this workflow to run for pull requests and
# pushes to the main branch
on:
push:
branches:
- main
pull_request:
jobs:
download:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: 1.21
- name: Download
run: go mod download
lint:
needs: download
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: 1.21
- name: Static Analysis
run: go vet ./...
- name: Check Formatting
run: if [ "$(gofmt -s -l -e . | wc -l)" -gt 0 ]; then exit 1; fi
build:
needs: download
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: 1.21
- name: Build
run: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags='-w -s -extldflags "-static"' -tags netgo -o validator cmd/validator/validator.go
test:
needs: download
runs-on: ubuntu-latest
name: Update coverage badge
steps:
- uses: actions/checkout@v3
with:
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal access token.
fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository.
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: 1.21
- name: Unit test
run: go test -v -cover -coverprofile coverage.out ./...
- name: Check coverage
id: check-coverage
run: |
# Validate that the coverage is above or at the required threshold
echo "Checking if test coverage is above threshold ..."
echo "Coverage threshold: $COVERAGE_THRESHOLD %"
totalCoverage=`go tool cover -func coverage.out | grep total | grep -Eo '[0-9]+\.[0-9]+'`
echo "Current test coverage : $totalCoverage %"
if (( $(echo "$COVERAGE_THRESHOLD <= $totalCoverage" | bc -l) )); then
echo "Coverage OK"
else
echo "Current test coverage is below threshold"
exit 1
fi
echo "total_coverage=$totalCoverage" >> "$GITHUB_OUTPUT"
env:
COVERAGE_THRESHOLD: 95
- name: Create badge img tag and apply to README files
id: generate-badge
run: |
# Create Badge URL
# Badge will always be green because of coverage threshold check
# so we just have to populate the total coverage
totalCoverage=${{ steps.check-coverage.outputs.total_coverage }}
BADGE_URL=https://img.shields.io/badge/Coverage-$totalCoverage%25-brightgreen
BADGE_IMG_TAG="<img id=\"cov\" src=\"$BADGE_URL\" alt=\"Code Coverage\" />"
# Update README.md and index.md
for markdown_file in README.md index.md; do
sed -i "/id=\"cov\"/c\\${BADGE_IMG_TAG}" $markdown_file
done
# Check to see if files were updated
if [[ `git status --porcelain` ]]; then
echo "badge_updates=true" >> "$GITHUB_OUTPUT"
else
echo "badge_updates=false" >> "$GITHUB_OUTPUT"
fi
- name: Commit changes
if: steps.generate-badge.outputs.badge_updates == 'true' && github.event_name != 'pull_request'
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git add README.md index.md
git commit -m "chore: Updated coverage badge."
- name: Push changes
if: steps.generate-badge.outputs.badge_updates == 'true' && github.event_name != 'pull_request'
uses: ad-m/github-push-action@master
with:
github_token: ${{ github.token }}
branch: ${{ github.ref }}