Files
Calendarr-Android/FDROID.md
Guido Schmit dd347a07f1 chore: GPLv3 license + F-Droid packaging (metadata, recipe, guide)
- LICENSE: GNU GPLv3
- fastlane/metadata (de-DE + en-US): title, descriptions, changelog, icon —
  used by both the own F-Droid repo and the official listing
- fdroid/com.scarriffle.calendarr.yml: ready-to-submit fdroiddata build recipe
- FDROID.md: how to run the own repo (fdroid.scarriffle.com) and submit to
  official F-Droid, incl. the signing-key caveat

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 19:03:04 +02:00

3.3 KiB

Publishing Calendarr on F-Droid

Two independent channels — do both in parallel:

  • Own repo (live today): you build + sign the APK, generate a small catalog, host it at a URL; users add that URL in the F-Droid app.
  • Official F-Droid (~weeks to be accepted, then automatic): F-Droid builds + signs from source and lists it in the catalog every F-Droid user already has.

The app is GPLv3 and has no non-free dependencies (no Play Services / Firebase), so it is F-Droid-eligible. Store-listing metadata lives in fastlane/metadata/….

⚠️ Signatures differ between the two channels: your own repo serves APKs signed with your keystore; the official build is signed with F-Droid's key. A user can't seamlessly update from one to the other (reinstall once). To unify later, set up Reproducible Builds so F-Droid ships your signature.


A) Your own repo (fdroid.scarriffle.com)

Needs the fdroidserver tool + Android SDK build-tools (for aapt).

# 1. Install the tool (macOS)
brew install fdroidserver          # or: pipx install fdroidserver

# 2. Build a SIGNED release APK (uses keystore.properties; F-Droid repos serve
#    APKs, not AABs)
./gradlew assembleRelease
# → app/build/outputs/apk/release/app-release.apk

# 3. Create the repo (once). Generates config.yml + an index-signing key.
mkdir -p ~/calendarr-fdroid && cd ~/calendarr-fdroid
fdroid init

# 4. Drop the signed APK in and copy the store metadata
cp "/path/to/Calendarr Android/app/build/outputs/apk/release/app-release.apk" repo/
mkdir -p metadata
# copy the fastlane texts/icons so descriptions show in the client:
cp -r "/path/to/Calendarr Android/fastlane/metadata/android" metadata/com.scarriffle.calendarr

# 5. Generate/refresh the signed index
fdroid update -c --pretty

# 6. Upload the whole ~/calendarr-fdroid/repo directory to your webserver at:
#    https://fdroid.scarriffle.com/fdroid/repo

Users then open F-Droid → Settings → Repositories → +https://fdroid.scarriffle.com/fdroid/repo → Calendarr appears and auto-updates.

Each new release: bump versionCode/versionName in app/build.gradle.kts, ./gradlew assembleRelease, copy the new APK into repo/, fdroid update -c, re-upload. Keep the OLD apks in repo/ too (users on older versions still update).


B) Official F-Droid (fdroiddata)

Prereqs: the SourceCode repo in fdroid/com.scarriffle.calendarr.yml must be publicly clonable (make the Gitea repo public, or mirror to GitHub/GitLab and point Repo:/SourceCode: there), and a signed git tag v1.1.0 must exist (created for this release).

  1. Fork https://gitlab.com/fdroid/fdroiddata.
  2. Add our recipe as metadata/com.scarriffle.calendarr.yml (copy from fdroid/com.scarriffle.calendarr.yml in this repo).
  3. Optional local sanity check: fdroid lint com.scarriffle.calendarr and fdroid build -v -l com.scarriffle.calendarr.
  4. Open a Merge Request. F-Droid reviews, builds and publishes (this first review is the slow part — weeks). Afterwards, AutoUpdateMode picks up each new v<versionName> tag automatically.

Screenshots (both channels)

Add PNG/JPG screenshots to fastlane/metadata/android/en-US/images/phoneScreenshots/ (and de-DE/…), named 1.png, 2.png, … They then show on the F-Droid listing.