{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "config:recommended", "helpers:pinGitHubActionDigests" ], "ignorePaths": [ "ansible/tasks/docker-compose-up.yml", "kubernetes/apps/arca/chart/values.yaml", "kubernetes/apps/rfd-enrich/chart/values.yaml" ], "schedule": [ "on the 1st day of the month" ], "customDatasources": { "kubernetes": { "defaultRegistryUrlTemplate": "https://api.github.com/repos/kubernetes/kubernetes/releases?per_page=100", "format": "json", "transformTemplates": [ "{\"releases\": [$map($filter($, function($release) { $not($release.draft) and $not($release.prerelease) and $match($release.tag_name, /^v[0-9]+\\.[0-9]+\\.[0-9]+$/) }), function($release) { {\"version\": $substring($release.tag_name, 1), \"releaseTimestamp\": $release.published_at} })]}" ] }, "talos": { "defaultRegistryUrlTemplate": "https://api.github.com/repos/siderolabs/talos/releases?per_page=100", "format": "json", "transformTemplates": [ "{\"releases\": [$map($filter($, function($release) { $not($release.draft) and $not($release.prerelease) and $substring($release.tag_name, 0, $length($replace(\"{{{currentValue}}}\", /\\d+$/, \"\"))) = $replace(\"{{{currentValue}}}\", /\\d+$/, \"\") and $count($filter($release.assets, function($asset) { $asset.name = 'metal-amd64.iso' and $exists($asset.digest) })) > 0 }), function($release) { {\"version\": $release.tag_name, \"digest\": $substring($lookup($filter($release.assets, function($asset) { $asset.name = 'metal-amd64.iso' })[0], \"digest\"), 7), \"releaseTimestamp\": $release.published_at} })]}" ] } }, "customManagers": [ { "customType": "regex", "description": "Track stable Kubernetes releases for upgrade notifications", "managerFilePatterns": [ "/^kubernetes/cluster/vars\\.yaml$/" ], "matchStrings": [ "# renovate: datasource=custom\\.kubernetes depName=kubernetes/kubernetes versioning=semver\\n\\s*kubernetes_version: (?1\\.[0-9]+\\.[0-9]+)" ], "datasourceTemplate": "custom.kubernetes", "depNameTemplate": "kubernetes/kubernetes", "versioningTemplate": "semver" }, { "customType": "regex", "description": "Keep the Talos patch version, ISO filename, and ISO checksum in sync", "managerFilePatterns": [ "/^kubernetes/cluster/vars\\.yaml$/" ], "matchStrings": [ "# renovate: datasource=custom\\.talos depName=siderolabs/talos versioning=semver\\n(?[ ]*)talos_version: (?v[0-9]+\\.[0-9]+\\.[0-9]+)\\n[ ]*talos_iso_filename: metal-amd64-v[0-9]+\\.[0-9]+\\.[0-9]+\\.iso\\n[ ]*talos_iso_sha256: (?[a-f0-9]{64})" ], "autoReplaceStringTemplate": "# renovate: datasource=custom.talos depName=siderolabs/talos versioning=semver\\n{{{indent}}}talos_version: {{{newValue}}}\\n{{{indent}}}talos_iso_filename: metal-amd64-{{{newValue}}}.iso\\n{{{indent}}}talos_iso_sha256: {{{newDigest}}}", "datasourceTemplate": "custom.talos", "depNameTemplate": "siderolabs/talos", "versioningTemplate": "semver" }, { "customType": "regex", "description": "Version pins annotated with a renovate: comment", "managerFilePatterns": [ "/^ansible/group_vars/all/vars\\.yaml$/", "/^\\.github/workflows/[^/]+\\.yml$/" ], "matchStrings": [ "#\\s*renovate:\\s*datasource=(?[a-z-]+)\\s+depName=(?[^\\s]+)\\s*\\n\\s*[A-Za-z_]+:\\s*\"?(?[^\"\\s]+)\"?" ], "versioningTemplate": "semver", "extractVersionTemplate": "^v?(?.*)$" }, { "customType": "regex", "description": "Argo CD image tag and digest", "managerFilePatterns": [ "/^kubernetes/apps/argocd/values\\.yaml$/" ], "matchStrings": [ "tag: (?v[0-9]+\\.[0-9]+\\.[0-9]+)@(?sha256:[a-f0-9]+)" ], "autoReplaceStringTemplate": "tag: {{{newValue}}}@{{{newDigest}}}", "datasourceTemplate": "docker", "depNameTemplate": "quay.io/argoproj/argocd" }, { "customType": "regex", "description": "Cilium chart version in Ansible-rendered Application", "managerFilePatterns": [ "/^kubernetes/apps/cilium/vars\\.yaml$/" ], "matchStrings": [ "# renovate: datasource=helm depName=cilium registryUrl=https://helm\\.cilium\\.io/\\n\\s*cilium_chart_version: \\\"(?[^\\\"\\s]+)\\\"" ], "datasourceTemplate": "helm", "depNameTemplate": "cilium", "registryUrlTemplate": "https://helm.cilium.io/", "versioningTemplate": "semver" }, { "customType": "regex", "description": "Keep Kubernetes Helm image tags and digests in sync", "managerFilePatterns": [ "/^kubernetes/apps/audiobookshelf/values\\.production\\.yaml$/", "/^kubernetes/apps/beszel/values\\.production\\.yaml$/", "/^kubernetes/apps/changedetection/values\\.production\\.yaml$/", "/^kubernetes/apps/freshrss/chart/values\\.yaml$/", "/^kubernetes/apps/freshrss/values\\.production\\.yaml$/", "/^kubernetes/apps/forgejo/values\\.production\\.yaml$/", "/^kubernetes/apps/immich/values\\.production\\.yaml$/", "/^kubernetes/apps/invidious/values\\.production\\.yaml$/", "/^kubernetes/apps/jellyfin/values\\.production\\.yaml$/", "/^kubernetes/apps/k8s-readonly/values\\.production\\.yaml$/", "/^kubernetes/apps/lidarr/values\\.production\\.yaml$/", "/^kubernetes/apps/lubelogger/values\\.production\\.yaml$/", "/^kubernetes/apps/maloja/values\\.production\\.yaml$/", "/^kubernetes/apps/navidrome/values\\.production\\.yaml$/", "/^kubernetes/apps/paperless-ngx/values\\.production\\.yaml$/", "/^kubernetes/apps/prowlarr/values\\.production\\.yaml$/", "/^kubernetes/apps/qbittorrent/values\\.production\\.yaml$/", "/^kubernetes/apps/radarr/values\\.production\\.yaml$/", "/^kubernetes/apps/romm/values\\.production\\.yaml$/", "/^kubernetes/apps/seerr/values\\.production\\.yaml$/", "/^kubernetes/apps/sonarr/values\\.production\\.yaml$/", "/^kubernetes/apps/speedtest-tracker/values\\.production\\.yaml$/", "/^kubernetes/apps/umami/values\\.production\\.yaml$/", "/^kubernetes/apps/gaswatch/chart/values\\.yaml$/", "/^kubernetes/apps/gaswatch/values\\.production\\.yaml$/", "/^kubernetes/apps/rfd-notify/chart/values\\.yaml$/" ], "matchStrings": [ "(?:(?[ \\t]*)registry: (?[^ \\t\\n]+)\\n)?(?[ \\t]*)repository: (?[^ \\t\\n]+)(?(?:\\n[ \\t]*#[^\\n]*)*)\\n(?[ \\t]+)tag: (?[\\\"']?)(?[^\\\"'\\s]+)[\\\"']?\\n[ \\t]+digest: (?sha256:[a-f0-9]+)" ], "autoReplaceStringTemplate": "{{#if registryIndent}}{{{registryIndent}}}registry: {{{registry}}}\\n{{/if}}{{{repoIndent}}}repository: {{{imageRepository}}}{{{repoComments}}}\\n{{{fieldIndent}}}tag: {{{tagQuote}}}{{{newValue}}}{{{tagQuote}}}\\n{{{fieldIndent}}}digest: {{{newDigest}}}", "depNameTemplate": "{{#if registry}}{{{registry}}}/{{{imageRepository}}}{{else}}{{{imageRepository}}}{{/if}}", "datasourceTemplate": "docker" } ], "argocd": { "managerFilePatterns": [ "/^kubernetes/apps/argocd/.+\\.ya?ml$/" ] }, "helm-values": { "managerFilePatterns": [ "/^kubernetes/apps/.+/values[^/]*\\.ya?ml$/" ] }, "kubernetes": { "managerFilePatterns": [ "/^kubernetes/apps/.+\\.ya?ml$/" ] }, "packageRules": [ { "description": "Nothing auto-merges: a merge to main applies to live hosts", "matchUpdateTypes": [ "minor", "patch", "pin", "digest" ], "automerge": false }, { "matchDatasources": [ "docker" ], "pinDigests": true }, { "description": "Skip digest pinning for OCI charts managed by Argo CD", "matchManagers": [ "argocd" ], "matchDatasources": [ "docker" ], "pinDigests": false }, { "description": "Temporarily skip digest pinning for the Arca image", "matchPackageNames": [ "forgejo.davegallant.ca/dave/arca" ], "pinDigests": false }, { "description": "Temporarily skip digest pinning for the RFD Enricher image", "matchPackageNames": [ "ghcr.io/davegallant/rfd-enricher" ], "pinDigests": false }, { "description": "Keep the beszel agent .deb and the beszel hub image in lockstep", "matchPackageNames": [ "henrygd/beszel", "docker.io/henrygd/beszel" ], "groupName": "beszel" }, { "matchDepNames": [ "docker.io/searxng/searxng" ], "versioning": "regex:^(?\\d{4})\\.(?\\d+)\\.(?\\d+)-[a-f0-9]+$" }, { "matchDepNames": [ "quay.io/invidious/invidious", "quay.io/invidious/invidious-companion" ], "versioning": "regex:^(?\\d{4})\\.(?\\d+)\\.(?\\d+)-[a-f0-9]+$" }, { "description": "Use the custom manager for Helm images with separate tag and digest fields", "matchManagers": [ "helm-values" ], "matchFileNames": [ "kubernetes/apps/audiobookshelf/values.production.yaml", "kubernetes/apps/beszel/values.production.yaml", "kubernetes/apps/changedetection/values.production.yaml", "kubernetes/apps/freshrss/chart/values.yaml", "kubernetes/apps/freshrss/values.production.yaml", "kubernetes/apps/immich/values.production.yaml", "kubernetes/apps/invidious/values.production.yaml", "kubernetes/apps/jellyfin/values.production.yaml", "kubernetes/apps/k8s-readonly/values.production.yaml", "kubernetes/apps/lidarr/values.production.yaml", "kubernetes/apps/lubelogger/values.production.yaml", "kubernetes/apps/maloja/values.production.yaml", "kubernetes/apps/navidrome/values.production.yaml", "kubernetes/apps/paperless-ngx/values.production.yaml", "kubernetes/apps/prowlarr/values.production.yaml", "kubernetes/apps/qbittorrent/values.production.yaml", "kubernetes/apps/radarr/values.production.yaml", "kubernetes/apps/romm/values.production.yaml", "kubernetes/apps/seerr/values.production.yaml", "kubernetes/apps/sonarr/values.production.yaml", "kubernetes/apps/speedtest-tracker/values.production.yaml", "kubernetes/apps/umami/values.production.yaml", "kubernetes/apps/gaswatch/chart/values.yaml", "kubernetes/apps/gaswatch/values.production.yaml", "kubernetes/apps/rfd-notify/chart/values.yaml" ], "enabled": false }, { "description": "Use the custom manager for Forgejo\u2019s separate image tag and digest fields", "matchManagers": [ "helm-values" ], "matchFileNames": [ "kubernetes/apps/forgejo/values.production.yaml" ], "matchDepNames": [ "codeberg.org/forgejo/forgejo" ], "enabled": false } ] }