Skip to content

[Dependency/Sync] Add Renovate maintenance windows, limits, and digest grouping #2877

Description

@stranske

Why

renovate-presets/fleet.json:4-40 groups minor/patch updates but leaves digest updates outside the GitHub Actions group and does not define a schedule, commit rate, branch limit, PR limit, release age, PR-creation gate, or major-update approval. In the 2026-06-14..2026-08-01 audit window, 460 of 974 retrievable Renovate PRs were digest updates; grouped non-major work merged 174/180 while frequent digest families produced much more discarded work. This is a current intake-control gap, not evidence that routine Renovate grouping should be removed.

Scope

  • Add a bounded weekly maintenance window and fleet branch/PR budgets.
  • Group trusted GitHub Actions digest/pin/minor/patch updates together.
  • Delay routine PR creation until branch checks are not pending and releases have aged.
  • Route majors through the Dependency Dashboard while security updates bypass routine cadence.

Non-Goals

  • Do not revert to Dependabot or disable platform auto-merge for clean routine updates.
  • Do not delay vulnerability-alert/security updates behind the weekly window.
  • Do not include the nine Workflows-owned dev-tool pins disabled at fleet.json:11-15.
  • Scaffold-only completion does NOT count: adding undocumented keys without schema validation and a representative dry-run is not completion.

Tasks

  • Update renovate-presets/fleet.json with a documented weekly 4-hour schedule, commitHourlyLimit, prConcurrentLimit, and branchConcurrentLimit set to conservative fleet values.
  • Extend the GitHub Actions package rule at renovate-presets/fleet.json:29-35 to group digest, pin, minor, and patch updates for trusted actions.
  • Add routine-update minimumReleaseAge and prCreation policy without applying those delays to vulnerability alerts.
  • Add a major-update rule using dependencyDashboardApproval while preserving visible, actively handled majors.
  • Define grouped lock-file maintenance cadence explicitly instead of inheriting an always-available default.
  • Add tests/workflows/test_renovate_fleet_policy.py to parse the real preset and assert the schedule, limits, security bypass, digest grouping, dev-tool exclusions, and major lane.
  • Update docs/ci/TOOL_VERSION_MANAGEMENT.md, docs/WORKFLOW_GUIDE.md, and renovate-presets/README.md with the intake budget and emergency/security path.
  • Add the Renovate config validator command to scripts/dev_check.sh or the existing dependency-policy validation job.

Acceptance Criteria

  • python -m pytest tests/workflows/test_renovate_fleet_policy.py tests/workflows/test_dependency_bot_conditions.py -q passes.
  • Renovate config validation accepts renovate.json, renovate-presets/fleet.json, and any inherited generated preset.
  • A representative Renovate dry-run for Workflows and one consumer reports at most three concurrent routine branches and groups trusted GitHub Actions digest updates into one branch.
  • The dry-run evidence shows a routine non-security release is held by the maintenance/release-age policy while a vulnerability-alert update is not held.
  • Deliberate-break gate: temporarily remove digest from the GitHub Actions group; tests/workflows/test_renovate_fleet_policy.py::test_trusted_action_digests_are_grouped must fail. Restore the rule before review.

Implementation Notes

  • Current preset: renovate-presets/fleet.json; Workflows override: renovate.json; consumer entrypoint: templates/consumer-repo/.github/renovate.json.
  • Related tests/docs: tests/workflows/test_dependency_bot_conditions.py, tests/workflows/test_consumer_sync_create_only_evidence.py, docs/ci/TOOL_VERSION_MANAGEMENT.md, docs/WORKFLOW_GUIDE.md, docs/ops/CONSUMER_REPO_MAINTENANCE.md, and scripts/dev_check.sh.
  • Start with commitHourlyLimit: 1 or 2, prConcurrentLimit: 3, and branchConcurrentLimit: 3; change these only with dry-run evidence.
  • Preserve native automerge for the green routine lane and a no-delay security path.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions