-
Notifications
You must be signed in to change notification settings - Fork 72
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make Go Pipeline better and safer (#89)
- Loading branch information
1 parent
78eedf0
commit 088be61
Showing
1 changed file
with
26 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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="<img id=\"cov\" src=\"$BADGE_URL\" alt=\"Code 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 | ||
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 "[email protected]" | ||
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 }} | ||
|