fix(ci): drop the kaniko debug image; record build timestamps in the images #556
Closed
claude-bot
wants to merge 4 commits from
kaniko-no-debug-image into main
pull from: kaniko-no-debug-image
merge into: :main
:main
:ci-image/claude-2.1.310
:claude/mosquitto-legacy-auth-removal
:claude/egress-lockdown
:fix/gate-embedded-refresh-interval
:fix/gate-embedded-browser-host
:feat/authentik-gate-forwardauth
:docs/drop-wildcard-references
:fix/netbird-controller-disable-dns
:feat/dns-labels-split-2
:feat/dns-labels-split-1
:fix/cloudflare-lb-sync-image-tag
:feat/cloudflare-lb-sync
:fix/wordpress-php85-php2shell
:feat/update-os
:chore/talos-1.13.12
:atlas/talos-v1.13.12-cve-2026-99999
:fix/gitea-webhook-sync-org-scope
:atlas/kuma-mcb-www-retries
:feat/hermes-gitea-pr-review-loop
:atlas/traefik-chart-42
:fix/monitoring-k8s-gateway-probe
:alert-fix/issue-1081-rotator
:ci-image/claude-2.1.306
:alert-fix/issue-1084-v2
:atlas/flux-2.9.6
:alert-fix/issue-1082
:feat/hermes-gitea-issues-kanban
:worktree-restore-test-real
:fix/hermes-multiplex-env
:feat/hermes-experts
:feat/hermes-ha-mcp
:feat/kuma-status-page
:fix/hermes-ha-updates-review
:feat/hermes-alert-monitor
:feat/hermes-ha-updates
:fix/turn-tcp-router
:fix/crowdsec-own-ca
:fix/livekit-service-links
:fix/crowdsec-lapi-transport-ca
:feat/matrix-element-call
:feat/kuma-public-coverage
:feat/ha-matrix-nabu-secret
:feat/hermes-matrix-cross-signing
:feat/hermes-matrix
:fix/wiki-basic-auth-in-service
:proposal/traefik-vip-maglev-dsr
:fix/hermes-dashboard-ws-ping-timeout
:fix/hermes-dashboard-ws-ping-interval
:fix/hermes-dashboard-refresh-token
:feat/wiki-drop-gate
:feat/wiki-oidc-provider
:fix/hermes-soul-talos-node-names
:claude/docs-konairius-main
:claude/drop-k-renner-org-secrets
:claude/prompts-main
:claude/default-branch-main
:feat/hermes-cli-logins
:claude/plan-step0-claude-bot
:alert-fix/issue-1363
:claude/homelab-konairius
:claude/konairius-org-secrets
:fix/hermes-image-registry-bot
:feat/hermes-use-custom-image
:feat/hermes-image
:feat/kuma-task5-monitors
:feat/hermes-gitea
:fix/hermes-configmap-namespace
:feat/hermes-homelab-context
:fix/uptime-kuma-script-mount
:feat/kuma-task4-bootstrap
:feat/kuma-task4-cluster
:feat/kuma-sync-default-notifications
:fix/hermes-image-policy
:fix/kuma-sync-foreign-key-create
:feat/hermes-agent
:chore/kuma-sync-smoke-remove
:feat/kuma-sync-smoke
:feat/kuma-sync-deploy
:ci-image/claude-2.1.303
:renovate/authentik
:renovate/home-assistant-minor-patch
:renovate/pin-image-digests
:feat/kuma-sync
:docs/uptime-kuma-plan
:chore/remove-autokuma
:fix/uptime-kuma-ipv6
:feat/autokuma-pilot-update
:fix/drop-flux-image-automation-alert
:feat/autokuma-pilot
:feat/autokuma
:fix/uptime-kuma-fail-guard
:fix/uptime-kuma-setup-diagnostics
:feat/uptime-kuma-vps
:ci/ansible-image-hvac
:claude/plan-homelab-konairius-main
:fix/kubejobfailed-resolve-on-later-success
:claude/homeassistant-konairius
:claude/ha-config-sync-identity
:feat/site-base-domain
:claude/review-bot-repos-konairius
:claude/authentik-konairius-images
:claude/notes-renovate-konairius
:claude/vsftpd-konairius-image
:claude/registry-bot-read-scope
:claude/registry-bot
:ci-image/claude-2.1.302
:claude/review-bot-approved
:claude/review-bot-backends
:fix/wp-pg-recovery-source
:feat/review-bot-status
:worktree-hcloud-wg-site
:node-dns-via-k8s-gateway
:chore/remove-paperclip
:worktree-k8s-gateway-chart-4
:fix/review-bot-approve-with-unverified
:chore/remove-wiki-maintenance-ci
:fix/review-bot-unique-tag
:fix/review-bot-rereview
:fix/review-bot-build-trigger
:fix/review-bot-backoff-cap
:fix/review-bot-rate-limit
:chore/disable-old-pr-review
:feat/review-bot-deploy
:feat/review-bot-service
:feat/pr-review-mistral
:fix/gitea-mcp-public-gitea-url
:alert-fix/issue-1242
:alert-fix/issue-1241
:fix/gitea-mcp-command
:feat/gitea-mcp
:claude/netbird-service-sync-pin
:claude/gitea-public
:feat/embed-knn-bench
:claude/pr-review-latest-cli
:ci-image/claude-2.1.296
:chore/decommission-openproject
:claude/pr-review-central
:feat/openproject-authentik-oidc
:fix/alloy-syslog-udm-cef-regex
:alert-fix/issue-1217
:alert-fix/issue-1214
:atlas/ren-1363-openproject-seeder-order
:atlas/ren-1367-gitea-1.27
:atlas/ren-1367-gitea-pre-upgrade-snapshot
:atlas/ren-1363-openproject
:atlas/ren-1345-ops-image-jq
:atlas/ren-1345-hermes-prometheus-read
:atlas/ren-1345-bridge-agent-secrets
:atlas/ren-802-retire-sml2mqtt
:atlas/ren-953-remove-legacy-users
:atlas/ren-1307-edge1-register
:atlas/ren-1307-edge1-cred-receiver
:atlas/ren-953-controller-ha-cert
:atlas/ren-1256-prune-shellies-secret
:atlas/ren-953-ha-mqtt-cert-sync
:atlas/ren-1256-adopt-shellies-secret
:atlas/ren-1203-eso-gitea-namespace
:atlas/ren-1203-gitea-package-retention
:atlas/ren-1196-agent-runtime-tzdata
:atlas/ren-1017-remove-legacy-shellies
:atlas/ren-1017-ht-wake-reland
:atlas/ren-1017-shelly-30
:atlas/ren-1167-revert-1183
:alert-fix/issue-1184
:atlas/ren-1017-ht-wake
:atlas/ren-1017-shelly-group5c
:atlas/ren-1017-shelly-group5b
:atlas/ren-1080-controller-1d03144-rotate-hold
:atlas/ren-1017-shelly-group5
:atlas/ren-1017-shelly-group4
:atlas/ren-1053-controller-a307693
:atlas/ren-1017-shelly-group3
:atlas/ren-1017-shelly-group2
:atlas/ren-1017-shelly-group1
:atlas/ren-1017-device-list
:atlas/ren-1017-shelly-accounts
:atlas/ren-953-agents-read-paperclip-pod
:atlas/ren-953-agents-read
:atlas/ren-953-ha-mqtt-tls
:atlas/ren-953-ha-account
:atlas/ren-953-evcc-cert
:atlas/ren-953-evcc-account
:atlas/ren-953-z2m-cert
:atlas/ren-953-z2m-account
:atlas/ren-953-health-probe-cert
:atlas/ren-931-agent-shelly-manager
:atlas/ren-900-controller-bump
:atlas/ren-900-mosquitto-dynsec
:atlas/ren-888-revoke-test-account
:atlas/ren-888-mqtt-account-controller
:atlas/ren-841-remove-repair-job
:atlas/ren-841-k8s-plugin-termination-receipt
:atlas/ren-841-lease-receipt-repair
:atlas/ren-802-suspend-open3e-int-rotator
:atlas/ren-826-remove-read-job
:atlas/ren-826-room-setpoint-read
:atlas/ren-809-remove-capture
:atlas/ren-809-open3e-fbh-capture
:atlas/ren-723-authentik-2026.8.3
:atlas/ren-772-remove-rekey-job
:atlas/ren-772-wp-repo4-rekey
:atlas/ren-722-mdns-relay-v191-attach
:atlas/ren-723-openbao-rolling
:atlas/ren-722-dhcp-lease-renew
:atlas/ren-722-cni-plugins-installer-v1.9.1
:atlas/ren-723-influxdb-snapshot
:atlas/ren-722-cni-plugins-v1.9.1
:atlas/ren-722-job-force-annotations
:atlas/ren-717-matrix-bridge-1791195981
:atlas/ren-702-paperclip-cap-kill
:atlas/ren-691-matrix-bridge-1791179547
:atlas/ren-685-matrix-bridge-1791177680
:ci-image/claude-2.1.289
:atlas/ren-671-matrix-bridge-1791152484
:atlas/ren-663-matrix-public
:atlas/ren-587-matrix-bridge
:atlas/ren-567-authentik-grant-types
:atlas/ren-567-mas
:atlas/ren-627-edge1-ssh-egress
:atlas/ren-621-loki-read-gateway
:atlas/ren-603-pclp-pg-memory
:atlas/ren-583-gitea-pvc-volumename
:atlas/ren-583-gitea-volume-60gi
:atlas/ren-563-claude-session-resume
:atlas/ren-563-revert-1111
:atlas/ren-567-matrix
:atlas/ren-563-acpx-session-resume
:atlas/ren-544-argus-token-v3
:atlas/ren-539-atlas-token-v3
:atlas/ren-541-claude-auto-memory
:atlas/ren-540-hestia-token-v3
:atlas/ren-528-review-bot-verify-repo
:atlas/ren-533-shelly-manager-probe
:atlas/ren-525-rotate-argus-token
:atlas/ren-509-rotate-agent-tokens
:atlas/ren-487-hubble-relay
:atlas/ren-488-govulncheck
:atlas/ren-487-agent-pod-egress
:atlas/ren-453-retire-immich-library
:atlas/ren-451-restore-abort
:atlas/ren-451-restore-test-skip-cnpg
:alert-fix/issue-1095
:atlas/ren-442-restore-capacity-gate
:z2m-ws90-converter
:alert-fix/issue-1089
:atlas/ren-419-ephemeral-wear-alert
:alert-fix/issue-1084
:alert-fix/issue-1081
:atlas/ren-414-agent-kubectl-sa
:atlas/ren-411-agent-gitea-egress
:atlas/ren-409-paperclip-14769
:atlas/ren-405-k8s-plugin-dist
:atlas/ren-401-kaniko-oom
:atlas/ren-401-paperclip-patched-image
:z2m-memory-limit
:atlas/ren-350-beets-write-retry
:fix/navidrome-native-api
:atlas/ren-350-paperclip-lidarr-cnp
:atlas/ren-350-beets-retry-skips
:atlas/ren-350-beets-write
:atlas/ren-350-beets-phase2
:atlas/ren-350-beets-cronjob
:atlas/ren-339-restore-test-teardown
:atlas/ren-339-restore-roll
:atlas/ren-339-restore-plugin
:atlas/ren-339-ha-backup-cleanup
:atlas/ren-339-ha-restore-test
:atlas/ren-315-renovate-groups
:atlas/ren-315-renovate-tool-install
:atlas/ren-107-retention-divergence-alert
:atlas/ren-159-remove-ren28-negative-probes
:atlas/ren-302-claude-agent-acp
:atlas/ren-298-agent-sandbox-v0.5.6
:atlas/ren-294-ical-proxy-926ead0
:atlas/ren-286-agent-runtime-own-workflow
:atlas/ren-285-agent-sandbox-labels
:atlas/ren-286-agent-runtime-images
:atlas/ren-285-agent-sandbox
:atlas/ren-148-paperless-ingress-scoping
:atlas/ren-93-promql-gate
:atlas/ren-268-ha-hacs-proxy
:atlas/ren-266-hacs-versions
:atlas/ren-245-ha-critical-alerts
:atlas/ren-243-ha-window
:feat/openbao-secret-exists-check
:atlas/ren-239-ical-proxy-main-73b5d97
:atlas/ren-238-ical-proxy-main-4783abe
:atlas/ren-201-ical-proxy-gitea-image
:atlas/ren-216-renovate
:atlas/ren-152-wal-backlog-retune
:atlas/ren-198-pin-kps-chart
:atlas/ren-176-ha-pg-walstorage
:atlas/ren-166-cilium-verdict-metric
:atlas/ren-7-alert-contacts
:atlas/ren-177-velero-cephfs-readonly-backuppvc
:feat/paperclip-api-door
:atlas/ren-186-cost-ledger-sync
:atlas/ren-183-yaml-anchors
:atlas/ren-161-promtool-ci
:atlas/ren-163-ceph-nearfull-headroom
:atlas/ren-7-restore-audiobooks
:atlas/ren-127-podmonitor-comment
:atlas/ren-165-wal-maxparallel-stage
:atlas/ren-141-ha-pg-32gi
:atlas/ren-147-cilium-agent-metrics-service
:atlas/ren-142-negative-control-probe
:atlas/ren-140-negative-test-probes
:atlas/ren-102-flux-ksm-crs
:atlas/ren-7-pilot-endpointmonitors
:atlas/ren-131-openbao-unavailable-for
:atlas/ren-106-narrow-eso-failed
:atlas/ren-116-probe-citation-path
:atlas/ren-103-scrape-doc-gaps
:atlas/ren-6-imc-deploy
:atlas/ren-100-externalsecret-healthcheck
:atlas/ren-91-imagepolicy-total-order
:atlas/ren-88-ceph-ec-pool-false-page
:atlas/ren-86-paperclip-dependson-monitoring
:atlas/ren-36-prometheus-read-path
:docs/probe-egress-dependency-and-revert-recipe
:docs/paperclip-claude-token
:fix/paperclip-memory
:docs/probe-cnp-egress-and-status-caveats
:feat/ren-21-paperless-app-health-probe
:feat/ren-21-navidrome-app-health-probes
:alert-fix/issue-968
:feat/paperclip-wiki-key
:feat/lidarr
:feat/wiki-api-key-paperclip
:feat/paperclip-signup-off
:feat/paperclip
:feat/netbird-retire-vps-proxy
:feat/navidrome
:feat/immich-bulk-cutover
:feat/immich-bulk-pvcs
:feat/wiki-image-automation
:chore/wiki-image-fact-drafter
:chore/wiki-image-facts-page
:chore/abs-drop-old-books-pvc
:chore/wiki-image-judge-one-request
:feat/abs-books-bulk
:feat/libation-strip-branding
:feat/cephfs-ec-bulk
:feat/open3e-int-broker-user
:feat/wiki-reloader
:chore/wiki-image-phases-4-6
:feat/wiki-anthropic-key
:feat/wiki-service-write-token
:chore/retire-python-wiki-index
:feat/wiki-machine-door
:chore/wiki-phase3-image
:chore/wiki-phase2-image
:chore/wiki-build-1790250017
:feat/wiki-gate
:fix/gitea-egress-wiki
:feat/wiki-service-manifests
:docs/proposal-wiki-web-api
:alert-fix/issue-937
:fix/alertmanager-info-inhibitor
:feat/cephx-allowed-ciphers-aes256k
:feat/cephx-drop-prior-csi-keys
:ci/wiki-consolidate-tilde-paths
:feat/cephx-csi-aes256k
:ci/wiki-consolidate-in-ci
:chore/talos-1.13.10
:feat/drain-tolerant-singletons
:ci/wiki-distill-skip-empty
:ci/wiki-audit-script
:fix/k8s-gateway-oci-chart
:docs/network-traffic-classes-as-built
:feat/node-ip-vlan-46
:alert-fix/issue-920
:feat/bird-attached-node0
:feat/node-vlan-46-link
:chore/cni-drop-stage-labels
:feat/cni-sole-writer-converge-b2
:feat/cni-sole-writer-converge-b1
:chore/cni-stage-k8s-1
:fix/whereabouts-reconciler-cordon
:chore/cni-stage-k8s-2
:chore/cni-stage-k8s-3
:feat/cni-staged-sole-writer
:feat/netbird-service-sync-phase2
:feat/netbird-service-sync-phase1
:chore/gitea-namespace-phase3
:feat/gitea-namespace-phase2
:feat/gitea-namespace-phase1
:ci-image/claude-2.1.280
:fix/ci-claude-refresh-mixed-pins
:fix/align-ci-claude-pins
:fix/ci-claude-bump-token-newline
:worktree-fix-paperless-memory-limit
:alert-fix/issue-897
:alert-fix/issue-896
:fix/wiki-maintenance-merge-verify
:feat/pick-model-newest-among-comparable
:feat/pick-model-typesafe
:fix/wiki-maintenance-rebase-push
:fix/wiki-maintenance-strip-secrets
:fix/wiki-maintenance-image-2.1.278
:feat/wiki-maintenance-ci
:fix/wiki-index-commit-tags
:fix/wiki-index-pin-digest-2
:alert-fix/issue-880
:fix/wiki-index-tree-paging
:fix/wiki-index-pin-digest
:fix/wiki-index-strip-credentials
:fix/gitea-webhook-egress-wiki-index
:fix/wiki-index-openbao-ingress
:feat/wiki-index-deploy
:feat/wiki-index-image
:fix/eso-allow-ai
:feat/wiki-embed
:fix/multus-only-cni-writer
:fix/cilium-cni-uninstall
:feat/onebase-room-telemetry
:fix/external-dns-scrape-policy
:feat/dns-monitoring
:fix/external-dns-annotation-prefix
:fix/ftp-scanner-probe
:fix/libation-accounts-persistence
:fix/libation-pin-14.2.1
:feat/ceph-read-affinity
:fix/bird-local-cidr
:feat/single-pod-table
:docs/traffic-classes
:feat/podpod-rules
:fix/bird-static
:fix/bird-digest
:feat/bird-mesh2
:feat/bird-kubectl
:feat/bird-mesh
:feat/bird-image-api
:feat/bird-daemonset
:alert-fix/issue-844
:feat/bird-image
:alert-fix/issue-843
:feat/pod-egress-vlan47
:docs/576-rejected-options
:feat/antrea-eval
:feat/nodeip-pod0
:feat/cilium-native-pod0
:feat/bgp-peer-ingress
:feat/bgp-listen-ingress
:feat/ingress-static-addressing
:feat/k8s-net-split-phase-a
:feat/cilium-pin-devices
:chore/ci-k8s-2026-09-08
:feat/flux-2.9.5
:feat/ci-tool-pins
:feat/openbao-seal-key-bootstrap
:feat/openbao-static-seal
:fix/openbao-alerts-immediate
:feat/intel-gpu-dashboard
:feat/intel-gpu-exporter
:feat/intel-gpu-monitoring-resource
:fix/reloader-configmap-annotations
:netbird-proxy-protocol-digest
:netbird-proxy-protocol-deploy
:netbird-proxy-protocol
:netbird-proxy-services-uid
:netbird-proxy-services-deploy
:netbird-proxy-services
:proxy-watchdog-cooldown
:proposal-node-roll-downtime
:alert-fix/issue-808
:lapi-transport-phase-2
:ceph-address-ranges
:fix/arp-flux-second-nic
:rehearsal-san
:osd-partlabel-no-ceph
:lapi-transport-post-crds
:san-host-device-nad
:san-rollout
:san-role-rename
:ceph-20-cutover
:rebuild-tooling
:apply-set-hygiene
:rebuild-image-resilience
:cold-rebuild-ordering
:fix/bootstrap-honour-vm-state
:chore/remove-paperless-eval
:issue-fix/789-cilium-node-ula
:issue-fix/787-mdns-relay-supervisor
:trmnl-firmware-sync-off
:trmnl-device-tls
:vmtest-flux
:eval-script-fixes
:alert-fix/issue-780
:worktree-eval-script-fixes
:eval-out-of-iac
:paperless-eval-jobs
:paperless-eval-fixes
:paperless-eval-instance
:crowdsec-tailer-polling
:crowdsec-alerting
:llama-single-slot
:llama-ctx-revert
:arm-crowdsec-proxy-1
:fix-proxy-deploy-triggers
:llama-ctx-fix
:arm-crowdsec-proxy-2
:llama-ctx-assist
:crowdsec-metrics-dashboard
:alert-fix/issue-761
:embed-batch-fix
:crowdsec-lapi-service-annotations
:ha-llm-agent
:paperless-eval
:crowdsec-bouncer-unpack-on-host
:embed-bgem3
:crowdsec-bouncer-fetch-controller
:crowdsec-edge-lapi
:alert-fix/issue-750
:embed-pvc
:immich-drop-pgvectors
:fix-stale-migration-docs
:embed-oom
:embed-eval
:paperless-reloader
:close-paperless-data-migration
:paperless-llm
:paperless-3x
:llama-gate-flow
:llama-authentik-gate
:alert-fix/issue-726
:llama-single-alias
:llama-alias-order
:llama-model-alias
:ai-eval
:remove-netbird-backup
:llama-thinking-alias
:llama-split-embed
:netbird-backup-vacuum-into
:llama-server
:intel-gpu-device-plugin
:ceph-osd-by-label
:alert-fix/issue-714
:alert-fix/issue-712
:cilium-track-untracked-settings
:proposal-cilium-single-owner
:fix-cilium-bootstrap-seed
:woodpecker-agent-probe
:add-missing-probes
:paperless-http-probes
:gatus-hardening
:gatus-drop-file-check
:gatus-config-reload
:drop-pbs2-gatus
:generic-blackbox-alert
:probe-ci-openbao
:cleanup-nas-1-remnants
:ci-image/claude-2.1.250
:woodpecker-deployment-dispatch-rest
:woodpecker-deployment-dispatch-pilot
:fix-monitor-selector-comments
:fix-wear-alert-design
:trim-comments-authentik
:trim-comments-apps
:trim-comments-helm
:trim-comments-netpol
:trim-comments-infra
:trim-comments-talos
:alert-fix/issue-675
:trim-manifest-comments
:drop-unused-barman-creds
:hetzner-creds-shared-path
:ephemeral-framing
:disk-dashboard-smart
:smartctl-privileged
:smartctl-seccomp
:smartctl-exporter
:disk-dashboard-status
:disk-dashboard
:ci-image/claude-2.1.247
:kaniko-fork-rest
:kaniko-replacement
:proposal-traffic-classes
:runbook-remote-rebuild-possible
:runbook-cold-rebuild-baremetal
:alert-fix/issue-657
:velero-stale-60h
:talos-1-13-9
:ceph-mon-disk-warn-default
:ceph-san-pool-widen
:no-ipv6-on-vlan-parents
:alert-fix/issue-649
:alert-fix/issue-645
:openbao-alerting
:openbao-ha-3-replicas
:alert-fix/issue-635
:ceph-san-cleanup
:ceph-san-nad
:whereabouts-ipam
:talos-1-12-11
:mdns-relay
:netbird-rotate-migration
:runbook-stale-sockets
:drop-monitoring-agent
:ansible-drop-dead-plays
:ansible-rotate-netbird
:ansible-drop-pve
:tofu-state-verify
:alert-fix/issue-603
:drop-decommissioned-dns
:tofu-drop-proxmox-vm
:drop-pve-monitoring
:talos-factory-installer
:cilium-reloader
:drop-talos-image-seeding
:cilium-vlan-bypass
:restore-replicapool-size
:restore-cephfs-metadata-size
:alert-fix/issue-592
:ceph-readd-neptune
:k8s-3-baremetal
:ceph-drop-neptune
:alert-fix/issue-591
:ceph-readd-saturn
:alert-fix/issue-590
:remove-vm-605
:remove-vm-151
:k8s-2-baremetal
:ceph-remove-k8s-2
:baremetal-conversion-runbook
:restore-after-jupiter
:alert-fix/issue-579
:ceph-readd-k8s-1
:k8s-1-network-fix
:alert-fix/issue-573
:k8s-1-ephemeral-on-crucial
:alert-fix/issue-571
:alert-fix/issue-569
:immich-window-scaledown
:ceph-exclude-k8s-1
:crowdsec-cpu-requests
:jupiter-baremetal-u2
:velero-restore-test-monthly
:ws90-reporting-config
:alert-fix/issue-562
:fix-ws90-merge-overclaim
:fix-ws90-debounce-rationale
:worktree-z2m-2.13.0-ws90-debounce
:kaniko-no-debug-image
:alert-fix/issue-557
:alert-fix/issue-554
:alert-fix/issue-550
:bump-stale-ci-images
:document-pool-no-redundancy-meaning
:fix-ci-pool-blocks-osd-maintenance
:rotate-cephx-daemon-keys
:fix-ceph-health-alert
:repoint-ci-workspaces
:ci-throwaway-cephfs
:rollout-archive-timeout
:archive-timeout-gf-pg
:reduce-pg-wal-fpi
:reduce-wal-segment-padding
:fix-prometheus-cardinality
:fix-barman-sidecar-visible
:feat-paperless-data-repoint
:feat-paperless-data-block
:fix-cnpg-write-tuning
:fix-emptydir-tmpfs
:fix-trmnl-renderer-tmpfs
:feat-ha-recorder-db-url
:alert-fix/issue-525
:fix-cnpg-backup-alerting
:feat-ha-recorder-postgres
:fix-ceph-mon-write-amplification
:fix-ceph-replica-size-2
:fix-ceph-deferred-write-amplification
:fix-326-noise-log-suppression
:fix-381-z2m-discovery
:decommission-rustfs-lxc
:document-hairpin-id-diff
:fix-rustfs-shim-replace
:fix-rotator-woodpecker-url
:alert-fix/issue-510
:bump-woodpecker-cli
:migrate-woodpecker-stage3
:migrate-woodpecker-stage2
:fix-eso-woodpecker-namespace
:migrate-woodpecker-namespace
:ceph-mon-data-avail-warn
:revert-image-gc-thresholds
:fix-ceph-toolbox-and-gc-thresholds
:fix-cilium-policy-map-exhaustion
:drop-stale-hetzner-dns
:fix-outpost-callback-path
:bump-ci-k8s-pins
:fix-wordpress-config-extra
:wordpress-renner-uno
:fix-authentik-double-passkey-touch
:pin-ical-proxy-image
:fix-trmnl-renderer-reloader
:fix-trmnl-render-lang
:fix-trmnl-session-expiry
:fix-trmnl-graphite-theme
:fix-trmnl-token-lifetime
:fix-trmnl-renderer-runtime
:feat-trmnl-renderer
:fix-trmnl-lb-address
:feat-trmnl-terminus
:retire-dead-monitoring
:heating-can-supervisorctl
:fix-native-teardown
:edge-capability-groups
:heating-can-image
:edge-bootstrap-selfcontained
:prometheus-pve-hostnames
:inventory-pve-hostnames
:chrony-allow-ipv6
:ntp-vrrp-linklocal-and-dad-sequencing
:ntp-service-address-health-gated
:ntp-anycast-capture-drift
:ntp-health-clock-correctness
:chrony-comment-correction
:worktree-chrony-makestep
:ci-k8s-validate
:rotator-repin
:mosquitto-rotate-health
:alert-fix/issue-454
:alert-fix/issue-452
:mosquitto-rotation-proposal
:mosquitto-openbao
:mosquitto-drop-apk
:paperless-drop-apk
:cni-plugins-image
:multus-drop-apk
:fix-jq-comment
:rename-alpine-jq
:fix-ci-yaml
:z2m-seed-drop-apk
:z2m-interview-watchdog
:alert-fix/issue-439
Labels
Clear labels
apollo
atlas
clio
daedalus
hestia
Hermes expert: Immich, Audiobookshelf, Libation, Navidrome, Music Assistant
Hermes expert: Talos, Flux, network, Authentik, Matrix, monitoring
Hermes expert: Paperless, wiki, ical-proxy, TRMNL, websites
Hermes expert: Gitea, Woodpecker, Renovate, review-bot, Hermes
Hermes expert: Home Assistant, IoT, MQTT, ESPHome, voice
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: konairius/homelab#556
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Removes
-debugfrom all eight build steps, and applies the build-timestamp pattern to all nine Containerfiles in the repo.Why
The
-debugvariant ships a busybox shell so a failing build can be inspected. It has been the build image since49018489(2026-04-29), because the steps ran shell to assemble registry auth and compute a date for the tag — which is not what that variant is for.The date does not need a shell in the build step
It was being computed in the pipeline and passed to
--destination. It does not have to cross between CI steps at all: the base images have a shell, so aRUNwrites the timestamp during the build itself. kaniko executes the layer and the value lands in the image.Verified:
Applied to all nine: ansible, k8s, tofu, alpine-jq, alpine-openssl, cni-plugins, heating-can, claude, secret-rotator. Always the last layer, so it invalidates only itself.
secret-rotatorwrites it in the rust build stage and copies it across, since its final image isFROM scratch.On ci-claude and #351
I initially skipped ci-claude over
a675bf6c, on a misreading. That commit did not make the whole image reproducible — it made the npm install layer byte-stable so a rebuild of the same version dedups instead of orphaning ~260 MB (#336, #351). A timestamp in its own final layer leaves the npm layer untouched, so that dedup still holds.Tagging
Tags stay dated literals —
ci-ansible:2026-08-23— bumped in the commit that changes an image, the same trigger thewhen:path filters use. The existing convention every consumer pin follows (ci-k8s:2026-08-10,ci-ansible:2026-04-29,alpine-jq:2026-07-30) is unchanged.The tag says which build;
/etc/image-build-datesays when it ran.Pipeline changes
The plain executor has no shell, so builds pass flags via
entrypointand read credentials fromDOCKER_CONFIG. A singleregistry-authstep writes.docker/config.jsoninto the workspace once, in alpine, where a shell is the intended interface.Also moves off v1.23.2, picking up the go-git fix for CVE-2025-21613 and containerd 1.7.18 -> 1.7.27.
Not converted
ci-claude-refresh.ymlstill builds with the debug image — its destination tag is a runtime value read from a file written by an earlier step, and the build is conditionally skipped. Its Containerfile gets the timestamp here; the pipeline step is left for #552.Needs a pipeline run
A manual
build-ci-imagesrun confirms${CI_WORKSPACE}expands inenvironment:values and that the auth file written byregistry-authreaches the build steps.Refs #426, #552
🤖 Generated with Claude Code
🤖 Automated review — model
CLI default(complexity: complex), commit3a09e430c278a71aa01bb47bac8686c5d9eab99c.Summary
This PR swaps all eight
kaniko-project/executor:v1.23.2-debugbuild steps in.woodpecker/build-ci-images.ymlfor the plainv1.24.0executor (no shell), moving credential setup into a newregistry-authstep and passing kaniko flags viaentrypoint:instead of a shellcommands:block. The mechanical transformation is consistent across all eight steps and the PR description is candid about the three runtime assumptions it rests on. One of those assumptions —${CI_WORKSPACE}expanding inside anenvironment:value — looks unlikely to work based on how the rest of this repo's pipelines handle that variable, which would break credential wiring for all eight builds.🔴 Blocking
environment: DOCKER_CONFIG: "${CI_WORKSPACE}/.docker"likely does not expand —.woodpecker/build-ci-images.yml:57,74,91,115,137,159,181,203(all eight build steps). Every other place in this repo that reads$CI_WORKSPACEdoes so from inside a shellcommands:block, using the$$CI_WORKSPACEescape so Woodpecker's own template pass leaves a literal$CI_WORKSPACEfor the container's shell to expand at runtime (e.g..woodpecker/ci-claude-refresh.yml:86mkdir -p "$$CI_WORKSPACE/.ci-refresh", and.woodpecker/pr-review.yml:85NUM="$${CI_COMMIT_PULL_REQUEST:-}"). There is no precedent anywhere in.woodpecker/*.ymlfor${CI_WORKSPACE}-style substitution working as a literalenvironment:map value, and there is no shell in the plain-executor steps to perform that expansion even if Woodpecker passed the string through untouched. If the k8s backend sets container env directly (asWOODPECKER_BACKEND: kubernetesinkubernetes/apps/woodpecker/agent.yaml:45suggests),DOCKER_CONFIGwould most likely arrive at kaniko as the literal string${CI_WORKSPACE}/.docker, a path that doesn't exist, and every build step would fail to find registry credentials.This is exactly the risk the PR body calls out under "Needs a pipeline run before relying on it" (item 1), with a stated fallback (hardcode the auth path). Given the blast radius — all eight images fail to push, silently, until someone notices — I'd treat resolving this (or at least running the manual
build-ci-imagestrigger and confirming success) as a precondition for merging, not a follow-up. The one check that settles it: trigger the pipeline manually and confirm thebuild-*steps actually authenticate against the registry rather than erroring on a missing/emptyDOCKER_CONFIGpath.🟡 Suggestions
registry-authhas nowhen:gate —.woodpecker/build-ci-images.yml:32-42. Every build step is still individually path-filtered (e.g.build-ansibleonly runs onci/images/ansible/**changes), butregistry-authitself runs unconditionally on every pipeline trigger that satisfies the top-levelwhen:. Previously, credential setup was inlined per-step, so a push touching only one image's path never touched the registry secret for the other seven. Now the token is decoded and a config.json written to the shared workspace even on runs where zero build steps end up executing (e.g. a manualPIPELINE=="build-ci-images"run with no matching push paths, if that's ever a mixed case). Low impact — the step is cheap and the token was already available to all eight steps before — but if you want to preserve "only touch the secret when something will actually build," this step would need the union of all eight steps' path filters..docker/config.json, a reversible base64 ofuser:token) now sits in the shared CephFS RWX workspace for the duration of the run, readable by any step's container rather than living only inside the single container process that decoded it (as the inline-per-step version did). This is a reasonable trade — the plain kaniko steps have no shell to exfiltrate with, and the rawGITEA_TOKENenv var is now confined to one short-lived alpine container instead of eight — but worth naming since it's a real change in where the derived credential lives, not just how it's produced.🟢 Nits
:2026-08-22) are consistent with the PR description and with today's date, and the tradeoff (manual reruns re-push the same dated tag) is well documented in both the top-of-file comment (.woodpecker/build-ci-images.yml:18-21) and the PR body — no action needed, just confirming it's not a stray/incorrect date.--context=.,--dockerfile=Containerfile,--destination=...are correctly collapsed into single--flag=valuetokens throughout (e.g. line 60-63), which is required now that there's no shell to word-split--context .into two argv entries — good catch, consistent across all eight steps.Tests
.woodpecker/ci-manifests-test.yml'swoodpecker-lintstep runswoodpecker-cli lintover every.woodpecker/*.ymlon PRs touching.woodpecker/**(per its own path filter), so this PR's YAML will be checked for schema validity (e.g. thatentrypoint:as a list and the newregistry-authstep are structurally legal). That only proves the file compiles — it does not exercise any of the three runtime assumptions the PR body itself lists as unverified (${CI_WORKSPACE}expansion, cross-step visibility of.docker/config.jsonover the shared workspace, and the k8s backend honoring a list-formentrypoint). There's no way to unit-test those from the checkout; the only real test is the manualbuild-ci-imagestrigger the PR description already proposes. I'd want to see that run (or its output) before merging, given the first blocking point above.Recommendation
Request changes — 1 blocking issue (verify, or fix, the
${CI_WORKSPACE}expansion inenvironment:before merging — a manual pipeline run is the fastest way to settle it).3a09e430c2tobbbc42c79f🤖 Automated review — model
CLI default(complexity: complex), commitbbbc42c79fa80daae1ca2d7fe774c457830220f3.Summary
Refactors
.woodpecker/build-ci-images.ymlto run all eight kaniko build steps on the plain (shell-less)gcr.io/kaniko-project/executor:v1.24.0image instead of the-debugvariant, driving each build viaentrypoint:instead of acommands:shell script. Registry auth is centralized into one newregistry-authstep that writes.docker/config.jsoninto the shared workspace once, and downstream steps point kaniko at it viaDOCKER_CONFIG: "${CI_WORKSPACE}/.docker". I did not find a concrete defect in the diff — the refactor is a faithful, well-factored translation of the existing eight near-identical blocks, and it reduces the number of containers that seeGITEA_TOKENfrom eight to one. The one real open question — whether Woodpecker's${VAR}substitution actually applies insideentrypoint:/environment:values — is already flagged by the PR author as unverified, and I could not settle it from the checkout either (see Suggestions).🟡 Suggestions
DOCKER_CONFIGdepend on${CI_COMMIT_SHA:0:8}and${CI_WORKSPACE}being substituted insideentrypoint:(.woodpecker/build-ci-images.yml:63etc.) andenvironment:(:58etc.) at pipeline-compile time. I confirmed this exact single-$-brace substitution syntax has no precedent elsewhere in.woodpecker/*.yml— every other use I found (security-scan.yml:79,pr-review.yml:85,91,94,ci-claude-refresh.yml) uses$$CI_WORKSPACE/$${CI_COMMIT_SHA:-manual}insidecommands:, i.e. escaped so the container's own shell resolves them at runtime, not Woodpecker's compiler. That's a different mechanism than what this PR relies on forentrypoint:..woodpecker/ci-manifests-test.yml'swoodpecker-lintstep (which does run on this PR via its.woodpecker/**path filter) only proves the file compiles against the schema — the same file's own comments note lint "exits 0 on mere warnings," and templating correctness isn't part of what lint checks at all. So a green lint here provides no evidence the substitution resolves correctly. The good news: if it doesn't resolve, the likely failure mode is loud, not silent — a literal${CI_COMMIT_SHA:0:8}tag contains characters ($,{,}, and a second:) that Docker's reference parser rejects, so kaniko would fail outright rather than push a mistagged or uncredentialed image. Still, worth confirming with the manualbuild-ci-imagesrun the PR body already says is needed, before treating this as done.registry-auth(:33) has nodirectory:, so it writes.docker/config.jsonrelative to the workspace root, and downstream steps read it via the absolute${CI_WORKSPACE}/.dockerregardless of their owndirectory:. That part is consistent and correct if the substitution assumption above holds — just noting it's coupled to the same open question rather than a second independent risk.Tests
No pipeline run is attached to this PR (0 comments on the PR, nothing indicating
build-ci-imageswas triggered manually), and this class of change — Woodpecker YAML — isn't unit-testable from the checkout;ci-manifests-test.ymlonly lints/compiles it. The PR body itself is explicit that a manualbuild-ci-imagesrun is needed to settle the three assumptions it lists (entrypoint substitution,${CI_WORKSPACE}expansion inenvironment:, and cross-step visibility of the auth file via the shared workspace). I'd treat that manual run as the actual test for this change and would want to see it green (or at least attempted) before relying on this pipeline for a real image push.Recommendation
Looks reasonable — no blocking issues; comments above are optional, but I'd strongly encourage running
build-ci-imagesmanually before merging, since the whole PR hinges on unverified substitution behavior that a green lint won't confirm.fix(ci): build with the plain kaniko executor instead of the debug imageto fix(ci): drop the kaniko debug image; record build timestamps in the images🤖 Automated review — model
CLI default(complexity: complex), commitaff01d5a3224493039ba586e449a6c058ecbb479.Summary
This PR drops the kaniko
-debugimage from all eightbuild-ci-images.ymlsteps (switching to the plain, shell-lessv1.24.0executor with a sharedregistry-authstep +DOCKER_CONFIG/entrypointwiring, andCI_COMMIT_SHA-based tags instead of a shell-computed date), and adds aRUN date -u ... > /etc/image-build-datebuild-timestamp layer to all nine Containerfiles. The pipeline rework is sound and matches how Woodpecker/kaniko's no-shell executor is meant to be driven. There is one concrete build-breaking bug in the Containerfile changes.🔴 Blocking
ci/images/heating-can/Containerfile:119-127: the newRUN date -u +%Y-%m-%dT%H:%M:%SZ > /etc/image-build-dateis appended afterUSER open3e(line 119). Every other instruction after aUSERdirective runs as that user, and/etcin thepython:3.13-slimbase isroot:root(mode 755) — not writable by the unprivilegedopen3eaccount created at line 111. This will fail the build with a permission-denied error on the redirect into/etc, breakingbuild-heating-canin CI. Every other Containerfile in this PR appends the timestamp line as the last instruction of a still-root final stage (or, forsecret-rotator, writes it in the root build stage andCOPYs it across specifically because the final stage has no shell) —heating-canis the one case that needs the same treatment: move theRUN date ...line aboveUSER open3e(e.g. right after the self-testRUNblock at line 108), orUSER rootbefore it and switch back after.🟡 Suggestions
.woodpecker/build-ci-images.yml: the newregistry-authstep and the${CI_WORKSPACE}/.docker/${CI_COMMIT_SHA:0:8}substitutions rely on Woodpecker's own (non-shell) variable interpolation reachingenvironment:andentrypoint:list values, since the plain kaniko executor has no shell to expand${...}itself. The PR body says this was confirmed with a manualbuild-ci-imagesrun — worth double-checking that run actually covered a step whosepath:filter matched (so it exercised a real build, not justregistry-auth) before merging, since a silent no-op interpolation would show up only as a kaniko auth/tag failure at build time, not a YAML lint failure.ci/images/*/Containerfile: the build-timestamp comment block is duplicated verbatim eight times (word-for-word inansible,alpine-jq,alpine-openssl,cni-plugins,heating-can,k8s,tofu, and a slight variant inclaude/secret-rotator). Given the repo otherwise tends to keep each Containerfile self-contained with heavy inline rationale, this is probably intentional/consistent with existing style rather than something to fix — flagging only since it's a lot of copy-paste for future edits to keep in sync.Tests
No automated test covers the build-breaking
heating-canissue above:ci-manifests-test.ymllints.woodpecker/**YAML (which would catch the#443-style YAML mistakes it was built for) but does not build Containerfiles, and there's no CI job that does a real (non-registry)docker build/kanikodry-run of the nine images. The heating-can Containerfile itself has a build-time self-test (lines 101-108) that would have been a natural place to also exercise the final layer, but it runs before theUSERswitch and before this new line, so it wouldn't have caught this either. Given the repo's ownci-manifests-test.ymlcomment explicitly calls out wanting to catch build-time breakage before merge, a lightweightdocker buildsmoke test (even just--targetper stage, no push) for the nine Containerfiles would have caught this specific regression.Recommendation
Request changes — 1 blocking issue.
🤖 Automated review — model
CLI default(complexity: complex), commit803c741362514599a1e52ec4646cb6e8c5ec7eea.Summary
This PR does two things to
build-ci-images.ymland its nine Containerfiles: (1) drops the-debugkaniko executor variant in favor of a plainentrypoint-driven build with a sharedregistry-authstep writing.docker/config.jsononce, and (2) replaces the pipeline-computed$(date +%Y-%m-%d)tag with a literal dated tag plus aRUN date -u ... > /etc/image-build-datebaked into each image. I traced the new auth flow, the kanikoDOCKER_CONFIGusage, theentrypoint:-only step definitions, and every changed Containerfile against the rest of the repo (in particular the#351npm-layer-dedup logic inci/images/claude/Containerfileand the scratch-image copy insecret-rotator/Containerfile), and did not find a concrete defect. The design is coherent and well explained in the pipeline header comment.No blocking issues found.
🟡 Suggestions
.woodpecker/build-ci-images.yml:58(and the other 7DOCKER_CONFIGlines) — these rely on Woodpecker substituting${CI_WORKSPACE}directly inside anenvironment:value, with no shell in the kaniko container to expand it itself. That differs from the repo's only other use of this variable,.woodpecker/ci-claude-refresh.yml:86etc., which always double-escapes it ($$CI_WORKSPACE) so a runtime shell resolves it. The double-escaping there is explained by the surrounding script needing all its$$fooshell locals protected from Woodpecker's front-end templating, not byCI_WORKSPACEitself being unsubstitutable at compile time — so a single${CI_WORKSPACE}inenvironment:should resolve correctly, and the kanikoDOCKER_CONFIGoverride + registry-auth-writes-once pattern is a standard shell-less kaniko idiom. I couldn't execute the pipeline to confirm this directly, though. The PR body says a manualbuild-ci-imagesrun already validated this reaches all 8 build steps — worth making sure that run (or the real CI run once merged) is actually green before relying on this everywhere, since if the substitution silently no-ops, every build step's registry push fails the same way.ci-ansible:2026-08-23at line 63) are correct for today, but since none of the eight images actually changed in this PR besides gaining the timestampRUN, all eight get a fresh tag bump in the same commit. That matches the stated convention ("bumped in the commit that changes an image"), just flagging it so a reviewer isn't surprised the diff touches every tag rather than none.Tests
No automated tests are feasible for a Woodpecker pipeline YAML change; correctness here can only be established by an actual pipeline run. The PR body reports one manual run was used to validate the
CI_WORKSPACE/DOCKER_CONFIGplumbing — that verification, or the real CI run on this PR, should be confirmed green before merge given the blast radius (all 8 image builds share the sameregistry-authstep).Recommendation
Looks reasonable — no blocking issues; comments above are optional (though I'd want to see the pipeline actually go green before merging, given the scope of the change).
Pull request closed