Skip to content

FOSS #5: build both flavors in CI, publish foss APK, F-Droid metadata + reproducible builds #465

Description

@Monkopedia

Part of #460. Depends on all of #461#464 landing (or at least the flavors + foss impls).

Goal

Build both flavors in CI, publish the foss APK on GitHub Releases, and get the app into F-Droid.

How F-Droid actually works (so the plan is right)

  • You don't upload an APK to F-Droid. You submit a metadata recipe to fdroiddata; F-Droid's buildserver builds the foss flavor from a tagged source commit and signs it with F-Droid's key. The recipe specifies the flavor and scrubs any non-FOSS traces.
  • Better path — reproducible builds: publish our own signed foss APK on GitHub Releases and add the Binaries: + AllowedAPKSigningKeys directives. F-Droid builds from source, compares byte-for-byte against our published APK, and if they match ships our APK with our signature. Same signature means users can move between the GitHub APK and the F-Droid APK with no uninstall. This requires deterministic builds (extra work) but is the gold standard. (F-Droid reproducible builds)

Work

  • Extend the release workflow (.github/workflows/release.yml) to build both flavors on tag: a signed google APK (current distribution) and a signed foss APK, both as GitHub Release assets. The release notes should distinguish the two.
  • Author the fdroiddata metadata recipe: Builds block targeting the foss flavor, correct versionName/versionCode, scanner-clean (no bundled binaries / non-FOSS deps).
  • Pursue the reproducible-builds path: make the foss release build deterministic, add Binaries: + AllowedAPKSigningKeys, and verify with diffoscope against our published APK.
  • Document the dual-distribution story in docs/ (which flavor ships where, how a user picks, signature implications).

Acceptance

  • Tagging a release produces both a google AAB and a signed foss APK as artifacts.
  • A documented, scanner-clean fdroiddata recipe builds the foss flavor from source.
  • Reproducible-build verification passes (or a tracked list of the remaining non-determinism blockers if it doesn't on first attempt).

Note

This ticket is mostly CI + packaging + external-metadata authoring; the actual F-Droid submission/merge into fdroiddata is a manual step the user performs (separate repo).

Metadata

Metadata

Assignees

No one assigned

    Labels

    backlogNice to havebuildBuild/CI/toolingdocumentationImprovements or additions to documentationin-progressAn agent is actively working on this issue

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions