Skip to content

F Droid Pipeline Debug

alpha-1-design edited this page May 21, 2026 · 1 revision

F-Droid Pipeline Debug Postmortem

Duration: ~2 hours, ~15 pipeline iterations

The Problem

Adding BLACKBOX to F-Droid hit multiple pipeline failures:

  • android update lib-project crashed — Capacitor project layout doesn't match F-Droid's expectations
  • fdroid rewritemeta rejected format repeatedly — strict YAML canonicalization rules
  • Build succeeded but APK not found — F-Droid couldn't auto-discover the output

Root Causes

Issue Cause Fix
android update crash No gradle: field set; F-Droid defaulted to legacy build method gradle:\n - yes
rewritemeta failures Wrong key order, inline vs multi-line list format, redundant defaults Canonical order: gradle:output:prebuild:
APK not found Auto-discovery failed with subdir: android Explicit output: path
Binary scanner errors node_modules with false positives rm -rf bypass paths in init

Final Recipe

Builds:
  - versionName: 2.0.0
    versionCode: 2
    commit: fcbe6590d5c6a21c2d4df1878d2333a29bac9fee
    subdir: android
    sudo:
      - apt-get update
      - apt-get install -y nodejs npm
    init: cd .. && npm install && npx cap sync android && rm -rf
      node_modules/clipboardy/fallbacks
      node_modules/@capacitor/cli/assets
    gradle:
      - yes
    output: app/build/outputs/apk/release/app-release-unsigned.apk
    prebuild: sed -i
      's/com.android.tools.build:gradle:8.1.4/com.android.tools.build:gradle:8.5.2/'
      build.gradle

Key Lessons

  • gradle: field is required — without it, F-Droid tries android update lib-project which fails on Capacitor projects
  • gradle: ['yes'] → canonical form is multi-line gradle:\n - yes
  • Build entry keys must follow canonical order: versionName → versionCode → commit → subdir → sudo → init → gradle → output → prebuild
  • init: runs inside subdir: — use cd .. to reach project root
  • rm bypass paths in init are relative to init's working directory
  • output: may be required when subdir: changes the project root
  • Run fdroid rewritemeta locally before pushing to catch format issues instantly

Auto-Update

Future releases only need a new tag on GitHub — F-Droid bot handles the rest.

Clone this wiki locally