Guides
Release Runbook
Komms release candidates are assembled by
release.yml on native GitHub runners. One
tag produces Windows MSI/NSIS installers, a universal macOS app/DMG, Linux
AppImage/DEB/RPM packages, an installable Android test APK, and a validated
Linux kultd container candidate. The workflow keeps the GitHub release in
draft state until a maintainer explicitly publishes it as a prerelease. That
same explicit action publishes the multi-architecture self-hosting image to
GHCR; a tag push alone never exposes an unqualified container.
The current user-facing release name is Komms 0.1 Alpha. Its technical
semantic version remains 0.1.0 across Cargo, Tauri, Android, and iOS, and its
release tag is v0.1.0.
That release is now public as a
GitHub prerelease,
with Windows MSI/NSIS, universal macOS DMG/app archive, Linux
AppImage/DEB/RPM, a debug-signed Android APK, and SHA256SUMS. Its public
komms-kultd package
provides Linux amd64/arm64 images under 0.1.0, 0.1-alpha, and alpha.
This makes artifacts available consistently; it does not turn the current alpha into an audited stable release. Platform signing, hands-on device testing, radio hardware, real-NAT/live-call qualification, and an independent security audit remain separate gates.
1. Prepare the source
Choose a semantic version and update every version surface:
workspace.package.versionin the rootCargo.toml;- the desktop crate and Tauri bundle versions;
- Android
versionNameand its monotonically increasingversionCode; and - iOS
CFBundleShortVersionStringand its monotonically increasing build number.
For the current version, verify the alignment with:
python3 scripts/check-release-version.py v0.1.0Run the complete local gate. Android is mandatory for a candidate that promises an APK:
KOMMS_REQUIRE_ANDROID_APP=1 scripts/local-release-matrix.shRecord the commit, the complete output, every external/deferred gate, and the hands-on smoke-test devices. A green compiler run is not a substitute for those records.
2. Configure optional signing
No signing material belongs in Git. Without secrets, the workflow still emits unsigned desktop packages and an automatically debug-signed APK suitable for direct testing.
For a stable Android signing identity, configure these GitHub Actions secrets:
KOMMS_ANDROID_KEYSTORE_BASE64: the release JKS/keystore encoded as one base64 value;KOMMS_ANDROID_KEYSTORE_PASSWORD;KOMMS_ANDROID_KEY_ALIAS; andKOMMS_ANDROID_KEY_PASSWORD.
Then set the repository variable KOMMS_ANDROID_SIGNING_ENABLED=1. When the
gate and all secrets are present, the workflow adds a signed release APK and
AAB. The debug APK is still included as an obvious test artifact. Preserve the
keystore and its passwords offline: losing them prevents compatible upgrades,
while disclosing them lets another party impersonate a release.
The macOS runner accepts Tauri's standard APPLE_CERTIFICATE,
APPLE_CERTIFICATE_PASSWORD, APPLE_SIGNING_IDENTITY, APPLE_ID,
APPLE_PASSWORD, and APPLE_TEAM_ID secrets. Set the repository variable
KOMMS_APPLE_SIGNING_ENABLED=1 only after the certificate inputs have been
validated. Without that explicit gate, stale or partial secrets are ignored and
the Alpha macOS package remains unsigned. Windows Authenticode signing is not
configured yet; add a reviewed certificate provider or Tauri signCommand
before describing Windows packages as signed.
3. Build a draft candidate
After explicit authorization for the remote operation, create and push an
annotated vMAJOR.MINOR.PATCH tag. A tag push runs the release workflow and
creates a draft prerelease. The same existing tag can be rebuilt manually from
Actions → release candidates → Run workflow with publish disabled.
The workflow refuses malformed tags, mismatched application versions, and
replacement of assets on an already-public release. It uploads each native
package and generates SHA256SUMS only after every platform build succeeds.
4. Qualify the artifacts
Before publication:
- compare the draft's source tag and commit with the recorded local gate;
- verify every download against
SHA256SUMS; - install the MSI/NSIS, DMG, AppImage or native Linux package, and APK on real supported systems;
- exercise create/unlock, pair, send/receive, backup/restore, lock, restart, and upgrade behavior; and
- record OS versions, architectures, signing status, failures, and all external gates in the release notes.
The debug APK is installable on Android 8.0 (API 26) or newer, but it uses a development certificate and is not store-ready. Android will reject an upgrade when the installed build was signed by a different key; uninstall the old test build only after exporting any data that must be retained.
5. Publish deliberately
Once the draft assets themselves pass qualification, manually run the workflow
for the same tag with publish enabled. That explicit run verifies that the
draft contains checksums, an APK, and every promised desktop package family,
then builds and publishes ghcr.io/andrigitdev/komms-kultd for Linux amd64 and
arm64 before publishing the existing qualified assets as a public GitHub
prerelease. The version tag is accompanied by 0.1-alpha and alpha
for this release, never latest. It does not rebuild or silently replace the
desktop/mobile artifacts that were tested.
The current komms-kultd package is public. A new package namespace may still
default to private: if the anonymous manifest check fails after its first push,
open that package's settings, change its visibility to Public, and rerun the
publication job. The job keeps the GitHub release in draft state until an
anonymous pull succeeds.
Do not mark an alpha prerelease as stable, claim that unsigned packages are signed, or promise an audited security level until the corresponding external gate has actually been completed.