feat(release): production signing in build.yml + F-Droid metadata filled
- build.yml: use production keystore (KEYSTORE_BASE64) on tag pushes, fall back to debug key for PRs/branch builds — build.gradle already reads RELEASE_STORE_FILE env var so no Gradle changes needed - distribution/fdroid-submission/metadata.yml: filled AllowedAPKSigningKeys with actual SHA-256 fingerprint, commit tag updated to v0.3.1, version bumped to 0.3.1 - app.json: bump version 0.2.3 → 0.3.1, versionCode 1 → 2 - Add eas.json + EAS README for iOS App Store builds - Add fastlane/metadata/android for Play Store / F-Droid graphics - Add distribution docs: applestore, fdroid, market, playstore, security, threat-model, opencode-site-deploy Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
141
docs/fdroid.md
Normal file
141
docs/fdroid.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# F-Droid + IzzyOnDroid — opencode-mobile
|
||||
|
||||
Operational doc for distributing `ai.opencode.mobile` via F-Droid (mainline)
|
||||
and IzzyOnDroid under VIBE TECHNOLOGIES, LLC.
|
||||
|
||||
This is the OSS-first distribution track, complementary to Google Play.
|
||||
All channels share the same package id and signing key.
|
||||
|
||||
---
|
||||
|
||||
## Account state
|
||||
|
||||
Unlike Google Play, F-Droid and IzzyOnDroid require no developer account.
|
||||
|
||||
| Channel | Account needed | Status |
|
||||
|---------|---------------|--------|
|
||||
| F-Droid mainline | None — community-built; MR to fdroiddata | Submission packet ready; MR not yet filed |
|
||||
| IzzyOnDroid | Codeberg account for filing issue | Submission packet ready; issue not yet filed |
|
||||
|
||||
---
|
||||
|
||||
## What's done (this session)
|
||||
|
||||
1. Fastlane metadata scaffold created: `fastlane/metadata/android/en-US/`
|
||||
- `title.txt`, `short_description.txt`, `full_description.txt` — F-Droid-audience copy
|
||||
- `changelogs/1.txt` — initial release notes for versionCode 1
|
||||
- `images/icon.png`, `images/featureGraphic.png` — copied from play-graphics
|
||||
- `images/phoneScreenshots/{01,02,03}.png` — copied from play-graphics
|
||||
|
||||
2. F-Droid mainline submission packet: `distribution/fdroid-submission/`
|
||||
- `metadata.yml` — ready to PR into fdroiddata (placeholders for release tag + key fingerprint)
|
||||
- `SUBMISSION-CHECKLIST.md` — full step-by-step MR filing guide
|
||||
- `REPRODUCIBLE-BUILD-NOTES.md` — reproducibility audit (2 issues found, documented)
|
||||
- `SIZE-OPTIMIZATION.md` — APK size analysis + ABI splits + FCM flavor doc
|
||||
|
||||
3. IzzyOnDroid submission packet: `distribution/izzyondroid-submission/`
|
||||
- `INCLUSION-REQUEST.md` — ready-to-paste Codeberg issue body (1 placeholder)
|
||||
- `SUBMISSION-CHECKLIST.md` — step-by-step filing guide
|
||||
|
||||
4. Signing key fingerprint documented: `distribution/SIGNING-KEY-FINGERPRINTS.md`
|
||||
- SHA-256: `0C:25:9D:94:...:DF:6A:A0:99` (full value in file)
|
||||
- Pasted into IzzyOnDroid request; F-Droid metadata has placeholder pending
|
||||
lowercase-no-colons conversion and confirmation
|
||||
|
||||
5. Sentry opt-in gate already implemented (opt-in, default OFF) — `Tracking`
|
||||
anti-feature is avoided.
|
||||
|
||||
6. `expo-notifications` audited — local-only usage confirmed; no FCM push tokens
|
||||
retrieved. NonFreeNet anti-feature acknowledged; NonFreeDep not triggered.
|
||||
|
||||
---
|
||||
|
||||
## What's left to do
|
||||
|
||||
| # | Item | Blocking? | Owner |
|
||||
|---|------|-----------|-------|
|
||||
| 1 | Add `.kotlin/` to `android/.gitignore` + untrack log files | F-Droid mainline | Agent (trivial) |
|
||||
| 2 | Attach signed universal APK to first GitHub release tag | Both channels | Agent / CI |
|
||||
| 3 | File IzzyOnDroid inclusion issue on Codeberg | IzzyOnDroid | User or Agent |
|
||||
| 4 | Update `metadata.yml` with actual release tag + key fingerprint | F-Droid mainline | Agent |
|
||||
| 5 | File MR against fdroiddata | F-Droid mainline | User or Agent |
|
||||
| 6 | Run `expo prebuild` twice, compare output (reproducibility check) | F-Droid mainline | Agent |
|
||||
| 7 | Measure arm64-v8a APK size with bundletool | Nice-to-have | Agent |
|
||||
|
||||
Item 1 (kotlin log untrack) should be done before the F-Droid MR.
|
||||
Items 3 and 5 should be done after the first Play Store release is live.
|
||||
|
||||
---
|
||||
|
||||
## Submission process
|
||||
|
||||
### IzzyOnDroid (fastest — 1–3 days)
|
||||
|
||||
1. Attach signed universal APK to a GitHub release tag.
|
||||
2. File Codeberg issue using `distribution/izzyondroid-submission/INCLUSION-REQUEST.md`.
|
||||
3. Full guide: `distribution/izzyondroid-submission/SUBMISSION-CHECKLIST.md`.
|
||||
|
||||
### F-Droid mainline (4–12 weeks)
|
||||
|
||||
1. Complete prerequisites (see `distribution/fdroid-submission/SUBMISSION-CHECKLIST.md`).
|
||||
2. Fork fdroiddata on GitLab.
|
||||
3. Create `metadata/ai.opencode.mobile.yml` from `distribution/fdroid-submission/metadata.yml`.
|
||||
4. File MR. Respond to reviewer feedback.
|
||||
5. Full guide: `distribution/fdroid-submission/SUBMISSION-CHECKLIST.md`.
|
||||
|
||||
---
|
||||
|
||||
## Timeline
|
||||
|
||||
| Milestone | When |
|
||||
|-----------|------|
|
||||
| F-Droid + IzzyOnDroid submission packets ready | 2026-05-24 (done) |
|
||||
| First Google Play Internal release | After identity verification |
|
||||
| IzzyOnDroid issue filed | After first signed APK on GitHub releases |
|
||||
| IzzyOnDroid inclusion | 1–3 days after issue |
|
||||
| F-Droid MR filed | After first Play release + reproducibility fixes |
|
||||
| F-Droid mainline acceptance | 4–12 weeks after MR |
|
||||
| IzzyOnDroid auto-delist | After F-Droid mainline acceptance |
|
||||
|
||||
---
|
||||
|
||||
## Files in this repo
|
||||
|
||||
```
|
||||
fastlane/
|
||||
└── metadata/android/en-US/ # F-Droid auto-pull metadata
|
||||
├── title.txt
|
||||
├── short_description.txt
|
||||
├── full_description.txt
|
||||
├── changelogs/1.txt
|
||||
└── images/
|
||||
├── icon.png
|
||||
├── featureGraphic.png
|
||||
└── phoneScreenshots/{01,02,03}.png
|
||||
|
||||
distribution/
|
||||
├── SIGNING-KEY-FINGERPRINTS.md # SHA-256 key fingerprint reference
|
||||
├── fdroid-submission/
|
||||
│ ├── metadata.yml # fdroiddata MR content
|
||||
│ ├── SUBMISSION-CHECKLIST.md # F-Droid MR step-by-step
|
||||
│ ├── REPRODUCIBLE-BUILD-NOTES.md # Reproducibility audit
|
||||
│ └── SIZE-OPTIMIZATION.md # APK size + ABI splits doc
|
||||
└── izzyondroid-submission/
|
||||
├── INCLUSION-REQUEST.md # Codeberg issue body
|
||||
└── SUBMISSION-CHECKLIST.md # IzzyOnDroid step-by-step
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Reference
|
||||
|
||||
- F-Droid inclusion policy: https://f-droid.org/en/docs/Inclusion_Policy/
|
||||
- F-Droid metadata format: https://f-droid.org/en/docs/Build_Metadata_Reference/
|
||||
- F-Droid reproducible builds: https://f-droid.org/en/docs/Reproducible_Builds/
|
||||
- fdroiddata (where MR goes): https://gitlab.com/fdroid/fdroiddata
|
||||
- IzzyOnDroid policy: https://apt.izzysoft.de/fdroid/index/info
|
||||
- IzzyOnDroid issues (where inclusion request goes): https://codeberg.org/IzzyOnDroid/repodata/issues
|
||||
- App on IzzyOnDroid (after acceptance): https://apt.izzysoft.de/fdroid/index/apk/ai.opencode.mobile
|
||||
- Signing key fingerprints: `distribution/SIGNING-KEY-FINGERPRINTS.md`
|
||||
- Strategy + full channel overview: `distribution/strategy.md`
|
||||
- Play Store operational doc: `docs/playstore.md`
|
||||
Reference in New Issue
Block a user