name: CI Pipeline on: push: branches: [ main ] pull_request: branches: [ main ] jobs: # Build, Lint, and Validate build-lint-validate: name: Build, Lint, and Validate runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set up Go uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 with: go-version-file: 'go.mod' - name: Cache Go modules uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.sha }}-${{ hashFiles('**/go.sum', '.golangci.yml') }} restore-keys: | ${{ runner.os }}-go- - name: Download dependencies run: go mod download - name: Install golangci-lint run: | curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.4.0 - name: Run lint run: make lint - name: Validate schemas and examples run: make validate - name: Build application run: make build - name: Check for vulnerabilities run: | go install golang.org/x/vuln/cmd/govulncheck@latest govulncheck ./... # All Tests tests: name: Tests runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set up Go uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 with: go-version-file: 'go.mod' - name: Cache Go modules uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Download dependencies run: go mod download - name: Run all tests run: make test-all - name: Upload coverage artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: coverage-report path: | coverage.out coverage.html