Skip to content

ci: ideas worth back-porting from the quickchr CI refactor (#29 there) #171

Description

@mobileskyfi

quickchr's CI was refactored end-to-end in tikoci/quickchr#29 (2026-07). Since centrs's scheme descends from quickchr's old one, a few of the new ideas may be worth adopting here. Filed for consideration — none is urgent.

1. PR freshness gate instead of per-PR CHR smoke

quickchr PRs no longer boot any CHR. Instead a required Integration freshness check (~5s) asserts the latest completed integration run on main is green — a red main visibly blocks all PRs until fixed, and merges never wait ~20 min. Verdict logic is a small unit-tested Bun script (scripts/ci-freshness.ts: skips cancelled runs, 404 = bootstrap hint, in-flight note when main tip is ahead). Could replace or downgrade chr-smoke in centrs's ci.yaml.

2. Single cross-OS matrix job instead of per-platform job bodies

quickchr's integration.yml collapses five copy-pasted platform jobs into one plan job (platform table → matrix JSON, unknown ids fail the plan — no empty-matrix false greens) + one matrix job with per-OS conditional install/cache steps. qa.yaml's 364 lines carry a lot of bespoke YAML that could shrink the same way.

3. Per-run files on the data branch instead of rebase-retry-heavy commits

quickchr's ci-data branch takes one runs/<run_id>-<platform>.ndjson per job — filenames never collide, so the push-retry loop only matters for the small shared tested-versions.json rollup. qa-history's contention window shrinks a lot with this shape.

4. No continue-on-error anywhere ("green should be green")

TCG platforms default to a curated smoke subset that reliably completes instead of being green-washed; a red is a real red. Sweep-style broad runs live in a separate workflow file from the PR-gating signal so a flaky TCG leg can't block merges but also can't hide.

5. One-click release via workflow_dispatch

release.yml: version-bump choice + dry-run → gates (freshness green, CHANGELOG [Unreleased] non-empty) → unit-tested release-prep.ts does the bump + CHANGELOG rollover → commit/tag/GitHub Release/npm publish --provenance. No local tag pushing; CHANGELOG can't go stale because the release refuses an empty [Unreleased].

Reference implementation: https://github.com/tikoci/quickchr/tree/main/.github/workflows + .github/instructions/ci.instructions.md.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions