|
5 | 5 | # |
6 | 6 | # #7206 baked gcc/libc6-dev/tmux into the ARC runner image so race shards stop |
7 | 7 | # depending on apt egress from the cluster — the failure class behind #6648 → |
8 | | -# #6870 → #6935 → #7124 → #7201 → #7289. The Dockerfile merged on 2026-09-16; |
9 | | -# a day later the image still did not exist on GHCR, because publishing it was |
10 | | -# left to "an operator with docker + GHCR write", and two more shards had died |
11 | | -# at "Prepare cgo toolchain" in the meantime. This workflow removes the GHCR |
12 | | -# half of that operator dependency: the build runs here, on a GitHub-hosted |
13 | | -# runner, with the job's own GITHUB_TOKEN (packages: write). What remains for |
14 | | -# an operator is the one thing CI cannot do — `kubectl patch` the |
15 | | -# RunnerDeployment in `arc-systems` to the tag this run prints. |
| 8 | +# #6870 → #6935 → #7124 → #7201 → #7289. The image also carries GitHub CLI so |
| 9 | +# `gh`-driven automation can move off the hosted lane after this image is rolled |
| 10 | +# out. The Dockerfile merged on 2026-09-16; a day later the image still did not |
| 11 | +# exist on GHCR, because publishing it was left to "an operator with docker + |
| 12 | +# GHCR write", and two more shards had died at "Prepare cgo toolchain" in the |
| 13 | +# meantime. This workflow removes the GHCR half of that operator dependency: |
| 14 | +# the build runs here, on a GitHub-hosted runner, with the job's own |
| 15 | +# GITHUB_TOKEN (packages: write). What remains for an operator is the one thing |
| 16 | +# CI cannot do — `kubectl patch` the RunnerDeployment in `arc-systems` to the |
| 17 | +# tag this run prints. |
16 | 18 | # |
17 | 19 | # ── Where it runs ─────────────────────────────────────────────────────────── |
18 | 20 | # |
|
28 | 30 | # workflow_dispatch builds AND pushes. Inputs pick the base runner image and |
29 | 31 | # the tag suffix; the pushed tag is |
30 | 32 | # ghcr.io/<owner>/hive-ci-runner:<runner version>-<suffix>, |
31 | | -# e.g. v2.337.0-ubuntu-24.04-toolchain-1 — immutable by |
| 33 | +# e.g. v2.337.0-ubuntu-24.04-toolchain-gh-1 — immutable by |
32 | 34 | # construction, as runner-image-patch.yaml requires. A |
33 | 35 | # re-run with the same suffix is refused rather than |
34 | 36 | # overwriting: ARC does not re-pull an unchanged tag, so a |
35 | 37 | # silently replaced tag would make "which toolchain are the |
36 | 38 | # runners on?" unanswerable. |
37 | 39 | # pull_request builds only (no login, no push), path-filtered to the |
38 | 40 | # Dockerfile and this file. The Dockerfile verifies |
39 | | -# `gcc --version` / `tmux -V` during the build, so this is |
40 | | -# the CI gate that keeps a Dockerfile change from shipping |
41 | | -# an image that quietly sends shards back to the mirrors. |
| 41 | +# `gcc --version` / `tmux -V` / `gh --version` during the |
| 42 | +# build, so this is the CI gate that keeps a Dockerfile |
| 43 | +# change from shipping an image that quietly sends shards |
| 44 | +# back to the mirrors or lacks the CLI. |
42 | 45 | # |
43 | 46 | # No `push:` trigger, on purpose. A merged Dockerfile change must not roll a |
44 | 47 | # new image tag on its own: the tag only matters once an operator patches the |
|
73 | 76 | (<runner version>-<suffix>). Bump it for every rebuild on the same |
74 | 77 | base; an existing tag is never overwritten. |
75 | 78 | required: true |
76 | | - default: toolchain-1 |
| 79 | + default: toolchain-gh-1 |
77 | 80 | type: string |
78 | 81 | pull_request: |
79 | 82 | paths: |
@@ -108,7 +111,7 @@ jobs: |
108 | 111 | # |
109 | 112 | # The tag is <version part of the base image ref>-<suffix>: for |
110 | 113 | # summerwind/actions-runner:v2.337.0-ubuntu-24.04 and suffix |
111 | | - # toolchain-1 that is v2.337.0-ubuntu-24.04-toolchain-1 — the exact |
| 114 | + # toolchain-gh-1 that is v2.337.0-ubuntu-24.04-toolchain-gh-1 — the exact |
112 | 115 | # example in README.md § "Baking the CI toolchain". Deriving it from the |
113 | 116 | # base ref (rather than taking a free-form tag input) means the tag |
114 | 117 | # always says which runner release it was built on, which is what the |
@@ -201,7 +204,7 @@ jobs: |
201 | 204 | org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} |
202 | 205 | org.opencontainers.image.revision=${{ github.sha }} |
203 | 206 | org.opencontainers.image.base.name=${{ steps.ref.outputs.base }} |
204 | | - org.opencontainers.image.description=hivecommons/hive self-hosted CI runner with gcc/libc6-dev/tmux baked in (#7206) |
| 207 | + org.opencontainers.image.description=hivecommons/hive self-hosted CI runner with gcc/libc6-dev/tmux and gh baked in (#7206) |
205 | 208 |
|
206 | 209 | # Hand the operator exactly what the README's "Apply" step needs: the |
207 | 210 | # immutable reference (tag and digest) and the two commands. This is the |
@@ -243,7 +246,7 @@ jobs: |
243 | 246 | else |
244 | 247 | echo "| built (not pushed) | \`$REF\` |" |
245 | 248 | echo |
246 | | - echo "PR gate only: the Dockerfile built and its \`gcc --version\` / \`tmux -V\` verification" |
247 | | - echo "passed. Nothing was pushed. Dispatch this workflow from \`v4\` to publish." |
| 249 | + echo "PR gate only: the Dockerfile built and its \`gcc --version\` / \`tmux -V\` / \`gh --version\` verification" |
| 250 | + echo "passed. Nothing was pushed. Dispatch this workflow from \`v5\` to publish." |
248 | 251 | fi |
249 | 252 | } >> "$GITHUB_STEP_SUMMARY" |
0 commit comments