Skip to content

feat(android): durable Android build pipeline + GitHub Actions Fenix APK - #21

Merged
neon798 merged 4 commits into
mainfrom
android/ci
Jul 13, 2026
Merged

neon798 merged 4 commits into
mainfrom
android/ci

Conversation

@neon798

@neon798 neon798 commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Lands the Android build work on main:

  • Durable Android build pipeline (GeckoView + Fenix) with a GitHub Actions compile workflow
  • Runner fixes discovered while getting it green: replace the preexisting active swapfile, export the resolved sccache path (not the bare name), assemble the Fenix APK explicitly and collect its outputs
  • Latest run on this branch is green end-to-end (Fenix APK built and collected, ~2h)

Stacked on PR #20 (merged), so this PR is the four android-ci commits only.

🤖 Generated with Claude Code

neon798 and others added 4 commits July 10, 2026 07:45
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
@neon798
neon798 merged commit d10fdd3 into main Jul 13, 2026
2 checks passed
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