Skip to content

ci(workflows): add timeout-minutes to all jobs#28

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/wokelangiser-workflow-timeouts
Jun 20, 2026
Merged

ci(workflows): add timeout-minutes to all jobs#28
hyperpolymath merged 1 commit into
mainfrom
claude/wokelangiser-workflow-timeouts

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Why

The Hypatia workflow_audit (surfaced in the security-scan comments on #26/#27) flagged missing_timeout_minutes across the repo's GitHub Actions workflows. Without timeout-minutes, a hung job can run up to the 6-hour default, wasting the shared account-wide Actions concurrency pool.

Change

Adds timeout-minutes: 15 to all 20 runs-on jobs across 9 workflows: boj-build, casket-pages, codeql, dogfood-gate, instant-sync, release, rhodibot, scorecard-enforcer, static-analysis-gate.

  • Pure additions9 files changed, 20 insertions(+), 0 deletions(-); no other workflow logic touched.
  • 15 min is a conservative safety cap (every current job completes in well under a minute per CI history); bump per-job later if anything legitimately needs longer.
  • Reusable-workflow caller jobs (no runs-on:, e.g. in governance.yml/rust-ci.yml/mirror.yml/secret-scanner.yml/scorecard.yml/hypatia-scan.yml) are intentionally untouched — timeout-minutes belongs in the called workflow there.

Scope note

This clears the missing_timeout_minutes findings only. The scan's other finding types (the 1 critical / 10 high) are unrelated to timeouts and out of scope for this PR — happy to tackle them separately if you want.

Verification (actually run)

  • git diff --stat9 files, 20 insertions, 0 deletions; each addition is a timeout-minutes: 15 placed as a sibling of a runs-on: line at matching indentation (full diff reviewed).
  • Confirmed no pre-existing timeout-minutes in any workflow beforehand (no duplicate YAML keys), and reverted an incidental EOF-newline change so the diff is purely the timeout additions.

CI/workflow hygiene only — no application code or proofs changed.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y2MWTAqX2x7goVJzjFB4j5


Generated by Claude Code

Adds a conservative 15-minute timeout-minutes cap to all 20 runs-on jobs across 9 workflow files (boj-build, casket-pages, codeql, dogfood-gate, instant-sync, release, rhodibot, scorecard-enforcer, static-analysis-gate). Clears the missing_timeout_minutes findings raised by the Hypatia workflow_audit. Pure additions — no other workflow logic changed; per-job values can be tuned later if any job legitimately needs longer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2MWTAqX2x7goVJzjFB4j5
@hyperpolymath
hyperpolymath marked this pull request as ready for review June 20, 2026 04:42
@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 35 issues detected

Severity Count
🔴 Critical 1
🟠 High 10
🟡 Medium 24

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Issue in scorecard-enforcer.yml",
    "type": "scorecard_publish_with_run_step",
    "file": "scorecard-enforcer.yml",
    "action": "split_scorecard_publish_job",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in instant-sync.yml",
    "type": "secret_action_without_presence_gate",
    "file": "instant-sync.yml",
    "action": "peter-evans/repository-dispatch",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in scorecard.yml",
    "type": "scorecard_wrapper_missing_job_permissions",
    "file": "scorecard.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Download-and-execute pattern (curl|wget pipe to shell) -- verify integrity before execution (3 occurrences, CWE-494)",
    "type": "shell_download_then_run",
    "file": "/home/runner/work/wokelangiser/wokelangiser/setup.sh",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "line": 24,
    "reason": "Secret found: Generic API key",
    "type": "secret_detected",
    "file": "/home/runner/work/wokelangiser/wokelangiser/.envrc",
    "action": "revoke_rotate_and_purge",
    "rule_module": "security_errors",
    "severity": "critical"
  },
  {
    "reason": "Nominal-only SAST in wokelangiser: codeql.yml language matrix contains no language present in the repo and lacks `actions`, so CodeQL records zero results on every commit. Remediation: set the CodeQL matrix to `language: actions`.",
    "type": "StaticAnalysis",
    "file": "/home/runner/work/wokelangiser/wokelangiser",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Add CodeQL or equivalent SAST workflow.",
    "scorecard_check": "SAST"
  },
  {
    "reason": "1 workflow(s) with tag-pinned (not SHA-pinned) actions in wokelangiser",
    "type": "DependencyPinning",
    "file": "/home/runner/work/wokelangiser/wokelangiser",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Pin GitHub Actions and Docker base images by SHA hash.",
    "scorecard_check": "Pinned-Dependencies"
  },
  {
    "reason": "Repository has 7 non-main remote branch(es). Policy: single main branch only.",
    "type": "GS007",
    "file": ".",
    "action": "delete_remote_branches",
    "rule_module": "git_state",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/workflow_audit/scorecard_wrapper_missing_job_permissions -- Hypatia workflow_audit: scorecard_wrapper_missing_job_permissions -- 19 day(s) old [STALE]",
    "type": "CSA001",
    "file": "scorecard.yml",
    "action": "escalate",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/workflow_audit/secret_action_without_presence_gate -- Hypatia workflow_audit: secret_action_without_presence_gate -- 19 day(s) old [STALE]",
    "type": "CSA001",
    "file": "instant-sync.yml",
    "action": "escalate",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath
hyperpolymath merged commit 6f7c849 into main Jun 20, 2026
20 checks passed
@github-actions
github-actions Bot deleted the claude/wokelangiser-workflow-timeouts branch June 21, 2026 02:15
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