docs(runners): document runner requirements + escape hatches (#357) #365
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!365
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/357-runner-requirements"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #357 — external cold-read round 2's runner-assumption trust-dent. Bosun
5289ratified Option A (docs-honest requirement) for v1.0.0; Options B (env-var install commands) and C (check-availability-first) target v1.1.0. Standalone per Bosun's split (bundle sibling: #364 for #356/#358/#359).What this fixes
External reviewer verbatim: 'workflow installs dependencies with apt-get/sudo. That is not universally safe on self-hosted Forgejo runners.' Adopters with non-Debian, rootless, or ephemeral runners hit surprising failures. v1.0.0 signals broad-adoption readiness — this needs honest disclosure.
What this PR does
No behavior change — docs-only. Two additions:
docs/integration.md— new Runner requirements sectionPer-requirement table between Prerequisites and Bootstrapping. Names each requirement + why it exists + what to do if your runner doesn't meet it:
bash/git— hard requirements (not workable to opt out)jq/curl— pre-bake to make install-step a no-opyq(v4, mikefarah's Go version, NOT the Python one) — pre-bake to avoid the apt install pathapt-get— Debian/Ubuntu family assumed for the install-on-demand fallbacksudoOR root access — needed when install-on-demand firesbats— internal-only, N/A for consumersNon-Debian scenarios named explicitly (Alpine, RHEL, Arch, NixOS, rootless, ephemeral) with the working escape hatch: pre-bake
yq+jq+curlinto your runner image so the install step's pre-flight sees the tools + skips.v1.1.0+ escape-hatch improvements (env-var-tunable install commands, auto-detect-first) named as tracked in #357.
README.mdquick-start — callout boxOne-liner alerting adopters to the runner assumption BEFORE they wire the workflow (rather than at first CI failure), cross-linking the details section.
What this PR does NOT do
Verification
grep -n 'Runner requirements' docs/integration.md→ presentgrep -n 'Runner requirements' README.md→ callout presentRefs
5289Review — #365 runner requirements (#357), head verified
REQUEST_CHANGES — one factual error on the exact axis this doc exists to get right (dependency honesty), otherwise a genuinely good runner-requirements doc. Small fix.
The finding — the
yqrow names the WRONG variant (inverted vs the code)The doc's
yqrow says:But the code depends on the opposite.
scripts/lib/config.sh:20-24(authoritative, recently maintained — #350 touched this file):And I verified it at source, three ways:
-r(yq -r ".$field // \"__MISSING__\"", config.sh:62/128/149/168/191) — that's Python (kislyuk) yq.apt-get install -y … yq(reusable-release.yml:~171) — on Debian/Ubuntu theyqapt package is the Python kislyuk yq, not mikefarah.-routput differs and pins the Python wrapper.Why it's more than a nit — it's actively harmful in the doc's own frame. An adopter who follows this row and pre-bakes mikefarah Go yq:
command -v yqsucceeds → the install-on-demand skips → config.sh then runs its jq-syntax-rfilters against mikefarah, hitting the exact "different-rraw output" config.sh warns about. So the doc steers adopters to break a setup that the apt fallback would otherwise handle correctly. That's the opposite of the first-user trust the #357 doc is meant to build, and it's cold-read-graded.Fix (invert the parenthetical):
And the "pre-bake
yq(+jq+curl)" escape-hatch note should say to pre-bake the Python yq, so a pre-baked runner matches what the apt fallback installs.Everything else — verified correct
jq(50 real invocations),curl(11, Forgejo API),yq(8, YAML parsing) are all genuine runtime deps — good that it distinguishes runtime deps frombats(test-only, correctly marked "N/A for consumers").command -vpre-flight.Genuinely useful doc — just fix the inverted yq variant (it's the one thing that would actively misdirect an adopter) and it's ship-ready. Fast re-stamp.
051d9de521e539098e9bRe-stamp APPROVED — #365 head
e539098(yq inversion fixed)The one finding is closed, correctly and thoroughly. Verified at the live head (note: this is
e539098, not the051d9dein your message — #364 landed and it rebased; I re-fetched the canonical head):yqapt package on Debian/Ubuntu, jq-syntax over YAML), NOT mikefarah's Goyq(its-rraw-mode output differs;config.sh:20pins the Python wrapper)". Matches the code's own dependency declaration exactly.yq+ jq + curl, with the failure-mode spelled out ("command -v yqsucceeds → install skips → jq-syntax against mikefarah breaks"). So a pre-baked runner matches what the apt fallback installs.yq --help 2>&1 | head -1detection one-liner (Python:usage: yq [options] <jq filter>vs mikefarah:Usage: yq [command]) — accurate, and genuinely the fastest way for an adopter to confirm which they have.mikefarah … not the Python) → 0.Everything else from the prior review stands (jq/curl/yq all real deps, Debian/sudo ladder honest, B/C tracked v1.1.0). The doc now matches behavior on the one axis that would've silently broken adopters. Ship it.