Skip to content

Always dispatch Deploy from Release - #3

Merged
fadeltd merged 1 commit into
mainfrom
fix/always-dispatch-deploy
Sep 24, 2026
Merged

fadeltd merged 1 commit into
mainfrom
fix/always-dispatch-deploy

Conversation

@fadeltd

@fadeltd fadeltd commented Sep 24, 2026

Copy link
Copy Markdown
Owner

The bug

v0.2.1 tagged correctly. Release reported success. The Deploy workflow had zero runs. The site sat on an old build while every signal said green — which is why you saw no change on devtools.fadeltd.dev.

Nothing failed to upload. Nothing was ever uploaded, because Deploy never started.

Cause

A conditional I added to support the optional PAT:

if: steps.cut.outputs.released == 'true' && env.HAS_PAT != 'true'

The reasoning was: without a PAT, dispatch Deploy explicitly; with one, the tag push triggers it natively. Once RELEASE_TOKEN was configured, HAS_PAT became true, that step was skipped by design, and the native tag trigger did not fire.

I verified each link in the chain before concluding: Deploy is registered and active, v0.2.1 exists on the remote, and deploy.yml is present at that tag (HTTP 200). All the preconditions were satisfied; the event simply never produced a run.

Fix

Release now dispatches Deploy unconditionally. Whether a tag push triggers a workflow depends on how GitHub attributes the pushing credential, and a release pipeline should not depend on that. Deploy is idempotent — same tag, same build — so a duplicate run is harmless, whereas a missed one is invisible.

deploy.yml keeps on: push: tags so a hand-pushed tag still deploys.

Already done manually

I dispatched Deploy for v0.2.1 to unblock you. It passed every step including the live smoke check, so deploy.yml itself is now validated end to end. The site is current: /id-gen serves ID Generator — devtools, the sitemap lists 7 URLs, and the GitHub link and collapsible sidebar are in the deployed bundle.

My error, twice

This is the second bug I have shipped in this release automation — the first was checking out the triggering sha instead of the branch tip. Both were in the paths that only execute on a real release, which is exactly where I had no coverage. The dual-path PAT logic was the root of this one, and I had flagged it as a liability before it broke without removing it. It is gone now.

Merging this cuts v0.2.2

Dry run: [Unreleased] has only ### Fixed → patch → v0.2.2. That merge is also the first genuine end-to-end test of the corrected chain: merge → tag → dispatch → deploy.

Verification

  • 330 tests pass; typecheck and build clean.
  • release.yml parses; zero HAS_PAT references remain.
  • Deploy proven working by the manual run above.

Releases have been tagging correctly and never deploying. v0.2.1 was tagged,
Release reported success, and the Deploy workflow had zero runs — the site sat
on an old build while every signal said green.

The cause was a conditional I added to support an optional PAT. Release only
started Deploy when RELEASE_TOKEN was absent, on the assumption that a
PAT-pushed tag would trigger `on: push: tags` natively. Once a PAT was
configured that assumption silently took over, and the native trigger did not
fire.

Release now dispatches Deploy unconditionally. Whether a tag push triggers a
workflow depends on how GitHub attributes the pushing credential, and that is
not something a release pipeline should depend on. Deploy is idempotent — it
builds and uploads the same tag — so a duplicate run is harmless, whereas a
missed one is invisible, which is precisely the failure this had.

The wider lesson, recorded in CONTRIBUTING: a deploy that silently does not
happen is indistinguishable from one that succeeded. Prefer the deterministic
path even when the implicit one should work.
@fadeltd
fadeltd merged commit add6f8b into main Sep 24, 2026
1 check passed
@fadeltd
fadeltd deleted the fix/always-dispatch-deploy branch September 24, 2026 08:39
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