-
v0.6.16 Stable
released this
2026-07-14 21:07:41 +00:00 | 51 commits to main since this releaseFixed
- Delete no longer leaks a remote resource (or its live credential) when the status ID was
never persisted. Six ID-keyed finalizer Delete handlers —ForgejoOAuthApp,ForgejoSSHKey,
ForgejoLabel,ForgejoRelease,ForgejoTagProtection,ForgejoTeam— no-op'd when their
Status.<X>ID == 0, so a CR deleted after the remote create landed but before its status write
persisted orphaned the resource in Forgejo forever. For an OAuth app that means a live client
secret, and for an SSH key a live public key, outliving the deprovisioned CR. Each Delete now
recovers the target ID via the same natural-key lookup its Converge already uses to adopt an
existing resource (OAuth app by name, SSH key by username+title, label/tag-protection by
name/pattern, release by tag, team by org+name) before deleting. The OAuth-app fallback deletes
every same-name app it owns, matching Converge's duplicate-pruning model. - Finalizer Delete is now idempotent on a 404. All six handlers (plus the shared
is404helper)
treat an already-absent remote resource as a completed delete, so a benign race — deleted out of
band, or a retried finalizer after the first delete landed — no longer surfaces a spurious error.
The four parent-scoped fallback lookups (label/tag-protection by repo, SSH key by user, team by
org) also tolerate a 404 on the list itself: when the parent repo/user/org was deleted (tenant
teardown cascade), the child is already gone, so Delete cleanly no-ops instead of erroring. A
non-404 list failure (transient 5xx) still surfaces. (forgejodelete_leak_test.go:
recovers-ID-when-status-empty, idempotent-404, parent-gone, and non-404-propagates coverage.)
Included changes (v0.6.15 -> v0.6.16)
ec47ea8d9b31fix(delete): recover remote id via natural key so a status-lost CR can't leak
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Delete no longer leaks a remote resource (or its live credential) when the status ID was