Files
stack/renovate.json
kert bf4115195d fix(renovate): actually run against the repo; release cooldown, OSV alerts
28 weekly Renovate runs were green and opened zero PRs: the log says
"No repositories found" — RENOVATE_REPOSITORIES was never set, so every
run exited before looking at the repo. Dependency drift went unwatched
for its whole life.

Workflow: self-hosted settings move to env where they belong
(RENOVATE_PLATFORM/ENDPOINT/REPOSITORIES); the image is pinned
(44.171.1) instead of `latest`, and Renovate bumps that pin itself.

renovate.json:
- fileMatch -> managerFilePatterns (Renovate 41+ migration; its own
  suggested rewrite of the Dockerfile glob was not a valid regex).
- Drop the pip_requirements-on-pyproject.toml mapping; the default
  pep621 manager owns pyproject.toml + uv.lock.
- minimumReleaseAge 7 days (matches the uv cooldown);
  osvVulnerabilityAlerts with a `security` label; weekly
  lockFileMaintenance.
- Guards on the minor/patch automerge: Python 3.13 -> 3.15 counts as a
  "minor" and would have automerged; pymupdf stays <2 (licence);
  tool-pin bumps in backends/gitea.py need gen_config.py re-run, so a
  human merges those.
- github-actions manager limited to renovate.yml — the rest of
  .gitea/workflows is generated.

Validated with renovate-config-validator --strict; a local dry run
(--platform=local --dry-run=lookup) proposes 25 updates, e.g. traefik
v3.3 -> v3.7, coredns 1.12 -> 1.14.7, tempo 2.7.2 -> 2.10.10, CUDA
12.6 -> 12.9.2. Lookups of github-releases deps want a
GITHUB_COM_TOKEN secret to avoid anonymous rate limits.

Refs #1365
2026-10-27 11:05:23 -04:00

64 lines
2.5 KiB
JSON

{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"labels": ["dependencies"],
"automerge": false,
"minimumReleaseAge": "7 days",
"osvVulnerabilityAlerts": true,
"vulnerabilityAlerts": {
"labels": ["dependencies", "security"]
},
"lockFileMaintenance": {
"enabled": true,
"schedule": ["before 6am on monday"]
},
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch", "digest", "lockFileMaintenance"],
"automerge": true
},
{
"description": "A Python minor (3.13 -> 3.15) is a runtime migration, not a patch: never automerge it.",
"matchDepNames": ["python"],
"automerge": false
},
{
"description": "pymupdf 2.x bundles the Polyform-Noncommercial layout code and onnxruntime — a licence decision (see pyproject.toml), not a routine bump.",
"matchPackageNames": ["pymupdf"],
"allowedVersions": "<2"
},
{
"description": "Generated-workflow tool pins: gen_config.py must re-emit .gitea/workflows after the bump, so a human merges these.",
"matchFileNames": ["dev/scripts/backends/gitea.py"],
"automerge": false,
"prBodyNotes": ["Run `uv run python dev/scripts/gen_config.py` on this branch and commit the regenerated workflows before merging."]
}
],
"dockerfile": {
"managerFilePatterns": ["/(^|/)[^/]+\\.Dockerfile$/"]
},
"github-actions": {
"description": "Only the hand-written Renovate workflow; the rest of .gitea/workflows is generated by gen_config.py.",
"managerFilePatterns": ["/^\\.gitea/workflows/renovate\\.yml$/"]
},
"customManagers": [
{
"customType": "regex",
"description": "Bump `ARG *_VERSION=` pins annotated with a `# renovate:` comment (marimo, yq, otel-cli, …) that the dockerfile manager can't see.",
"managerFilePatterns": ["/(^|/)[^/]+\\.Dockerfile$/"],
"matchStrings": [
"# renovate: datasource=(?<datasource>\\S+) depName=(?<depName>\\S+)(?: extractVersion=(?<extractVersion>\\S+))?\\s+ARG \\w+?_VERSION=(?<currentValue>\\S+)"
]
},
{
"customType": "regex",
"description": "Bump the trivy/crane pins the CI workflow generator installs.",
"managerFilePatterns": ["/^dev/scripts/backends/gitea\\.py$/"],
"matchStrings": [
"# renovate: datasource=(?<datasource>\\S+) depName=(?<depName>\\S+)\\s+\\w+_VERSION = \"(?<currentValue>[^\"]+)\""
],
"extractVersionTemplate": "^v?(?<version>.*)$"
}
]
}