{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "local>konairius/renovate-config" ], "enabledManagers": [ "flux", "kubernetes", "woodpecker", "dockerfile" ], "ignorePaths": [ "kubernetes/clusters/homelab/flux-system/**" ], "flux": { "managerFilePatterns": [ "/^kubernetes/.+\\.ya?ml$/" ] }, "kubernetes": { "managerFilePatterns": [ "/^kubernetes/.+\\.ya?ml$/" ] }, "packageRules": [ { "description": "Flux image automation (kubernetes/infrastructure/image-automation) already bumps these images. Renovate must not open a second, competing update. Keep this list equal to the ImageRepository images there.", "matchDatasources": [ "docker" ], "matchPackageNames": [ "apache/tika", "deluan/navidrome", "eclipse-mosquitto", "everythingsmarthome/everything-presence-mmwave-configurator", "ghcr.io/advplyr/audiobookshelf", "ghcr.io/cloudnative-pg/plugin-barman-cloud", "ghcr.io/cloudnative-pg/plugin-barman-cloud-sidecar", "ghcr.io/home-assistant/home-assistant", "ghcr.io/immich-app/immich-machine-learning", "ghcr.io/immich-app/immich-server", "ghcr.io/matter-js/python-matter-server", "ghcr.io/music-assistant/server", "ghcr.io/paperless-ngx/paperless-ngx", "ghcr.io/usetrmnl/terminus", "ghcr.io/usetrmnl/trmnl-ha-amd64", "gitea.renner.uno/k.renner/shelly-manager", "gitea.renner.uno/konairius/hermes", "gitea.renner.uno/konairius/vsftpd", "gitea.renner.uno/konairius/wiki", "gotenberg/gotenberg", "lscr.io/linuxserver/lidarr", "netbirdio/netbird", "quay.io/ceph/ceph", "redis", "rhasspy/wyoming-openwakeword", "rhasspy/wyoming-speech-to-phrase", "rhasspy/wyoming-whisper", "shenxn/protonmail-bridge", "twinproduction/gatus", "valkey/valkey", "velero/velero-plugin-for-aws", "woodpeckerci/woodpecker-agent", "woodpeckerci/woodpecker-server" ], "enabled": false }, { "description": "homelab only: pinning a digest changes the pod spec and restarts the workload. Keep these out of the version-update PR, so a reviewer can merge them in a window, separately.", "matchUpdateTypes": [ "pinDigest" ], "groupName": "pin image digests", "groupSlug": "pin-image-digests" }, { "description": "Cilium and Rook-Ceph: a minor version is a planned change with a window (maintainer duties). One PR per update, never in the weekly group.", "matchPackageNames": [ "cilium", "rook-ceph", "rook-ceph-cluster" ], "matchUpdateTypes": [ "minor", "major" ], "groupName": null }, { "description": "Our own images (gitea.renner.uno) are pinned by DATED TAG, never by digest (REN-315, ci-manifests-test no-digest-pins). Registry GC deletes their old digests, and a pod that restarts on a deleted digest cannot pull. Existing digest pins still get digest updates.", "matchDatasources": [ "docker" ], "matchPackageNames": [ "gitea.renner.uno/**" ], "pinDigests": false }, { "description": "Home Assistant namespace: one PR of its own, so Hestia can do the HA-impact review and it merges 02:00-05:00 (REN-240, REN-315).", "matchFileNames": [ "kubernetes/apps/home-assistant/**" ], "matchUpdateTypes": [ "patch", "minor", "digest", "pin" ], "groupName": "home-assistant non-major", "groupSlug": "home-assistant-minor-patch" }, { "description": "CI only (pipelines and CI images): nothing here reaches the cluster, so it merges without a window (REN-315).", "matchFileNames": [ ".woodpecker/**", "ci/images/**" ], "matchUpdateTypes": [ "patch", "minor", "digest", "pin" ], "groupName": "CI non-major", "groupSlug": "ci-minor-patch" }, { "description": "Stateful apps and the CNI: one PR each, never in a group (REN-315). A git revert does not undo a DB migration or a CNI change, so each needs its own review and, where it can disrupt the cluster, a window.", "matchUpdateTypes": [ "patch", "minor", "digest", "pin" ], "matchPackageNames": [ "gitea/gitea" ], "groupName": "gitea", "groupSlug": "gitea" }, { "description": "authentik: chart and images together, one PR (REN-315, DB migrations).", "matchUpdateTypes": [ "patch", "minor", "digest", "pin" ], "matchPackageNames": [ "authentik", "ghcr.io/goauthentik/**" ], "groupName": "authentik", "groupSlug": "authentik" }, { "description": "InfluxDB: chart and image together, one PR (REN-315, data migrations).", "matchUpdateTypes": [ "patch", "minor", "digest", "pin" ], "matchPackageNames": [ "influxdb", "influxdb2" ], "groupName": "influxdb", "groupSlug": "influxdb" }, { "description": "OpenBao: chart and image together, one PR (REN-315, raft storage, the secrets backend). rangeStrategy bump: the default (replace) rewrote the bounded chart range \">=0.28.4 <0.29.0\" to \"<0.30.0\" (homelab #1054) and dropped the lower bound. bump keeps the shape, e.g. \">=0.29.6 <0.30.0\".", "matchUpdateTypes": [ "patch", "minor", "digest", "pin" ], "matchPackageNames": [ "openbao", "quay.io/openbao/openbao" ], "groupName": "openbao", "groupSlug": "openbao" }, { "matchDatasources": [ "helm" ], "matchPackageNames": [ "openbao" ], "rangeStrategy": "bump" }, { "description": "Multus, whereabouts and the CNI plugins: one PR for the directory (REN-315). A CNI change can cut pod networking on every node.", "matchFileNames": [ "kubernetes/infrastructure/multus/**" ], "matchUpdateTypes": [ "patch", "minor", "digest", "pin" ], "groupName": "multus CNI", "groupSlug": "multus" }, { "description": "LinuxServer tags are -ls; the default docker versioning reads -ls as a compatibility suffix and never proposes a new one. Beets (REN-350) is Renovate-tracked, not Flux image automation.", "matchDatasources": [ "docker" ], "matchPackageNames": [ "lscr.io/linuxserver/beets" ], "versioning": "regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)-ls(?\\d+)$" }, { "description": "Hermes image (ci/images/hermes): its merge rolls out to the cluster via Flux image automation, so it is not CI-only. One PR of its own.", "matchFileNames": [ "ci/images/hermes/**" ], "groupName": "hermes image", "groupSlug": "hermes-image" }, { "description": "nousresearch/hermes-agent also carries the retired date-versioned tags (v2026.x), which sort above v0.x.", "matchDatasources": [ "docker" ], "matchPackageNames": [ "nousresearch/hermes-agent" ], "allowedVersions": "/^v0\\./" } ] }