diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 96d98ba..d164248 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,6 +15,16 @@ jobs: # a skip (a guard that can quietly stop guarding is the failure # shape these checks exist to refuse). fetch-depth: 0 + - name: install shellcheck where the image lacks it + # GitHub's ubuntu-latest preinstalls shellcheck; the slim act image + # rig's Forgejo runners map `ubuntu-latest` to does not (#144), and + # the full image (54.5 GB on disk) is not a price every ci-box can + # pay. The `command -v` short-circuit means GitHub pays nothing; on + # the act image the job runs as uid 0 and sudo is a no-op — it is + # load-bearing only on GitHub, where the job runs as `runner` with + # passwordless sudo. Both forges get jammy's 0.8.0, the same version + # the full image ships, so no lint result differs between them. + run: command -v shellcheck >/dev/null || { sudo apt-get update && sudo apt-get install -y shellcheck; } - name: shellcheck # -x follows the `source=SCRIPTDIR/...` directives into commands/lib/. # globstar so a script in a new subdirectory is linted without anyone diff --git a/changelog.d/144.md b/changelog.d/144.md new file mode 100644 index 0000000..1424ab6 --- /dev/null +++ b/changelog.d/144.md @@ -0,0 +1,8 @@ +### Added + +- `ubuntu-latest-full` runner label — opt-in GitHub-parity image, pulls nothing until a job matches it (#144) + +### Fixed + +- CI's `check` job installs shellcheck where the runner image lacks it — rig's own CI passes on rig-installed Forgejo runners (#144) +- `forgejo-runner install` warns on a plain converge when a runner was registered with a retired default label set (#144) diff --git a/commands/forgejo-runner-install.sh b/commands/forgejo-runner-install.sh index 902bff6..32f63db 100755 --- a/commands/forgejo-runner-install.sh +++ b/commands/forgejo-runner-install.sh @@ -27,11 +27,22 @@ die() { printf 'rig-forgejo-runner: ERROR: %s\n' "$1" >&2; exit "${2:-1}"; } # editing to migrate; catthehacker's image is the act/Forgejo ecosystem's # stand-in for GitHub's runner image. `docker` is the lean second option. # +# `ubuntu-latest` maps to the SLIM act image, not the full one — measured +# 2026-08-01 (ghcr manifests, amd64): act-22.04 is 0.55 GB on the wire and +# ~2 GB on disk; full-22.04 is 18.67 GB on the wire and 54.52 GB on disk, +# which does not fit a box-class ci-box at all. The slim image carries no +# copy of shellcheck (streamed every layer: zero entries), so a workflow must +# assume GitHub's tool surface — it installs what it uses, as rig's own +# ci.yml does for shellcheck (#144). `ubuntu-latest-full` is the opt-in +# parity label: inert until a job matches it, so it costs nothing to boxes +# that never ask, and an operator who needs GitHub's full tool surface +# writes `runs-on: ubuntu-latest-full` and pays the 54.5 GB deliberately. +# # Both are `docker://` — jobs run in CONTAINERS on the box's own dockerd, not # on the box itself. No docker-in-docker: the guide this came from stacks a # privileged dind sidecar with a plaintext tcp://…:2375 daemon to isolate jobs # from a shared CI server, and inside a box that boundary is already paid for. -DEFAULT_LABELS='ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-22.04,docker:docker://node:22-bookworm' +DEFAULT_LABELS='ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-22.04,ubuntu-latest-full:docker://ghcr.io/catthehacker/ubuntu:full-22.04,docker:docker://node:22-bookworm' # fetch_and_verify_sha256