name: CI Pipeline on: push: branches: [ main ] pull_request: branches: [ main ] env: GO_VERSION: '1.24.x' jobs: # Build, Lint, and Validate build-lint-validate: name: Build, Lint, and Validate runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Cache Go modules uses: actions/cache@v4 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.3.1 - 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@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Cache Go modules uses: actions/cache@v4 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 to Codecov uses: codecov/codecov-action@v4 with: file: ./coverage.out flags: unittests name: codecov-unit fail_ci_if_error: false