-
v0.1.164 Stable
released this
2026-07-13 21:39:59 +00:00 | 552 commits to main since this releaseFixed
- Revert the release-path Athens routing (0.1.163). Athens (canary image, disk storage,
DOWNLOAD_MODE=sync) corrupts modules duringgo's concurrent COLD-fetch of a whole dependency
graph (zip: not a valid zip file) — the render-installer/envtest cold-fetch the entire codegen
toolchain at once, and a pre-warm can't avoid it (its owngo installdoes the same concurrent
cold-fetch, and failed every retry). A corrupt Athens 200 also doesn't trip the,direct
fallback. Both steps are back onproxy.golang.org(transient HTTP/2 flake, resubmittable). Athens
stays build-path-only (buildkit's gomod cache avoids the cold-fetch) until its concurrency
corruption is fixed — likely pinning off thecanaryimage.
Included changes (v0.1.163 -> v0.1.164)
50719a0646e6revert(release): Athens routing corrupts concurrent cold-fetch (breaks image releases)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Revert the release-path Athens routing (0.1.163). Athens (canary image, disk storage,
-
v0.1.163 Stable
released this
2026-07-13 19:51:04 +00:00 | 556 commits to main since this releaseChanged
- Release-path Go steps route through the in-cluster Athens proxy (reliability). The envtest gate
(pipeline-test-envtest) and the image-releaserender-installer(make build-installer) both
fetched modules from the publicproxy.golang.org— an HTTP/2stream INTERNAL_ERRORon
k8s.io/apimachineryfailed a release 2026-07-13. Both now use
GOPROXY=http://athens.athens.svc.cluster.local:3000,direct— the exact proxy the buildkit build
path already uses — so cached modules come from in-cluster Athens and anything uncached falls
through todirect.go.sumstill gates integrity (a bad Athens zip fails loud, never poisons the
build). No more public-proxy dependency on the release path.
Included changes (v0.1.162 -> v0.1.163)
184cfd78da40perf(release): route envtest + render-installer through Athens, not proxy.golang.org
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Release-path Go steps route through the in-cluster Athens proxy (reliability). The envtest gate
-
v0.1.162 Stable
released this
2026-07-13 18:44:06 +00:00 | 560 commits to main since this releaseFixed
- envtest gate: clone into
$HOME/src, not/src. The bakedenvtest-tester:v1image runs as
a non-root user (writable$HOMEfor GOCACHE/GOMODCACHE, but/is not writable), so the gate's
git clone … /srcfailed withcould not create work tree dir '/src': Permission denied— the
envtest gate never once passed in-cluster, blocking everygo-operator/go-libraryrelease that
uses it (forgejo-operator). Now clones under$HOME.
Included changes (v0.1.161 -> v0.1.162)
bf6b2538b2f4fix(envtest): clone into $HOME/src, not /src (non-root envtest-tester image)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- envtest gate: clone into
-
v0.1.161 Stable
released this
2026-07-13 18:26:40 +00:00 | 564 commits to main since this releaseFixed
- Release regression:
pipeline-stagingnow declares therelease-libvolume (audit Wave 3
Inc 2 follow-up). Inc 2 added the shared-lib mount topipeline-promote+pipeline-promote-image,
but those are invoked viatemplateReffrompipeline-staging, and a templateRef'd template does
NOT inherit its own WorkflowTemplate'sspec.volumes— the referencing workflow must supply them
(same trap thecodeberg/docker/forgejovolumes are declared here for). Its absence failed
every package + image release at the promote step withvolume 'release-lib' not found in workflow spec.release-lib.test.jsnow asserts any workflow that templateRefs a lib-sourcing
promote template declares the volume (regression guard).
Included changes (v0.1.160 -> v0.1.161)
181fbb0ffbbffix(staging): declare release-lib volume (Inc-2 templateRef regression)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Release regression:
-
v0.1.160 Stable
released this
2026-07-13 16:22:18 +00:00 | 568 commits to main since this releaseChanged
- Push-head ff-main callers on the shared lib (audit Wave 3, Inc 2).
pipeline-promote(P1,
package releases) andpipeline-promote-image(PI1, image releases) drop their inline
PR-open + retry-merge + delete + verify blocks forff_main. Each keeps its owngit push -f
of the_promote/v<ver>temp branch (it needs the/tmp/provclone) and itsCURMAIN
idempotent skip; the lib owns everything after the push. New lib param--settle S(default 0,
a byte-noop for the Inc-1 callers) sleeps once after the PR resolves so a freshly-pushed head's
background-computed mergeability finishes before the first merge POST. P1 runs
--mode best-effort --backoff fixed:3 --attempts 3(byte-faithful to itsset +eWARN
contract); PI1 runs--mode fail-loud --backoff linear:4 --settle 3 --attempts 8. Declared
deltas: PI1's separate FINAL GUARD is removed (redundant —ff_main --mode fail-loud's own
post-merge want-guard is the superset; the idempotent path self-guards viaCURMAIN); the
dead sleep after the final failed attempt is gone (Inc-1 behavior); PR reuse now trusts only an
open+unmerged PR (Inc-1 #710 fix); failure error text carries thepromote:prefix but is
reworded.pipeline-promote-tag's multi-round loop (fresh head per round + 404 poison-head
classifier) stays inline — its--rounds/--heldconversion is a later increment.
Included changes (v0.1.159 -> v0.1.160)
ce537dcfcccerefactor(release-lib): push-head ff-main callers on the lib (audit Wave 3, Inc 2)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Push-head ff-main callers on the shared lib (audit Wave 3, Inc 2).
-
v0.1.159 Stable
released this
2026-07-13 15:22:11 +00:00 | 572 commits to main since this releaseAdded
- docs/RELEASE-LIB.md — the shared release-path lib's contract (delivery via the fixed-name
ConfigMap,ff_mainparams + hardening, per-caller shapes, the guard tests, and the later-
increment plan for push-head/--rounds/the merge escalation ladder).
Included changes (v0.1.158 -> v0.1.159)
f9a61151e334docs(release-lib): document the shared ff_main lib contract + increment plan
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- docs/RELEASE-LIB.md — the shared release-path lib's contract (delivery via the fixed-name
-
v0.1.158 Stable
released this
2026-07-13 15:13:22 +00:00 | 576 commits to main since this releaseChanged
- Shared release-path bash lib —
ff_main(audit Wave 3, Inc 1). New fixed-name ConfigMap
pipeline-release-lib(kustomize configMapGenerator,disableNameSuffixHash) carrying
templates/base/pipeline-release-lib.sh;pipeline-deploy+pipeline-deploy-fluxreplace their
drifted inlineffpr()copies with a one-line shim over the lib, andpipeline-release-prepare
replaces its inline PR+ff-merge+delete block withff_main --attempts 1 --delete-head on-success.
Declared behavior deltas from the inline copies: PR-reuse pins head AND base via the exact
GET /pulls/{base}/{head}endpoint but trusts the number ONLY for an open unmerged PR (the
endpoint has NO state filter and returns merged historical PRs — proven live on #710), with the
old pipeline-deploy state=open jq list lookup kept as the stranded-open-PR self-heal; the merge
POST verifies TLS via--cacertonly (the old-kis gone); curl network failure counts as a
retried attempt instead of killing the run; idempotent already-at-want skip is now default (a
re-run rollback ffpr against an already-advanced trunk/main now succeeds instead of failing
"could not open/find PR"); per-attempt retries are logged EPIPE-safe (deploy-fluxtrap '' PIPE
convention); the dead sleep after the final failed attempt is gone; the post-merge want-guard
(new for release-prepare) retries an EMPTY read ~3x but fails a non-empty wrong sha on the first
read, and the head branch is reaped only AFTER the guard confirms the advance;--head/--base
are charset-validated (refname+JSON/URL-safe) and release-prepare pre-validates the derived
version; failure diagnostics are redacted.
Guards:tests/check-release-lib.sh(offline behavioral unit tests of ff_main via stubbed curl;
wired into check.sh + pipeline-validate) andtests/release-lib.test.js(caller/CM contract
goldens; wired into the in-cluster guard list). Push-head materialize,--rounds, and the
merge/squash escalation ladder land in later increments WITH their callers.
Included changes (v0.1.157 -> v0.1.158)
a80aa9dc63cfrefactor(release-lib): shared ff_main lib, first 3 callers (audit Wave 3, Inc 1)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Shared release-path bash lib —
-
v0.1.157 Stable
released this
2026-07-13 13:48:22 +00:00 | 580 commits to main since this releaseChanged
- Extracted the shared
pipeline-publishleaf ClusterWorkflowTemplate (audit Wave 3, Increment 4B).
pipeline-build/-build-buildkit/-build-ibmi/pipeline-validate/-validate-fluxeach
redefined a near-identicalpublishmc-upload template; they nowtemplateRefthe one shared
pipeline-publish(fixedquay.io/minio/mcimage, powerless build-untrusted SA, build key via
secret env). Byte-preserved the canonical upload body (mc cp→builds/<short>/, trunk-latch
mirror →builds/latest); dropped the deadversioninput; converged build-ibmi's best-effort
|| truelatest-mirror to the strict majority form. Net ~120 LOC of duplication removed. Not
operator-emitted (an internal templateRef'd leaf), so the Increment-0 tripwire is unaffected;
pipeline-build-desktop's bespoke 3-way-gather publish is left untouched.
Included changes (v0.1.156 -> v0.1.157)
d470bce04e89refactor(publish): extract shared pipeline-publish leaf CWT (audit Wave 3, Inc 4B)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Extracted the shared
-
v0.1.156 Stable
released this
2026-07-13 13:27:04 +00:00 | 584 commits to main since this releaseChanged
- Consolidated the "open next dev cycle" devbump (audit Wave 3, Increment 3). The shared
pipeline-devbumpClusterWorkflowTemplate — already run aspipeline-staging's last release
step — is now the SOLE devbump. First upgraded its merge-style from the oldestDo:mergeto
ff-only + reactive instance-signedDo:squashfallback forrequireSignedCommitstrunks
(grafted frompipeline-promote-tag, harmonized withpipeline-merge); THEN deleted the ~171
lines of drifted inline devbump epilogue frompipeline-promote/pipeline-promote-tag/
pipeline-promote-image(kept promote-image'sredact()helper). Runs after promote with
continueOn— cannot corrupt a published release; failure is at worst a silent stale-trunk.
Guarded by the Increment-0 tripwire (no template renamed/orphaned).
Included changes (v0.1.155 -> v0.1.156)
57c19e48fcbbrefactor(devbump): consolidate to the shared pipeline-devbump (audit Wave 3, Inc 3)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Consolidated the "open next dev cycle" devbump (audit Wave 3, Increment 3). The shared
-
v0.1.155 Stable
released this
2026-07-13 13:00:30 +00:00 | 588 commits to main since this releaseAdded
- Cross-repo template tripwire (audit Wave 3, Increment 0):
tests/check-emittable-templates.sh
asserts every ClusterWorkflowTemplate referenced BY NAME — the pipelines-operator's
sensors.go/taxonomies.goemissions, intra-repo default template params (e.g.
pipeline-staging'spromoteTemplate), and CRtest.templateoverrides — exists in
templates/base/. A rename/delete there otherwise silently orphans a per-project sensor at
runtime with no other coverage (this is the exact class the Wave-2pipeline-promote"orphan"
near-miss lived in — now guarded). Wired intotests/check.sh(pre-push) and the
pipeline-validategate (in-cluster; SKIPs if the operator source is unreachable). Passes today:
21 referenced ⊆ 29 defined.
Included changes (v0.1.154 -> v0.1.155)
5918d1c8fc04feat(gate): cross-repo template tripwire (audit Wave 3, Increment 0)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Cross-repo template tripwire (audit Wave 3, Increment 0):