drill/drill.sh installs rig from GitHub only — the release gate cannot exercise the RIG_HOST channel #127
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:bootstrap
scope:coolify
scope:db
scope:docs
scope:drill
scope:installer
scope:labels
scope:platform
scope:runner
scope:users
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/rig#127
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Filed from the !114 review round (#111) as a panel-spotted gap, not through triage — hence
needs-triage. It is the one site from #111's review that nobody filed: #123 took thetemplates_archive_urlscomment, #124 tookINSTALLED_FROM, #125 tookBOX_MANUAL, and this one has no owner.Context
!114 gives
install.shaRIG_HOSTknob (defaulthttps://github.com) so rig can be installed from this Forgejo. The drill — rig's release-evidence instrument, and the gatedrill-recordedenforces on a release PR — cannot exercise that channel, because it hardcodes GitHub in two places:drill/drill.sh:380-381installs the candidate withbash <(curl -fsSL "https://raw.githubusercontent.com/$REPO/$REF/install.sh")— noRIG_HOST, no forge-aware raw grammar. A drill run against a Forgejo-only candidate fetches the GitHub installer, and if$REFexists only on Forgejo the fetch 404s and the leg dies before the assert.drill/drill.sh:253-258ref_sharesolves the recorded commit withgit ls-remote "https://github.com/$1"— for both rig and box. A Forgejo-only ref recordsunresolvedindrills/<version>.md, so the record cites no commit for the tree it drilled.Consequence, stated plainly: after !114 merges, the release gate keeps proving the GitHub channel while the shipped installer has two. The failure mode is the one
assert_installed_from(drill/drill.sh:140-161) was written to prevent — a record that looks like evidence for a combination that was never drilled.Adjacent, same root, cheap to fix in the same pass:
README.md:19,21— both headline install lines areraw.githubusercontent.com, andtest/cli.sh:513-516,536assert that spelling literally, so any doc change reds CI unless the assertion moves with it.drill/drill.sh:250citesinstall.sh:117-120for the tags-outrank-branches precedence; !114 moves those lines.Measured on this instance, 2026-07-29, anonymous:
…/heavy-duty/rig/raw/branch/main/install.sh→ 200;git ls-remote https://forgejo.heavyduty.builders/heavy-duty/rigresolves tags and heads anonymously.Spec
The drill takes the same knob the installer takes, and records the forge it drilled.
RIG_HOST/BOX_HOST(defaultshttps://github.com) are read by the drill and threaded into (a) the installer fetch and (b)ref_sha, using !114's grammar: GitHub →raw.githubusercontent.com/<repo>/<ref>/install.sh; otherwise →<host>/<repo>/raw/branch/main/install.shfor the entrypoint and<host>/<repo>as thels-remoteorigin.RIG_HOSTthrough toinstall.sh's environment, so the installer's own candidate grammar decides the download — the drill must not build archive URLs of its own.drills/<version>.md) names the host for each pinned ref.unresolvedstays reserved for a genuinely unresolvable ref, never for "I looked on the wrong forge".Not in scope: whether GitHub or Forgejo is rig's canonical home (open product question on #111), and the
INSTALLED_FROMformat itself (#124 — if that lands first, the drill'sassert_installed_fromexpectation moves with it).Tasks
drill/drill.sh— readRIG_HOST/BOX_HOST, default GitHub; render the installer entrypoint per forge; passRIG_HOSTinto the installer's envref_sha— take the host,ls-remoteagainst it, keep tags-outrank-branchesemit_record— name the host beside each pinned ref--rig-host/--box-hostflags beside--rig-ref/--box-ref, andusage()lines for theminstall.sh:117-120line cite inref_sha's commentREADME.md:19,21— document the Forgejo install line beside the GitHub one, and movetest/cli.sh:513-516,536in the same commitchangelog.d/<this issue>.mdAcceptance criteria
RIG_HOST=https://forgejo.heavyduty.buildersdrills a Forgejo-only rig ref end to end, withassert_installed_frompassingRIG_HOST/BOX_HOSTset → every URL and everyls-remoteorigin is byte-identical to today's GitHub behaviourunresolvedplus a green legREADME.mdandtest/cli.sh's install-line assertions agreeshellcheck -x,bash test/cli.sh,bash test/drill.shgreenTest plan
test/drill.sh— extract the URL/ls-remoterenderers with the suite's existing awk idiom and drive both forges, including the both-404 refusal; the record emitter asserted to carry the hosttest/cli.sh— the README install lines assert both channelsRIG_HOSTunset — the drill dies at the fetch, and must not reach a leg verdictDependencies
Blocked by #111— the drill threadsRIG_HOSTintoinstall.sh, which grows the knob there.Related: #105 (the instrument), #107 (the next release needs a real record), #124 (
INSTALLED_FROMgains a forge), #103 (README headline channel).cc @andres — filing under your #111 comment 3664 exception. If you would rather this ride !114 instead of standing alone, say so and it can be closed into that scope; my read is that it is a separate deliverable (the drill is the release gate, not the install channel) and !114 is already at handoff.
Triaged — ratified to contract,
readyLabel events re-read before this write:
needs-triageset at mint (2026-07-29), untouched since — this comment clears it.Ratification: the body meets the contract as filed — deliverable-named title, spec with decisions (the drill takes
RIG_HOST/BOX_HOSTand threads them; it builds no archive URLs of its own;unresolvedstays reserved for genuinely unresolvable refs), ordered tasks, verifiable acceptance criteria including the both-404 must-fail, and a test plan in the suite's existing idiom.The one dependency,
Blocked by #111, has landed: #111 is closed andinstall.shcarries theRIG_HOSTknob onmain(install.sh:40-44). No sweep runs on this instance to flip blocked→ready, so triage verifies the dependency by hand and setsreadydirectly. Note for the builder: #124 (INSTALLED_FROMgains a forge) is still open — the spec's provision thatassert_installed_from's expectation moves with it remains live.