mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-15 12:53:31 +08:00
Contributors and coding agents need one local command that both reports and enforces the quality contract. This change turns the PR gate into the shared verification entrypoint, adds path-selected local lanes, tightens coverage accounting around changed lines, and documents the repair loop in contributor and agent-facing guidance. Constraint: Ordinary PR verification must stay non-live and runnable without provider credentials Constraint: Coverage policy updates in this commit require maintainer approval before push/merge Rejected: Keep quality guidance only in docs | agents need executable scripts and AGENTS.md instructions to follow the loop consistently Confidence: high Scope-risk: broad Directive: Do not bypass `bun run verify` for production changes; fix failed lanes and coverage reports instead of lowering thresholds Tested: bun run check:policy Tested: ALLOW_CLI_CORE_CHANGE=1 ALLOW_COVERAGE_BASELINE_CHANGE=1 bun run verify Not-tested: live provider baseline; no provider credentials were required for this non-live PR gate
36 lines
1.8 KiB
TypeScript
36 lines
1.8 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
import { readFileSync } from 'node:fs'
|
|
|
|
describe('PR quality workflow', () => {
|
|
test('routes policy outputs into conditional check jobs', () => {
|
|
const workflow = readFileSync('.github/workflows/pr-quality.yml', 'utf8')
|
|
|
|
expect(workflow).toContain("if: needs.change-policy.outputs.desktop_checks == 'true'")
|
|
expect(workflow).toContain("if: needs.change-policy.outputs.server_checks == 'true'")
|
|
expect(workflow).toContain("if: needs.change-policy.outputs.adapter_checks == 'true'")
|
|
expect(workflow).toContain("if: needs.change-policy.outputs.desktop_native_checks == 'true'")
|
|
expect(workflow).toContain("if: needs.change-policy.outputs.docs_checks == 'true'")
|
|
expect(workflow).toContain("if: needs.change-policy.outputs.coverage_checks == 'true'")
|
|
})
|
|
|
|
test('keeps coverage artifacts observable in CI', () => {
|
|
const workflow = readFileSync('.github/workflows/pr-quality.yml', 'utf8')
|
|
|
|
expect(workflow).toContain('COVERAGE_BASE_REF: origin/${{ github.base_ref }}')
|
|
expect(workflow).toContain('cat "$latest_report" >> "$GITHUB_STEP_SUMMARY"')
|
|
expect(workflow).toContain('uses: actions/upload-artifact@v4')
|
|
expect(workflow).toContain('path: artifacts/coverage/')
|
|
expect(workflow).toContain('retention-days: 14')
|
|
})
|
|
|
|
test('exposes a single required gate job for branch protection', () => {
|
|
const workflow = readFileSync('.github/workflows/pr-quality.yml', 'utf8')
|
|
|
|
expect(workflow).toContain('pr-quality-gate:')
|
|
expect(workflow).toContain('name: pr-quality-gate')
|
|
expect(workflow).toContain('if: always()')
|
|
expect(workflow).toContain('require_success "change-policy" "${{ needs.change-policy.result }}"')
|
|
expect(workflow).toContain('allow_skip_or_success "coverage-checks" "${{ needs.coverage-checks.result }}"')
|
|
})
|
|
})
|