Repository navigation
ci: bound every job's runtime - #5
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Gives every job a
timeout-minutes— the six inci.ymland the nightly one insecurity_audit.yml. Without one a hung job holds a runner until GitHub's six-hourdefault.
The audit job matters most of the three files: it runs on a
schedule:, where a hangis least likely to be noticed, and it would otherwise have been the only job in the
repository still unbounded.
release.ymlalready had one.The values catch a hang; they are not performance budgets. Legs on run
41644686566take 0 to 3 minutes, so the limits sit well above anything a healthy run does — too
tight would buy flaky failures, which is worse than the hang.
build,testcheck,clippycargo-deny,security_auditrustfmtAll eight jobs across the three workflows are now bounded,
release.yml's 45 included.Why now
Raised while reviewing #3. That PR set
fail-fast: false, which removes an incidentalbackstop: under
fail-fast: truea hung leg was cancelled whenever a sibling leghappened to fail. That was never a timeout and only fired when something else broke,
but it did sometimes cut a hang short.
Scoped to all six jobs rather than the two #3 touches, because fixing two would leave
the file inconsistent.
release.yml:29already had one.Verification
actionlint— clean on all three workflowsthan by reading
That clean result is load-bearing, not merely a well-formedness check. Both mutants
die:
timeout-minute— rejected:unexpected key "timeout-minute" for "job" sectiontimeout-minutesnested understrategy:, where GitHub would not read it as a jobtimeout — rejected:
unexpected key "timeout-minutes" for "strategy" sectionSo actionlint validates the spelling and the placement of this key.
What this does not show: a timeout only fires on a job that hangs, and nothing here
hangs. As with #3, the evidence is that the key is correct and validated, not that the
limit has been observed to cut anything off.