chore(fdroid): single-source fastlane metadata + reproducible-build prep #21

Merged
makiolaj merged 2 commits from chore/release-verification-process into main 2026-06-21 11:38:21 +00:00
Owner

Prep work to dual-publish Calendula to the official F-Droid repo alongside the self-hosted one — same signed binary in both channels (reproducible build + developer-signed via AllowedAPKSigningKeys), so users migrate with no reinstall.

What's here

  • Single source of truth for store metadata — listing text/icon/screenshots moved to fastlane/metadata/android/<locale>/ (git renames). Official F-Droid harvests it from source; the self-hosted repo regenerates its localized layout from the same tree via scripts/fastlane_to_fdroid_localized.sh (verified byte-identical to the previous metadata).
  • Changelog wiringscripts/sync_changelog_to_fastlane.sh writes the current CHANGELOG.md section into the fastlane changelog; the transform carries it across, so one changelog source feeds both channels. release.yaml runs the sync before building metadata; RELEASING.md updated.
  • Reproducible buildsvcsInfo { include = false } on the release build removes AGP's git-metadata file (version-control-info.textproto), the only thing that differed from the distributed APK. End-to-end check vs the published calendula_v2.7.1.apk: every app entry byte-identical; with the fix, 0 non-signature differences. Run-to-run and cross-JDK (17/21) reproducibility also confirmed.
  • docs/fdroid-official/ — draft fdroiddata recipe + submission notes.
  • README screenshots/icon repointed; ci.yaml skips the Android build on fastlane-only changes.

Verification

  • Metadata transform proven byte-identical to old self-hosted metadata; workflow metadata+changelog steps simulated end-to-end.
  • vcsInfo fix validated (file gone, build otherwise identical).
  • F-Droid buildserver confirmed to support the toolchain (Gradle 9.5.1 in the transparency log; AGP 9.2 in the gradle map; build-tools 36/android-37 installed on demand).

Safe to merge — does not cut a release

versionName is unchanged (2.7.1, tag exists), so detect is a no-op on merge. The vcsInfo fix takes effect on the next real release (bump → e.g. v2.7.2), which becomes the first version the official repo can reproduce; point the fdroiddata Builds entry there.

🤖 Generated with Claude Code

Prep work to dual-publish Calendula to the **official F-Droid repo** alongside the self-hosted one — same signed binary in both channels (reproducible build + developer-signed via `AllowedAPKSigningKeys`), so users migrate with no reinstall. ## What's here - **Single source of truth for store metadata** — listing text/icon/screenshots moved to `fastlane/metadata/android/<locale>/` (git renames). Official F-Droid harvests it from source; the self-hosted repo regenerates its localized layout from the same tree via `scripts/fastlane_to_fdroid_localized.sh` (verified **byte-identical** to the previous metadata). - **Changelog wiring** — `scripts/sync_changelog_to_fastlane.sh` writes the current `CHANGELOG.md` section into the fastlane changelog; the transform carries it across, so one changelog source feeds both channels. `release.yaml` runs the sync before building metadata; `RELEASING.md` updated. - **Reproducible builds** — `vcsInfo { include = false }` on the release build removes AGP's git-metadata file (`version-control-info.textproto`), the only thing that differed from the distributed APK. End-to-end check vs the published `calendula_v2.7.1.apk`: every app entry byte-identical; with the fix, 0 non-signature differences. Run-to-run and cross-JDK (17/21) reproducibility also confirmed. - **`docs/fdroid-official/`** — draft fdroiddata recipe + submission notes. - README screenshots/icon repointed; `ci.yaml` skips the Android build on fastlane-only changes. ## Verification - Metadata transform proven byte-identical to old self-hosted metadata; workflow metadata+changelog steps simulated end-to-end. - `vcsInfo` fix validated (file gone, build otherwise identical). - F-Droid buildserver confirmed to support the toolchain (Gradle 9.5.1 in the transparency log; AGP 9.2 in the gradle map; build-tools 36/android-37 installed on demand). ## Safe to merge — does **not** cut a release `versionName` is unchanged (2.7.1, tag exists), so `detect` is a no-op on merge. The `vcsInfo` fix takes effect on the next real release (bump → e.g. v2.7.2), which becomes the first version the official repo can reproduce; point the fdroiddata Builds entry there. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
makiolaj added 1 commit 2026-06-21 11:22:32 +00:00
chore(fdroid): single-source fastlane metadata + reproducible-build prep
Some checks failed
CI / ci (pull_request) Failing after 8s
f3f155b5ff
Make fastlane/metadata/android/ the single source of truth for store
listing metadata, consumed directly by the official F-Droid repo and
transformed into the self-hosted repo's localized layout at release time.

- Move fdroid-metadata/<appid>/<locale>/ -> fastlane/metadata/android/<locale>/
  (git-tracked renames: summary->short_description, description->full_description,
  + title.txt, images/icon.png, images/phoneScreenshots/); keep the app-level
  .yml control file for the self-hosted `fdroid update`.
- Add scripts/fastlane_to_fdroid_localized.sh (fastlane -> F-Droid localized,
  incl. changelogs) and scripts/sync_changelog_to_fastlane.sh (CHANGELOG.md ->
  fastlane changelog); verified byte-identical to the previous metadata.
- release.yaml: build self-hosted metadata from the fastlane tree and sync the
  per-version changelog before the transform (one changelog source for both
  channels).
- Disable AGP VCS-info embedding on release builds (vcsInfo { include = false })
  so builds reproduce byte-for-byte vs the distributed APK — the only file that
  otherwise differed (META-INF/version-control-info.textproto). Effective from
  the next release.
- Add docs/fdroid-official/ (draft fdroiddata recipe: reproducible build +
  AllowedAPKSigningKeys + Binaries + notes).
- Repoint README screenshots/icon, update docs/README + RELEASING, and skip the
  Android build on fastlane-only changes (ci.yaml).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
makiolaj added 1 commit 2026-06-21 11:32:32 +00:00
ci: make change-scope classification robust to divergent PR branches
All checks were successful
CI / ci (pull_request) Successful in 4m24s
c503199e06
The scope step shallow-fetched the base (`--depth=1`) and ran
`git diff origin/<base>...HEAD`. The three-dot diff needs the merge-base,
which a depth-1 tip doesn't contain once a branch has forked a few commits
back — git aborts with "no merge base" (exit 128) and the whole CI job
fails before lint/test/build ever run.

Fetch the base fully, resolve the merge-base explicitly, and diff from it.
If no common ancestor is found, default to code=true so the build still
runs rather than being wrongly skipped.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
makiolaj merged commit ed6b0fa89f into main 2026-06-21 11:38:21 +00:00
makiolaj deleted branch chore/release-verification-process 2026-06-21 11:38:21 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: makiolaj/calendula#21