version: 2
# As dependabot is currently only run on a weekly basis, we raise the
# open-pull-requests-limit to 10 (from the default of 5) to better ensure we
# don't continuously grow a backlog of updates.
updates:
  - # "pip" is the correct setting for poetry, per https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem
    package-ecosystem: "pip"
    directory: "/"
    open-pull-requests-limit: 10
    schedule:
      interval: "weekly"
    # Group patch updates to packages together into a single PR, as they rarely
    # if ever contain breaking changes that need to be reviewed separately.
    # 
    # Less PRs means a streamlined review process.
    #
    # Python packages follow semantic versioning, and tend to only introduce
    # breaking changes in major version bumps. Thus, we'll group minor and patch
    # versions together.
    groups:
      minor-and-patches:
        applies-to: version-updates
        patterns:
          - "*"
        update-types:
          - "minor"
          - "patch"
    # Prevent pulling packages that were recently updated to help mitigate
    # supply chain attacks. 14 days was taken from the recommendation at
    # https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns
    # where the author noted that 9/10 attacks would have been mitigated by a
    # two week cooldown.
    #
    # The cooldown only applies to general updates; security updates will still
    # be pulled in as soon as possible.
    cooldown:
      default-days: 14

  - package-ecosystem: "docker"
    directory: "/docker"
    open-pull-requests-limit: 10
    schedule:
      interval: "weekly"
    # For container versions, breaking changes are also typically only introduced in major
    # package bumps.
    groups:
      minor-and-patches:
        applies-to: version-updates
        patterns:
          - "*"
        update-types:
          - "minor"
          - "patch"
    cooldown:
      default-days: 14

  - package-ecosystem: "github-actions"
    directory: "/"
    open-pull-requests-limit: 10
    schedule:
      interval: "weekly"
    # Similarly for GitHub Actions, breaking changes are typically only introduced in major
    # package bumps.
    groups:
      minor-and-patches:
        applies-to: version-updates
        patterns:
          - "*"
        update-types:
          - "minor"
          - "patch"
    cooldown:
      default-days: 14

  - package-ecosystem: "cargo"
    directory: "/"
    open-pull-requests-limit: 10
    versioning-strategy: "lockfile-only"
    schedule:
      interval: "weekly"
    # The Rust ecosystem is special in that breaking changes are often introduced
    # in minor version bumps, as packages typically stay pre-1.0 for a long time.
    # Thus we specifically keep minor version bumps separate in their own PRs.
    groups:
      patches:
        applies-to: version-updates
        patterns:
          - "*"
        update-types:
          - "patch"
    cooldown:
      default-days: 14
