Skip to content

fdroid: fix the buildserver recipe and add a remote build check - #1

Merged
lbellows merged 2 commits into
mainfrom
fdroid-recipe-fixes
Aug 29, 2026
Merged

fdroid: fix the buildserver recipe and add a remote build check#1
lbellows merged 2 commits into
mainfrom
fdroid-recipe-fixes

Conversation

@lbellows

Copy link
Copy Markdown
Owner

Ran the recipe against F-Droid's own buildserver image (fdroidserver:buildserver-trixie) rather than trusting it, which turned up two things that would have failed fdroiddata's CI after the merge request was already open.

Fixed

  • xz is not on the buildserver. The sudo: block fetched node as .tar.xz and ran tar xf, which died with tar (child): xz: Cannot exec: No such file or directory. Only gzip is present — no xz, unxz or bzip2. Switched to the gzip tarball nodejs.org publishes alongside it, checksum from SHASUMS256.txt.
  • The recipe was not in canonical format. fdroiddata CI runs fdroid rewritemeta on every changed file and fails the MR if the file changes. That rewrite strips YAML comments, so the rationale they carried moved into MaintainerNotes, where a reviewer will actually see it.
  • Added Game Helper alongside Sports & Health — upstream describes it as "game helper, assistant, companion, score board, timer".

Verified: fdroid lint -f clean, fdroid rewritemeta idempotent, fdroid scanner clean on both the source tree and all three published APKs.

Known blocker, documented not worked around

React Native's JdkConfiguratorUtils forces jvmToolchain(17) on every module; the buildserver installs only default-jdk-headless (JDK 21) and Debian trixie has no openjdk-17 package at all. The build fails at :app:compileReleaseJavaWithJavac.

Three ways out are written up in FDROID.md. The choice belongs in the merge request — F-Droid reviewers handle this across every RN app in the repo and will have a preference.

Worth noting for that conversation: release.yml's build and smoke-test jobs already use actions/setup-java with Temurin 17, so every published APK is built with exactly that JDK. Pinning it in the recipe only makes the buildserver match.

Remote verification

.github/workflows/fdroid-build.yml runs fdroid build in the buildserver image on a runner — workflow_dispatch only. Its provision_jdk17 input installs the same Temurin 17: on, it verifies the rest of the recipe end to end; off, it reproduces the blocker exactly, so it can be linked to rather than described.

This workflow only becomes dispatchable once it is on main — that is how workflow_dispatch works.

🤖 Generated with Claude Code

LB and others added 2 commits August 29, 2026 17:33
Running the recipe in F-Droid's own buildserver image turned up two things
that would have failed fdroiddata's CI after the merge request was open.

The sudo block fetched node as a .tar.xz, but the buildserver has no xz
binary -- only gzip -- so `tar xf` died before anything was built. Switch to
the gzip tarball nodejs.org publishes alongside it.

The recipe was also not in fdroid's canonical format. fdroiddata CI runs
`fdroid rewritemeta` on every changed file and fails if the file changes,
and that rewrite strips YAML comments, so the rationale the comments carried
moves to MaintainerNotes where a reviewer will actually see it.

Add Game Helper alongside Sports & Health: upstream describes it as "game
helper, assistant, companion, score board, timer", which is what this is.

FDROID.md documents the one blocker left. React Native forces a Java 17
toolchain on every module and the buildserver ships only JDK 21, with no
openjdk-17 available on trixie at all. Three ways out are written up; the
choice belongs in the merge request, not here.

.github/workflows/fdroid-build.yml runs `fdroid build` in the buildserver
image on a runner, so the recipe can be checked remotely. Its
provision_jdk17 input installs the same Temurin 17 the release build already
uses -- on, it verifies the rest of the recipe end to end; off, it
reproduces the blocker exactly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
React Native forces a Java 17 toolchain on every module and the buildserver
ships only JDK 21, with no openjdk-17 available on trixie at all, so the
recipe fetches a pinned Temurin 17 the same way it fetches node and names
the path in gradleprops. This is the JDK the app is already built with
everywhere else: release.yml's build and smoke-test jobs both run setup-java
with temurin 17, so the buildserver now matches rather than diverges.

That settles the question FDROID.md was holding open, so its section is
rewritten around the decision, and the fdroid-build workflow loses the
provision_jdk17 toggle that existed to demonstrate the failure.

Also bump every action to its current major. GitHub is deprecating Node 20
and was already forcing checkout and setup-node onto Node 24. Note that the
publish job only runs on a tag, so action-gh-release is the one bump a
workflow_dispatch dry run cannot exercise.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@lbellows
lbellows merged commit 757cad8 into main Aug 29, 2026
4 checks passed
@lbellows
lbellows deleted the fdroid-recipe-fixes branch August 29, 2026 22:39
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