Skip to content

CI: build every pull request, and release on merge - #9

Merged
amazingalek merged 2 commits into
podulator:mainfrom
n64hub:ci/release-on-merge
Nov 4, 2026
Merged

amazingalek merged 2 commits into
podulator:mainfrom
n64hub:ci/release-on-merge

Conversation

@amazingalek

@amazingalek amazingalek commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

The build workflow runs for every pull request and every push to main now, and merging a PR that bumps version_string publishes that version's release. This PR bumps it to 1.6.0, so merging it releases 1.6.0 with #7 and #8's widescreen intro, menus, attract demos and HUD in it.

  • Pull requests build all three packages, so a PR that breaks the Windows, Linux or macOS build shows red before it merges.
  • A push to main whose version_string has no tag yet builds, tags that commit v<version> and publishes the release with all three packages, its notes generated from the PRs since the last tag. Nothing is tagged until all three have built, so a failed release can be re-run.
  • A push to main that leaves the version alone only builds, with its packages as the run's artifacts. That also keeps main's compiler caches warm, since a PR's run can only restore caches saved on main.
  • Pushing a v* tag still releases, and the Actions tab's run still builds any branch. The version input is gone: the version is version_string.
  • Main's runs queue instead of cancelling each other, so a release is never cut off halfway. A PR's newer push still cancels its older run.

The microcode secret still never reaches code from forks: GitHub gives a pull_request run from a fork no secrets. Such a run lays zeros where the audio microcode goes. It compiles, links and packages everything a release does, but plays no sound, so it uploads no artifacts. A PR from a branch in this repo gets the secret and real packages.

Tested: actionlint passes on the workflow. This PR's own run is a fork's, so it built all three with zeros for the microcode, skipped uploading and skipped the release. The release path ran on a fork of this repo with its own copy of the secret: pushing these two commits to its main built all three, tagged v1.6.0 and published (not drafted) a release with the macOS, Linux and Windows packages, in 45 minutes from cold caches. The macOS jobs had to be re-run twice during GitHub's Actions incident this afternoon, when no macOS runner picked them up. Nothing here changes what a build compiles: the only code change is the version.

Written by AI (Claude).

🤖 Generated with Claude Code

amazingalek and others added 2 commits November 4, 2026 17:23
The build ran only by hand from the Actions tab, and a release was a draft
made from a typed version, published by hand. Now it runs for every pull
request and every push to main, and a push to main whose version_string has
no tag yet (a PR that bumps it) tags that commit and publishes the release,
with notes from the PRs since the last one. A push that leaves the version
alone only builds, which also keeps main's compiler caches warm for the pull
requests after it. Pushing a v* tag still releases.

A pull request from a fork gets no secrets, so the microcode secret still
never reaches code from forks: such a build lays zeros where the audio
microcode goes. It compiles, links and packages all three as a release does,
plays no sound, and uploads nothing. Main's runs queue rather than cancel, so
a release is never cut off halfway.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@amazingalek
amazingalek marked this pull request as ready for review November 4, 2026 17:10
@amazingalek
amazingalek merged commit 257eb69 into podulator:main Nov 4, 2026
21 of 25 checks passed
@amazingalek
amazingalek deleted the ci/release-on-merge branch November 4, 2026 18:06
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