feat: offline flavor without sync or network access (#39)
This commit is contained in:
+14
-3
@@ -11,6 +11,12 @@ carries no APK assets.
|
||||
Codeberg is the canonical forge; Gitea is build infrastructure. See
|
||||
[Two forges, one repo](#two-forges-one-repo) for how the two are wired.
|
||||
|
||||
The app has two product flavors. **`full`** is Agendula as described everywhere
|
||||
in this document. **`offline`** (`de.jeanlucmakiola.agendula.offline`, issue
|
||||
#39) has no CalDAV sync, no push and no network permission; every release and
|
||||
beta builds and signs it too, but it goes **only to Codeberg**, as an extra
|
||||
`agendula-offline_v<version>.apk` asset. It is not on F-Droid or Play.
|
||||
|
||||
Before a stable release you can ship **betas** (`X.Y.Z-beta.N`) from the
|
||||
release branch. They go to **Codeberg only**, flagged as pre-releases; F-Droid
|
||||
and Play never see them. See [Cutting a beta](#cutting-a-beta).
|
||||
@@ -77,7 +83,8 @@ retries).
|
||||
committed `en-US` changelog.
|
||||
4. **Verify the release build on a real device** — the mandatory gate:
|
||||
```sh
|
||||
scripts/verify-release.sh
|
||||
scripts/verify-release.sh # full
|
||||
scripts/verify-release.sh offline # when the release touches the offline flavor
|
||||
```
|
||||
It builds the `releaseTest` variant (same R8 config as `release`, debug-signed
|
||||
with a `.releasetest` suffix so it installs alongside the real app) and resets
|
||||
@@ -193,7 +200,11 @@ Releases aren't git objects and don't sync with the push mirror in either
|
||||
direction, so the pipeline pushes the `vX.Y.Z` tag straight to Codeberg, creates
|
||||
the release over the Codeberg API, and attaches `agendula_v<version>.apk` + its
|
||||
`.sha256`. It's the same APK the F-Droid repo serves (same **app key**), so it
|
||||
adds no trust surface. The logic lives in `scripts/publish_codeberg_release.sh`,
|
||||
adds no trust surface. The offline flavor rides along as
|
||||
`agendula-offline_v<version>.apk` + `.sha256`; the full APK keeps its old name
|
||||
because Obtainium filters point at it.
|
||||
Obtainium users who see both offered can pin one with *Filter APKs by regular
|
||||
expression* (`^agendula_v` or `^agendula-offline_v`). The logic lives in `scripts/publish_codeberg_release.sh`,
|
||||
which `beta.yaml` uses too (with the pre-release flag set). It skips cleanly if `CODEBERG_RELEASE_TOKEN` is unset,
|
||||
but it is **not** `continue-on-error`: through 0.2.1–0.3.2 this step reported
|
||||
green while never once publishing, which is how a crash-fix release reached
|
||||
@@ -202,7 +213,7 @@ fails the release loudly.
|
||||
|
||||
### Google Play channel
|
||||
|
||||
**Artifact.** Play gets an **App Bundle** (`bundleRelease`), never the APK. It is
|
||||
**Artifact.** Play gets an **App Bundle** (`bundleFullRelease`), never the APK. It is
|
||||
built from the same source and signing config at the very end of the `release`
|
||||
job, `continue-on-error`, and handed to the `play` job as a workflow artifact
|
||||
(via a commit-pinned fork of `upload-artifact`/`download-artifact`; the official
|
||||
|
||||
@@ -48,5 +48,11 @@ off the official repo; keep that pattern if the recipe ever changes. Only a chan
|
||||
recipe itself (a new submodule, a build flag) needs an MR, pinned to a full
|
||||
commit hash, never a tag.
|
||||
|
||||
⚠️ **Product flavors (from 1.1.0).** The app now has `full` and `offline`
|
||||
flavors, and `gradle: - yes` would build both. The first build entry for a
|
||||
flavored version must say `gradle: - full`, and `AutoUpdateMode` copies the
|
||||
last entry forward, so it is a one-time recipe MR before that tag lands. The
|
||||
offline flavor is not submitted to F-Droid.
|
||||
|
||||
The recipe says `License: MIT`; `:dav` is vendored MPL-2.0 (`dav/PROVENANCE.md`).
|
||||
If the reviewer asks, change it to `MIT AND MPL-2.0`.
|
||||
|
||||
Reference in New Issue
Block a user