From 2027f4fc84bd10d198fa01710540141b5b3d08a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 6 Nov 2025 16:56:58 +0100 Subject: [PATCH 1/6] Use self-hosted Ubuntu runner for Android testing --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 17cfdac4..34e54804 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -171,7 +171,7 @@ jobs: test-android: if: github.ref == 'refs/heads/main' || contains(github.event.pull_request.labels.*.name, 'Android 🤖') name: Test app (Android) - runs-on: ubuntu-latest + runs-on: ubuntu-self-hosted steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 From f209ea3dee6000dd77b8893cc1fa0037aaef90d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 6 Nov 2025 16:58:21 +0100 Subject: [PATCH 2/6] Trigger CI From 5f8fe6f2798b2709015f453f644eb64d5674513a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 7 Nov 2025 22:26:32 +0100 Subject: [PATCH 3/6] Add diagnostics --- .github/workflows/check.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 34e54804..73525c0c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -186,6 +186,21 @@ jobs: uses: android-actions/setup-android@v3 with: packages: tools platform-tools ndk;${{ env.NDK_VERSION }} + - name: Verify Android SDK setup + run: | + echo "ANDROID_HOME: $ANDROID_HOME" + echo "ANDROID_SDK_ROOT: $ANDROID_SDK_ROOT" + echo "PATH: $PATH" + echo "Checking for legacy tools directory:" + ls -la "$ANDROID_HOME/tools/bin/" 2>/dev/null || echo "Legacy tools directory not found" + echo "Checking for cmdline-tools:" + ls -la "$ANDROID_HOME/cmdline-tools/" 2>/dev/null || echo "cmdline-tools directory not found" + echo "Checking which sdkmanager is in PATH:" + which sdkmanager || echo "sdkmanager not found in PATH" + echo "All sdkmanager instances found:" + find "$ANDROID_HOME" -name sdkmanager -type f 2>/dev/null || echo "No sdkmanager found" + echo "Java version:" + java -version - run: rustup target add x86_64-linux-android aarch64-linux-android armv7-linux-androideabi i686-linux-android aarch64-apple-ios-sim - run: npm ci - run: npm run bootstrap From e091523922510da2ae31ea5a5dc4543ae9236520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Sat, 8 Nov 2025 21:17:24 +0100 Subject: [PATCH 4/6] Remove old Android SDK tools --- .github/workflows/check.yml | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 73525c0c..9fefaf91 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -186,21 +186,17 @@ jobs: uses: android-actions/setup-android@v3 with: packages: tools platform-tools ndk;${{ env.NDK_VERSION }} - - name: Verify Android SDK setup + - name: Remove legacy Android SDK tools run: | - echo "ANDROID_HOME: $ANDROID_HOME" - echo "ANDROID_SDK_ROOT: $ANDROID_SDK_ROOT" - echo "PATH: $PATH" - echo "Checking for legacy tools directory:" - ls -la "$ANDROID_HOME/tools/bin/" 2>/dev/null || echo "Legacy tools directory not found" - echo "Checking for cmdline-tools:" - ls -la "$ANDROID_HOME/cmdline-tools/" 2>/dev/null || echo "cmdline-tools directory not found" - echo "Checking which sdkmanager is in PATH:" - which sdkmanager || echo "sdkmanager not found in PATH" - echo "All sdkmanager instances found:" - find "$ANDROID_HOME" -name sdkmanager -type f 2>/dev/null || echo "No sdkmanager found" - echo "Java version:" - java -version + # Remove legacy tools directory that contains Java 11+ incompatible sdkmanager + # Gradle/RN build uses hardcoded paths to $ANDROID_HOME/tools/bin/sdkmanager + # Must be done after setup-android sets ANDROID_HOME but before build starts + if [ -d "$ANDROID_HOME/tools" ]; then + echo "Removing legacy SDK tools directory (incompatible with Java 11+)" + rm -rf "$ANDROID_HOME/tools" + else + echo "Legacy tools directory not found (already removed or never existed)" + fi - run: rustup target add x86_64-linux-android aarch64-linux-android armv7-linux-androideabi i686-linux-android aarch64-apple-ios-sim - run: npm ci - run: npm run bootstrap From 2d2ca91d2a4f316e8b8595918e2a1b38b423741f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Sat, 8 Nov 2025 21:49:11 +0100 Subject: [PATCH 5/6] Install CMake ourselves --- .github/workflows/check.yml | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 9fefaf91..63da3100 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -3,6 +3,8 @@ name: Check env: # Version here should match the one in React Native template and packages/cmake-rn/src/cli.ts NDK_VERSION: 27.1.12297006 + # Building Hermes from source doesn't support CMake v4 + CMAKE_VERSION: 3.31.6 # Enabling the Gradle test on CI (disabled by default because it downloads a lot) ENABLE_GRADLE_TESTS: true @@ -155,7 +157,7 @@ jobs: - name: Install compatible CMake version uses: jwlawson/actions-setup-cmake@v2 with: - cmake-version: "3.31.2" + cmake-version: ${{ env.CMAKE_VERSION }} - run: rustup target add x86_64-apple-darwin - run: npm ci - run: npm run bootstrap @@ -185,18 +187,7 @@ jobs: - name: Setup Android SDK uses: android-actions/setup-android@v3 with: - packages: tools platform-tools ndk;${{ env.NDK_VERSION }} - - name: Remove legacy Android SDK tools - run: | - # Remove legacy tools directory that contains Java 11+ incompatible sdkmanager - # Gradle/RN build uses hardcoded paths to $ANDROID_HOME/tools/bin/sdkmanager - # Must be done after setup-android sets ANDROID_HOME but before build starts - if [ -d "$ANDROID_HOME/tools" ]; then - echo "Removing legacy SDK tools directory (incompatible with Java 11+)" - rm -rf "$ANDROID_HOME/tools" - else - echo "Legacy tools directory not found (already removed or never existed)" - fi + packages: tools platform-tools ndk;${{ env.NDK_VERSION }} cmake;${{ env.CMAKE_VERSION }} - run: rustup target add x86_64-linux-android aarch64-linux-android armv7-linux-androideabi i686-linux-android aarch64-apple-ios-sim - run: npm ci - run: npm run bootstrap From ebe144b56d1a9f45ed28437615ee0634f6eb2a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Sun, 9 Nov 2025 11:10:45 +0100 Subject: [PATCH 6/6] Try building in debug mode with added logging --- .github/workflows/check.yml | 3 ++- apps/test-app/App.tsx | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 63da3100..75936c24 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -239,7 +239,8 @@ jobs: adb logcat > emulator-logcat.txt 2>&1 & LOGCAT_PID=$! # Build, install and run the app - npm run test:android:allTests -- --mode Release + npm run test:android:allTests + # npm run test:android:allTests -- --mode Release # Wait a bit for the sub-process to terminate, before terminating the emulator sleep 5 # Stop logcat diff --git a/apps/test-app/App.tsx b/apps/test-app/App.tsx index 397409bb..d7dfb338 100644 --- a/apps/test-app/App.tsx +++ b/apps/test-app/App.tsx @@ -73,6 +73,7 @@ function loadTests({ const exampleAddon = /* eslint-disable-next-line @typescript-eslint/no-require-imports -- TODO: Determine why a dynamic import doesn't work on Android */ require("@react-native-node-api/ferric-example") as typeof import("@react-native-node-api/ferric-example"); + console.log({ exampleAddon }); const result = exampleAddon.sum(1, 3); if (result !== 4) { throw new Error(`Expected 1 + 3 to equal 4, but got ${result}`);