The private repository requires:
ANDROID_RELEASE_KEYSTORE_BASE64ANDROID_RELEASE_STORE_PASSWORDANDROID_RELEASE_KEY_ALIASANDROID_RELEASE_KEY_PASSWORD
Never place these values in Nix arguments, derivations, artifacts, logs, or repository files.
Open the Actions tab → Release → Run workflow. Fill in:
| Input | Example | Notes |
|---|---|---|
version_name |
0.1.0-rc.15 |
Valid semver; a hyphenated pre-release suffix marks the release automatically |
version_code |
15 |
Positive integer; must exceed every prior release |
release_notes |
(optional) | Appended before the auto-generated provenance table |
prerelease |
true |
Auto-detected from version_name when left at default |
The workflow resolves the latest master HEAD of github.com/imxade/nixship at build time. No file
changes or commits are required to start a release.
The release workflow:
- Validates inputs and checks that the tag
v<version_name>does not already exist. - Builds and tests Nix Ship on a native ARM64 hosted runner, exports that exact closure.
- Verifies/imports the closure on the Android builder.
- Patches
product.jsonin the CI workspace with the resolved revision, source hash, and version. - Builds the unsigned APK hermetically with Nix.
- Signs outside the Nix store, verifies the result, generates checksums.
- Creates the tag and GitHub release with all artifacts attached.
The CycloneDX SBOM records the embedded bootstrap and Nix Ship runtime, catalogs embedded JavaScript
dependencies, and merges all Maven coordinates pinned by nix/gradle.lock; generation fails if any
required embedded component is missing.
To manually resolve and test the latest control plane locally:
nix develop --command scripts/update-control-plane.shThis updates config/product.json with the latest revision/hash so local nix build commands use
the current source. This is for development only; releases do not use the locally committed values.
A stable tag such as v0.1.0 is rejected unless the exact commit already has two successful
Physical ARM64 acceptance workflow runs whose uploaded evidence identifies two different device
manufacturers.
After the workflow completes, verify:
- the release is prerelease/stable as expected;
- the APK signature certificate is unchanged from the prior release;
SHA256SUMSmatches downloaded assets;build-provenance.jsonnames the intended Nix Ship revision;- the APK installs over the preceding build without clearing data.