generated from lucas/rust-webserver-template
Debounce Renovate and exclude from CI #32
Labels
No labels
Agent
Ignore
Agent
In Progress
Agent
Planned
Agent
Planning
Agent
Ready
Agent
Triage
Compat/Breaking
Kind
Bug
Kind
Documentation
Kind
Enhancement
Kind
Feature
Kind
Security
Kind
Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
Tag/Good First Issue
Tag/Help Wanted
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
lucas/logview#32
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Problem
Renovate opens pull requests to update its own runner image far too often. The
renovate/renovatecontainer tag pinned in.forgejo/workflows/renovate.ymlmoved fourtimes in three days (PRs #10 → 44.222.0, #21 → 44.222.1, #26 → 44.222.5, #31 → 44.223.1),
making it the single loudest source of dependency PRs in the repository. Nothing about
that image needs to be current: it is the tool that opens the PRs, it never ships in the
product, and a release-per-day cadence buys nothing.
Renovate should propose its own updates roughly once a week. Every other package keeps its
current behaviour — Rust crates, the bun and curl images, the pinned action digests and the
stylelint group all continue to arrive as they land.
The issue title also mentions excluding Renovate from CI workflows. That half is
deliberately not implemented.
masterhas branch protection with required statuschecks, and the five contexts a pull request must produce are
pr / assets,pr / lint,pr / check,pr / testandpr / image. A workflow-levelpaths-ignorefilter stopsthe workflow from being created at all, so those contexts never appear and the pull request
becomes unmergeable — the symptom in gitea#36895.
A synthetic
skippedstatus for filtered-out workflows exists in Gitea but its presence inthis Forgejo is
unverified. The alternative, per-jobif:guards on all five jobs, isdisproportionate machinery once the self-update PR arrives only once a week. The CI jobs
stay exactly as they are.
Plan
Step 0 — start from
origin/masterThe working tree in this workspace may be behind. Branch from
origin/master, which is at50a02e6or later, and confirm before editing that.renovaterccontains apackageRulesarray with exactly two entries: an automerge rule matchingcgr.dev/chainguard/static,docker.io/curlimages/curl,docker.io/oven/bunandoven-sh/bun, and agroupName: "stylelint"rule.If
.renovaterchas nopackageRuleskey at all, the checkout is stale (that is thepre-
50a02e6shape of the file) — fetch and rebase before continuing, do not add the arrayfrom scratch.
Step 1 — add the
renovate/renovateschedule ruleAppend one entry to the
packageRulesarray in.renovaterc, after the existing stylelintgrouping rule, so the array has three entries in total. Verbatim content, 2-space indent to
match the rest of the file:
This is the entire code change. No other file is touched.
Decisions already made, so they are not re-opened during execution:
renovate/renovate, not a registry-qualified form.Renovate's dep name mirrors the literal
container.image:value in.forgejo/workflows/renovate.yml, which isrenovate/renovate:<tag>@<digest>. Theexisting rule entries use qualified names (
docker.io/oven/bun) because those images arewritten qualified at their use sites. Confirmed by PR titles: #31 is "update
renovate/renovate docker tag" while #19 is "update docker.io/oven/bun docker
tag".
schedule:weeklypreset.schedule:weeklyexpands to["* 0-3 * * 1"]; the wider["* 0-5 * * 1"](Mondays 00:00–05:59) keeps the behaviourreadable in the file itself and tolerates a delayed or drifting run.
.renovatercsets notimezone, so Renovate evaluates this in UTC, and the hourly workflow cron puts six runsinside the window.
automergeon this rule. The four automerged packages keep their settings; theweekly Renovate self-update PR is merged by hand like any other.
packageRulesentry matchesrenovate/renovate. Append rather than reorder.Step 2 — leave the workflow triggers alone
.forgejo/workflows/renovate.ymlis not modified. Itscron: "0 * * * *", itspushtrigger on
masterfiltered toCargo.toml,Cargo.lock,.renovatercand.forgejo/workflows/**, and itsworkflow_dispatchinputs all stay as they are. Renovatekeeps running hourly; the new rule only stops it from creating or updating a branch for
its own image outside the Monday window. Existing branches are still refreshed between
windows, because Renovate's
updateNotScheduleddefaults to true..forgejo/workflows/pr.yamlis not modified either — nopaths, nopaths-ignore, noper-job
if:guards. See## Problemfor why.Verification
1. The config parses
Prerequisite: Docker with network access to Docker Hub. From the repository root:
Expected: exits 0 and reports the config as valid. A malformed
schedulestring isrejected here rather than silently ignored at runtime, which is the failure mode this guards
against.
2. Renovate actually honours the rule
Trigger the Renovate workflow out of schedule from the Forgejo UI
(
Actions→Renovate→Run workflow) with inputslogLevel: debuganddryRun: full. A dry run creates no branches and no PRs, so this is safe to run on thebranch before merge.
Then read the job log and confirm both of:
renovate/renovatedependency is extracted and evaluated, and is reported as notwithin its schedule, so no branch is created for it. Do not grep for a specific
sentence — Renovate's wording varies by version; look for the
renovate/renovatedependency and the schedule decision logged alongside it.
normally and are not reported as out of schedule. This is the check that catches an
over-broad
matchPackageNames, which is the realistic way to get this wrong.Timing contingency: this check only reads cleanly when run outside Mondays
00:00–05:59 UTC. If the dispatch necessarily lands inside the window, accept the complement
instead: the log must show the
renovate/renovatedependency evaluated with its schedulesatisfied, while other dependencies show no schedule at all. Either direction proves
the rule is attached to the right dependency and to nothing else, which is what is being
verified.
3. Open pull requests are undisturbed
PRs #14 (
reqwest0.13) and #11 (asserting0.17.0) are open at the time of writing.After the change is merged and the next hourly Renovate run completes, confirm they are
still open and still being rebased — the new rule must not have altered handling of any
package other than
renovate/renovate.Assumptions & contingencies
masterhas branch protection with required status checks. Stated by the repositoryowner; not readable with the tools available in this session, so it remains
unverified — confirm first. It is the reason the CI-exclusion half of the issue is dropped. If itturns out no status checks are required, the dropped work becomes safe to do, but it is
still out of scope for this change and belongs in a separate issue.
scheduleper package rule, letting one package be throttled whilethe repository default stays "at any time". This is the documented behaviour of
packageRulesand the whole basis of the change. If the dry run in Verification step 2shows the schedule being applied repository-wide instead of to
renovate/renovatealone,stop and report it rather than compensating — compensating would mean adding an
explicit
"schedule": ["* * * * *"]default, which silently changes behaviour for everyother package and is exactly what this issue excludes.
omp-deck: the implementer session failed: the agent's turn failed.
Details are in omp-deck session
01a1c10f-3f23-7000-984a-19572b155e0d.