Skip to content

F-Droid submission prep: fastlane metadata, build recipe, and FOSS (Steam-less) flavor#260

Draft
gantoine wants to merge 18 commits into
mainfrom
posthog-code/fdroid-metadata
Draft

F-Droid submission prep: fastlane metadata, build recipe, and FOSS (Steam-less) flavor#260
gantoine wants to merge 18 commits into
mainfrom
posthog-code/fdroid-metadata

Conversation

@gantoine

@gantoine gantoine commented Jul 5, 2026

Copy link
Copy Markdown
Member

Prepares Argosy Launcher for submission to F-Droid. Groups: media metadata in the app repo, a ready-to-copy fdroiddata build recipe, and a foss product flavor that builds without the prebuilt Steam dependency F-Droid rejects.

What's included

1. Fastlane media metadata (fastlane/metadata/android/en-US/)

  • title, short_description (≤80), full_description (allowed-HTML subset), changelogs.
  • icon.png (512×512, from argosy_icon.svg), generated featureGraphic.png (1024×500), and the 8 README screenshots.

2. fdroiddata build recipe (fdroid/)

  • com.nendo.argosy.yml — recipe to copy into metadata/com.nendo.argosy.yml on GitLab. ABI-split blocks matching the versionCode override, submodules: true, VercodeOperation, stable-tag autoupdate, scandelete: [libs/maven], AntiFeatures: NonFreeNet. Targets the eventual v2.0.0 stable tag (versionCode is a documented placeholder to finalize at tag time).
  • README.md — research findings, blocker analysis, and the GitLab submission workflow from fdroiddata's CONTRIBUTING.
  • RFP.md — a filled-out Request For Packaging (optional alternative to the MR).

3. FOSS product flavor (full / foss)

  • full (default): unchanged Steam build for GitHub releases; the six JavaSteam-backed classes move to app/src/full/.
  • foss: no Steam library. No-op stubs in app/src/foss/ reproduce the public API shared code consumes plus the shared value types (SteamModels.kt). The ~30 non-library Steam files stay in src/main. Removes the prebuilt libs/maven jars and the non-free depot downloader from the F-Droid artifact.

This branch does not change versionCode/versionName — the version is owned by the 2.0 release line (see below).

Why the FOSS flavor

Steam integration depends on prebuilt jars in libs/maven (a non-Maven-Central MIT fork of JavaSteam that also fails to build on JitPack). F-Droid's scanner rejects committed binaries regardless of license, so the F-Droid build ships without Steam via foss.

Verification

  • kspFossDebugKotlin (Hilt DI graph) and Kotlin frontend type-checking of the full foss source set both pass with 0 errors.
  • A full assembleFossRelease was not run to completion locally: this app's clean Compose compile is pathologically slow (StabilityInferencer), on the order of the ~2–2.5h the release-line CI builds already take. It terminates; it's not the flavor change. The foss and full Compose workloads are effectively identical.
  • The Steam data layer is byte-identical between main and the 2.0 branch (ui-redesign-beta), so the stubs match 2.0's call sites too.

Confirmed during research

  • sigil submodule: pure C, MPL-2.0, builds from source via CMake/NDK — no Rust, no blobs.
  • License: GPL-3.0-only. api.argosy.dev social layer → NonFreeNet (titledb/cheats are build-secret-gated and inert in a source build).

Folding into 2.0 (how this reaches F-Droid)

This PR targets main; the F-Droid work is folded into the 2.0 line (ui-redesign-beta, which already contains main). After merge:

  1. Forward-merge main into ui-redesign-beta, then tag/push v2.0.0 off it (the tag must contain fastlane/ + the foss flavor).
  2. Set the recipe's placeholder versionCode (1000302/2000302) to <abi>*1_000_000 + <2.0.0 base versionCode>, and add changelogs/<2.0.0 codes>.txt.
  3. On a GitLab fdroiddata fork, copy fdroid/com.nendo.argosy.ymlmetadata/com.nendo.argosy.yml, run fdroid lint / fdroid build, then open the "New App: com.nendo.argosy" MR.

Created with PostHog Code

gantoine added 6 commits July 5, 2026 08:42
…creenshots)

