diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 959c2e88..ad0f1664 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -20,9 +20,9 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: 1.21 + go-version: '1.21' - - name: Download + - name: Download dependencies run: go mod download lint: @@ -34,13 +34,13 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: 1.21 + 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 + run: test -z "$(gofmt -s -l -e .)" build: needs: download @@ -51,10 +51,12 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: 1.21 + 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 + 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 @@ -69,29 +71,28 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: 1.21 + go-version: '1.21' - name: Unit test run: go test -v -cover -coverprofile coverage.out ./... - name: Check coverage id: check-coverage + env: + COVERAGE_THRESHOLD: 95 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" + 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 + echo "total_coverage=${totalCoverage}" >> "${GITHUB_OUTPUT}" - name: Create badge img tag and apply to README files id: generate-badge @@ -100,31 +101,31 @@ jobs: # 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="\"Code" + BADGE_URL="https://img.shields.io/badge/Coverage-${totalCoverage}%25-brightgreen" + BADGE_IMG_TAG="\"Code" # 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 + 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" + if git diff --quiet; then + echo "badge_updates=true" >> "${GITHUB_OUTPUT}" else - echo "badge_updates=false" >> "$GITHUB_OUTPUT" + echo "badge_updates=false" >> "${GITHUB_OUTPUT}" fi - name: Commit changes - if: steps.generate-badge.outputs.badge_updates == 'true' && github.event_name != 'pull_request' + if: steps.generate-badge.outputs.badge_updates == 'true' && github.event_name == 'push' run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - git add README.md index.md + 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' + if: steps.generate-badge.outputs.badge_updates == 'true' && github.event_name == 'push' uses: ad-m/github-push-action@master with: github_token: ${{ github.token }}