From d6247d9dd372fbf24f781c1e99df56a1557a6b03 Mon Sep 17 00:00:00 2001 From: Felipe Benedet Date: Mon, 29 Jun 2026 11:35:32 -0500 Subject: [PATCH] docs: sync F-Droid recipe + document inclusion conventions Match fdroid/dev.debene.gopher.yml to the metadata submitted in fdroiddata!41663 (drop Description -> Fastlane, full-SHA commit, add AllowedAPKSigningKeys, keep AutoName) and capture the CI conventions in CLAUDE.md. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_0161Mws7B1zBdkQfu6VRhkWT --- CLAUDE.md | 9 ++++++++- fdroid/dev.debene.gopher.yml | 20 +++----------------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 8479db3..9419d2b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,7 +39,14 @@ This app is distributed via F-Droid, which builds it reproducibly from source. T - `android { dependenciesInfo { includeInApk = false; includeInBundle = false } }` in `app/build.gradle.kts` — omits the AGP dependency-metadata blob (IzzyOnDroid/F-Droid flag this). - `distributionSha256Sum` in `gradle/wrapper/gradle-wrapper.properties` — pins the Gradle distribution by checksum; update it alongside the `distributionUrl` whenever the Gradle version changes. -The F-Droid build recipe lives at `fdroid/dev.debene.gopher.yml` (copied into `fdroiddata` for submission). Its `Builds` entry pins `versionName`/`versionCode`/`commit` (a `v` tag) — keep those in sync with `defaultConfig` in `app/build.gradle.kts` and tag releases as `v` (e.g. `v2.0.2`). `UpdateCheckMode: Tags` + `AutoUpdateMode: Version v%v` means F-Droid auto-detects new `v*` tags. +The F-Droid build recipe lives at `fdroid/dev.debene.gopher.yml` (copied into `fdroiddata` for submission — keep this copy in sync with the metadata actually submitted there). Conventions the F-Droid CI enforces, learned the hard way during inclusion (MR [fdroiddata!41663](https://gitlab.com/fdroid/fdroiddata/-/merge_requests/41663)): + +- **No `Summary`/`Description` in the recipe** — they're pulled from the upstream Fastlane metadata (`fastlane/metadata/android/en-US/short_description.txt` / `full_description.txt`), which must exist on the release tag. +- **`Builds[].commit` must be a full 40-char commit SHA**, not a `v*` tag or branch (reviewer requirement). +- **`AutoName` must stay in the recipe** — `fdroid checkupdates` regenerates it from the manifest and that CI job fails on any resulting diff. (Only `Summary`/`Description` move to Fastlane; `AutoName` does not.) +- **`AllowedAPKSigningKeys`** is the signing cert's SHA-256 (`apksigner verify --print-certs `, colons stripped, lowercased) — it opts into Reproducible Builds so F-Droid verifies its build against our key instead of re-signing. One-way door; keep it. +- Keep `versionName`/`versionCode` in sync with `defaultConfig` in `app/build.gradle.kts` and tag releases as `v` (e.g. `v2.0.3`). `UpdateCheckMode: Tags` + `AutoUpdateMode: Version` auto-detects new `v*` tags. +- Validate locally before pushing: `fdroid rewritemeta ` (must produce no diff — canonical form), `fdroid lint `, and `check-jsonschema --schemafile /schemas/metadata.json `. Pin `ruamel.yaml<0.17.22` in the fdroidserver venv or `rewritemeta` reformats long values (e.g. wraps `AllowedAPKSigningKeys`) differently than CI. ## Architecture diff --git a/fdroid/dev.debene.gopher.yml b/fdroid/dev.debene.gopher.yml index 2c65ec4..ac209f4 100644 --- a/fdroid/dev.debene.gopher.yml +++ b/fdroid/dev.debene.gopher.yml @@ -7,22 +7,6 @@ SourceCode: https://github.com/felipedbene/deburrow IssueTracker: https://github.com/felipedbene/deburrow/issues AutoName: DeBurrow -Description: |- - A modern, native Android client for the Gopher protocol, built with Kotlin and - Jetpack Compose. - - Features: - - * Browse Gopher menus, read text files, and view images - * ANSI-color and word-wrapping text viewer (colored .ansi art renders in color) - * Veronica / type-7 search with a query prompt and tappable results - * Address-bar navigation, bookmarks, history, and search history - * Downloads for binary items, response caching, and TLS (gophers://) - * Opens gopher:// and gophers:// links from other apps - * Material 3 theming and an adaptive launcher icon - - No accounts, no trackers, no ads. A modern evolution of the 2010 J2ME client - "Pocket Gopher" by Felix Pleșoianu. RepoType: git Repo: https://github.com/felipedbene/deburrow.git @@ -30,11 +14,13 @@ Repo: https://github.com/felipedbene/deburrow.git Builds: - versionName: 2.0.3 versionCode: 3 - commit: v2.0.3 + commit: 946f6718c6a52d5c4fd3511a851a7a224f49d78d subdir: app gradle: - yes +AllowedAPKSigningKeys: 10bfdeb0c04cc2cefff9e6c011205901d236bd1b8dd334fa908a21e89343262f + AutoUpdateMode: Version UpdateCheckMode: Tags CurrentVersion: 2.0.3