Skip to content

feat(release): add a dev channel and ship a .sha256 with every release - #186

Merged
rubenvdlinde merged 1 commit into
mainfrom
feat/development-channel
Aug 6, 2026
Merged

feat(release): add a dev channel and ship a .sha256 with every release#186
rubenvdlinde merged 1 commit into
mainfrom
feat/development-channel

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Lets work on development be installed without shipping it to everyone.

channel input, default beta

All 17 existing callers keep their exact behaviour — the input is additive with a beta default. With channel: dev the job packages identically but publishes a GitHub prerelease only and skips the app-store upload, which is the whole distinction between the channels.

The channel goes into the prerelease identifier (0.5.71-dev.20260806…), so a dev build sorts below the beta of the same patch and its origin is obvious in a version list.

Sharing one packaging path is deliberate: the rsync excludes, vendor verification and version injection into the packaged info.xml are exactly the parts that must not drift, because a dev build packaged differently from a beta build tests the wrong thing.

.sha256 on every release

The App Versions app looks for a .tar.gz.sha256 sibling and verifies against it; without one it falls back to trust-on-first-use. No Conduction app published one until now.

It holds the bare digest rather than the digest filename line sha256sum prints, because the archive is renamed on upload and that line would name the build file instead of the asset.

Why

App Versions reads a repo's releases straight from the forge API (/repos/{owner}/{repo}/releases) and installs from the .tar.gz. Its trusted-source allowlist already defaults to github:ConductionNL/*. So a prerelease is all that's needed to make a development build installable — the mechanism was already there, the artifact was not.

Two additions to the shared packaging workflow, both driven by wanting to
install work from development without shipping it to everyone.

A `channel` input, defaulting to beta, so all seventeen existing callers
behave exactly as before. With `channel: dev` the job packages the same
way but publishes a GitHub prerelease only and skips the app store
upload, which is the entire distinction between the two. The channel goes
into the prerelease identifier (0.5.71-dev.20260806…), so a dev build
sorts below the beta of the same patch and its origin is obvious in a
version list.

Sharing one packaging path is deliberate. The rsync excludes, the vendor
verification and the version injection into the packaged info.xml are the
parts that must not drift between channels, because a dev build that is
packaged differently from a beta build tests the wrong thing.

Every release now also carries a .tar.gz.sha256 sibling. The App Versions
app looks for one next to the archive and verifies against it; without it
the installer falls back to trusting whatever it downloaded the first
time. No Conduction app published one until now. It holds the bare digest
rather than the "digest  filename" line sha256sum prints, because the
archive is renamed on upload and the line would name the build file
instead of the asset.
@rubenvdlinde
rubenvdlinde merged commit 3438839 into main Aug 6, 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