Skip to content

ci: cut a firmware pre-release on every merge to beta - #51

Merged
henols merged 1 commit into
betafrom
ci/beta-build-on-every-merge
Aug 7, 2026
Merged

ci: cut a firmware pre-release on every merge to beta#51
henols merged 1 commit into
betafrom
ci/beta-build-on-every-merge

Conversation

@henols

@henols henols commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Companion to henols/firestarter_app#48, which drops the same filter in the host repo for the same reason.

The bug

beta-build.yml carried a paths-ignore list:

'**.md'  '**.sh'  '.gitignore'  'docs/**'  'documents/**'  'images/**'  '.vscode/**'  '.editorconfig/**'

A merge touching only those paths bumped no version and published nothing, so the published beta stopped corresponding to the beta branch.

Why this is worse for firmware than for the host

The version is compiled in. FW_VERSION comes from include/version.h, which only changes when the bump step runs. A beta commit that skipped the bump would build firmware reporting the previous release's version — a binary that misreports which version it is, and a host-side version gate reading a number that doesn't identify the code it's talking to.

The host degrades to a package whose metadata is merely stale. The firmware ships the wrong answer inside the image.

No publish loop — settled by evidence

Not by reasoning about GITHUB_TOKEN semantics. The Apply automatic changes auto-commit writes include/version.h, which was never in the removed list. If a GITHUB_TOKEN push could trigger this workflow, commit 66c3101 on beta would have started a second run.

It started none. One Firestarter beta pre-release build on beta today, at 09:08:05.

Consequence worth stating

Docs-only merges to beta will now also cut a pre-release with the full four-asset set (uno, uno328pb, leonardo, py32f071). That is the intent — beta is a moving pre-release channel, not a curated one, and constant version bumping there is explicitly acceptable.

Resulting state across both repos

repo workflow push branches path filter
fw beta-build.yml [beta] none
app beta-release.yml [beta] none
fw build.yml ['**', '!beta'] yes (gates only; publishes on main)
app ci.yml ['**'] yes (publishes nothing)
app release.yml [main] yes (stable, operator-gated)

Both beta publishers now agree. actionlint clean.

🤖 Generated with Claude Code

Aligns beta-build.yml with firestarter_app's beta-release.yml, which dropped
the same filter for the same reason.

beta-build.yml carried a paths-ignore list ('**.md', '**.sh', '.gitignore',
'docs/**', 'documents/**', 'images/**', '.vscode/**', '.editorconfig/**'). A
merge touching only those paths bumped no version and published nothing, so
the published beta stopped corresponding to the beta branch.

This matters more here than in the host repo, because the version is COMPILED
IN. FW_VERSION comes from include/version.h, which only changes when the bump
runs. A beta commit that skipped the bump would build firmware reporting the
PREVIOUS release's version -- a binary that misreports which version it is,
and a host-side version gate reading a number that does not identify the code
it is talking to. The host at least degrades to a package whose metadata is
merely stale; the firmware ships the wrong answer inside the image.

No publish loop, settled by evidence rather than by reasoning about
GITHUB_TOKEN semantics: the "Apply automatic changes" auto-commit writes
include/version.h, which was NEVER in the removed list. If a GITHUB_TOKEN push
could trigger this workflow, commit 66c3101 on beta would have started a
second run. It started none.

Consequence worth stating: docs-only merges to beta will now also cut a
pre-release with the full four-asset set. That is the intent -- beta is a
moving pre-release channel, and constant version bumping there is explicitly
acceptable.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@henols
henols merged commit 21cb1a8 into beta Aug 7, 2026
3 checks 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