Skip to content

fix(ci): give the casket-ssg Pages build room for a cold cabal build - #191

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/redci-cleanup
Oct 6, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
fix/redci-cleanup

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

The build job of casket-pages.yml ("GitHub Pages") is red on main (7973dcd). It is red because it cannot finish within its own time limit.

  • Decisive log line (run 36916760419, job 110552516051): ##[error]The operation was canceled.
    • The "Build casket-ssg" step ran from 19:55:14Z to 20:08:24Z, when the job reached timeout-minutes: 15.
  • The run history shows the same pattern. In the last 100 runs of this workflow there was no success: 74 cancelled, 20 failure, 6 startup_failure. Every recent run is cancelled at the same step (2026-09-21, 09-29, 10-01 checked).
  • A cold build takes longer than the limit. The last run where cabal build finished was 26728514663 (2026-06-01). That step took 21m51s, plus about 2 min for GHCup setup.
  • The cache never warms up. actions/cache saves ~/.cabal and dist-newstyle only when the job succeeds. The job never succeeded, so nothing was ever saved and every run started cold. With a 15-minute limit the job could not pass.

This PR raises the build job's timeout-minutes to 40, which covers one cold build with headroom. Once that run completes and the cache is saved, later builds should take seconds; burble's casket-pages build step took 3 s with a warm cache.

No issue is filed for this. The repo's workflow already needed this fix.

Type of change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 💥 Breaking change (would change existing behaviour)
  • 🕳️ Soundness fix (fixes a checker/proof false-negative)
  • 📖 Documentation
  • 🧹 Refactor / tech debt (behaviour-preserving)
  • ⚡ Performance
  • 🔧 Build / CI / tooling

📌 New pins

Head SHA: 691826b

No new or changed pins. No uses: line changed, so there is no actions.lock entry, lockfile record or container digest to add.

