module.exports = { extends: [], // https://docs.renovatebot.com/self-hosted-configuration/#dryrun dryRun: null, // https://docs.renovatebot.com/configuration-options/#gitauthor gitAuthor: "bugclerk ", // https://docs.renovatebot.com/self-hosted-configuration/#onboarding onboarding: false, // https://docs.renovatebot.com/configuration-options/#dependencydashboard dependencyDashboard: true, // https://docs.renovatebot.com/self-hosted-configuration/#platform platform: "github", // https://docs.renovatebot.com/self-hosted-configuration/#repositories repositories: ["truenas/apps"], // https://docs.renovatebot.com/self-hosted-configuration/#allowpostupgradecommandtemplating allowPostUpgradeCommandTemplating: true, // https://docs.renovatebot.com/self-hosted-configuration/#allowedpostupgradecommands // TODO: Restrict this. allowedPostUpgradeCommands: ["^.*"], enabledManagers: ["custom.regex", "github-actions"], customManagers: [ { customType: "regex", // Match only ix_values.yaml files in the ix-dev directory fileMatch: ["^ix-dev/.*/ix_values\\.yaml$"], // Matches the repository name and the tag of each image matchStrings: [ '\\s{4}repository: (?[^\\s]+)\\n\\s{4}tag: "?(?[^\\s"]+)"?', ], // Use the docker datasource on matched images datasourceTemplate: "docker", }, ], packageRules: [ { matchManagers: ["custom.regex"], matchDatasources: ["docker"], postUpgradeTasks: { // What to "git add" after the commands are run fileFilters: [ "ix-dev/**/app.yaml", // For the version update "ix-dev/**/templates/**", // For the app lib versioned dir ], // Execute the following commands for every dep. executionMode: "update", commands: [ // https://docs.renovatebot.com/templates/#other-available-fields "./.github/scripts/renovate_bump.sh {{{packageFileDir}}} patch {{{depName}}} {{{newValue}}} {{{branchName}}}", ], }, }, { matchManagers: ["github-actions"], addLabels: ["actions"], groupName: "gh-actions", additionalBranchPrefix: "gh-actions", }, { matchDatasources: ["docker"], matchUpdateTypes: ["major"], labels: ["major"], }, { matchDatasources: ["docker"], matchUpdateTypes: ["minor"], groupName: "updates-patch-minor", labels: ["minor"], }, { matchDatasources: ["docker"], matchUpdateTypes: ["patch"], groupName: "updates-patch-minor", labels: ["patch"], }, { matchDatasources: ["docker"], labels: ["enterprise"], groupName: "enterprise", matchFileNames: ["ix-dev/enterprise/**"], }, // Custom versioning matching // https://docs.renovatebot.com/modules/versioning/regex/#rangesconstraints customVersioning( // There are tags with date format (24.08.0), but newer versions are semver // We still limit major to 1 digit, as we don't want to match "24.08.0" as a major version // This is something that we need to investigate if one of the images start having 2 digit major versions "^(?\\d{1})\\.(?\\d+)\\.(?\\d+)$", [ "ghcr.io/linuxserver/deluge", "ghcr.io/linuxserver/heimdall", "ghcr.io/linuxserver/transmission", ] ), customVersioning( // 1.16.1 - There are some tags like 1.120.20221218 that are not semver and are too old "^(?\\d{1})\\.(?\\d{2})\\.(?\\d+)$", ["ghcr.io/linuxserver/kasm"] ), customVersioning( // The current major version is 2.x.x, but there is a random 5.x.x tag. // So we limit it to 0-4 for major. Date issue mentioned above still stands "^(?[0-4]{1})\\.(?\\d+)\\.(?\\d+)$", ["ghcr.io/linuxserver/diskover", "ghcr.io/linuxserver/calibre-web"] ), customVersioning( "^(?[a-z0-9]+)-ls(?\\d{1})(?\\d{1})(?\\d{1})$", ["ghcr.io/linuxserver/tvheadend"] ), customVersioning( // v0.8.1-omnibus "^v(?\\d+)\\.(?\\d+)\\.(?\\d+)-omnibus$", ["ghcr.io/analogj/scrutiny"] ), customVersioning( // 1.40.2.8395-c67dce28e "^(?\\d+)\\.(?\\d+)\\.(?\\d+)\\.(?[a-z0-9-]+)$", ["plexinc/pms-docker"] ), customVersioning( // Older versions was 20220101 and newer versions are 240101 "^(?\\d{2})(?\\d{2})(?\\d{2})$", ["photoprism/photoprism"] ), customVersioning( // RELEASE.2024-08-26T15-33-07Z "^RELEASE\\.(?\\d+)-(?\\d+)-(?\\d+)T\\d+-\\d+-\\d+Z$", ["minio/minio"] ), customVersioning( // version-6.0.0 "^version-(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["fireflyiii/core", "fireflyiii/data-importer"] ), customVersioning( // 2.462.1-jdk17 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-jdk17$", ["jenkins/jenkins"] ), customVersioning( // 1.2.3.4, but not 1.2.0.4 (3rd digit 0 equals beta) "^(?\\d+)\\.(?\\d+)\\.(?[1-9]\\d*)\\.(?\\d+)$", ["emby/embyserver"] ), customVersioning( // 2023.12.31-3535377c9 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-.+$", ["searxng/searxng"] ), customVersioning( // tailscale considers beta releases when minor part ends with an odd number "^v(?\\d+)\\.(?\\d+[02468]+)\\.(?\\d+)$", ["ghcr.io/tailscale/tailscale"] ), customVersioning( // 3.0.0.0-full "^(?\\d+)\\.(?\\d+)\\.(?\\d+)\\.(?\\d+)-full$", ["apache/tika"] ), customVersioning( // 20250122_091948 {year}{month}{day}_{build} "^(?\\d{4})(?\\d{2})(?\\d{2})_(?\\d+)$", ["ghcr.io/nextcloud-releases/aio-imaginary"] ), customVersioning( // 2024.10.22-7ca5933 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-(?.+)$", ["ghcr.io/corentinth/it-tools"] ), customVersioning( // 2.5.x -- Yes x is exact value and not a placeholder "^(?\\d+)\\.(?\\d+)\\.x$", ["uroni/urbackup-server"] ), customVersioning( // 1.1.11-1 or 1.1.11 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)(-(?\\d+))?$", ["rustdesk/rustdesk-server"] ), customVersioning( // 9.0.2-stable "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-stable$", ["lmscommunity/lyrionmusicserver"] ), customVersioning( // 2.1.0.3-stable "^(?\\d+)\\.(?\\d+)\\.(?\\d+)\\.(?\\d+)-stable$", ["duplicati/duplicati"] ), customVersioning( // 18.0-20250218 "^(?\\d+)\\.(?\\d+)-(?\\d+)$", ["odoo"] ), customVersioning( // 1.0.0-hash "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-(?.+)$", ["ixsystems/nextcloud-notify-push"] ), customVersioning( // 1.0.0-fpm-hash "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-fpm-(?.+)$", ["ixsystems/nextcloud-fpm"] ), customVersioning( // v0.137.0-noble-lite "^v(?\\d+)\\.(?\\d+)\\.(?\\d+)-noble-(?full|nvidia|lite)$", ["ghcr.io/koush/scrypted"] ), customVersioning( // 24.7 "^v(?\\d+)\\.(?\\d+)$", ["nzbgetcom/nzbget"] ), customVersioning( // tshock-1.4.4.9-5.2.0-3 "^tshock-1\\.4\\.4\\.9-(?\\d+)\\.(?\\d+)\\.(?\\d+)(-(?\\d+))?$", ["ryshe/terraria"] ), customVersioning( // 335 "^(?\\d+)$", ["quay.io/cockpit/ws"] ), customVersioning( // 0.3_0.18 "^(?\\d+)\\.(?\\d+)_(?\\d+)\\.(?\\d+)$", ["ghcr.io/magicgrants/monero-lws"] ), customVersioning( // 6.1.4.2 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["ghcr.io/justarchinet/archisteamfarm"] ), customVersioning( // 0.1.4.2 "^0\\.(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["ghcr.io/sassanix/warracker/main"] ), customVersioning( // amd64-3.3.13 "^amd64-(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["joplin/server"] ), customVersioning( // v1.52.0-jammy "^v(?\\d+)\\.(?\\d+)\\.(?\\d+)-(?(noble|jammy))$", ["mcr.microsoft.com/playwright"] ), customVersioning( // i2p-2.8.1 "^i2p-(?\\d+)\\.(?\\d+)\\.(?\\d+)(-(?\\d+))?$", ["geti2p/i2p"] ), customVersioning( // 0.18.0-rootless "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-rootless$", ["ghcr.io/sysadminsmedia/homebox"] ), customVersioning( // 17-3.5 "^18-(?\\d+)\\.(?\\d+)$", ["postgis/postgis"] ), customVersioning( // 0.8.1-pg18-trixie "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-pg18(-\\w+)?$", ["pgvector/pgvector"] ), customVersioning( // 2.4-dev "^(?\\d+)\\.(?\\d+)-dev$", ["wger/server"] ), customVersioning( // 15-vectorchord0.3.0 "^15-vectorchord(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["ghcr.io/immich-app/postgres"] ), customVersioning( // v1.134.0(-cuda|rocm|openvino)? "^v(?\\d+)\\.(?\\d+)\\.(?\\d+)(?:-(?cuda|rocm|openvino))?$", ["ghcr.io/immich-app/immich-machine-learning"] ), customVersioning( // stable-2.0.55 "^stable-(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["factoriotools/factorio"] ), customVersioning( // 5.15.24.18 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["mbentley/omada-controller"] ), customVersioning( // apache-2.37.0 "^apache-(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["kimai/kimai2"] ), customVersioning( // 4.0.0-beta.434 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-beta\\.(?\\d+)$", ["ghcr.io/coollabsio/coolify"] ), customVersioning( // some-app-1.0.2 "^.+-(?\\d+)\\.(?\\d+)\\.(?\\d+)$", ["opencloudeu/web-extensions"] ), customVersioning( // appname-1.2.3 `^(?draw-io|progress-bars|json-viewer|external-sites|unzip|cast|importer|arcade|maps)-(?\\d+)\\.(?\\d+)\\.(?\\d+)$`, [`opencloudeu/web-extensions`] ), customVersioning( // 1.0.0-alpha.67 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)(-alpha\\.(?\\d+))?$", ["rustfs/rustfs"] ), customVersioning( // 10.0.160-mongo8 "^(?\\d+)\\.(?\\d+)\\.(?\\d+)-mongo8$", ["ghcr.io/goofball222/unifi"] ), ], }; function customVersioning(versioningRegex, packages) { return { matchDatasources: ["docker"], versioning: `regex:${versioningRegex}`, matchPackageNames: packages, }; }