-
v0.12.19 Stable
released this
2026-07-15 18:37:23 +00:00 | 49 commits to main since this releaseChanged
- Bump
libseanfarm-operatorv0.4.9 -> v0.4.10 and dedup ontoreconcile/testkit:
deleted the deadStatusUpdateWithRetry(zero production callers since the harness
migration) + its 3 pure-helper tests and local conflict double; deleted the finalizer/
StatusUpdateBestEffort delegation tests and 2 generic harness lifecycle tests (now lib
coverage at the source); shrank the 6-test timestamp suite to the one openbao-specific
drift-skip wiring test; scheme/client/getter helpers + envtest bootstrap now ride the
shared testkit. Net ~-700 lines of duplicated test scaffolding.
Included changes (v0.12.18 -> v0.12.19)
f8fea04c61c8chore(deps): bump libseanfarm-operator v0.4.9 -> v0.4.10 + dedup tests onto reconcile/testkit
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bump
-
v0.12.18 Stable
released this
2026-07-15 16:05:03 +00:00 | 53 commits to main since this releaseChanged
- Bump
libseanfarm-operatorv0.4.7 -> v0.4.9: picks up the six shared-harness fixes from
the R5 bug-hunt (dry-run delete no longer touches the remote, Degraded message truncation,
Progressing cleared on failure, dry-run clears stale Degraded/Progressing, empty
Ready=Falsereason defaults toNotReadyinstead of a silently-swallowed 422,
dry-run converge now runsMirrorStatus).
Included changes (v0.12.17 -> v0.12.18)
0a88ce07976bfix(deps): bump libseanfarm-operator v0.4.7 -> v0.4.9
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bump
-
v0.12.17 Stable
released this
2026-07-15 14:21:20 +00:00 | 57 commits to main since this releaseFixed
- PKI roles no longer re-
Put(and re-emit an "Updated" event) on every reconcile. OpenBao returns
a role'sttl/max_ttlon read as integer seconds, not the duration string it was written with, so
the drift-skip's string compare was never equal and thrashed. Both sides are now normalized to a
duration before comparing — which kills the thrash while still repairing genuine out-of-bandttl/
max_ttldrift on these security-spine roles (an unset spec TTL no longer loops against OpenBao's
default). - A GCP secrets backend spec edit no longer permanently parks the engine. The mount-existence check
was gated behindObservedGeneration == Generation, so a spec edit (new generation) fell through to
an unconditionalMountGCPSecretson an already-mounted path → OpenBao 400 "path is already in use" →
terminal error that never cleared (blocking every roleset that waits on the backend). The reconcile
now always looks up the mount first and branches mount-if-absent / tune-on-drift (mirroring the PKI
backend). - Transit backend deletion no longer wedges
Terminatingon an already-gone backend.Delete
wrapped its errors throughclassifyOpenBaoError, which stripped the*ResponseErrorso the harness's
404-idempotency short-circuit could never fire; underHoldUntilSuccessa 404 held the finalizer
forever. It now returns the raw error, like the PKI backend. - The shared root CA no longer flaps
Ready=False "not found"on a transient read. The
post-rotation re-fetch now runs only when a rotation actually occurred, and a re-fetch error is
surfaced (requeue, status preserved) instead of being treated as the certificate being absent (which
wipedSerialNumber/Expiration). - A dynamic secret no longer orphans its freshly-minted lease when a status write fails. The new
lease id is now persisted before the prior lease is revoked, so a failed status update leaves the old
lease valid (the next reconcile re-mints from a known-good state) rather than losing the new credential
and breaking the secret. - A PKI certificate self-heals a lost Secret payload. If the managed TLS Secret exists but its
tls.crt/tls.keywas emptied out of band, the certificate now re-issues instead of reportingReady
with an unusable Secret.
Included changes (v0.12.16 -> v0.12.17)
cbeab048b3d1fix(openbao): r5 cluster — drift/mount/delete-wedge/refetch/lease/self-heal (6 fixes)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- PKI roles no longer re-
-
v0.12.16 Stable
released this
2026-07-14 22:03:50 +00:00 | 61 commits to main since this releaseFixed
- Root-CA and transit-key rotation failures no longer report Ready. A root
certificate (OpenBaoPKIRootCert) or transit key (OpenBaoTransitBackend)
whose rotation was due and failed was previously only logged, then the CR
reportedReady— the key/CA silently aged toward expiry while monitoring saw
green (for a root CA, its expiry breaks every certificate it issued). Both now
surface the failure: the root cert returns Progressing/Degraded, and a transit
key whose due rotation fails is no longer countedKeysReady, dropping the
backend to not-Ready (visible + requeued to retry). Failures are still isolated
per key; a non-due or disabled rotation is unaffected. - PKI certificates with
RenewBefore >= lifetimeno longer re-mint every
reconcile. WhenRenewBefore(default 7d) was larger than the certificate's
actual lifetime — a role that caps TTL below 7d, or an explicit
RenewBefore >= TTL— the computed renewal time landed at or before issuance,
socertNeedsRenewalfired on every pass and the cert was re-issued every ~5m
(OpenBao issuance spam + Secret churn + downstream restarts).RenewBeforeis
now clamped below the cert's lifetime so renewal happens once near end-of-life. - GCP rolesets no longer re-
Put(and re-emit an "Updated" event) on every
reconcile. OpenBao returns a roleset'sbindingson read as a normalized
resource→roles map, not the source HCL, so the drift-skip's raw string compare
(current.Bindings == spec.Bindings) never matched and forced a redundant write
each reconcile. Bindings are dropped from the drift compare; a genuine bindings
edit still applies via themetadata.generationbump that bypasses the
drift-skip entirely.
Included changes (v0.12.15 -> v0.12.16)
ee41bfb54b54fix(pki,transit,gcp): surface swallowed rotation failures + stop reconcile thrash
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Root-CA and transit-key rotation failures no longer report Ready. A root
-
v0.12.15 Stable
released this
2026-07-14 18:18:00 +00:00 | 65 commits to main since this releaseChanged
- Incremental release.
Included changes (v0.12.14 -> v0.12.15)
06531152c49efix(openbao): PKI cert spec-drift re-issue + VDS revoke-toggle finalizer wedge
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.12.14 Stable
released this
2026-07-14 16:16:40 +00:00 | 69 commits to main since this releaseChanged
- Incremental release.
Included changes (v0.12.13 -> v0.12.14)
06978bc48baffix(secrets): admit the delete event so finalizer cleanup runs (was leaking on delete)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.12.13 Stable
released this
2026-07-13 21:53:50 +00:00 | 73 commits to main since this releaseFixed
- Deflake
TestReReadOnRefresh_ReMintsAndRevokes. The test set noRenewalPercent, so the
re-mint horizon wascomputeDynamicHorizonWithJitter(32d-lease, 0)=76.8h − jitter(jitter
uniform in[0, 76.8h)) — i.e. uniform in[0, 76.8h), which lands below the 24hrefreshAfter
cap ~31% of the time, so the "requeue ~24h" assertion failed intermittently (it flaked the
in-cluster envtest release gate). SetRenewalPercent = 50so the pre-cap horizon deterministically
exceedsrefreshAfterand the cap is what the test exercises. (Separately worth noting: a real
ReReadOnRefresh secret withRenewalPercentunset requeues in[0, refreshAfter], occasionally
near-zero — a re-mint-churn edge worth a follow-up in the controller.)
Included changes (v0.12.12 -> v0.12.13)
bc568eb38ee1test(secrets): deflake TestReReadOnRefresh_ReMintsAndRevokes
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Deflake
-
v0.12.12 Stable
released this
2026-07-13 19:16:51 +00:00 | 77 commits to main since this releaseFixed
- Bump
libseanfarm-operatorv0.4.1 → v0.4.7. Picks up six releases of shared reconcile-
harness fixes + test coverage the operator was missing, notably the v0.4.4 fix that stops the
harness stampingObservedGenerationon a Converge error underObservedGenOnConvergedOnly.
Build + full envtest suite green on v0.4.7.
Included changes (v0.12.11 -> v0.12.12)
10f0022aab8afix(deps): bump libseanfarm-operator v0.4.1 -> v0.4.721d744a1e0cafix(cicd): auto-resolve CHANGELOG land conflicts via .gitattributes merge=uniona46b0d1d8f9ffix(ci): pin golang:1.25 builder base by digest8f51639c1811docs(openbaoclient): fix 'a OpenBao' -> 'an OpenBao' grammar in doc commentsf1d64a7e63c4chore(staging): open v0.12.12-dev dev cycle
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bump
-
v0.12.11 Stable
released this
2026-07-01 16:35:04 +00:00 | 87 commits to main since this releaseChanged
- Release cut through the hardened CI/CD signing path. The multi-arch image is
cosign-EC signed by a pod whose ServiceAccount is the only one holding the
signing capability, anddist/install.yamlis now rendered in a separate
credential-free pod — no project-controlled build step (make) ever shares a
pod with the signing key or the Forgejo admin token. No functional change to
the operator.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Release cut through the hardened CI/CD signing path. The multi-arch image is
-
v0.12.10 Stable
released this
2026-07-01 13:54:26 +00:00 | 89 commits to main since this releaseFixed
GetCurrentNamespace:bytes.Trim(b, " ")only stripped ASCII spaces, so the
trailing newline in/var/run/secrets/kubernetes.io/serviceaccount/namespace
survived and produced a corrupt namespace (e.g."openbao-platform\n") that
broke every downstream lookup. Switched tobytes.TrimSpace, which strips all
leading/trailing whitespace (spaces, tabs, and newlines), plus a regression
test asserting a trailing-newline input trims clean.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads