name: Backend Tests on: push: branches: [main] pull_request: branches: [main] paths: - "go.mod" - "go.sum" - "**.go" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: GO_VERSION: "1.25.7" jobs: static-checks: name: Static Checks runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v6 - name: Setup Go uses: actions/setup-go@v6 with: go-version: ${{ env.GO_VERSION }} cache: true cache-dependency-path: go.sum - name: Verify go.mod is tidy run: | go mod tidy -go=${{ env.GO_VERSION }} git diff --exit-code - name: Run golangci-lint uses: golangci/golangci-lint-action@v9 with: version: v2.4.0 args: --timeout=3m tests: name: Tests (${{ matrix.test-group }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: test-group: [store, server, plugin, other] steps: - name: Checkout code uses: actions/checkout@v6 - name: Setup Go uses: actions/setup-go@v6 with: go-version: ${{ env.GO_VERSION }} cache: true cache-dependency-path: go.sum - name: Run tests run: | case "${{ matrix.test-group }}" in store) # Run store tests for all drivers (sqlite, mysql, postgres) go test -v -coverprofile=coverage.out -covermode=atomic ./store/... ;; server) go test -v -race -coverprofile=coverage.out -covermode=atomic ./server/... ;; plugin) go test -v -race -coverprofile=coverage.out -covermode=atomic ./plugin/... ;; other) go test -v -race -coverprofile=coverage.out -covermode=atomic \ ./cmd/... ./internal/... ./proto/... ;; esac env: DRIVER: ${{ matrix.test-group == 'store' && '' || 'sqlite' }} - name: Upload coverage if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: codecov/codecov-action@v5 with: files: ./coverage.out flags: ${{ matrix.test-group }} fail_ci_if_error: false