Readme #12
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
name: CI | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
jobs: | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Go 1.22 | |
uses: actions/setup-go@v3 | |
with: | |
go-version: 1.22 | |
- name: Cache Go modules | |
uses: actions/cache@v2 | |
with: | |
path: | | |
~/go/pkg/mod | |
~/.cache/go-build | |
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-go- | |
- name: Update dependencies | |
run: go mod tidy | |
- name: Test with Coverage | |
run: go test ./... -coverprofile=coverage.out -covermode=atomic | |
- name: Check Coverage | |
run: | | |
go tool cover -func=coverage.out -o coverage-summary.txt | |
COVERAGE=$(go tool cover -func=coverage.out | grep total: | awk '{print substr($3, 1, length($3)-1)}') | |
echo "Total test coverage: $COVERAGE%" | |
if (( $(echo "$COVERAGE < 60" |bc -l) )); then | |
echo "Test coverage is below 60%" | |
exit 1 | |
fi | |
env: | |
GO111MODULE: on | |
- name: Install golangci-lint | |
run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin latest | |
- name: Run golangci-lint | |
run: golangci-lint run ./... | |
env: | |
GO111MODULE: on | |
- name: SonarQube Scan | |
uses: sonarsource/[email protected] | |
env: | |
SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} | |
SONAR_HOST_URL: ${{ vars.SONARQUBE_URL }} | |
with: | |
args: > | |
-Dsonar.projectKey=go-cache | |
-Dsonar.sources=. | |
-Dsonar.go.coverage.reportPaths=coverage.out | |
-Dsonar.exclusions=**/*_test.go,**/main.go | |
-Dsonar.qualitygate.wait=true | |
-Dsonar.qualitygate.timeout=300 | |
-Dsonar.qualitygate.status=ERROR | |
-Dsonar.qualitygate.stop=true | |
-Dsonar.qualitygate.failIfNoQualityGate=true |