fix(android): bump foojay-resolver to 1.0.0 for Gradle 9 IBM_SEMERU removal #279

Merged
james merged 1 commit from 278-android-gradle-jvm-vendor into main 2026-06-24 13:51:06 +00:00
Owner

Summary

  • The Android release pipeline has been failing on Gradle assembleDebug (and assembleRelease) at the configuration phase with:
    Class org.gradle.jvm.toolchain.JvmVendorSpec does not have member field 'org.gradle.jvm.toolchain.JvmVendorSpec IBM_SEMERU'
    
  • Root cause: @react-native/gradle-plugin@0.85.3 (matches our react-native@0.85.3 pin) ships settings.gradle.kts that pins org.gradle.toolchains.foojay-resolver-convention at 0.5.0. That plugin references JvmVendorSpec.IBM_SEMERU, which Gradle deprecated in 8.8 and removed in 9.0 (IBM rebranded Semeru → IBM JDK). RN 0.85.x also ships a Gradle 9.3.1 wrapper, so the field lookup blows up the moment Gradle parses the included gradle-plugin build.
  • Fix: pnpm patch @react-native/gradle-plugin@0.85.3 to bump foojay to 1.0.0 — same change upstream RN made in @react-native/gradle-plugin@0.86.0. Lockfile + patch file are committed; CI's pnpm install --frozen-lockfile reapplies the patch on every run.

Test plan

  • pnpm install applies the patch — verified node_modules/.pnpm/@react-native+gradle-plugin@0.85.3.../settings.gradle.kts line 16 reads ... .version("1.0.0").
  • pnpm -F @carol/client prebuild:android succeeds (regenerates apps/client/android/).
  • No local ./gradlew verification — the dev box has no JDK installed, and bringing a Java 21 runtime + Android SDK up to confirm config-phase parsing is out of scope for this fix. The next release-android.yml run (on tag push) is the real signal.
  • Lefthook pre-commit (gitleaks) + commit-msg (conventional) both pass.

Acceptance

The next tag-driven release-android.yml run reaches at least the Gradle task graph — IBM_SEMERU is gone. A debug-fallback build (no keystore secrets) should also clear the configuration phase.

Out of scope

  • Bumping react-native to 0.86.x (large surface, separate ticket).
  • Adding a PR-time validation path for the Android build (workflow is tag-only today; that's a process change, not a fix).

Closes #278.

🤖 Generated with Claude Code

## Summary - The Android release pipeline has been failing on `Gradle assembleDebug` (and `assembleRelease`) at the configuration phase with: ``` Class org.gradle.jvm.toolchain.JvmVendorSpec does not have member field 'org.gradle.jvm.toolchain.JvmVendorSpec IBM_SEMERU' ``` - Root cause: `@react-native/gradle-plugin@0.85.3` (matches our `react-native@0.85.3` pin) ships `settings.gradle.kts` that pins `org.gradle.toolchains.foojay-resolver-convention` at `0.5.0`. That plugin references `JvmVendorSpec.IBM_SEMERU`, which Gradle deprecated in 8.8 and **removed in 9.0** (IBM rebranded Semeru → IBM JDK). RN 0.85.x also ships a Gradle 9.3.1 wrapper, so the field lookup blows up the moment Gradle parses the included gradle-plugin build. - Fix: `pnpm patch` `@react-native/gradle-plugin@0.85.3` to bump foojay to `1.0.0` — same change upstream RN made in `@react-native/gradle-plugin@0.86.0`. Lockfile + patch file are committed; CI's `pnpm install --frozen-lockfile` reapplies the patch on every run. ## Test plan - [x] `pnpm install` applies the patch — verified `node_modules/.pnpm/@react-native+gradle-plugin@0.85.3.../settings.gradle.kts` line 16 reads `... .version("1.0.0")`. - [x] `pnpm -F @carol/client prebuild:android` succeeds (regenerates `apps/client/android/`). - [ ] No local `./gradlew` verification — the dev box has no JDK installed, and bringing a Java 21 runtime + Android SDK up to confirm config-phase parsing is out of scope for this fix. The next `release-android.yml` run (on tag push) is the real signal. - [x] Lefthook pre-commit (gitleaks) + commit-msg (conventional) both pass. ## Acceptance The next tag-driven `release-android.yml` run reaches at least the Gradle task graph — IBM_SEMERU is gone. A debug-fallback build (no keystore secrets) should also clear the configuration phase. ## Out of scope - Bumping `react-native` to 0.86.x (large surface, separate ticket). - Adding a PR-time validation path for the Android build (workflow is tag-only today; that's a process change, not a fix). Closes #278. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(android): bump foojay-resolver to 1.0.0 for Gradle 9 IBM_SEMERU removal (#278)
Some checks failed
Commits / Conventional Commits (pull_request) Successful in 8s
PR / pnpm audit (pull_request) Successful in 1m52s
PR / OSV-Scanner (pull_request) Successful in 1m40s
PR / Lint (pull_request) Successful in 2m11s
PR / Static analysis (pull_request) Successful in 2m15s
PR / OpenAPI (pull_request) Successful in 2m40s
PR / Typecheck (pull_request) Successful in 3m1s
PR / Client (web export smoke) (pull_request) Successful in 3m6s
PR / Package age policy (soft) (pull_request) Successful in 54s
PR / Trivy (image) (pull_request) Failing after 1m12s
PR / Build (pull_request) Successful in 3m14s
Secrets / gitleaks (pull_request) Successful in 1m0s
PR / Test (postgres) (pull_request) Successful in 3m25s
PR / Test (sqlite) (pull_request) Successful in 3m25s
PR / Coverage (soft) (pull_request) Successful in 1m47s
d113a8c934
react-native@0.85.3 ships @react-native/gradle-plugin with foojay-resolver-convention 0.5.0 and a Gradle 9.3.1 wrapper. Gradle 9.0 removed JvmVendorSpec.IBM_SEMERU (deprecated in 8.8), which foojay 0.5.0 references — every Android release run died with "Class JvmVendorSpec does not have member field IBM_SEMERU" before any task ran.

pnpm-patch @react-native/gradle-plugin@0.85.3 to pin foojay to 1.0.0, matching the upstream fix in @react-native/gradle-plugin@0.86.0. Lockfile + patch file committed; pnpm install --frozen-lockfile applies it automatically in CI.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

📊 Test coverage

Patch coverage: no testable lines changed.

Overall (app/, lib/, db/, excluding UI per ADR-0019):

Metric Value Soft target
Lines 81.6% ≥ 50%
Branches 72.8% ⚠️ ≥ 75%
Functions 91.1% informational

Soft thresholds per ADR-0019. Coverage is informational and does not block merge.

<!-- coverage-comment --> ## 📊 Test coverage **Patch coverage:** no testable lines changed. **Overall** (`app/`, `lib/`, `db/`, excluding UI per ADR-0019): | Metric | Value | Soft target | |---|---|---| | Lines | 81.6% ✅ | ≥ 50% | | Branches | 72.8% ⚠️ | ≥ 75% | | Functions | 91.1% | informational | Soft thresholds per [ADR-0019](docs/adr/0019-coverage-soft-targets.md). Coverage is informational and does not block merge.
james merged commit 844ff9710d into main 2026-06-24 13:51:06 +00:00
james deleted branch 278-android-gradle-jvm-vendor 2026-06-24 13:51:06 +00:00
Sign in to join this conversation.
No description provided.