feat(android): durable Android build pipeline + GitHub Actions Fenix APK - #21
Merged
Merged
Conversation
Local full-source Android builds OOM the dev box (rustc peaks ~17GB RSS; kernel oom-killer hung the machine 2026-07-10 02:56), so compilation moves to a hosted runner with a 16GB swapfile absorbing the rustc peak. - patches/android/fenix-neonwolf-appid.patch: capture the manual tree edits (Fenix applicationId org.neonwolf + .browser/.browser.debug suffixes, app_name -> Neonwolf), wired into assets/patches.txt so `make dir` reproduces the tree from scratch - make build-android: normalize browser/config/version.txt to the pure Firefox version (Android Gradle computeVersionCode() dies on "152.0.1-3"), pass NEONWOLF_TREE, glob JDK/NDK paths instead of hardcoding - scripts/build-android.sh: derive tree from ./version + ./release, glob toolchain dirs (works on CI runners), NEONWOLF_BUILD_JOBS knob - .github/workflows/android-build.yml: manual dispatch or push to android/**; free disk, add swap, make fetch/dir, mach bootstrap mobile_android, make build-android, upload APKs + build log as artifacts - docs/ANDROID.md: reflect CI-first build reality Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MVEMssXqLRUiqjkHgXxfL
The ubuntu-latest image ships an active 4GB /mnt/swapfile; fallocate on it fails with "Text file busy". swapoff + remove before creating the 16GB one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MVEMssXqLRUiqjkHgXxfL
configure execs RUSTC_WRAPPER directly; mach bootstrap installs sccache at ~/.mozbuild/sccache/sccache which is not on PATH, so the bare "sccache" died with FileNotFoundError on the runner. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MVEMssXqLRUiqjkHgXxfL
Run 3 proved GeckoView + native uBO compiles on the runner (1h54m, swap absorbed the rustc peak) but produced no Fenix APK: mach build only builds GeckoView. Add the documented `mach gradle fenix:assembleDebug` step (mobile/android/docs/fenix.rst), point package-android at the fenix gradle output dir, and drop --enable-geckoview-lite (Fenix expects the full GV artifact; telemetry dies via prefs + liberation instead). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MVEMssXqLRUiqjkHgXxfL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lands the Android build work on main:
Stacked on PR #20 (merged), so this PR is the four android-ci commits only.
🤖 Generated with Claude Code