Skip to content

ci(gui): build and attach installers from the release-please run (#189) - #198

Merged
PAMulligan merged 2 commits into
mainfrom
ci/gui-release-chain-189
Nov 8, 2026
Merged

PAMulligan merged 2 commits into
mainfrom
ci/gui-release-chain-189

Conversation

@PAMulligan

@PAMulligan PAMulligan commented Nov 8, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #189. Part of #186.

Problem

gui-release.yml was triggered by release: published, but release-please publishes the Release with GITHUB_TOKEN, and GitHub never starts a workflow for an event that token created. The workflow had zero runs; v2.1.2, v2.1.3 and v2.1.4 shipped without installers.

A first version of this PR (Aurelius's publish-then-attach shape) built and packaged on all three platforms in about 90 seconds each, then every upload failed with HTTP 422: Cannot upload assets to an immutable release: this repository has GitHub's immutable releases enabled (Aurelius does not). Nothing can be attached after publication, and no already-published release, v2.1.4 included, can be back-filled.

Fix: draft first

  • release-please-config.json: "draft": true and "force-tag-creation": true. release-please creates the tag immediately and the Release as a draft (without the eager tag, GitHub would create it only on publish, which release-please's docs say breaks its lookup of the previous release).
  • release-please.yml exposes release_created and tag_name and calls gui-release.yml in the same run with the tag, secrets: inherit.
  • gui-release.yml is a reusable workflow with three jobs: check refuses a tag whose release is not a draft (published releases are immutable here); build checks out the tagged commit, builds both macOS DMGs, the NSIS EXE and the AppImage, smoke-tests each, keeps them as workflow artifacts and attaches them to the draft with --clobber; publish runs only when every platform succeeded and flips the draft to published, listing the assets in the job summary. workflow_dispatch with a tag reruns the attach-and-publish for a draft that an earlier run left unpublished; without a tag it is a dry run that keeps the installers as artifacts. The release: published trigger is gone, since it could only ever fail on this repository.
  • docs/GUI.md and docs/RELEASING.md describe the chain and the recovery path.

Verification

  • All three files parse; the release-please schema accepts both options.
  • Dispatch from this branch with tag=v2.1.4 (a published release): the check job must fail with the "already published" message and skip the build.
  • Dispatch from this branch with no tag: a dry run on the three runners, installers kept as artifacts, nothing published.
  • The real draft-attach-publish path can only be exercised by the next release-please run after this merges: the next Release PR merge should produce a published Release carrying Flavian-<version>.AppImage, Flavian Setup <version>.exe and the two DMGs.

🤖 Generated with Claude Code

Paul Mulligan and others added 2 commits November 8, 2026 15:07
gui-release.yml ran on `release: published`, but release-please publishes
the Release with GITHUB_TOKEN and GitHub never starts a workflow for an
event that token created, so it had zero runs and v2.1.2 to v2.1.4 shipped
without installers.

Following Aurelius's release chain, gui-release.yml is now a reusable
workflow (`workflow_call` with the tag) that release-please.yml calls in
the same run once `release_created` is true. `workflow_dispatch` stays for
a manual build: with a tag it attaches the installers to that Release
(retry a platform, back-fill an older release); without one it is a dry
run that keeps the installers as workflow artifacts. `release: published`
stays for a Release published by hand.

While here: build exactly the tagged commit, produce both macOS DMGs
(--x64 --arm64), skip the signing-identity lookup, carry gui.yml's
Electron-binary guard and side-effects-cache setting, keep installers as
artifacts on every run, and document the chain in docs/GUI.md and
docs/RELEASING.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@PAMulligan

Copy link
Copy Markdown
Collaborator Author

Result of the manual dispatch against v2.1.4 (run 42518497713): all three platforms installed, built, passed the smoke test and packaged the installers in about 90 seconds each (macOS produced both DMGs). The only failing step was the upload: HTTP 422: Cannot upload assets to an immutable release. This repository has GitHub's immutable releases enabled, which Aurelius does not, so the Aurelius-style chain (publish, then attach) cannot work here, and no release that release-please has already published can be back-filled, v2.1.4 included. I am reworking the chain on this branch to the shape immutable releases allow: create the release as a draft, build and attach the installers, then publish. Converting to draft until that is pushed.

@PAMulligan
PAMulligan marked this pull request as draft November 8, 2026 20:15
@PAMulligan
PAMulligan marked this pull request as ready for review November 8, 2026 20:17
@PAMulligan
PAMulligan merged commit d19b590 into main Nov 8, 2026
19 of 25 checks passed
@PAMulligan
PAMulligan deleted the ci/gui-release-chain-189 branch November 8, 2026 20:18
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.

GUI release: installers never build because release-please publishes with GITHUB_TOKEN

1 participant