# Coverage snapshot — commits coverage/summary.json back to main after each # merge so the trend history accumulates in `git log -- coverage/summary.json` # (ADR-020 L2). This is the only workflow that needs `contents: write`. # # Skipped if summary.json hasn't changed since the previous commit. name: Coverage snapshot on: push: branches: [main] # Avoid two snapshot runs racing each other on rapid-fire merges. concurrency: group: coverage-snapshot cancel-in-progress: false permissions: contents: write jobs: snapshot: runs-on: ubuntu-latest services: postgres: image: postgres:16-alpine env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres POSTGRES_DB: cms_test ports: - 5432:5432 options: >- --health-cmd "pg_isready -U postgres" --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 with: # Token with write scope so we can push the snapshot back. token: ${{ secrets.GITHUB_TOKEN }} - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm - run: pnpm install --frozen-lockfile - name: Test with coverage env: DATABASE_URL: postgres://postgres:postgres@localhost:5432/cms_test PAYLOAD_SECRET: test-secret-do-not-use-in-prod run: pnpm test -- --coverage - name: Aggregate run: pnpm coverage:aggregate - name: Commit summary.json if changed run: | if git diff --quiet --exit-code coverage/summary.json; then echo "No summary.json change; skipping commit." exit 0 fi git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add coverage/summary.json git commit -m "chore(coverage): snapshot ${GITHUB_SHA::7} Auto-generated by .github/workflows/coverage-snapshot.yml. [skip ci]" git push origin HEAD:main