Skip to content

ci: cap runtime on every job in the shared workflows - #27

Merged
00o-sh merged 1 commit into
mainfrom
claude/ci-stuck-xg0heb
Aug 15, 2026
Merged

ci: cap runtime on every job in the shared workflows#27
00o-sh merged 1 commit into
mainfrom
claude/ci-stuck-xg0heb

Conversation

@00o-sh

@00o-sh 00o-sh commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

What & why

No job in this repo set timeout-minutes, so every job — in the shared reusable workflows and in this repo's own workflows — inherited GitHub's 6-hour default.

That turned a hanging test into a 6-hour amber block rather than a fast red. It bit us today: @unabandoned/module-deps 6.2.8 replaced its subarg dependency with minimist, which removed subarg from browserify's install tree (no lockfile, range ^6). test/array.js still resolved subarg by bare name, and the resulting failure left the runner unable to exit, so npm test hung. Both the master run and every open PR's CI sat in progress indefinitely instead of failing in seconds. (The browserify-side fix is separate — this PR is only about the blast radius.)

Caps added, sized against observed run times (the whole CI workflow currently finishes in 30–90s):

workflow job cap
reusable-ci test 15
reusable-ci metadata 10
reusable-codeql analyze 30
reusable-commitlint commitlint 10
reusable-publish publish 15
reusable-release-cut cut 10
reusable-release-please release-please 10
reusable-release-security security-release 10
reusable-renovate-config validate 10
reusable-scorecard analysis 15
release-reusable release 10
dashboard build 20
dashboard deploy 10

The two thin caller jobs (commitlint, renovate-config) are deliberately untouched: GitHub does not accept timeout-minutes on a job that calls a reusable workflow. The reusable workflows they call now carry their own caps, so forks inherit the limit through the uses: ref either way — no per-fork change needed.

Type of change

  • fix / feat / perf — consumer-facing
  • deps — dependency update (add the security label if it fixes a CVE)
  • chore / ci / build / docs / test / refactor — maintenance

Checklist

  • Commits follow Conventional Commits (commitlint passes)
  • npm test passes on Node 20 / 22 / 24 — no package code touched; workflow YAML only, parsed and asserted job-by-job to confirm every runner-owning job now carries a cap
  • No new runtime dependency (or its addition is justified below)
  • Dev tree kept lean (prefer built-in node:test over new runners)

Generated by Claude Code

No job in this repo set timeout-minutes, so each one inherited GitHub's
6-hour default. A test that hangs rather than fails then sits amber for
hours and blocks the branch instead of going red in minutes — which is
exactly what happened across the org today when a dropped transitive dep
left browserify's suite hanging.

Cap every job that owns a runner. The two thin caller jobs (commitlint,
renovate-config) are left alone: GitHub does not accept timeout-minutes
on a job that calls a reusable workflow, and the reusable workflow they
call now carries its own cap, so forks inherit the limit either way.

Co-Authored-By: Claude <[email protected]>
Claude-Session: https://claude.ai/code/session_01YLKEpDeq7NbnC2rbyWpSfa
@00o-sh
00o-sh merged commit 4c62f69 into main Aug 15, 2026
2 checks passed
@00o-sh
00o-sh deleted the claude/ci-stuck-xg0heb branch August 15, 2026 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants