{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended", "helpers:pinGitHubActionDigests", "customManagers:githubActionsVersions"],
  "configMigration": true,
  "enabledManagers": ["github-actions", "gomod", "npm", "pep621", "nix", "custom.regex", "dockerfile"],
  "labels": ["dependencies"],
  "branchPrefix": "renovate/",
  "schedule": ["* * * * 1"], // dependency update PRs weekly, vulnerabilityAlerts bypasses this
  "minimumReleaseAge": "5 days",
  "semanticCommits": "enabled",
  "osvVulnerabilityAlerts": true,
  "vulnerabilityAlerts": {
    "enabled": true,
  },
  "customManagers": [
    {
      "customType": "regex",
      "managerFilePatterns": ["/(^|/)Makefile$/"],
      "matchStrings": [
        "[A-Z_]+_PACKAGE\\s*\\?=\\s*(?<depName>[^@\\s]+?)(?:/cmd/[^@/\\s]+)?@(?<currentValue>\\S+)\\s+# renovate: datasource=(?<datasource>\\S+)",
        "[A-Z_]+_IMAGE\\s*\\?=\\s*(?<depName>[^:\\s]+):(?<currentValue>[^@\\s]+)@(?<currentDigest>sha256:[a-f0-9]+)\\s+# renovate: datasource=(?<datasource>\\S+)",
      ],
    },
  ],
  "packageRules": [
    {
      "groupName": "action dependencies",
      "matchManagers": ["github-actions"],
    },
    {
      "matchPackageNames": ["@mcaptcha/vanilla-glue"],
      "allowedVersions": "^0.1", // breaking changes in rc versions need to be handled
    },
    {
      "matchPackageNames": ["cropperjs"],
      "allowedVersions": "^1", // need to migrate to v2 but v2 is not compatible with v1
    },
    {
      "matchPackageNames": ["tailwindcss"],
      "allowedVersions": "^3", // need to migrate
    },
    {
      "matchPackageNames": ["github.com/Azure/azure-sdk-for-go/sdk/azcore"],
      "allowedVersions": "<1.21.0", // v1.21.0+ uses API version unsupported by Azurite in CI
    },
    {
      "matchPackageNames": ["github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"],
      "allowedVersions": "<1.6.4", // v1.6.4+ uses API version unsupported by Azurite in CI
    },
    {
      "matchPackageNames": ["github.com/microsoft/go-mssqldb"],
      "allowedVersions": "<=1.9.7", // downgraded with Azure SDK
    },
    {
      "matchPackageNames": ["go.yaml.in/yaml/v4"],
      "allowedVersions": "<4.0.0-rc.4", // rc.4 changes block scalar serialization, wait for stable release
    },
    {
      "matchPackageNames": ["postgres"],
      "allowedVersions": "/^14($|[.-])/", // pin to oldest supported major
    },
    {
      "matchPackageNames": ["bitnamilegacy/mysql"],
      "allowedVersions": "/^8\\.4($|[.-])/", // pin to oldest LTS
    },
    {
      "matchPackageNames": ["mcr.microsoft.com/mssql/server"],
      "allowedVersions": "/^2019($|[.-])/", // pin to oldest in extended support
    },
    {
      "groupName": "go dependencies",
      "matchManagers": ["gomod"],
      "postUpdateOptions": ["gomodUpdateImportPaths"],
      "postUpgradeTasks": {
        "commands": ["make tidy"],
        "fileFilters": [
          "go.mod",
          "go.sum",
          "assets/go-licenses.json",
        ],
        "executionMode": "branch",
      },
    },
    {
      "groupName": "tool dependencies",
      "matchManagers": ["custom.regex"],
      "matchFileNames": ["**/Makefile"],
    },
    {
      "matchManagers": ["gomod"],
      "matchDepNames": ["go"],
      "matchDepTypes": ["golang"],
      "rangeStrategy": "bump",
      "schedule": ["at any time"],
      "minimumReleaseAge": "0",
    },
    {
      "groupName": "npm dependencies",
      "matchManagers": ["npm"],
      "postUpdateOptions": ["pnpmDedupe"],
      "postUpgradeTasks": {
        "commands": ["make svg", "make generate-codemirror-languages"],
        "fileFilters": [
          "package.json",
          "pnpm-lock.yaml",
          "pnpm-workspace.yaml",
          "public/assets/img/svg/**",
          "options/fileicon/**",
          "assets/codemirror-languages.json",
        ],
        "executionMode": "branch",
      },
    },
    {
      "groupName": "python dependencies",
      "matchManagers": ["pep621"],
    },
    {
      "groupName": "nix dependencies",
      "matchManagers": ["nix"],
    },
    {
      "groupName": "docker dependencies",
      "matchManagers": ["dockerfile"],
    },
  ],
}