How has this been verified?

  • gh actions-lock .github/workflows/casket-pages.yml --verify --no-interactive --json=valid (v0.1.6): "valid": true.
  • standards tools/policy/check-workflows-parse.sh (at the governance linter's helper pin 874ffe58): "all 16 workflow(s) parse".
    • Positive control: a planted malformed workflow in a scratch copy returned rc=1, "workflow does not parse".
  • standards scripts/check-workflow-duplicate-keys.sh: "duplicate-key check: 16 workflow file(s) clean".
  • Timings came from the Actions API (repos/…/actions/runs/<id>/jobs, step started_at/completed_at):
    • runs 36916760419, 36615061148 and 35601195051: "Build casket-ssg" cancelled after about 13 min of build time each
    • run 26728514663: the step succeeded after 21m51s
  • Not verified locally: whether the build finishes inside 40 minutes on today's runner. That can only be shown by the first run after merge. The June measurement is the evidence for the limit.

Checklist

  • My commits are signed (git commit -S). git log --format=%G? shows G.
  • I ran the project's own checks/tests locally and they pass: not applicable. Only one workflow's time limit changed. The repo's own workflow checks that apply (lock verify, parse, duplicate keys) were run and pass, as above.
  • New files carry the correct SPDX-License-Identifier: no new files. The edited workflow keeps its existing MPL-2.0 header.
  • Docs are updated: no user-facing behaviour or public claim changed.
  • I have not introduced a soundness hole. Raising a job time limit does not skip or soften any check. The build still has to succeed for Pages to deploy.

Notes for reviewers

  • The deploy job keeps timeout-minutes: 15, which is ample for deploy-pages.
  • pages.yml (Ddraig SSG) shares the pages concurrency group but is disabled_manually. It is not touched here.
  • The June failure was at "Setup Pages" (Pages was not yet configured). Pages is now configured with build_type: workflow, so that step should pass.
  • The estate template (rsr-template-repo@455eef8) uses timeout-minutes: 20 for the same job. That is still below the measured 21m51s cold build. This is recorded as a separate finding.

🤖 Generated with Claude Code

https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm

Every `build` run of casket-pages.yml in the last 100 has failed: 74
cancelled, 20 failure, 6 startup_failure. The current failure mode is
"Build casket-ssg" being cancelled at the job's 15-minute limit. On
2026-10-01 (run 36916760419) the step started at 19:55:14 and was cancelled
at 20:08:24.

The last run in which `cabal build` finished (26728514663, 2026-06-01) took
21m51s for that step, plus about 2 min for GHCup setup. actions/cache saves
~/.cabal and dist-newstyle only after the job succeeds, so the cache was
never written and each run restarted cold. The limit made the job
impossible to pass.

Raise the build job's timeout-minutes to 40. That covers one cold build with
headroom. After the first completed run the cache is warm and the step takes
seconds (burble's identical workflow: 3 s). The deploy job keeps its
15-minute limit. No `uses:` changed, so actions.lock is unaffected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 71eb0d03-9d65-4dc1-9e2e-587dceafa115
📥 Commits

Reviewing files that changed from the base of the PR and between 7973dcd and 691826b.

📒 Files selected for processing (1)
  • .github/workflows/casket-pages.yml

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (43)
  • GitHub Check: governance / Exemption ratchet
  • GitHub Check: governance / Language / package anti-pattern policy
  • GitHub Check: governance / Allowlist Preflight
  • GitHub Check: governance / Trusted-base reduction policy
  • GitHub Check: governance / Actions lockfile verify
  • GitHub Check: governance / Code quality + docs
  • GitHub Check: governance / Licence consistency
  • GitHub Check: governance / Security policy checks
  • GitHub Check: governance / Workflow security linter
  • GitHub Check: governance / Well-Known (RFC 9116 + RSR)
  • GitHub Check: governance / Guix packaging policy (Nix retired)
  • GitHub Check: governance / Check Workflow Staleness
  • GitHub Check: governance / Debt ratchet
  • GitHub Check: governance / Live Actions policy (credentialed advisory)
  • GitHub Check: scan / gitleaks
  • GitHub Check: scan / shell-secrets
  • GitHub Check: hypatia / Hypatia Neurosymbolic Analysis
  • GitHub Check: scan / rust-secrets
  • GitHub Check: Validate K9 contracts
  • GitHub Check: lint-workflows
  • GitHub Check: Mustfile Compliance
  • GitHub Check: Verify Minimal API Surface
  • GitHub Check: Verify Lockdown Permissions
  • GitHub Check: Verify Authorized Changes Only
  • GitHub Check: Groove manifest check
  • GitHub Check: Empty-linter (invisible characters)
  • GitHub Check: Enforce Branch Protection
  • GitHub Check: Verify Chroot Configuration
  • GitHub Check: Validate DEED manifests
  • GitHub Check: Verify Commit Signatures
  • GitHub Check: analyze (actions, none)
  • GitHub Check: semgrep-cloud-platform/scan
  • GitHub Check: Verify Chroot Configuration
  • GitHub Check: lint-workflows
  • GitHub Check: Verify Minimal API Surface
  • GitHub Check: Mustfile Compliance
  • GitHub Check: Verify Lockdown Permissions
  • GitHub Check: Verify Commit Signatures
  • GitHub Check: Verify Minimal API Surface
  • GitHub Check: Mustfile Compliance
  • GitHub Check: Verify Lockdown Permissions
  • GitHub Check: Verify Chroot Configuration
  • GitHub Check: Verify Commit Signatures
🔇 Additional comments (1)
.github/workflows/casket-pages.yml (1)

24-29: LGTM!


📝 Summary

Summary by CodeRabbit

  • Chores
    • Increased the automated site build time limit from 15 to 40 minutes, allowing more time for setup and builds that take longer to complete.
    • Clarified the recorded timings for clean and cached builds, including setup time and the effect of caching. These workflow updates do not change any public features or functionality.

Walkthrough

The Pages build job timeout increases from 15 to 40 minutes. Comments record reported cold-build and setup times, cache behaviour, and warm-build duration.

Changes

Pages build

Layer / File(s) Summary
Build timeout and timing
.github/workflows/casket-pages.yml
The build job timeout increases from 15 to 40 minutes. Comments describe cold-build, setup, cache, and warm-build timings.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~2 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 69182

The Pages build now has 40 minutes instead of 15, giving the reported cold-build and setup time room to finish. No concrete regression is evident; the first run will confirm the actual duration.

Architecture Summary

Architecture risk: 🔵 Low · up to 69182

The changed surface does not map to a changed system, dependency edge, entrypoint, or external dependency.

Changed systems: None identified.

Architecture concerns
No architecture-level concerns identified.

Review details

Before / after behavior

  • observed — Modified behavior in .github/workflows/casket-pages.yml: The build job timeout changes from 15 to 40 minutes; comments record the reported cold-build and setup times, why the cache was not saved on cancelled runs, and the warm-build duration.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the change: allowing the casket-ssg Pages build more time for a cold Cabal build.
Description check ✅ Passed The description explains the build timeout issue, the proposed increase to 40 minutes, and the verification performed. It is directly related to the change.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the build clock’s face,
Forty minutes give it space.
Cold runs, warm runs, notes in view,
Cache behaviour recorded too.
The pages hop along on time.

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

sonarqubecloud Bot commented Oct 6, 2026

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath merged commit e779630 into main Oct 6, 2026
56 of 58 checks passed
@coderabbitai

coderabbitai Bot commented Oct 6, 2026

Copy link
Copy Markdown

Add Carrot credits or activate Agent usage billing to use Autopilot

@hyperpolymath
hyperpolymath deleted the fix/redci-cleanup branch October 6, 2026 21:05
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.

1 participant