name: Test on: workflow_call: secrets: CACHIX_AUTH_TOKEN: required: false pull_request: branches: - main - v[0-9]+ paths: - .github/workflows/test.yaml - .github/workflows/report.yaml - .github/actions/setup-nix/** - default.nix - nix/** - .stylish-haskell.yaml - cabal.project - postgrest.cabal - '**.hs' - test/** - '!**.md' concurrency: # Terminate all previous runs of the same workflow for pull requests group: test-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: lint-style: name: Lint & Style runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Nix Environment uses: ./.github/actions/setup-nix with: authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' tools: style - name: Run linter (check locally with `nix-shell --run postgrest-lint`) run: postgrest-lint - name: Run style check (auto-format with `nix-shell --run postgrest-style`) run: postgrest-style-check coverage: name: Coverage runs-on: ubuntu-latest defaults: run: # Hack for enabling color output, see: # https://github.com/actions/runner/issues/241#issuecomment-842566950 shell: script -qec "bash --noprofile --norc -eo pipefail {0}" steps: - uses: actions/checkout@v4 - name: Setup Nix Environment uses: ./.github/actions/setup-nix with: authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' tools: tests - name: Run coverage (IO tests and Spec tests against PostgreSQL 15) run: postgrest-coverage - name: Upload coverage to codecov uses: codecov/codecov-action@v3.1.5 with: files: ./coverage/codecov.json - name: Run doctests if: always() run: nix-shell --run postgrest-test-doctests - name: Check the spec tests for idempotence if: always() run: postgrest-test-spec-idempotence postgres: strategy: fail-fast: false matrix: pgVersion: [9.6, 10, 11, 12, 13, 14, 15, 16] name: PG ${{ matrix.pgVersion }} runs-on: ubuntu-latest defaults: run: # Hack for enabling color output, see: # https://github.com/actions/runner/issues/241#issuecomment-842566950 shell: script -qec "bash --noprofile --norc -eo pipefail {0}" steps: - uses: actions/checkout@v4 - name: Setup Nix Environment uses: ./.github/actions/setup-nix with: authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' tools: tests withTools - name: Run spec tests if: always() run: postgrest-with-postgresql-${{ matrix.pgVersion }} postgrest-test-spec - name: Run IO tests if: always() run: postgrest-with-postgresql-${{ matrix.pgVersion }} postgrest-test-io -vv memory: name: Memory runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Nix Environment uses: ./.github/actions/setup-nix with: authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' tools: memory - name: Run memory tests run: postgrest-test-memory loadtest: name: Loadtest runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Nix Environment uses: ./.github/actions/setup-nix with: tools: loadtest - uses: actions-ecosystem/action-get-latest-tag@v1 id: get-latest-tag with: semver_only: true - name: Run loadtest run: | postgrest-loadtest-against main ${{ steps.get-latest-tag.outputs.tag }} postgrest-loadtest-report > loadtest/loadtest.md - name: Upload report uses: actions/upload-artifact@v4 with: name: loadtest.md path: loadtest/loadtest.md if-no-files-found: error