Skip to content

ci: add timeout-minutes to workflow jobs - #62102

Open
mr-raj12 wants to merge 1 commit into
NousResearch:mainfrom
mr-raj12:ci/workflow-timeout-minutes
Open

ci: add timeout-minutes to workflow jobs#62102
mr-raj12 wants to merge 1 commit into
NousResearch:mainfrom
mr-raj12:ci/workflow-timeout-minutes

Conversation

@mr-raj12

@mr-raj12 mr-raj12 commented Jul 10, 2026

Copy link
Copy Markdown

Closes #62103

Problem

Most jobs across the repo's GitHub Actions workflows have no timeout-minutes set. A job without one inherits the platform default of 6 hours, so a step that hangs (a stuck network call, a deadlocked test, a wedged subprocess) keeps a runner busy for hours before the run is cancelled. Some workflows already set it (lint.yml, docker.yml, docker-lint.yml, the test/e2e jobs in tests.yml, uv-lockfile-check.yml), so the gap was inconsistent coverage rather than a deliberate policy.

Solution

Add a timeout-minutes cap to every job that was missing one, sized to the work each job does:

Workflow Job(s) timeout-minutes
ci.yml detect, all-checks-pass 5
ci.yml ci-timings 10
contributor-check.yml check-attribution 10
docs-site-checks.yml docs-site-checks 10
history-check.yml check-common-ancestor 10
skills-index-freshness.yml check-freshness 10
deploy-site.yml deploy-vercel, deploy-docs 15
skills-index.yml build-index, trigger-deploy 15
supply-chain-audit.yml scan, dep-bounds, mcp-catalog-review 15
tests.yml generate, save-durations 15
upload_to_pypi.yml build, publish, sign 20

typecheck.yml is intentionally left out. Its read-only permissions change is already in flight in #45731, and the remaining concurrency plus timeout-minutes work for that file is tracked on its own, so editing it here would only create a conflict.

Testing

  • Parsed every .github/workflows/*.yml with yaml.safe_load before and after the change. All files parse, and the only job still without a timeout-minutes is in typecheck.yml, which is the intended exclusion.
  • Confirmed the diff is additive only: 19 lines across 10 files, one per job, with nothing else touched.

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have sweeper:risk-automation Sweeper risk: may affect CI, automerge, label sync, or maintainer automation labels Jul 10, 2026
@teknium1

Copy link
Copy Markdown
Contributor

Thanks for the focused CI hardening change. Current main still has the reported uncapped jobs, including .github/workflows/ci.yml:37, :153, and :179, while comparable jobs already use the same native timeout-minutes key (for example .github/workflows/tests.yml:45 and :158). The PR adds only the missing job-level limits across the ten stated workflow files.

Automated hermes-sweeper review.

@teknium1 teknium1 added the sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform label Jul 11, 2026
Jobs without a timeout-minutes value inherit GitHub Actions' 6-hour
default, so a hung step can burn runner minutes for hours before it
fails. Set a per-job cap sized to each job's runtime across the
workflows that were missing one. typecheck.yml is left alone so this
does not clash with the in-flight permissions change in NousResearch#45731.
@mr-raj12
mr-raj12 force-pushed the ci/workflow-timeout-minutes branch from 1dbc67b to a8dd099 Compare July 12, 2026 08:19
@mr-raj12

Copy link
Copy Markdown
Author

Thanks a lot boss for the review! Rebased onto latest main and re-verified — only typecheck.yml jobs are left uncapped as intended (tracked separately), rest all sorted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low — cosmetic, nice to have sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform sweeper:risk-automation Sweeper risk: may affect CI, automerge, label sync, or maintainer automation type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: workflow jobs missing timeout-minutes inherit the 6-hour default

3 participants