GitHub CI #88
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: GitHub CI | |
on: | |
push: | |
pull_request: | |
schedule: | |
# https://crontab.guru/ | |
# At 12:00 AM, only on Monday | |
- cron: 0 0 * * 1 | |
workflow_dispatch: | |
jobs: | |
fmt: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- name: Install requirements | |
run: | | |
go install golang.org/x/tools/cmd/goimports@latest | |
- name: Check Go format | |
run: | | |
goimports -e -l $(pwd) | |
- name: Check Markdown format | |
uses: DavidAnson/[email protected] | |
with: | |
globs: | | |
**/*.md | |
#docs/themes/adidoks/**/*.md | |
audit: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Run Security Scanner | |
uses: securego/gosec@master | |
with: | |
args: -confidence low -enable-audit -tests -track-suppressions -no-fail -fmt sarif -sort -out results.sarif -stdout -verbose=text ./... | |
- name: Upload the analysis results | |
uses: github/codeql-action/upload-sarif@v3 | |
with: | |
sarif_file: ./results.sarif | |
build: | |
runs-on: ${{ matrix.os }} | |
needs: [fmt, audit] | |
strategy: | |
matrix: | |
go-version: [stable] | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- name: Build | |
run: | | |
go env -w CGO_ENABLED=0 | |
go build -o bin/ ./... | |
- name: Run golangci-lint | |
uses: golangci/golangci-lint-action@v6 | |
with: | |
version: v1.61 | |
- name: Test | |
run: | | |
go env -w CGO_ENABLED=1 | |
go test -v -timeout 30s -race -shuffle on ./... | |
coverage: | |
runs-on: ubuntu-latest | |
needs: [build] | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: stable | |
- name: Install requirements | |
run: | | |
go install github.com/jstemmer/go-junit-report@latest | |
go install github.com/jandelgado/gcov2lcov@latest | |
- name: Generate the tests and code coverage reports | |
run: | | |
go env -w CGO_ENABLED=0 | |
go test -v -coverpkg=./... -coverprofile=coverage.out ./... | |
go test -v ./... | go-junit-report > report.xml | |
go tool cover -html coverage.out -o coverage.html | |
gcov2lcov -infile=coverage.out -outfile=coverage.lcov | |
- name: Upload the test report to Codecov | |
if: ${{ !cancelled() }} | |
uses: codecov/test-results-action@v1 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: report.xml | |
- name: Upload the code coverage report to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: coverage.out | |
flags: unittests | |
name: codecov-umbrella | |
- name: Upload the code coverage report to Codacy | |
uses: codacy/[email protected] | |
with: | |
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} | |
coverage-reports: ./coverage.lcov | |
- name: Upload the code coverage report to Code Climate | |
if: github.ref == 'refs/heads/main' | |
uses: paambaati/[email protected] | |
env: | |
CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}} | |
with: | |
coverageCommand: echo Code Climate | |
coverageLocations: | | |
${{github.workspace}}/*.lcov:lcov | |
- name: Upload the code coverage report to DeepSource | |
uses: deepsourcelabs/test-coverage-action@master | |
with: | |
key: go | |
coverage-file: coverage.out | |
dsn: ${{ secrets.DEEPSOURCE_DSN }} | |
- name: Upload the code coverage report to GitHub | |
uses: actions/upload-artifact@v4 | |
with: | |
name: code-coverage-report | |
path: coverage.html | |
- name: Refresh the Go Report card | |
if: github.ref == 'refs/heads/main' | |
run: | | |
curl -X POST -F "repo=github.com/${{ github.repository }}" https://goreportcard.com/checks |