@@ -33,18 +33,29 @@ name, repo, version, upstream build docs — come from the invoking prompt):
3333 ** ` .claude/worktrees/<pkg> ` ** inside this repo (locally ignored via ` .git/info/exclude ` ).
3434 Never put a worktree — or anything else — outside the repository.
35352 . Add ` .github/workflows/build-<pkg>.yml ` following the playbook below.
36- 3 . Validate locally (gotcha 9), then push to ` origin ` and open a PR. A build only
37- starts from a ` Trigger: <pkg>:<tag> ` line in the ** PR description** — one per
38- version you want built (` Trigger: numpy:v2.5.1 ` ), which ` pr-trigger.yml ` picks
39- up. Editing the workflow file alone does not start a build.
36+ 3 . Validate locally (gotcha 9), then push to ` origin ` and open a PR with a
37+ ` Trigger: <pkg>:<tag> ` line in the ** PR description** for every version you want
38+ built (` Trigger: numpy:v2.5.1 ` ). ` build-<pkg>.yml ` is ` workflow_dispatch ` -only —
39+ it has no ` pull_request ` trigger of its own, so a ` Trigger: ` line is the only
40+ thing that ever starts a run; editing the workflow file alone does nothing.
41+ ` pr-trigger.yml ` parses the directives, dispatches each via ` workflow_dispatch ` ,
42+ and posts one GitHub Check Run per directive through the Checks API — a
43+ properly named, real check on the PR (` build-<pkg>.yml @ <version> ` ) whose
44+ "Details" link goes straight to the dispatched run, with real
45+ pending/success/failure/cancelled status mirrored via ` gh run watch ` .
40464 . Watch CI, triage failures, iterate until every matrix job is green and the
4147 ` publish ` job dry-runs cleanly.
42485 . When the wheels build and tests pass, reply to any review threads, then
4349 record reusable, project-agnostic learnings back into this file.
4450
4551## Anatomy of a build-<pkg >.yml
4652
47- Standard triggers (copy from an existing workflow):
53+ Standard trigger (copy from an existing workflow) — ` workflow_dispatch ` only, no
54+ ` pull_request ` block. A per-package ` pull_request: paths ` trigger was tried and
55+ dropped: with 40+ package workflows, any PR touching several of their files fired
56+ that many separate (mostly skipped) runs, flooding the Actions list for no benefit
57+ — ` pr-trigger.yml ` 's Checks-API relay (step 3 above) gives the same visible,
58+ per-directive status without it:
4859
4960``` yaml
5061on :
5364 version : { description: '<pkg> version/tag', required: true, default: '<latest stable>' }
5465` ` `
5566
56- ` workflow_dispatch` is the only trigger — no `pull_request` trigger. A build only ever starts
57- via a manual dispatch or a `Trigger : <pkg>:<tag>` line in a PR description, which `pr-trigger.yml`
58- turns into a `workflow_dispatch` call. Editing/pushing the workflow file itself must not start a build.
59-
6067UV env vars (` UV_EXTRA_INDEX_URL`, `UV_INDEX_STRATEGY`, `UV_ONLY_BINARY`) are **only** needed
6168if the workflow has steps that actually invoke `uv` (e.g. an sdist-build job on `ubuntu-latest`
6269that uses `setup-uv`). For pure cibuildwheel build-from-checkout workflows with no `uv` steps,
@@ -212,8 +219,8 @@ upload without the docs-PR side effect.
212219
2132206. **Wire up real testing** — mirror how upstream tests its wheels (gotcha 6).
214221
215- 7. **Validate locally, then push** (gotcha 9). Open a PR, add a `Trigger :
216- <pkg>:<tag>` line to its description to start CI. Watch, triage, iterate.
222+ 7. **Validate locally, then push** (gotcha 9). Open a PR; the `pull_request` path
223+ trigger runs CI. Watch, triage, iterate.
217224
218225# # Gotchas (the "wish I knew from the start" list)
219226
0 commit comments