ci(bump): gate toolchain install behind a cheap version check; fix binpkg verify #4
Reference in New Issue
Block a user
Delete Branch "ci/gate-bump-and-fix-binpkg-verify"
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?
Why
The daily Bump job (
runs/107and every other scheduled run) does ~5–26 minof work on every run before it ever checks whether a bump is needed — and on the
common no-op day it isn't. Timeline of a no-op run:
docker pull stage3→emerge-webrsync→emerge … dev-lang/go dev-util/pkgdev(29 pkgs) →bump-version.shfindsalready at latestand exits in 1 second.go/pkgdev/xz/jqare only needed when a bump actually happens. Recentno-op scheduled runs took 5m, 26m, 9m, 5m, 10m — all to do nothing.
Separately, the log on every emerge was flooded with binpkg GPG failures
(
unknown key,pubring.kbx: No such file,Try running getuto). Thesed 's/^verify-signature = true/.../'matched nothing in the stage3 binhostconfig, so the intended "disable binpkg signature verification" never took
effect (it worked anyway only because the failures are non-fatal).
What
bump.yaml: add a cheapCheck whether a bump is neededstep that comparesthe newest upstream release (
releases.rss) against the newest committed ebuild(Gitea contents API) using only base-image
wget, and gateSync ::gentoo,the toolchain install, and the bump step on its
neededoutput. The gate onlyshort-circuits when confident (both versions parsed and current ≥ upstream);
on any doubt — failed fetch, unparseable version — it falls through to the full
run, where
bump-version.shremains the source of truth and re-checks.bump.yaml+ci.yaml: replace the no-opsedwithsed -i '/^verify-signature/d'verify-signature = false, so the knob is actually set regardless ofthe stage3 default contents.
Notes / limits
container:still pullsgentoo/stage3before the gate runs, so the~3.5 min image pull on no-op days is unchanged; this saves the larger
webrsync + 29-package emerge. A follow-up could split the gate into a separate
container-less job to skip the pull too, but that depends on what the runner
maps
runs-on: ubuntu-latestto, so it's left out here.yamllint -c .yamllint.yamlclean on both files; version-comparisonlogic and the contents-API JSON parsing unit-tested locally (equal / upstream-newer /
current-ahead / parse-failure cases).
🤖 Generated with Claude Code
The daily Bump job emerged a full Go/pkgdev toolchain (and synced ::gentoo, ~5-26 min) on every run before bump-version.sh checked whether anything was actually out of date — which, on the common no-op day, it isn't. Add a cheap first step that compares the newest upstream release (releases.rss) against the newest committed ebuild (Gitea contents API) using only base-image wget, and gate the sync/install/bump steps on its `needed` output. The gate only short-circuits when confident both versions parsed and current >= upstream; on any doubt it falls through to the full run, where bump-version.sh remains the source of truth. Also fix the binpkg signature-verification disable in both workflows: the `sed 's/^verify-signature = true/.../'` matched nothing in the stage3 binhost config, so every emerge flooded the log with GPG failures ("unknown key", missing pubring.kbx, "Try running getuto"). Delete any verify-signature line and append `verify-signature = false` so the knob is actually set. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018MsAYv5RhNLE54fPrviVgSRun 110's lint job failed at checkout ("couldn't find remote ref <sha>") because GIT_DEFAULT_HASH: sha256 — copied from the SHA-256 homeserver repo — made git init create a SHA-256 repo that can't resolve this repo's SHA-1 commits. This overlay is a plain SHA-1 repo, so checkout needs no hash override. - lint job: drop the bogus GIT_DEFAULT_HASH: sha256 override. - build job: replace the curl+tar checkout with actions/checkout into $GITHUB_WORKSPACE, registered with portage via repos.conf; pull dev-vcs/git in Configure portage (stage3 has no git, which checkout shells out to) and drop net-misc/curl (only the old checkout used it). QA scan / verify steps now reference $GITHUB_WORKSPACE. - CLAUDE.md: correct the SHA-256 claim and rewrite the CI section for the two-job lint-gate + actions/checkout setup. just lint passes; ci.yaml passes actionlint. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018MsAYv5RhNLE54fPrviVgS