ci(renovate): run every 3 hours and stop rebasing on every base move #55
No reviewers
Labels
No labels
dependencies
major
security-pin
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
trails-cool/trails!55
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/renovate-cadence-and-rebase"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hourly Renovate starved CI. Both changes here reduce the load it generates rather than adding capacity.
The evidence
Measured on 2026-07-30 — one run executing, four waiting, three of those PR CI:
PR #54's checks sat queued 46 minutes without starting. All four runner containers were healthy — pure saturation. A PR that was substantively green (Checks, Visual Tests, Security Scan, Dockerfile Package Check all passing) could not get a verdict.
The loop was self-reinforcing: waking hourly rebased any PR whose base had moved → each rebase fired a fresh 6-job CI run → with nine open Renovate PRs that produced more work per hour than two slots could absorb. A full Renovate run also holds a slot for ~21 min by itself.
Changes
0 * * * *→0 */3 * * *— auto-merge latency stays bounded at ~3h, still far better than the weekly cron that deferred merges indefinitely, at a third of the slot usage. Fires at 00,03,06,09,12,15,18,21 UTC.rebaseWhen: "behind-base-branch"→"conflicted"— most rebases happened only becausemainhad moved, not because anything conflicted, so this removes the bulk of the generated runs.The second change is a trade, and the config says so
behind-base-branchexisted to close the stale-base gap left by having no merge queue (#25). Giving it up means a PR can merge having been tested against an oldermain, so two PRs that each pass can still breakmaintogether.CI / *stays required on every PR, which catches everything except genuine semantic conflicts between concurrently-open changes.If that starts happening, in order of preference: a merge queue (#25),
block_on_outdated_branchon the protection rule (which would force every human PR to rebase too), or revert this and add runner capacity.Worth recording the irony:
behind-base-branchalso defeated itself. Each rebase restarted CI, so a branch went green after the run that touched it had finished — deferring the very auto-merge it was meant to protect. That was the original bug behind making the cron hourly in the first place.Verified
json5;rebaseWhen=conflictedwith the rest of the auto-merge rule intact (squash,3 days,at any time)on:block still has exactly one cron plusworkflow_dispatchwith itsdry_runinput0 */3 * * *expands to the eight expected hours