ci: bound every CI job with timeout-minutes - #17
Merged
Conversation
All 7 CI jobs ran unbounded, so a hung runner could burn the full 6-hour GitHub default before failing. Each job now carries a timeout-minutes sibling of runs-on, sized from observed fleet-wide durations (successful + failed executions, skipped excluded): - lint-check (15): n=176, median 0.6 min, max 1.4 min - check-branch (10): n=123, max 0.1 min - create-pr (20): n=152, max 5.6 min - release-management (45): n=26, max 0.7 min - bounded loosely because a spurious release failure is expensive - build (30): no observed runs; docker build Bounds are deliberately loose: a timeout that fires under normal runner contention turns a slow run into a phantom defect.
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.
What
Adds
timeout-minutesto all 7 CI jobs. Every job previously ran unbounded, so a hung runner (network stall, wedged docker build, a step waiting on input) burns the full 6-hour GitHub default before the run fails.Values — measured, not guessed
Sized from observed fleet-wide durations across the ExApp sidecar wrappers (successful + failed executions; skipped runs excluded).
pull-request-lint-check.yamllint-checkpull-request-from-branch-check.yamlcheck-branchpush-development-to-beta.yamlcreate-prbeta-release.yamlrelease-managementunstable-release.yamlrelease-managementrelease-workflow.yamlrelease-managementbuild-exapp.yamlbuildThe release jobs are bounded at 45 rather than near their observed max because a spurious release failure is expensive, and to match the shared release jobs elsewhere in the fleet.
Bounds are deliberately loose. A timeout that fires under normal runner contention is worse than no timeout at all: it converts a slow run into a phantom defect that someone then has to investigate.
Verification
yaml.safe_load; the job set is byte-for-byte unchanged from the base branch.None(negative control) — so the probe distinguishes bounded from unbounded rather than emitting a constant.