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@08eba0b27e820071cde6df949e0beb9ba4906955 #v4 - name: Set up Go uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 #v5 with: go-version: ${{ env.GO_VERSION }} - name: Cache Go modules uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #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.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@08eba0b27e820071cde6df949e0beb9ba4906955 #v4 - name: Set up Go uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 #v5 with: go-version: ${{ env.GO_VERSION }} - name: Cache Go modules uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #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 artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 #v4 with: name: coverage-report path: | coverage.out coverage.html