You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ci(build): route x86 variants through BuildBox remote execution (#1227)
* ci(build): route x86 variants through BuildBox remote execution with fail-closed verification
* refactor(ci): slim the config generator since the checker owns shape assertions
|`e2e`|`pull_request` when `elements/`, `files/`, `patches/`, `Justfile`, or `project.conf` changed | Smoke test in QEMU via projectbluefin/testsuite |
|`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|
10
10
|`build-aarch64`|`push: testing/main` (BST-affecting paths only), `workflow_run` from `publish.yml` on `testing`, `workflow_dispatch`| ARM64 — fully decoupled, never blocks release |
11
11
12
12
## Publish pipeline (publish.yml)
@@ -51,11 +51,11 @@ push to testing (BST-affecting) or daily 13:00 UTC schedule
51
51
52
52
## Schedule
53
53
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`.
54
+
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.
55
55
56
-
## Remote cache
56
+
## Remote execution and cache
57
57
58
-
`cache.projectbluefin.io:11002` — mTLS via `CASD_CLIENT_CERT` + `CASD_CLIENT_KEY`.
58
+
`cache.projectbluefin.io:11002` — BuildBox 1.4.11 execution, remote CAS, artifact/source caches, and action cache behind mTLS via `CASD_CLIENT_CERT` + `CASD_CLIENT_KEY`. Build jobs fail closed; publish uses a fetch-only configuration so it can materialize images locally.
Copy file name to clipboardExpand all lines: docs/skills/buildstream.md
+12-11Lines changed: 12 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -138,24 +138,25 @@ Changing a `kind: stack` dependency does not always invalidate downstream `compo
138
138
139
139
Dakota's `patches/` directory is still carrying a small downstream patch queue for FSDK and GNOME Build Meta behavior that has not landed in the pinned upstream release yet. Every patch should carry an `Upstream-Status` header plus an `Exit` line so the next engineer can tell whether the workaround is still pending upstream or should be dropped. This is especially important when the patch is only needed because the junction is still older than the stock GNOME OS baseline.
140
140
141
-
### Warm-cache builds still take 90-120 min — this is normal (2026-06-23)
Even with a fully warm remote CAS, a full build takes 90-120 min. Common misconception: "cache is hot = fast build." Actual breakdown:
143
+
> Superseded for x86 CI by remote-backed CAS and BuildBox execution on
144
+
> 2026-07-28. The 90–150 minute range described the old explicit pre-pull and
145
+
> runner-local assembly path; do not use it to justify reintroducing those steps.
144
146
145
-
-**Pull volume:**~1,400 elements × a few seconds each / 32 parallel fetchers = 15-30 min just for network pulls
146
-
-**Two parallel jobs:**`default` and `nvidia` both run simultaneously, each hitting the same CAS endpoint, halving effective bandwidth per job
147
-
-**OCI assembly is sequential:** After all elements pull/build, `oci/bluefin.bst` runs chunkify + image assembly — single-threaded, typically 20-40 min on its own
148
-
-**Cold elements:** Any junction ref bump (Renovate PRs for distrobox, gnome-build-meta, etc.) invalidates those subtrees → full recompile from source adds 30-90 min
147
+
Cold junction changes can still take time because actions genuinely need to run,
148
+
but they run on the remote executor. Measure the new path before tuning.
149
149
150
-
Do not cancel a build under 120 min just because it "seems slow." Historical range for successful builds: 90-150 min.
150
+
### Fetcher count needs measurement under remote-backed CAS (2026-06-23)
151
151
152
-
### 32 fetchers is the right setting for cache.projectbluefin.io (2026-06-23)
153
-
154
-
`buildstream-ci.conf` uses `fetchers: 32` (BST default is 10). With default + nvidia running simultaneously = 64 concurrent gRPC streams. The CAS server is a Hetzner AX102-U (1 Gbit/s uplink, NVMe Gen4) and can serve 64 streams comfortably. The bottleneck is network bandwidth (~125 MB/s total), not server capacity. Do not reduce fetchers without evidence of server-side saturation.
152
+
`buildstream-ci.conf` retains `fetchers: 32` for the initial RE rollout. Four
153
+
variant jobs can create more metadata requests than the old two-job model, while
154
+
top-level remote storage avoids transferring file payloads through the runners.
155
+
Change this value only from observed endpoint saturation or latency evidence.
155
156
156
157
### Avoid /dev/stdin redirection in remote sandboxes (2026-07-25)
157
158
158
-
BuildStream elements that write inline configuration files using `install -Dm644 /dev/stdin ... <<'EOF'` fail in remote execution sandboxes (like BuildBarn) where `/dev/stdin` is not available as a standard character device. Write inline files using a two-step pattern: create the destination file with `install -Dm644 /dev/null target`, then populate it with `cat > target <<'EOF'`.
159
+
BuildStream elements that write inline configuration files using `install -Dm644 /dev/stdin ... <<'EOF'` fail in remote execution sandboxes (such as BuildBox) where `/dev/stdin` is not available as a standard character device. Write inline files using a two-step pattern: create the destination file with `install -Dm644 /dev/null target`, then populate it with `cat > target <<'EOF'`.
159
160
160
161
### overlap-whitelist required for base system file replacement
0 commit comments