renovate: default-allow + codify ArgoCD auto-sync #16
Reference in New Issue
Block a user
Delete Branch "feat/renovate-default-allow"
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?
Two coordinated changes for the default-allow rollout. Do not merge yet — dry-run preview happens next.
1)
admin-system/renovate.yaml— flip to default-allowReplaces the 4-rule Tier 1 allowlist with a 7-rule default-allow + safety-gate structure.
prHourlyLimit: 8,prConcurrentLimit: 8(was 0/0, unlimited)*→minimumReleaseAge: 3 daysminor/patch→automerge+platformAutomergemajor→dependencyDashboardApprovalrancher/local-path-provisioner,rancher/mirrored-coredns/coredns,rancher/mirrored-metrics-server) →enabled: falsegitea/gitea,quay.io/argoproj/argocd,ghcr.io/goauthentik/{server,ldap,proxy},ghcr.io/cloudnative-pg/cloudnative-pg) →automerge: false(Viktor merges manually)ghcr.io/lukegus/termix→versioning: loose+extractVersion: "^release-(?<version>.+)$"flomp/wanderer-db+flomp/wanderer-web→groupName: wanderer(avoids the wanderer.yaml file race)enabledManagersunchanged ([kubernetes, helm-values]) — Helmfile-managed infra stays invisible.Critical-core verification (some are no-ops, acknowledged in brief):
gitea/giteaingitea-system/gitea.yamlghcr.io/goauthentik/serverinauth-system/authentik-values.yamlghcr.io/cloudnative-pg/cloudnative-pgindatabase-system/cnpg/values.yamlquay.io/argoproj/argocdnot in repo (ArgoCD bootstrap-installed) — no-opgoauthentik/ldap,/proxynot pinned in values (chart defaults) — no-op2)
argocd-apps/homelab.yaml— codify per-app auto-syncCurrently auto-sync lives only on live CRs (set imperatively via UI) — DR risk and drift.
automated: {enabled: true}(matches live, no behavioral change)automated: {enabled: true, prune: true, selfHeal: true}(flipping MANUAL → AUTO so Renovate merges deploy)admin-tools,authentik,cnpg-operator,root-appsmonitoring,infrastructure,felhom,gitea,pihole,database-systemImportant behavioral note: root-apps does NOT enforce
syncPolicy.automateddrift between git and live (consistent with the imperative auto-sync model). Sojarrandversion-checkerwill also need a one-offkubectl patchafter merge to actually flip live. That's part of the go-live step.Next step (not in this PR)
Phase 4 dry-run on the branch's config via
RENOVATE_DRY_RUN=fullto preview the blast radius before merge.🤖 Generated with Claude Code
Two coordinated changes — open PR only, do NOT merge until dry-run passes. 1) admin-system/renovate.yaml: flip packageRules from Tier 1 allowlist to default-allow with safety gates. Adds prHourlyLimit=8 + prConcurrentLimit=8 to throttle the first wave. New rules (7 total, order-sensitive): - "*" : 3-day stability gate (minimumReleaseAge) - minor/patch : automerge via platformAutomerge - major : dependencyDashboardApproval (manual gate) - k3s-bundled (3 images) : disabled (ride k3s upgrades) - critical-core (6 imgs) : automerge=false (Viktor merges manually) - gitea/gitea, ghcr.io/goauthentik/{server,ldap,proxy}, ghcr.io/cloudnative-pg/cloudnative-pg, quay.io/argoproj/argocd - ArgoCD + authentik /ldap and /proxy are no-ops (not pinned in repo) - termix : versioning=loose, extractVersion for "release-X.Y.Z" - wanderer-db + -web : groupName=wanderer (one PR, prevents file race) enabledManagers unchanged ([kubernetes, helm-values]) — keeps Helmfile- managed infra invisible. 2) argocd-apps/homelab.yaml: codify per-app auto-sync intent in git (currently lives only on live CRs via UI — DR risk). - 35 existing bare-AUTO apps: add `automated: {enabled: true}` (matches live). - jarr, version-checker: add `automated: {enabled: true, prune: true, selfHeal: true}` (flipping MANUAL -> AUTO so Renovate merges deploy). - Untouched: admin-tools, authentik, cnpg-operator, root-apps (already have strict automated in git); monitoring, infrastructure, felhom, gitea, pihole, database-system (explicitly kept MANUAL per Viktor). NOTE: root-apps does NOT enforce syncPolicy.automated drift between git and live, so jarr + version-checker will also need a one-off kubectl patch after merge to actually become AUTO live. Done in go-live step. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>Last commit's global `minimumReleaseAgeBehaviour: timestamp-optional` did two unwanted things: 1) Dry-run showed 0 "Would commit" branches (was 33 before). The flag appears to alter Renovate's filtering more broadly than expected and is not the right knob here. 2) Automated security review correctly flagged the global form as fail-open: a missing timestamp on ANY package would bypass the stability gate, weakening supply-chain protection across the fleet. Narrow fix instead: - Revert the global setting (back to default `timestamp-required`). - Add `minimumReleaseAge: "0 days"` ONLY to the termix packageRule. ghcr.io OCI manifests for ghcr.io/lukegus/termix don't expose a release timestamp Renovate can read, so the global 3-day gate would otherwise hold updates indefinitely (this is the same class of issue that's been keeping reloader/homepage/headlamp on "Pending Status Checks" for 8+ days). Major bumps still gated by the global major rule (`dependencyDashboardApproval: true`). Other ghcr.io packages with the same issue (reloader, homepage, headlamp) remain on the dashboard's "Pending Status Checks" list and can be force-approved per-update via the checkbox UX. That's a slower but safer manual-approval path that preserves the supply-chain gate's intent. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>