CI: the monthly dependency run's propose job has a job-level if, which this runner turns into a failure #1159
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#1159
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?
What exists today
.forgejo/workflows/dependencies.yml:127-130:proposehasneeds: upgradeandif: needs.upgrade.outputs.changed == 'true'.upgradewriteschanged=falseat:80whenuv lock --upgradeleaves the lock as it was, and its own later steps already guard with step-levelif:(:91,:99,:112,:119), the pattern that works here. The repository records why job-level conditions are avoided:dev-image.yml:41-43says "this runner fails a job whoseifis false instead of skipping it (tried on a throwaway branch)", and #1033 repeats it as a rule.Checked through the API (
GET /repos/postulo/postulo/actions/tasks, all 119 pages, 5,883 tasks):dependencies.ymlhas one task ever, run 652 "Monthly dependency upgrade", scheduled 2026-10-03, statusfailure. That run predates the split:proposearrived inc35862ce5on 2026-10-17 ("Hold the dependency bot's token in a job that runs nothing from the new packages"). So no run has yet shown the false-iffailure; the claim rests on the runner behaviour the repository documents. The first run with the split is the cron at:34, 2026-11-03 05:23 UTC. Run 652's own failure (in the single job of that time) was not investigated here.Correction to the candidate: whether that month goes red depends on whether the lock moves; in a month it does (the usual case)
proposeruns. The failure shows up only in a quiet month, which makes it rarer and more confusing when it comes.What would change
Remove the job-level
iffromproposeand put the same condition on each of its steps (if: needs.upgrade.outputs.changed == 'true'), asupgradealready does; or keep the job and make its first step exit 0 with a note in$GITHUB_STEP_SUMMARYwhen nothing changed, the rest guarded.tests/test_release_tools.pyor whichever test reads the workflows can assert that no job in.forgejo/workflows/has a job-levelifother than thegithub.ref_nameguard indev-image.yml:69(which is only false on a branch the trigger already excludes).What it saves or protects
small (reliability): a month in which the lock does not move ends green instead of red, so a red monthly run keeps meaning something broke
Accessibility
none
Decisions
Found by the efficiency and reliability audit of 2026-10-30 (finding X1; index postulo/postulo#1108). Checked against
mainatdaee30b15(2026-10-30).