Skip to content

Commit 1db53cb

Browse files
Merge remote-tracking branch 'origin/main' into next
2 parents f08f720 + 8676b45 commit 1db53cb

32 files changed

Lines changed: 51371 additions & 91394 deletions

.github/workflows/skill-drift.yml

Lines changed: 0 additions & 16 deletions
This file was deleted.

.github/workflows/track-bst-sources.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ jobs:
152152
private-key: ${{ secrets.MERGERAPTOR_PRIVATE_KEY }}
153153

154154
- name: Setup Just
155-
uses: taiki-e/install-action@18b1216eba7f8039b0f8d131d5473787f0edce68 # v2
155+
uses: taiki-e/install-action@16b05812d776ae1dfaabc8277e421fb6d2506419 # v2
156156
with:
157157
tool: just
158158

@@ -319,7 +319,7 @@ jobs:
319319
token: ${{ steps.app-token.outputs.token }}
320320

321321
- name: Setup Just
322-
uses: taiki-e/install-action@18b1216eba7f8039b0f8d131d5473787f0edce68 # v2
322+
uses: taiki-e/install-action@16b05812d776ae1dfaabc8277e421fb6d2506419 # v2
323323
with:
324324
tool: just
325325

@@ -852,7 +852,7 @@ jobs:
852852
token: ${{ steps.app-token.outputs.token }}
853853

854854
- name: Setup Just
855-
uses: taiki-e/install-action@18b1216eba7f8039b0f8d131d5473787f0edce68 # v2
855+
uses: taiki-e/install-action@16b05812d776ae1dfaabc8277e421fb6d2506419 # v2
856856
with:
857857
tool: just
858858

.github/workflows/track-next-junctions.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
token: ${{ steps.app-token.outputs.token }}
4646

4747
- name: Setup Just
48-
uses: taiki-e/install-action@18b1216eba7f8039b0f8d131d5473787f0edce68 # v2
48+
uses: taiki-e/install-action@16b05812d776ae1dfaabc8277e421fb6d2506419 # v2
4949
with:
5050
tool: just
5151

.github/workflows/validate.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
2222

2323
- name: Setup Just
24-
uses: taiki-e/install-action@18b1216eba7f8039b0f8d131d5473787f0edce68 # v2
24+
uses: taiki-e/install-action@16b05812d776ae1dfaabc8277e421fb6d2506419 # v2
2525
with:
2626
tool: just
2727

docs/ci.md

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
|---|---|---|
77
| `validate` | `pull_request` | `bst show` — graph + patch check (~15 min) |
88
| `e2e` | `pull_request` when `elements/`, `files/`, `patches/`, `Justfile`, or `project.conf` changed | Smoke test in QEMU via projectbluefin/testsuite |
9-
| `build` | `push: testing` (BST-affecting paths), `workflow_dispatch`, `schedule: daily 13:00 UTC` — skips on `pull_request`/`merge_group` | Four x86 variants concurrently through remote BuildBox execution; artifacts land in the remote CAS |
9+
| `build` | `push: testing/next` (paths-ignore: `.github/workflows/**`, `docs/**`, `**.md`, `AGENTS.md`), `merge_group`, `workflow_dispatch`, `schedule: daily 13:00 UTC` — skips on `pull_request` | Full OCI build (~60–90 min) |
1010
| `build-aarch64` | `push: testing/main` (BST-affecting paths only), `workflow_run` from `publish.yml` on `testing`, `workflow_dispatch` | ARM64 — fully decoupled, never blocks release |
1111

1212
## Publish pipeline (publish.yml)
@@ -15,20 +15,19 @@
1515

1616
```
1717
build.yml (testing|next) → [workflow_run] → publish.yml
18-
setup → publish-image → promote (:testing or :next)
19-
└→ publish-sbom (parallel)
18+
setup → publish-image → boot-check → promote (:testing or :next)
19+
──────────→ publish-sbom (parallel)
2020
```
2121

