@@ -194,17 +194,21 @@ so nothing build-related needs to be committed.
194194- ** A ` v* ` tag** builds the APK * and attaches the raw ` app-release.apk ` to a
195195 GitHub Release* . This is the only binary users should download.
196196
197+ ** The git tag is the single source of truth for the version.** Do ** not** bump
198+ ` app.json ` /` package.json ` per release — ` app.config.js ` overrides the version at
199+ build time from env vars CI derives: ` versionName ` from the tag (` vX.Y.Z ` →
200+ ` X.Y.Z ` ) and ` versionCode ` from ` git rev-list --count HEAD ` (strictly increasing,
201+ so Android always accepts the update). ` app.json ` 's static version is only the
202+ local-dev fallback.
203+
197204** To cut a release (the user-facing APK):**
198205
199- 1 . On a ` release/vX.Y.Z ` branch, bump ` version ` in ** both** ` app.json ` and
200- ` package.json ` , and ` android.versionCode ` in ` app.json ` (versionCode must
201- strictly increase or Android refuses the update).
202- 2 . Open a PR into ` main ` , merge it, delete the branch.
203- 3 . ` git checkout main && git pull --ff-only ` , then tag the merge commit and
204- push the tag: ` git tag vX.Y.Z <merge-sha> && git push origin vX.Y.Z ` .
205- 4 . CI builds from the tagged commit and attaches ` app-release.apk ` to the new
206+ 1 . ` git checkout main && git pull --ff-only ` .
207+ 2 . Tag the head of ` main ` and push the tag — that is the whole release:
208+ ` git tag vX.Y.Z && git push origin vX.Y.Z ` . No branch, no PR, no version bump.
209+ 3 . CI builds from the tagged commit and attaches ` app-release.apk ` to the new
206210 Release. Confirm with ` gh release view vX.Y.Z ` .
207- 5 . ** Write the release notes — a Release with a bare APK and no body is not
211+ 4 . ** Write the release notes — a Release with a bare APK and no body is not
208212 done.** Use the standing template (see ` v0.1.1 ` ): install steps, the
209213 ** SHA-256 of the attached APK** (`Get-FileHash app-release.apk -Algorithm
210214 SHA256` on the CI-built artifact), the debug-signing caveat, and a one-line
0 commit comments