ci: bound every CI job with timeout-minutes (main) - #19
Merged
Conversation
The main branch carries the same 7 workflow files as development and they were all still unbounded, so a hang in a release run there could burn a runner for GitHub's 6-hour default. main is not a dead branch: release-workflow.yaml and build-exapp.yaml have run from it as recently as 2026-08-03. 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 onmain. The companion PR boundeddevelopment;maincarries the same 7 workflow files and they were all still unbounded.mainis not a dead branch —release-workflow.yamlandbuild-exapp.yamlhave run from it as recently as 2026-08-03, and these are the copies that actually perform releases. A hang there burns a runner for GitHub's 6-hour 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.yamlbuildRelease jobs are bounded at 45 rather than near their observed max because a spurious release failure is expensive.
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 someone then has to investigate.
Verification
maindirectly rather than assumed to matchdevelopment— same 7 files, same job names, all previously unbounded.yaml.safe_load; job set byte-for-byte unchanged frommain.mainbaseline still reportsNone(negative control), so it distinguishes bounded from unbounded rather than emitting a constant.Note on the
lint-checkcheck on this PRlint-checkis expected to fail here, and the failure is pre-existing and unrelated to this diff.main's copy ofpull-request-lint-check.yamlis an older revision that runsnpm iunconditionally.developmenthas since gained apackage.jsonguard that skips the step when the file is absent, but that fix has not reachedmain. None of these repos has a rootpackage.json, sonpm ifails onmainregardless of this change.This PR adds only
timeout-minuteslines and touches no step. Porting the guard tomainis deliberately left out of scope here to keep this diff additions-only; it is worth a separate PR.