diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 46fe5fc..b250ba6 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -551,12 +551,11 @@ jobs: env: VERSION: ${{ needs.detect.outputs.version }} VERSION_CODE: ${{ needs.detect.outputs.version_code }} - # Where the bundle lands. `internal` by default so a release reaches - # testers rather than the public, and promotion to production stays a - # deliberate human action in the Play Console — the same posture as - # holding UI releases for on-device review. Override with the PLAY_TRACK - # repo variable once the flow is trusted. - PLAY_TRACK: ${{ vars.PLAY_TRACK || 'internal' }} + # Where the bundle lands. `production` — the release itself is already the + # gate (a bumped versionName only reaches main after on-device review), so + # a second manual promotion in the Play Console bought nothing but delay. + # Override with the PLAY_TRACK repo variable to stage a release instead. + PLAY_TRACK: ${{ vars.PLAY_TRACK || 'production' }} PLAY_RELEASE_STATUS: ${{ vars.PLAY_RELEASE_STATUS || 'completed' }} # Set PLAY_DRY_RUN=true to validate the edit against the API and discard # it instead of committing — used to rehearse the first upload. diff --git a/README.md b/README.md index 7cf96f7..0dbc7b6 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Reads, writes, and reminds — on top of the system calendar, with zero network
+
+
@@ -86,7 +88,7 @@ Pick whichever channel you already use — they all install the same app:
| [Official F-Droid](#f-droid-recommended) | On F-Droid's build schedule | Recommended; no extra setup |
| [Self-hosted F-Droid repo](#self-hosted-f-droid-repo-fastest-updates) | Minutes after a release | Fastest; needs the repo added once |
| [Codeberg release / Obtainium](#codeberg-release--obtainium) | Per release | Plain APK download, or automated by Obtainium |
-| [Google Play](#google-play-coming-soon) | — | Coming soon |
+| [Google Play](#google-play) | Per release | Signed with Google's key — see below |
| [Build from source](#build-from-source) | Whenever you build | Full control |
### F-Droid (recommended)
@@ -131,18 +133,14 @@ or do it by hand: *Add App* → paste `https://codeberg.org/jlmakiola/calendula`
→ *Add*. Either way, Obtainium tracks the releases and prompts you when a new
one appears.
-### Google Play (coming soon)
+### Google Play
-Calendula is on its way to Google Play as an additional channel. It isn't live
-yet — this section gets a link once it is. Play builds will be signed with
-Google's key rather than mine, so switching between Play and any other channel
-will require an uninstall.
+Calendula is live on Google Play:
+**[play.google.com/store/apps/details?id=de.jeanlucmakiola.calendula](https://play.google.com/store/apps/details?id=de.jeanlucmakiola.calendula)**.
-> **Testers wanted.** Play requires a round of closed testing before the app can
-> go public, and I'm still looking for testers. If you'd like to help, email
-> **[business@jeanlucmakiola.de](mailto:business@jeanlucmakiola.de)** with the
-> Google account address you want to use — that address is what I need to add you
-> to the closed test.
+Play builds are signed with Google's key rather than mine, so switching between
+Play and any other channel requires an uninstall (and with it, a fresh start for
+app settings — your events live in the system calendar and are unaffected).
### Build from source
@@ -151,7 +149,7 @@ The build is a plain Gradle build with no proprietary dependencies — see
Official F-Droid, the self-hosted repo, and the Codeberg releases all share
the same signing key, so you can switch freely between them without
-reinstalling.
+reinstalling. Google Play is the exception — see above.
## 📚 Documentation
diff --git a/docs/RELEASING.md b/docs/RELEASING.md
index 19537f7..ebb5874 100644
--- a/docs/RELEASING.md
+++ b/docs/RELEASING.md
@@ -172,9 +172,12 @@ F-Droid but not Play:
Until those are fixed, Play's graphics are managed by hand in the console. Then
pass `images:true` to the `listing` lane.
-**Track.** Uploads go to `internal` by default; promotion to production stays a
-manual action in the Play Console, matching the rule that UI releases wait for
-on-device review. Override with the `PLAY_TRACK` repo variable.
+**Track.** Uploads go straight to `production` at a full rollout
+(`PLAY_RELEASE_STATUS=completed`). The merge to `main` is already the human
+gate — a release only gets there after on-device review — so a second manual
+promotion in the Play Console added delay without adding a decision. Set the
+`PLAY_TRACK` repo variable (e.g. `internal`) to stage a release instead, or
+`PLAY_RELEASE_STATUS=draft` to hold it unpublished.
### Manual re-sign / recovery
@@ -233,7 +236,7 @@ Two consequences worth remembering:
| Variable | Default | Purpose |
| --- | --- | --- |
-| `PLAY_TRACK` | `internal` | Play track the bundle is uploaded to. |
+| `PLAY_TRACK` | `production` | Play track the bundle is uploaded to. Set to `internal`/`alpha`/`beta` to stage instead. |
| `PLAY_RELEASE_STATUS` | `completed` | `completed`, `draft`, `inProgress` or `halted`. |
| `PLAY_DRY_RUN` | `false` | `true` validates the Play edit against the API and discards it — use to rehearse. |
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
index 459651d..afdde8a 100644
--- a/fastlane/Fastfile
+++ b/fastlane/Fastfile
@@ -29,7 +29,7 @@ platform :android do
supply(
aab: aab,
- track: options[:track] || "internal",
+ track: options[:track] || "production",
release_status: options[:release_status] || "completed",
# The APK belongs to F-Droid and the Codeberg download; Play only ever