name: CI on: push: branches: [main] pull_request: jobs: changes: name: Detect changes runs-on: ubuntu-latest permissions: pull-requests: read outputs: go: ${{ steps.filter.outputs.go }} steps: - uses: actions/checkout@v6 - uses: dorny/paths-filter@v3 id: filter with: filters: | go: - '**.go' - 'go.mod' - 'go.sum' - '.golangci.yml' - 'Makefile' - '.github/workflows/**' lint: name: Lint needs: changes if: needs.changes.outputs.go == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v5 with: go-version: stable - name: Cache Go modules uses: actions/cache@v5 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-mod- - name: Run golangci-lint uses: golangci/golangci-lint-action@v9 with: version: v2.10.1 test: name: Test needs: changes if: needs.changes.outputs.go == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v5 with: go-version: stable - name: Cache Go modules uses: actions/cache@v5 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-mod- - name: Cache Go build cache uses: actions/cache@v5 with: path: ~/.cache/go-build key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-build- - name: Run tests run: go test -race -v ./...