Skip to content

ci(LINCHPIN-5650): Stop cancelling Pages deploys and silence the preview 404 - #11

Merged
aaronware merged 2 commits into
mainfrom
issue/LINCHPIN-5650
Sep 21, 2026
Merged

aaronware merged 2 commits into
mainfrom
issue/LINCHPIN-5650

Conversation

@aaronware

Copy link
Copy Markdown
Contributor

Two faults on the published Storybook. Neither breaks a story — all 24 render on the live site with no error overlay, which I verified before changing anything — but both surface as errors.

ClickUp: LINCHPIN-5650 — a subtask of LINCHPIN-5639.

1. Cancelled runs abandon Pages deployments

Merging #7, #8, #9 and the 0.2.1 release PR inside five minutes produced three cancelled runs and this:

Deployment Commit State
6572553280 74c108b (#10) in_progress, still hung
6572501867 93bafa3 (#8) error
6572461154 59fe283 (#7) error
6571293647 a7dc5ea (#6) success

The build was never the problem — it finished in 38 seconds. The Deploy job is what hangs, because cancel-in-progress: true kills a run after it has opened a Pages deployment. The deployment is abandoned, ends in error, and the next run contends with it.

That setting is right for a build and wrong for a deploy, which is why GitHub's own Pages workflow ships it as false with a comment saying exactly this:

Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.

Nothing is wasted by the change. Runs queued behind an in-flight deployment still collapse to the latest, so intermediate commits are skipped rather than deployed one after another. Only the cancellation goes away.

2. Every story logged a 404

The manager carries <link rel="icon" type="image/svg+xml" href="./favicon.svg" /> and /ui/favicon.svg serves 200. iframe.html — where every story actually renders — carried no icon link, so the browser fell back to the origin root:

GET https://linchpin.github.io/favicon.ico → 404

On a project Pages site that root belongs to the org, not to us, so it answers 404 forever. .storybook/preview-head.html puts the same relative link in the preview head.

3. The deploy job had no timeout

It inherited the six-hour default while the build beside it was capped at fifteen minutes. This matters more after change 1: under the old setting a stuck deploy was at least shoved aside by the next push; under the new one later runs queue behind it, so a hang has to fail on its own or nothing deploys. Ten minutes is generous for uploading an artifact that is already built.

Verification

Built the site and served it locally:

Deployed today This branch
Console on a story page 1 error (favicon 404) 0 errors, 0 warnings
iframe.html icon link absent present
Stories rendering 24/24 24/24, all with the icon link

The 24/24 figure on the deployed column is from sweeping the live site before making any change — worth stating, because it means the story fixes from earlier today did deploy correctly and this PR is not repairing those.

Before this can take effect

Deployment 6572553280 is still hung. With cancel-in-progress: false a stuck deployment blocks the queue rather than being replaced, so that run needs cancelling before a new deploy can land. The timeout in change 3 prevents a recurrence but cannot retrospectively free this one.

…w a favicon

Two faults on the published Storybook, neither of which breaks a story - all
24 render on the live site - and both of which show up as errors.

Merging four PRs in five minutes left two Pages deployments in error and a
third hung: 6572461154 and 6572501867 both failed, and 6572553280 sat
in_progress for minutes on a build that had finished in 38 seconds. The
cause is cancel-in-progress on a deploy. A run cancelled after it has opened
a Pages deployment abandons it, and the next run then contends with the
wreckage.

That setting is right for a build and wrong for a deploy, which is why
GitHub's own Pages workflow ships it as false with a comment saying so.
Nothing is wasted by the change: runs queued behind an in-flight deployment
still collapse to the latest, so intermediate commits are skipped rather
than deployed one after another. Only the cancellation goes away.

Separately, every story on the deployed site logged a 404. The manager
carries an icon link and iframe.html does not, so the browser falls back to
asking the origin root for favicon.ico - and on a project Pages site that
root belongs to the organisation, not to us, so it answers 404 forever.
preview-head.html puts the same relative link in the preview head.

Verified by building and serving the output: the fixed build logs zero
console errors and zero warnings on a story page, against one error on every
story of the deployed one, and all 24 stories still render with the icon
link present.
The deploy job had none, so it inherited the six hour default while the
build beside it was capped at fifteen minutes. Deployment 6572553280 is
sitting in_progress well past the 38 seconds its build took, and nothing
would have stopped it holding the lane until tomorrow.

This matters more now the concurrency group no longer cancels. Under the old
setting a stuck deploy was at least shoved aside by the next push; under the
new one later runs queue behind it, so a hang has to fail on its own or
nothing deploys at all. Ten minutes is generous for a job whose work is
uploading an artifact GitHub has already built.
@aaronware
aaronware merged commit 755e94b into main Sep 21, 2026
1 check passed
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