ci: golden draft→publish release workflow#84
Merged
Conversation
Build artifacts and write notes into a draft release, then atomically flip to published so GitHub's releases.atom feed never surfaces an incomplete release. Notes come from RELEASE_NOTES.md (fails if the tag's section is missing); installers built+published via native electron-builder. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Our GitHub-releases RSS feed (polled by the AxiTools bot) gets tripped up when a release is published before its artifacts/changelog are attached — the bot announces an empty/partial release that never gets corrected. This brings TopStatsAIO in line with the proven axipulse/axibridge pattern so it only ever surfaces complete releases.
What
Adds
.github/workflows/release.yml, triggered onv*tag push:npm ci+npm test(jest)electron-builder --publish alwaysuploads installers,latest.ymland blockmaps straight into the draft (package.jsonalready setspublish.releaseType=draft)RELEASE_NOTES.md(fails loudly if missing, so notes are never empty/stale), set it on the release, then atomicallygh release edit --draft=false. Optional Discord webhook ping gated on aDISCORD_WEBHOOK_URLrepo variable.Because drafts don't appear in
releases.atom, the release becomes visible to the feed only once it's fully built and noted.Decisions (per discussion)
RELEASE_NOTES.md(deterministic, no secret) rather than regenerating via OpenAI in CI. Keep generating notes locally with your script before tagging.electron-builder --publish(autolatest.yml+ blockmap for the auto-updater). Installer filenames become electron-builder defaults (e.g.TopStatsAIO Setup 3.4.4.exe) instead of thescripts/build-win.jsrenamed scheme.build-linux.js's no-flatpak fallback).Verify before merge
Cut a throwaway pre-release tag on this branch (e.g.
v0.0.0-test) and confirm: a draft is created → artifacts upload → notes set → flips to published, andreleases.atomshows it only after publish. Delete the test release/tag afterward.🤖 Generated with Claude Code