Add F-Droid/fastlane media metadata under fastlane/metadata/android/en-US/
so descriptions, graphics, and screenshots stay under developer control and
are pulled automatically on release, per the F-Droid submission guide.

- title, short_description (<=80), full_description (allowed-HTML subset)
- changelogs for base and ABI-split versionCodes (298/1000298/2000298/3000298)
- icon.png (512x512) rasterized from argosy_icon.svg
- featureGraphic.png (1024x500) generated banner
- 8 phone screenshots imported from the README

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Add fdroid/com.nendo.argosy.yml (the fdroiddata metadata recipe, to be copied
to metadata/com.nendo.argosy.yml in the fdroiddata repo) plus fdroid/README.md
documenting the recipe rationale and the inclusion blockers to resolve.

Recipe highlights:
- Two per-ABI build blocks (armeabi-v7a=1000298, arm64-v8a=2000298) built with
  -PallAbis, matching the versionCode override in app/build.gradle.kts
- submodules: true for sigil and rcheevos
- VercodeOperation + UpdateCheckMode Tags ^v[0-9.]+$ for stable-tag autoupdate

Handoff notes flag the prebuilt libs/maven/*.jar (javasteam) scanner blocker,
the sigil Rust submodule, the api.argosy.dev network dependency, and license
precision (GPL-3.0-only vs -or-later).

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Research resolved three of the flagged items:
- sigil (argosy-sigil) is pure C, MPL-2.0, built from source via CMake/NDK with
  no prebuilt blobs -- not a blocker, and needs no Rust toolchain (prior note
  was wrong)
- api.argosy.dev social layer depends on a proprietary backend -> declare
  AntiFeatures: NonFreeNet (titledb/cheats are build-secret-gated and inert in
  a source build)
- license confirmed GPL-3.0-only (verbatim GPLv3, README says v3.0, no -or-later)

Add AntiFeatures: NonFreeNet to the recipe and update the handoff notes; the
only remaining hard blocker is the prebuilt javasteam jars in libs/maven.

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Investigated the prebuilt javasteam jars. Both come from the MIT multi-module
fork github.com/joshuatam/JavaSteam (javasteam + javasteam-depotdownloader,
group io.github.joshuatam 1.8.1, branch gamenative-latest). Findings:
- fork is not on Maven Central (upstream in.dragonbra lacks depotdownloader)
- JitPack cannot build the fork (errors, no release tags)
- app coupling is narrow: only 5 files import the library directly

Record ranked resolution options: FOSS flavor (in-repo, recommended), publish
fork to Central (maintainer), build-from-source in fdroiddata (fragile), or
scanignore (last resort).

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
The JavaSteam integration depends on prebuilt jars in libs/maven (a non-Maven-
Central MIT fork), which F-Droid's scanner rejects. Introduce full/foss product
flavors so the F-Droid build ships without Steam:

- full (default): unchanged Steam build for GitHub releases; the six
  JavaSteam-backed classes move to app/src/full and keep bundles.steam via
  fullImplementation.
- foss: no Steam library. No-op stubs in app/src/foss reproduce the public API
  that shared code consumes (state flows, control methods, @singleton @Inject
  ctors) plus the shared value types (SteamModels.kt). The ~30 non-library Steam
  files stay in src/main and compile against the stubs.

Recipe now builds assembleFossRelease with scandelete: [libs/maven]; handoff
doc updated to mark the blocker resolved.

Verified: kspFossDebugKotlin (Hilt DI graph) and Kotlin frontend type-checking
of the full foss source set both pass (0 errors); the assembly's Compose IR
backend compile is slow on a cold full build but is the same compile the release
CI performs.

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Rewrite the handoff submission steps to match fdroiddata's CONTRIBUTING.md:
GitLab (not GitHub) fork/clone, app-id branch name, the exact fdroidserver
check sequence (readmeta/rewritemeta/checkupdates/lint/build), CI pipeline check
in the fork, MR template, and the master-branch do's/don'ts. Also document the
prerequisite of cutting a new release tag that contains fastlane/ and the foss
flavor before repointing the recipe commit/version.

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
@gantoine
gantoine marked this pull request as draft July 5, 2026 17:44
gantoine added 10 commits July 5, 2026 13:46
…oid/rfp

Draft RFP based on the official fdroid/rfp Default.md template and recent closed
RFPs: application id, filled metadata YAML block, summary, objective
description, and packaging notes (foss flavor, NonFreeNet, native-from-source).

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Bump versionName 1.18.0 -> 1.19.0 and base versionCode 298 -> 299 so a release
tag can carry the fastlane metadata and the foss flavor for the F-Droid build.
Add fastlane changelogs for the new ABI-split versionCodes (299/1000299/
2000299/3000299).

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Point both build blocks at commit v1.19.0 with versionCodes 1000299/2000299,
and set CurrentVersion 1.19.0 / CurrentVersionCode 2000299. Update the handoff
prerequisite section: bump and repoint are done; the only remaining step is to
merge and tag v1.19.0 off main.

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
The 2.0 line (branch ui-redesign-beta; betas v2.0.0-beta.2=vc299,
v2.0.0-beta.3=vc301) is already underway, and vc299 collides with the earlier
1.19.0 bump. Realign the F-Droid work onto 2.0:

- revert the versionCode/versionName bump; this branch no longer touches the
  version (the 2.0 branch owns it)
- repoint the recipe to commit v2.0.0 / versionName 2.0.0; versionCode left as a
  documented placeholder (1000302/2000302, base 302) to finalize at tag time
- drop the phantom 1.19.0 changelogs; UpdateCheckMode regex already excludes
  -beta tags so only stable v2.0.0 is packaged
- update the handoff prerequisite section for the 2.0 plan

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Remove the 298-series changelog files (1.18.0 history) now that the recipe
targets v2.0.0. Changelogs for the 2.0.0 versionCodes will be added at tag time.
Update the handoff doc accordingly.

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
Reflect that the changelogs directory is now empty; entries for the 2.0.0
versionCodes will be added at tag time.

Generated-By: PostHog Code
Task-Id: 974c9fb1-13dd-4e37-aae5-791ef44d8d06
@gantoine
gantoine requested a review from tmgast July 8, 2026 14:09
@gantoine
gantoine marked this pull request as ready for review July 8, 2026 14:09
@greptile-apps

greptile-apps Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR prepares the app for F-Droid distribution. The main changes are:

  • Added full and foss product flavors.
  • Moved JavaSteam-backed code into the full source set.
  • Added no-op Steam stubs for the foss source set.
  • Added Fastlane store metadata and F-Droid packaging files.

Confidence Score: 4/5

The FOSS flavor needs fixes around Steam-facing behavior before merging.

  • The Gradle flavor split and dependency scoping look coherent.
  • The F-Droid listing can advertise Steam support that the FOSS build removes.
  • A reachable Steam sync action can wait on state that the FOSS stub never updates.

fastlane/metadata/android/en-US/full_description.txt; app/src/foss/kotlin/com/nendo/argosy/data/steam/SteamLibraryManager.kt

Important Files Changed

Filename Overview
app/build.gradle.kts Adds the distribution flavor split and limits JavaSteam dependencies to the full flavor.
app/src/foss/kotlin/com/nendo/argosy/data/steam/SteamLibraryManager.kt Adds an inert Steam library manager for FOSS, but reachable sync callers can observe a permanently idle state.
app/src/foss/kotlin/com/nendo/argosy/data/steam/SteamService.kt Adds a minimal FOSS Steam service stub that binds but never connects.
app/src/foss/kotlin/com/nendo/argosy/data/steam/SteamContentManager.kt Adds inert Steam download and discovery state for the FOSS flavor.
app/src/foss/kotlin/com/nendo/argosy/data/steam/SteamModels.kt Adds FOSS copies of the Steam state and value types used by shared code.
fastlane/metadata/android/en-US/full_description.txt Adds store description metadata, including a Steam feature claim that does not match the FOSS artifact.
fdroid/com.nendo.argosy.yml Adds a ready-to-copy F-Droid recipe for future v2.0.0 FOSS builds with ABI-specific version codes.

Fix All in Claude Code

Reviews (1): Last reviewed commit: "remove more" | Re-trigger Greptile

Comment thread fastlane/metadata/android/en-US/full_description.txt Outdated
Comment thread app/src/foss/kotlin/com/nendo/argosy/data/steam/SteamLibraryManager.kt Outdated
@gantoine
gantoine marked this pull request as draft July 10, 2026 21:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant