Compare commits

..
Author SHA1 Message Date
jakman85andClaude Opus 5.5 267446c68f fix(dns): pin external-dns annotationPrefix to the alpha prefix
gate / gate (pull_request) Successful in 2m58s
gate / conformance (pull_request) Skipped
external-dns v0.22 changed its default annotation prefix to
external-dns.kubernetes.io/ with no fallback. Renovate #129 moved the chart
to 1.23.0 (app v0.23.0), and at 12:13Z it ignored every alpha-prefixed
annotation in this repo: the Gateway target (public names went to A
192.168.2.20), controller: none (jackett, pihole and semaphore got
published), and the L4 Service hostnames (unifi and crafty-mc were deleted).

Set annotationPrefix: external-dns.alpha.kubernetes.io/ to restore the v0.21
reading. Floor the chart at 1.23.0, because the flag needs app >= 0.22.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 17:50:13 -06:00
jakman85 d1994b16e8 Merge pull request 'chore(deps): Update Helm release external-dns to <1.24.0' (#129) from renovate/external-dns-1.x into main
gate / gate (push) Successful in 2m57s
gate / conformance (push) Skipped
Reviewed-on: #129
2026-11-07 12:12:00 +00:00
jakman85 d7317606e7 Merge pull request 'feat: PM-Agent also need to look at PR comments' (#117) from feat/pm-agent-pr-mentions into main
gate / gate (push) Successful in 2m55s
gate / conformance (push) Skipped
images / images (push) Successful in 1m25s
Reviewed-on: #117
2026-11-07 12:07:34 +00:00
jakman85 970d65d193 Merge pull request 'chore(deps): Update python Docker tag to v3.15.2' (#135) from renovate/python-3.x into main
gate / gate (push) Canceled after 1m25s
gate / conformance (push) Canceled after 0s
Reviewed-on: #135
2026-11-07 12:06:07 +00:00
jakman85 6719082e5c Merge pull request 'chore(deps): Update gitea/act_runner Docker tag to v0.6.1' (#127) from renovate/gitea-act_runner-0.x into main
gate / gate (push) Canceled after 1m13s
gate / conformance (push) Canceled after 0s
Reviewed-on: #127
2026-11-07 12:04:54 +00:00
jakman85 428b77f08c Merge pull request 'chore(deps): Update gitea/gitea Docker tag to v1.27.3' (#128) from renovate/gitea-gitea-1.x into main
gate / gate (push) Successful in 2m59s
gate / conformance (push) Skipped
Reviewed-on: #128
2026-11-07 11:44:36 +00:00
renovate-bot 2ee7d5036a Merge pull request 'chore(deps): Update registry.k8s.io/sig-storage/snapshot-controller Docker tag to v8.7.0' (#138) from renovate/registry.k8s.io-sig-storage-snapshot-controller-8.x into main
gate / gate (push) Successful in 2m56s
gate / conformance (push) Has been skipped
2026-11-07 09:22:38 +00:00
renovate-bot 5736f42e22 Merge pull request 'chore(deps): Update registry.gitlab.com/crafty-controller/crafty-4 Docker tag to v4.11.0' (#137) from renovate/registry.gitlab.com-crafty-controller-crafty-4-4.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 09:19:37 +00:00
renovate-bot 773254e3a1 Merge pull request 'chore(deps): Update nginxinc/nginx-unprivileged Docker tag to v1.31.7' (#134) from renovate/nginxinc-nginx-unprivileged-1.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 09:10:44 +00:00
renovate-bot 264cd7a46d Merge pull request 'chore(deps): Update lscr.io/linuxserver/radarr Docker tag to v5.28.0' (#133) from renovate/lscr.io-linuxserver-radarr-5.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 09:07:45 +00:00
renovate-bot 979cc4b21d Merge pull request 'chore(deps): Update lscr.io/linuxserver/qbittorrent Docker tag to v5.3.0' (#132) from renovate/lscr.io-linuxserver-qbittorrent-5.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 09:04:44 +00:00
renovate-bot be6742c22b Merge pull request 'chore(deps): Update ghcr.io/seerr-team/seerr Docker tag to v3.5.1' (#126) from renovate/ghcr.io-seerr-team-seerr-3.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 08:46:56 +00:00
renovate-bot c8b915d8f2 Merge pull request 'chore(deps): Update ghcr.io/gethomepage/homepage Docker tag to v2.7.0' (#125) from renovate/ghcr.io-gethomepage-homepage-2.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 08:43:58 +00:00
renovate-bot 6cd3bd29a9 Merge pull request 'chore(deps): Update favonia/cloudflare-ddns Docker tag to v1.18.0' (#123) from renovate/favonia-cloudflare-ddns-1.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 08:37:58 +00:00
renovate-bot 2040d35222 Merge pull request 'chore(deps): Update docker.io/library/alpine Docker tag to v3.24' (#122) from renovate/docker.io-library-alpine-3.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 08:35:00 +00:00
renovate-bot 47fc27ff08 Merge pull request 'chore(deps): Update velero/velero-plugin-for-aws Docker tag to v1.14.4' (#120) from renovate/velero-velero-plugin-for-aws-1.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 08:29:02 +00:00
renovate-bot 5e8b080298 Merge pull request 'chore(deps): Update semaphoreui/semaphore Docker tag to v2.19.17' (#119) from renovate/semaphoreui-semaphore-2.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 08:26:05 +00:00
renovate-bot 24a0e1e4c5 Merge pull request 'chore(deps): Update lscr.io/linuxserver/jackett Docker tag to v0.24.3025-ls29' (#118) from renovate/lscr.io-linuxserver-jackett-0.x into main
gate / gate (push) Has been cancelled
gate / conformance (push) Has been cancelled
2026-11-07 08:23:06 +00:00
renovate-bot c6ad6b559c chore(deps): Update registry.k8s.io/sig-storage/snapshot-controller Docker tag to v8.7.0
gate / gate (pull_request) Successful in 2m59s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:19:01 +00:00
renovate-bot 6efc49d415 chore(deps): Update registry.gitlab.com/crafty-controller/crafty-4 Docker tag to v4.11.0
gate / gate (pull_request) Successful in 2m59s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:18:58 +00:00
renovate-bot a6dc2d1adb chore(deps): Update python Docker tag to v3.15.2
gate / gate (pull_request) Successful in 2m56s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:18:46 +00:00
renovate-bot 75a472cf67 chore(deps): Update nginxinc/nginx-unprivileged Docker tag to v1.31.7
gate / gate (pull_request) Successful in 2m57s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:18:43 +00:00
renovate-bot 24b02f37df chore(deps): Update lscr.io/linuxserver/radarr Docker tag to v5.28.0
gate / gate (pull_request) Successful in 3m0s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:18:02 +00:00
renovate-bot be3ce4645b chore(deps): Update lscr.io/linuxserver/qbittorrent Docker tag to v5.3.0
gate / gate (pull_request) Successful in 3m1s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:42 +00:00
renovate-bot 1a94b0535c chore(deps): Update Helm release external-dns to <1.24.0
gate / gate (pull_request) Successful in 2m56s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:30 +00:00
renovate-bot 0e7d0204b3 chore(deps): Update gitea/gitea Docker tag to v1.27.3
gate / gate (pull_request) Successful in 3m1s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:22 +00:00
renovate-bot b77572f843 chore(deps): Update gitea/act_runner Docker tag to v0.6.1
gate / gate (pull_request) Successful in 2m55s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:20 +00:00
renovate-bot 76b5d038fb chore(deps): Update ghcr.io/seerr-team/seerr Docker tag to v3.5.1
gate / gate (pull_request) Successful in 2m57s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:16 +00:00
renovate-bot 306f6f4fb0 chore(deps): Update ghcr.io/gethomepage/homepage Docker tag to v2.7.0
gate / gate (pull_request) Successful in 3m0s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:12 +00:00
renovate-bot ae772e050d chore(deps): Update favonia/cloudflare-ddns Docker tag to v1.18.0
gate / gate (pull_request) Successful in 2m57s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:08 +00:00
renovate-bot 517dfc9030 chore(deps): Update docker.io/library/alpine Docker tag to v3.24
gate / gate (pull_request) Successful in 3m0s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:17:05 +00:00
renovate-bot 16de787557 chore(deps): Update velero/velero-plugin-for-aws Docker tag to v1.14.4
gate / gate (pull_request) Successful in 2m57s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:16:58 +00:00
renovate-bot b7cb70955c chore(deps): Update semaphoreui/semaphore Docker tag to v2.19.17
gate / gate (pull_request) Successful in 2m58s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:16:49 +00:00
renovate-bot 9bcea04b1b chore(deps): Update lscr.io/linuxserver/jackett Docker tag to v0.24.3025-ls29
gate / gate (pull_request) Successful in 2m59s
gate / conformance (pull_request) Has been skipped
2026-11-07 08:15:48 +00:00
25 changed files with 149 additions and 24 deletions

No files matched your search

+1 -1
View File
@@ -78,7 +78,7 @@ spec:
spec:
containers:
- name: gitea
image: gitea/gitea:1.24.3
image: gitea/gitea:1.27.3
ports:
- containerPort: 3000
env:
+1 -1
View File
@@ -78,7 +78,7 @@ spec:
spec:
containers:
- name: jackett
image: lscr.io/linuxserver/jackett:v0.24.3009-ls26
image: lscr.io/linuxserver/jackett:v0.24.3025-ls29
ports:
- containerPort: 9117
volumeMounts:
+1 -1
View File
@@ -122,7 +122,7 @@ spec:
spec:
containers:
- name: qbittorrent
image: lscr.io/linuxserver/qbittorrent:5.1.2
image: lscr.io/linuxserver/qbittorrent:5.3.0
ports:
- containerPort: 8080
env:
+1 -1
View File
@@ -167,7 +167,7 @@ spec:
containers:
# ---- act_runner: registers with Gitea, dispatches jobs to the DinD daemon ----
- name: runner
image: gitea/act_runner:0.2.11
image: gitea/act_runner:0.6.1
# No `command:` override. The image's own entrypoint (/sbin/tini -- /opt/act/run.sh)
# registers from env on first boot and runs `act_runner daemon`. The two wait-loops
# that used to live here are gone: kubelet now holds this container until the dind
+1 -1
View File
@@ -122,7 +122,7 @@ spec:
spec:
containers:
- name: radarr
image: lscr.io/linuxserver/radarr:5.21.1
image: lscr.io/linuxserver/radarr:5.28.0
ports:
- containerPort: 7878
env:
+1 -1
View File
@@ -78,7 +78,7 @@ spec:
spec:
containers:
- name: semaphore
image: semaphoreui/semaphore:v2.19.10
image: semaphoreui/semaphore:v2.19.17
ports:
- containerPort: 3000
env:
+1 -1
View File
@@ -75,7 +75,7 @@ spec:
spec:
containers:
- name: seerr
image: ghcr.io/seerr-team/seerr:v3.4.1
image: ghcr.io/seerr-team/seerr:v3.5.1
ports:
- containerPort: 5055
volumeMounts:
+1 -1
View File
@@ -10,7 +10,7 @@
name: gitea
kind: container
source:
image: gitea/gitea:1.24.3 # pinned recent stable tag (R-UPD-01); update.range governs advancement
image: gitea/gitea:1.27.3 # pinned recent stable tag (R-UPD-01); update.range governs advancement
# Headless-install bootstrap (formerly apps/gitea-bootstrap-patch.yaml; now first-class via the
# ServiceDefinition env/envFrom/lifecycle fields, schema >=1.2.0). Gitea must come up INSTALLED
# without the interactive web wizard and with a FIXED, persistent SECRET_KEY, so all of this is
+1 -1
View File
@@ -16,7 +16,7 @@
name: jackett
kind: container
source:
image: lscr.io/linuxserver/jackett:v0.24.3009-ls26
image: lscr.io/linuxserver/jackett:v0.24.3025-ls29
exposure: internal # LAN-only web UI at jackett.${BASE_DOMAIN} (docs/13 row 4; R-DNS/R-NET)
egress: vpn # indexer scraping via node PIA tunnel + kill-switch (docs/03; ADR-0015; R-NET-05/06)
storage:
+1 -1
View File
@@ -30,7 +30,7 @@
name: qbittorrent
kind: container
source:
image: lscr.io/linuxserver/qbittorrent:5.1.2 # pinned stable tag (R-UPD-01); update.range governs advancement
image: lscr.io/linuxserver/qbittorrent:5.3.0 # pinned stable tag (R-UPD-01); update.range governs advancement
# LinuxServer images run their service as the user `abc`, whose uid/gid these two set. They are
# LOAD-BEARING FOR THE BULK MOUNT, not cosmetic — exactly as on sonarr/radarr. Measured on prod
# 2026-09-12 BEFORE this change: `id` inside the container reported the qbittorrent-nox process as
+1 -1
View File
@@ -8,7 +8,7 @@
name: radarr
kind: container
source:
image: lscr.io/linuxserver/radarr:5.21.1 # pinned stable v5 tag (R-UPD-01); update.range governs advancement
image: lscr.io/linuxserver/radarr:5.28.0 # pinned stable v5 tag (R-UPD-01); update.range governs advancement
# LinuxServer images run their service as the user `abc`, whose uid/gid these two set. They are
# LOAD-BEARING for the bulk mount, not cosmetic: see the storage note below. The default is 911,
# which cannot write a 1000:3000-owned 0755 tree.
+1 -1
View File
@@ -24,7 +24,7 @@
name: seerr
kind: container
source:
image: ghcr.io/seerr-team/seerr:v3.4.1 # Seerr: maintained Overseerr/Jellyseerr successor, Plex-native request UI (docs/13 row 5); served on 5055
image: ghcr.io/seerr-team/seerr:v3.5.1 # Seerr: maintained Overseerr/Jellyseerr successor, Plex-native request UI (docs/13 row 5); served on 5055
# The ghcr.io/seerr-team/seerr image runs as the non-root user `node:node` (UID 1000 / GID 1000 —
# the standard node base-image user; confirmed from the image config's User field). On boot the app
# creates /app/config/logs and writes its settings/DB under the mounted /app/config PVC. A fresh
+1 -1
View File
@@ -22,7 +22,7 @@
name: semaphore
kind: container
source:
image: semaphoreui/semaphore:v2.19.10 # pinned recent stable tag (R-UPD-01); update.range governs advancement
image: semaphoreui/semaphore:v2.19.17 # pinned recent stable tag (R-UPD-01); update.range governs advancement
env:
# --- PostgreSQL connection (the CNPG-DB pattern). DIALECT/HOST/PORT/DB/USER are literals; PASS is
# sourced from the in-namespace SOPS secret (the CNPG -app secret lives in ns semaphore-db,
@@ -0,0 +1,99 @@
---
date: 2026-11-07
branch: fix/public-dns-wan-a-record
title: external-dns v0.23 ignored every alpha-prefixed annotation — pin annotationPrefix back
---
## What changed
`platform/externaldns/helmrelease.yaml`:
- adds `values.annotationPrefix: "external-dns.alpha.kubernetes.io/"`. The chart renders it as
`--annotation-prefix=`.
- tightens the chart range from `<1.24.0` to `>=1.23.0 <1.24.0`, because that flag needs app
>= 0.22.
- adds a comment block explaining why.
**Root cause.** Renovate PR #129 (merged 12:12:00Z) moved the chart from `>=1.21.0 <1.22.0` to
`<1.24.0`. Helm deployed chart 1.23.0 at 12:13:08Z, which moved the app from v0.21.0 to v0.23.0.
The upstream v0.22.0 release notes (#6424) say: "The default annotation prefix is now
`external-dns.kubernetes.io/` with no fallback". Every external-dns annotation in this repo uses
`external-dns.alpha.kubernetes.io/`. At 12:13:12Z v0.23.0 therefore:
- **ignored the Gateway's `target`.** Every public name flipped from `CNAME
wan.home.keithjackson.dev` to `A 192.168.2.20`, an RFC1918 address served in public DNS.
- **ignored `controller: none`.** The internal names jackett, pihole and semaphore were published.
That breaks R-DNS-03.
- **ignored the L4 Services' `hostname`.** The unifi and crafty-mc A records were deleted.
cloudflare-ddns (#123, v1.18.0) is not involved. It logs only `IPv4-enabled domains:
wan.home.keithjackson.dev` and has made no changes.
**Why pin the prefix instead of migrating the annotations.** The pin is one value in one file, and
that file is not on the sensitive-path list. It restores the exact v0.21 reading of `target`,
`controller` and `hostname` together. A migration would touch `catalog/render.py`, every
`apps/wave-*` file, the hand-written platform manifests, and the conformance goldens and checks.
`conformance/**` needs an operator override. And a migration half-applied in either direction
reproduces this incident.
I rejected `--enable-legacy-annotation-prefix`. Upstream calls it a migration aid that will be
removed.
**Follow-up.** The L0 guard that the tree's annotation prefix matches this value is a separate PR
(`feat/l0-externaldns-annotation-prefix`), because it lives in `conformance/**`. A full migration
to the GA prefix remains open. It must change the annotations and this value in one commit.
## What I verified
- **Live HelmRelease history.** `1.23.0 0.23.0 lastDeployed 2026-11-07T12:13:08Z deployed`, and
before that `1.21.1 0.21.0 ... superseded`. The Deployment image is `external-dns:v0.23.0`. The
startup config logs `AnnotationPrefix:external-dns.kubernetes.io/
EnableLegacyAnnotationPrefix:false`.
- **external-dns log, 12:13:12Z:**
- `action=CREATE ... type=A` and `a-` TXT for gitea, crafty, the apex, headlamp, auth, jackett,
nextcloud, keycloak, grafana, seerr, plex, pihole and semaphore.
- `action=DELETE ... type=CNAME` and `cname-` TXT for all of those except jackett, pihole and
semaphore.
- `action=DELETE ... type=A` for unifi and crafty-mc.
- **Before the upgrade.** Loki covers about 11-05 13:00Z to 12:13Z. The old pod logged no `Changing
record` line in that window. Its only error was one Cloudflare 502 on 11-05.
- **Gateway.** `gateway/shared` still carries `external-dns.alpha.kubernetes.io/target:
wan.home.keithjackson.dev`.
- **Public DNS.** At the authority (betty.ns.cloudflare.com), 1.1.1.1 and 8.8.8.8:
- plex, gitea, auth, the apex, jackett, pihole and semaphore answer A `192.168.2.20`.
- unifi and crafty-mc have no record.
- `wan.` answers A `136.51.115.252`.
- There is no AAAA for any of these names.
- The `a-plex` and `a-jackett` TXT records read `external-dns/owner=prod`.
- **Upstream v0.23.0 source.**
- `controller/execute.go` calls `annotations.SetAnnotationPrefix(cfg.AnnotationPrefix)`.
- `SetAnnotationPrefix` rebuilds `TargetKey`, `ControllerKey` and `HostnameKey`.
- `source/gateway.go` still reads `TargetsFromTargetAnnotation(gw.Annotations)`.
- Chart 1.23.0 `templates/deployment.yaml` renders `--annotation-prefix={{
.Values.annotationPrefix }}`.
- **Phone.** Pi-hole 192.168.2.23 answers correctly: A `192.168.2.20` with TTL 60, and AAAA
NOERROR with no data. The router 192.168.2.1 answers `gitea.` with NOERROR and 0 answers, because
it strips RFC1918 results. The workstation uses only `nameserver 192.168.2.23` and has
`disable_ipv6 = 1`.
- **Toolbox gate.** See the PR description.
## What I did NOT verify
- **The fix live.** This depends on Flux applying it. Expected on the first reconcile, with
`policy: sync` and owner `prod`, all of these records being prod-owned:
- DELETE the A record and create CNAME `wan.` for the ten public names.
- DELETE the A and TXT records for jackett, pihole and semaphore.
- CREATE A for unifi (.21) and crafty-mc (.22).
This is UNVERIFIED until someone reads the external-dns log and checks with `dig
@betty.ns.cloudflare.com`. The A-to-CNAME type swap went through cleanly on 2026-10-03, and the
reverse went through today, so I expect it to converge. If it does not, see the manual list in
the PR.
- **That the chart's schema accepts `annotationPrefix` under Flux.** I did not render the
HelmRelease with helm here. The gate checks YAML and policy, not the chart render.
- **The phone.** Not investigated, by decision. Likely cause: the phone bypasses Pi-hole on the
client side. Candidates are IPv6 RA/RDNSS DNS from the router, Android Private DNS and iCloud
Private Relay. Answers it gets that way are rebind-stripped, or point to the WAN IP, which needs
hairpin NAT. Hairpin looked absent on 2026-10-03 (a self-signed cert on WAN:443). This is
router- or client-side, not in-repo.
- The AAAA records the operator saw on 8.8.8.8. I did not reproduce them.
- The cilium (#104) and pihole (#109) bumps were not examined beyond Pi-hole answering correctly.
+1 -1
View File
@@ -61,7 +61,7 @@ spec:
- name: crafty
# registry.gitlab.com/crafty-controller/crafty-4 — official image. Pinned to the current
# stable release (4.10.8, 2026-07-29; tags are bare semver, NO `v` prefix). Renovate maintains.
image: registry.gitlab.com/crafty-controller/crafty-4:4.10.8
image: registry.gitlab.com/crafty-controller/crafty-4:4.11.0
imagePullPolicy: IfNotPresent
env:
- name: TZ
@@ -51,4 +51,4 @@ images:
# Controller image == CRD version. A version bump = re-vendor crds.yaml + snapshot-controller.yaml
# at the new tag (see header) AND bump this newTag.
- name: registry.k8s.io/sig-storage/snapshot-controller
newTag: v8.2.0
newTag: v8.7.0
@@ -194,7 +194,7 @@ spec:
- args:
- --v=5
- --leader-election=true
image: registry.k8s.io/sig-storage/snapshot-controller:v8.0.1
image: registry.k8s.io/sig-storage/snapshot-controller:v8.7.0
imagePullPolicy: IfNotPresent
name: snapshot-controller
serviceAccountName: snapshot-controller
+1 -1
View File
@@ -51,7 +51,7 @@ spec:
type: RuntimeDefault
containers:
- name: cloudflare-ddns
image: favonia/cloudflare-ddns:1.17.1
image: favonia/cloudflare-ddns:1.18.0
imagePullPolicy: IfNotPresent
env:
- name: CLOUDFLARE_API_TOKEN
+27 -1
View File
@@ -11,7 +11,10 @@ spec:
chart:
spec:
chart: external-dns
version: ">=1.21.0 <1.22.0" # k8s-1.36 catch-up (app v0.21; policy already set). Renovate maintains
# chart 1.23.x = app v0.23.0. Floor >=1.23.0 because `annotationPrefix` below needs app >=0.22.
# Renovate maintains — but READ THE APP RELEASE NOTES on every 0.x minor: 0.22 changed the
# annotation prefix with no fallback and silently re-published every internal name (2026-11-07).
version: ">=1.23.0 <1.24.0"
sourceRef:
kind: HelmRepository
name: external-dns
@@ -25,6 +28,29 @@ spec:
values:
provider:
name: cloudflare
# ---------------------------------------------------------------------------------------------
# ANNOTATION PREFIX — PINNED TO THE LEGACY `alpha` PREFIX (2026-11-07). Do not remove.
#
# external-dns v0.22.0 (#6424) changed the default annotation prefix from
# `external-dns.alpha.kubernetes.io/` to `external-dns.kubernetes.io/` "with no fallback".
# EVERY external-dns annotation in this repo uses the alpha prefix: the Gateway's `target`
# (platform/gateway/gateway.yaml), the renderer's `controller: none` on `internal` routes
# (catalog/render.py -> apps/wave-*), and the L4 Services' `hostname` (crafty-mc, unifi).
# Renovate PR #129 moved the chart range to `<1.24.0` (app v0.21.0 -> v0.23.0) and on the first
# reconcile (2026-11-07T12:13Z) v0.23.0, reading only the GA prefix, saw none of them:
# * `target` ignored -> every public name flipped CNAME wan.<base> -> A 192.168.2.20 (RFC1918)
# * `controller: none` ignored -> internal jackett, pihole, semaphore PUBLISHED (R-DNS-03 broken)
# * `hostname` ignored -> unifi and crafty-mc A records DELETED
# Logged as `action=CREATE ... type=A` / `action=DELETE ... type=CNAME` for every name at once.
#
# The chart's `annotationPrefix` renders `--annotation-prefix=`, which v0.23.0 applies to every
# key it reads (source/annotations/annotations.go SetAnnotationPrefix: target, controller,
# hostname, ttl, ...), restoring exactly the v0.21 behaviour. Chosen over
# `--enable-legacy-annotation-prefix` (a dual-read migration aid upstream says will be removed)
# and over migrating the annotations (renderer + goldens + conformance = sensitive paths, and a
# flag-day across ~20 objects). Migrating to the GA prefix is the follow-up: change every
# annotation AND this value in ONE commit, never one without the other.
annotationPrefix: "external-dns.alpha.kubernetes.io/"
# Watch Gateway API routes (Cilium Gateway) + Services. docs/09: records rendered from intent.
#
# BOTH SOURCES ARE UNFILTERED HERE, AND THAT IS DELIBERATE — see the WHICH RESOURCES block
+1 -1
View File
@@ -38,7 +38,7 @@ spec:
containers:
- name: homepage
# Renovate maintains this pin (ghcr.io/gethomepage/homepage). Config lives in /app/config.
image: ghcr.io/gethomepage/homepage:v2.1.2
image: ghcr.io/gethomepage/homepage:v2.7.0
imagePullPolicy: IfNotPresent
ports:
- name: http
@@ -1224,7 +1224,7 @@ spec:
# curlimages elsewhere in the repo. Renovate does not manage plain
# `image:` tags (renovate.json disables image-tag updates so it never
# fights Flux image-automation), so this is bumped by hand.
image: python:3.13.15-alpine3.23
image: python:3.15.2-alpine3.23
imagePullPolicy: IfNotPresent
command:
- python3
+1 -1
View File
@@ -3205,7 +3205,7 @@ spec:
# sibling's pod on prod runs a different digest under this same tag.
# Renovate's `kubernetes` manager covers platform/** (renovate.json5), so
# it proposes tag and digest bumps for this line like any other image.
image: python:3.13.15-alpine3.23@sha256:6438599575cca0d1df94aeee0d2ae088d4d8846eab554b2ee7784a3a6df0d516
image: python:3.15.2-alpine3.23@sha256:8d77d813a53e534dec9e1e5182cbd5b651b70d63b27e4ea7c1f616b37cf9aad2
imagePullPolicy: IfNotPresent
command:
- python3
+1 -1
View File
@@ -95,7 +95,7 @@ spec:
# OIDC bootstrap hooks. (ci: flux-postbuild-substitution enforces it.)
extraInitContainers:
- name: wait-for-idp
image: docker.io/library/alpine:3.22
image: docker.io/library/alpine:3.24
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c"]
args:
+1 -1
View File
@@ -88,7 +88,7 @@ spec:
# rather than becoming a fifth per-environment knob. ---
initContainers:
- name: velero-plugin-for-aws
image: velero/velero-plugin-for-aws:v1.14.3-rc.2
image: velero/velero-plugin-for-aws:v1.14.4
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /target
+1 -1
View File
@@ -87,7 +87,7 @@ spec:
# Renovate maintains this pin. nginx-unprivileged (not nginx) so the container can honour
# runAsNonRoot: the stock nginx image's entrypoint needs root to drop privileges and to
# bind :80. `stable-alpine` branch, pinned exactly.
image: nginxinc/nginx-unprivileged:1.30.4-alpine
image: nginxinc/nginx-unprivileged:1.31.7-alpine
imagePullPolicy: IfNotPresent
ports:
- name: http