chore(ci): cache Go and pinned tools, single release build #67
Loading…
Reference in a new issue
No description provided.
Delete branch "chore/64-ci-pipeline"
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?
Refs #64
CI with a warm cache now takes 37 s instead of 109 s. Release builds the four platform archives once instead of twice, and its installer tests run against the exact archives it publishes.
What changed
.forgejo/actions/setupaction now restores two lowercase-keyed caches: Go plus the pinned linters, and the module/build caches. Go is no longer downloaded and the linters aren't rebuilt on every run.develop/mainsave caches. PR and dispatched runs restore but never write. Before, every run saved. A PR that edits the workflow itself could still write a cache, unless the cache server scopes caches by branch (ADR 0015). The ShellCheck download is now checked against a pinned SHA-256, and the tools cache key includes a hash of the setup action.develop/mainand dispatched runs each get their own group, so they never cancel.make release VERSION=<tag>runs first, thenmake checkreuses those archives (TEST_INSTALL_REUSE_DIST=1 TEST_INSTALL_VERSION=<tag>). There is a newworkflow_dispatchdry run that never publishes. The main-ancestry gate and the draft-until-all-assets-uploaded publish step are unchanged..forgejo/actions/. ADR 0015 records the design.Measurements (same runner, from job log timestamps)
Check time depends on what changed (run 703's checks took 27 s and run 747's 12 s, because run 747 re-ran an already-tested tree), so the like-for-like comparison is the setup and save rows. Queue time is 0 s in the API for every run, so these figures are execution time. Parallel jobs were rejected because each one would pay ~20 s of setup to save at most ~12 s. The GitHub sync job takes ~6 s every 10 minutes and was left alone.
Verification
make checkwith Go 1.27.2 and golangci-lint v2.14.0:0 issues.,No vulnerabilities found., and all 9 installer casesPASS.9fc42adadded a mis-formatted file. Run 749 failed atfmt-check, and the commit status wasfailure. The commit was then reverted.9fc42adcancelled run 748. Its commit showsfailure, neversuccess.workflow_dispatch,v0.0.0-dryrun): runs 751 and 752 passed. They built four archives stamped with that version, all 9 installer cases passed against them, and the tag gate and Publish were skipped. The releases API lists no releases.git merge-base --is-ancestorgives rc=1 for a branch commit and rc=0 for a commit on main.48db339:ci / check (pull_request)succeeded.Review
Three fresh-context reviews were run.
make check(renamedRELEASE_VERSION) and the overclaimed cache-trust wording. The following were dismissed with run evidence:inputs.versionconcern: run 751 stampedv0.0.0-dryrun.hashFilesin the composite, the toolcache path and the ShellCheck hash: all exercised by the cold run 745 and the warm run 747, which found Go in the toolcache.toolchaindirective parse is latent, since go.mod has no toolchain line.Docs
New ADR 0015. ADR 0008 is marked amended, and architecture.md → Releases links the new ADR. No design changes.
🤖 Generated with Claude Code
https://claude.ai/code/session_01PmoSSUtaPYn8npGgDRRZrR