2222
| Job | What |
2323
|---|---|
2424
| `setup` | Resolves SHA, trigger event, and branch |
25-
| `publish-image` | Exports from CAS; rechunks; pushes `:$sha` and records the manifest digest from podman's digestfile; anonymous tag visibility is warning-only; signs + attests; uploads `digest-<variant>` artifact |
26-
| `promote` | Downloads `digest-<variant>`, `skopeo copy` by digest → `:testing`, verifies the promoted tag matches; falls back to an authenticated `:$sha` inspect if the artifact is missing |
27-
| `publish-sbom` | Generates SBOM; resolves the image digest from `digest-<variant>` (same fallback); attaches via oras; signs SBOM (parallel with promote) |
25+
| `publish-image` | Exports from CAS; runs `chunka@v1` to rechunk; pushes `:$sha`; signs + attests |
26+
| `boot-check` | Hard gate — image must boot before `:testing` is promoted |
27+
| `promote` | `skopeo copy` `:$sha``:testing` (only runs after boot-check passes) |
28+
| `publish-sbom` | Generates SBOM; attaches via oras; signs SBOM (runs in parallel with promote) |
2829

29-
`promote` depends only on `publish-image`, not on SBOM — saves 10–15 min on the critical path.
30-
31-
**Digest contract:** a successful push plus podman's `--digestfile` digest is the receipt; no stage re-reads GHCR to rediscover what was pushed. The digest travels via per-variant `digest-<variant>` workflow artifacts, consumed everywhere through the shared `.github/actions/resolve-image-digest` action (artifact preferred, authenticated `:sha` inspect fallback). The few remaining registry reads (stable comparison, promote post-copy verify) are authenticated and digest-based. Anonymous tag reads are advisory only — GHCR's anonymous path is eventually consistent and lagged past a 6-minute poll twice on 2026-07-28/29. Artifacts are immutable per run: re-running a single `publish-image` job that already uploaded its artifact may fail the upload; re-run the whole workflow instead.
30+
`promote` depends only on `publish-image` + `boot-check`, not on SBOM — saves 10–15 min on the critical path.
3231

3332
**Critical ordering:** `publish.yml` pulls the OCI artifact from CAS. The artifact is only in CAS if `build.yml` ran first for that SHA. Always dispatch `build.yml --ref testing` (or let push trigger it) before manually dispatching `publish.yml`.
3433

@@ -38,13 +37,12 @@ build.yml (testing|next) → [workflow_run] → publish.yml
3837

3938
```
4039
push to testing (BST-affecting) or daily 13:00 UTC schedule
41-
→ build.yml → publish.yml → :testing
40+
→ build.yml → publish.yml → boot-check → :testing
4241
→ execute-release.yml (workflow_run from publish on testing)
43-
→ freshness check: digest from the publish run's digest-default artifact
44-
(authenticated :$sha inspect as fallback) vs :stable digest
42+
→ SHA freshness check (:testing SHA vs :stable SHA)
4543
→ skip if equal (already up to date)
46-
→ cosign verify
47-
→ skopeo copy :$sha → :stable (reusable workflow)
44+
→ cosign verify :testing
45+
→ skopeo copy :testing → :stable
4846
→ fast-forward main bookmark
4947
→ GitHub Release created
5048
```
@@ -53,7 +51,7 @@ push to testing (BST-affecting) or daily 13:00 UTC schedule
5351

5452
## Schedule
5553

56-
Build fires daily at 13:00 UTC, on BST-affecting pushes to `testing`, and through `workflow_dispatch`. The nightly-next dispatcher invokes the same workflow explicitly on `next`; PR and merge-queue events do not run it.
54+
Build fires daily at 13:00 UTC (`schedule:` in `build.yml`), plus on every BST-affecting push to `testing` or `next`, `merge_group`, and `workflow_dispatch`.
5755

5856
## Remote execution and cache
5957

docs/skills/aarch64.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,4 @@ The `build-aarch64` job was originally in `build.yml` with `if: false` (disabled
9797
### Publish skips after docs-only commits (2026-06-22)
9898

9999
When all recent commits on `testing` are paths-ignored (docs/AGENTS.md only), no automatic build fires and `:testing` goes stale. Recovery: manual `workflow_dispatch` on `build.yml` targeting `testing`. After the build, `publish.yml` fires automatically, which then triggers `build-aarch64.yml`.
100+

0 commit comments

Comments
 (0)