From a2172dce12d777b229f74e8479db20fc6f3d6a55 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Thu, 27 Aug 2026 19:09:04 +0200 Subject: [PATCH] Google Play is live: README + production track (#244) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calendula is published on Google Play, so the pipeline and the docs stop treating it as pending. **README** - Google Play badge next to F-Droid/Obtainium, linking the store page. - Install table: the Play row goes from "Coming soon / —" to a real channel. - The "coming soon" section becomes a live one with the store link; the closed-testing "testers wanted" call drops out. The note that Play signs with Google's key (so switching channels needs an uninstall) stays, and the trailing shared-signing-key line now flags Play as the exception. **Play track** - Release uploads default to `production` instead of `internal` — in the lane (`fastlane/Fastfile`) and in the workflow default (`.gitea/workflows/release.yaml`). Merging a bumped versionName to main is already the human gate, so the manual Console promotion only added delay. - `docs/RELEASING.md` updated to match, including the escape hatches (`PLAY_TRACK=internal` to stage, `PLAY_RELEASE_STATUS=draft` to hold). Note: if a `PLAY_TRACK` repo variable is set on Gitea it still wins over the new default — needs checking there. No issue for this one. Co-authored-by: Jean-Luc Makiola Reviewed-on: https://codeberg.org/jlmakiola/calendula/pulls/244 --- .gitea/workflows/release.yaml | 11 +++++------ README.md | 22 ++++++++++------------ docs/RELEASING.md | 11 +++++++---- fastlane/Fastfile | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) 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

Get it on F-Droid   +Get it on Google PlayGet it on Obtainium   Support me on Ko-fi @@ -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