Skip to content
This repository was archived by the owner on Feb 2, 2026. It is now read-only.

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Sep 25, 2025

Note

Mend has cancelled the proposed renaming of the Renovate GitHub app being renamed to mend[bot].

This notice will be removed on 2025-10-07.


This PR contains the following updates:

Package Type Update Change
macos github-runner major 13 -> 15

Release Notes

actions/runner-images (macos)

v14: macOS 14 arm64 (20250805) Image Update

Announcements
[macOS] Xcode support policy will be changed on August 11, 2025
[macOS] macos-latest YAML-label will use macos-15 in August 2025

🖥️ Actions Runner Image: macOS 14

  • OS Version: macOS 14.7.6 (23H626)
  • Kernel Version: Darwin 23.6.0
  • Image Version: 2025080.1714

📣 What's changed?

Updated
Category Tool name Previous (20250728.1701) Current (20250805.1714)
Package Management Homebrew 4.5.12 4.5.13
Vcpkg 2025 (build from commit 3bdaa9b420) 2025 (build from commit 8cce1e1118)
Project Management Gradle 8.14.3 9.0.0
Utilities GitHub CLI 2.76.1 2.76.2
Packer 1.13.1 1.14.0
Tools AWS CLI 2.27.60 2.28.2
Bicep CLI 0.36.177 0.37.4
CodeQL Action Bundle 2.22.1 2.22.2
Browsers Google Chrome 138.0.7204.169 138.0.7204.184
Google Chrome for Testing 138.0.7204.168 138.0.7204.183
ChromeDriver 138.0.7204.168 138.0.7204.183
Cached Tools Node.js 22.17.1 22.18.0
Android
Package Name Version
Android Emulator 35.6.11
Android SDK Platforms android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3)
Android Emulator 36.1.9
Android SDK Platforms android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3)

For comprehensive list of software installed on this image please click here.


Configuration

📅 Schedule: Branch creation - "after 4pm on thursday" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Summary by CodeRabbit

  • Chores

    • Updated CI workflows to use macOS 15 runners for Android Detox, iOS Detox, and Expo Android jobs to align with current GitHub-hosted environments. No user-facing changes.
  • Tests

    • Upgraded integration test environments to macOS 15 with no modifications to test logic or app behavior.

@renovate renovate bot force-pushed the renovate/macos-15.x branch from 2d3539a to 315dc9a Compare September 26, 2025 06:04
@renovate renovate bot force-pushed the renovate/macos-15.x branch from 315dc9a to 42802a5 Compare October 3, 2025 10:57
@karlhorky
Copy link
Member

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Oct 4, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link

coderabbitai bot commented Oct 4, 2025

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

Bumped GitHub Actions macOS runner images from macos-13 to macos-15 across Detox Android, Detox iOS, and Expo Start Android workflows. No step or logic changes.

Changes

Cohort / File(s) Summary
CI runner version bump
.github/workflows/detox-android.yml, .github/workflows/detox-ios.yml, .github/workflows/expo-start-android.yml
Update workflow runner from macos-13 to macos-15; no other modifications.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

I hopped through YAML, swift and keen,
Swapped 13 for 15—fresh and clean.
CI carrots crisp, the garden purrs,
Runners faster, whisker-stirrs.
With tiny taps, my merge is done—
Thump-thump, green checks, on the run! 🥕✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title succinctly describes the primary change of upgrading the macOS runner image version from 13 to 15, matching the core modifications without unnecessary details or noise.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c8c8051 and 42802a5.

📒 Files selected for processing (3)
  • .github/workflows/detox-android.yml (1 hunks)
  • .github/workflows/detox-ios.yml (1 hunks)
  • .github/workflows/expo-start-android.yml (1 hunks)

build:
name: Detox Integration Tests - Android
runs-on: macos-13
runs-on: macos-15
Copy link

@coderabbitai coderabbitai bot Oct 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Android emulator will fail on Apple Silicon runners

Switching to macos-15 moves this job onto Apple Silicon hardware. The emulator steps down below still request an x86 system image via reactivecircus/android-emulator-runner, which only works on Intel hosts. On arm64 runners the AVD launch fails (PANIC: Cannot launch AVD in emulator), so the entire workflow will break. Update the emulator configuration for arm64 (e.g. arch: arm64-v8a with a matching system image/API level) before bumping the runner, or keep using an Intel runner.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess macos-15-intel may work?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🌐 Web query:

GitHub Actions macos-15-intel runner availability and supported runner labels for macOS 15

💡 Result:

Summary — availability and runner labels for macOS 15 (incl. Intel)

  • Availability: macOS 15 runner images are generally available (GA) since April 10, 2025; the macos-latest migration to macOS 15 began Aug 4, 2025 (completed by Sep 1, 2025). [1][2]

  • Official workflow labels you can use:

    • Standard runners
      • macos-15 (arm64 Apple Silicon standard image). [1][2]
      • macos-15-intel (x86_64 / Intel standard image). [1][2]
    • Larger runners
      • macos-15-large (Intel large). [3][5]
      • macos-15-xlarge (arm64 XLarge). [2][5]
    • Related "latest" aliases in use for larger/standard images: macos-latest, macos-latest-large, macos-latest-xlarge now point to macOS 15 variants during/after the migration window. [2][3]
  • Notes / lifecycle

    • GitHub added macos-15-intel to support x86_64 workloads (Intel images are available but GitHub has announced eventual deprecation of macOS x86_64 runners with macOS 15 being the last Intel image; see announcement for timelines). [4][1]

Sources

  1. GitHub Docs — GitHub-hosted runners (macOS labels/specs).
  2. actions/runner-images repo — available images & label table.
  3. GitHub Changelog — macOS 15 GA and macos-latest migration.
  4. GitHub Changelog / runner-images issue — macOS x86_64 (Intel) deprecation and macos-15-intel announcement.

@karlhorky Yes, exactly! macos-15-intel is a valid GitHub Actions runner label that provides x86_64/Intel architecture, which will be compatible with your current arch: x86 Android emulator configuration.

Using macos-15-intel allows you to:

  • Upgrade to macOS 15 as intended by this PR
  • Keep your existing x86 Android emulator setup without any changes

Note for future planning: GitHub has announced that macOS 15 will be the last Intel image, and x86_64 macOS runners will eventually be deprecated. When that happens, you'll need to migrate the Android emulator configuration to use arm64 architecture (arch: arm64-v8a) to run on Apple Silicon runners like macos-15 or macos-latest.

For now, changing to macos-15-intel is the right approach to move forward with this dependency update.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok can you try it in all changed files?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Fetch the content of the other two workflow files that were changed
cat .github/workflows/detox-ios.yml
echo "---FILE_SEPARATOR---"
cat .github/workflows/expo-start-android.yml

Length of output: 4393


@karlhorky I've reviewed all three workflow files in this PR. Here are the changes needed:

Files requiring macos-15-intel:

1. .github/workflows/detox-android.yml

jobs:
  build:
    name: Detox Integration Tests - Android
    runs-on: macos-15-intel
    timeout-minutes: 45

2. .github/workflows/expo-start-android.yml

jobs:
  build:
    name: Expo Dev Server Tests
    runs-on: macos-15-intel
    timeout-minutes: 45

Both of these files use the Android emulator with arch: x86, which requires an Intel runner.

File that can stay on macos-15:

3. .github/workflows/detox-ios.yml

jobs:
  build:
    name: Detox Integration Tests - iOS
    runs-on: macos-15
    timeout-minutes: 45

This workflow only uses iOS simulators (not Android emulators), so it can safely use the Apple Silicon macos-15 runner. iOS simulators work on both Intel and Apple Silicon Macs.

Summary: Change macos-15 to macos-15-intel in the two Android-related workflows, and keep macos-15 as-is in the iOS workflow.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Get versions of key dependencies
echo "=== package.json versions ==="
cat package.json | jq '{
  detox: .devDependencies.detox,
  "react-native": .dependencies["react-native"],
  expo: .dependencies.expo,
  "expo-dev-client": .dependencies["expo-dev-client"]
}'

echo ""
echo "=== android/build.gradle (if exists) ==="
if [ -f android/build.gradle ]; then
  cat android/build.gradle
else
  echo "android/build.gradle not found (may be generated by expo prebuild)"
fi

echo ""
echo "=== Recent PRs (last 20) ==="
gh pr list --repo upleveled/hotline-bling-codealong --state all --limit 20 --json number,title,state,createdAt,mergedAt,updatedAt,url

echo ""
echo "=== Check for gradle.properties or other gradle config ==="
fd -t f "gradle" android/ 2>/dev/null || echo "android/ directory not found"

Length of output: 5375


🏁 Script executed:

#!/bin/bash
# Check CI runs for recent PRs to identify when the failure started
echo "=== Checking CI status for recent PRs ==="

# Check PR #267 (most recent merged)
echo "PR #267 - Update dependency upgrades - non-major (merged Oct 3)"
gh run list --repo upleveled/hotline-bling-codealong --branch renovate/upgrades-non-major --limit 5 --json conclusion,createdAt,event,headBranch,name,url

echo ""
echo "PR #265 - Update dependency upgrades - non-major (merged Sept 26)"
gh run list --repo upleveled/hotline-bling-codealong --branch renovate/upgrades-non-major-6ae55dc --limit 5 --json conclusion,createdAt,event,headBranch,name,url

echo ""
echo "PR #266 (current PR) - macos update"
gh run list --repo upleveled/hotline-bling-codealong --branch renovate/macos-15.x --limit 10 --json conclusion,createdAt,event,headBranch,name,url,workflowName

echo ""
echo "=== Check main branch recent runs ==="
gh run list --repo upleveled/hotline-bling-codealong --branch main --limit 10 --json conclusion,createdAt,event,headBranch,name,url,workflowName

echo ""
echo "=== Check what changed in PR #267 (most recent merged) ==="
gh pr view 267 --repo upleveled/hotline-bling-codealong --json files | jq '.files[] | {path: .path, additions: .additions, deletions: .deletions}'

echo ""
echo "=== Check what changed in PR #265 ==="
gh pr view 265 --repo upleveled/hotline-bling-codealong --json files | jq '.files[] | {path: .path, additions: .additions, deletions: .deletions}'

Length of output: 6077


🏁 Script executed:

#!/bin/bash
# Get detailed package changes from recent PRs
echo "=== PR #267 package.json diff ==="
gh pr diff 267 --repo upleveled/hotline-bling-codealong --patch | grep -A 5 -B 5 '"dependencies"\|"devDependencies"' | head -50

echo ""
echo "=== PR #265 package.json diff ==="
gh pr diff 265 --repo upleveled/hotline-bling-codealong --patch | grep -A 5 -B 5 '"dependencies"\|"devDependencies"' | head -50

echo ""
echo "=== Check older workflow runs to find when tests last passed ==="
gh run list --repo upleveled/hotline-bling-codealong --branch main --limit 30 --json conclusion,createdAt,headBranch,workflowName,url | jq '.[] | select(.workflowName == "Detox Integration Tests - Android") | {conclusion, createdAt, url}'

echo ""
echo "=== Check the actual failure in the most recent main branch Android run ==="
gh run view 18220353622 --repo upleveled/hotline-bling-codealong --log | grep -A 10 -B 5 "FAILURE\|Plugin with id\|compileSdkVersion" | head -60

Length of output: 5034


🏁 Script executed:

#!/bin/bash
# Go back further to find when Android tests last passed
echo "=== Extended history of Android Detox tests on main (last 50 runs) ==="
gh run list --repo upleveled/hotline-bling-codealong --branch main --limit 50 --json conclusion,createdAt,headBranch,workflowName,url | jq '.[] | select(.workflowName == "Detox Integration Tests - Android") | {conclusion, createdAt, url}' | head -30

echo ""
echo "=== Check PRs from July-August that might have introduced the issue ==="
gh pr list --repo upleveled/hotline-bling-codealong --state all --limit 50 --json number,title,mergedAt,url | jq '.[] | select(.mergedAt != null and (.mergedAt | fromdateiso8601) > 1720000000) | {number, title, mergedAt, url}' | head -20

echo ""
echo "=== Check if there were any Detox-related updates ==="
cat package.json | jq '{
  detox: .devDependencies.detox,
  "jest": .devDependencies.jest,
  "@config-plugins/detox": .devDependencies["@config-plugins/detox"]
}'

echo ""
echo "=== Look at the generated android/build.gradle to understand the issue ==="
echo "Checking what expo prebuild generates..."
# The android/build.gradle is generated during CI, let's check the template or what expo generates
# by looking at expo/react-native versions and their requirements

Length of output: 1632


🏁 Script executed:

#!/bin/bash
# Fix jq syntax and check older PRs
echo "=== Check PRs from July-August ==="
gh pr list --repo upleveled/hotline-bling-codealong --state merged --limit 50 --json number,title,mergedAt,url | jq '.[] | select(.mergedAt != null) | select(.mergedAt | startswith("2025-07") or startswith("2025-08")) | {number, title, mergedAt, url}'

echo ""
echo "=== Check PR #250 (Jest v30 update) and #249 (@config-plugins/detox v11) ==="
gh pr view 250 --repo upleveled/hotline-bling-codealong --json title,mergedAt,body,files | jq '{title, mergedAt, filesChanged: [.files[] | .path]}'
gh pr view 249 --repo upleveled/hotline-bling-codealong --json title,mergedAt,body,files | jq '{title, mergedAt, filesChanged: [.files[] | .path]}'

echo ""
echo "=== Check what's in package.json for config-plugins/detox ==="
cat package.json | jq '.devDependencies | to_entries | .[] | select(.key | contains("detox") or contains("config-plugin"))'

echo ""
echo "=== Look for app.json or app.config.js that might have Expo config ==="
if [ -f app.json ]; then
  echo "Found app.json:"
  cat app.json | jq '.expo.plugins // []'
elif [ -f app.config.js ]; then
  echo "Found app.config.js:"
  head -50 app.config.js
elif [ -f app.config.ts ]; then
  echo "Found app.config.ts:"
  head -50 app.config.ts
fi

Length of output: 962


🏁 Script executed:

#!/bin/bash
# Check the actual package.json to see if @config-plugins/detox exists
echo "=== Full devDependencies from package.json ==="
cat package.json | jq '.devDependencies'

echo ""
echo "=== Check PR #249 diff to see what changed ==="
gh pr view 249 --repo upleveled/hotline-bling-codealong --json body
gh api repos/upleveled/hotline-bling-codealong/pulls/249/files | jq '.[] | select(.filename == "package.json") | .patch' -r

echo ""
echo "=== Check the most recent commits to see if @config-plugins/detox was removed ==="
git log --all --oneline --grep="config-plugins" -20 2>/dev/null || echo "Git log not available"

echo ""
echo "=== Search for any references to kotlin-gradle-plugin in workflow or docs ==="
rg -n "kotlin-gradle-plugin" .github/

echo ""
echo "=== Check if there are any Expo-related workarounds documented ==="
rg -n "kotlin" .github/ | head -20

Length of output: 3765


🏁 Script executed:

#!/bin/bash
# Check if @config-plugins/detox is in dependencies instead
echo "=== Full dependencies from package.json ==="
cat package.json | jq '.dependencies | to_entries | .[] | select(.key | contains("config") or contains("detox"))'

echo ""
echo "=== Check when @config-plugins/detox might have been removed ==="
gh pr list --repo upleveled/hotline-bling-codealong --state all --limit 100 --json number,title,mergedAt,url --jq '.[] | select(.title | contains("config-plugins") or contains("Detox") or contains("detox"))' | head -20

echo ""
echo "=== Check if there's a workflow run from before July 29 that passed ==="
gh run list --repo upleveled/hotline-bling-codealong --branch main --created "<2025-07-29" --limit 20 --json conclusion,createdAt,workflowName,url | jq '.[] | select(.workflowName == "Detox Integration Tests - Android")'

echo ""
echo "=== Full app.json to understand the plugin configuration ==="
cat app.json | jq '.'

Length of output: 4261


🌐 Web query:

@config-plugins/detox version 11 breaking changes Kotlin plugin requirements Expo

💡 Result:

Short answer: Detox v11 introduced AndroidX/Espresso changes and (as of Detox v10+) requires the Kotlin Gradle plugin to be present in your Android project. With Expo + @config-plugins/detox you may need to ensure your android/build.gradle declares a compatible kotlinVersion and the org.jetbrains.kotlin:kotlin-gradle-plugin classpath (and bump the Kotlin version to one supported by your Android Gradle Plugin). (wix.github.io)

What to check/do (concise):

  • Detox breaking changes: v11 moved to AndroidX/Espresso; Kotlin became mandatory in v10 — include the Kotlin Gradle plugin in the project. (wix.github.io)
  • Expo config-plugins: older Expo plugins sometimes inject kotlinVersion (examples show 1.3.50); if that injected version is too old for your AGP/Gradle you must override it to a newer kotlinVersion (e.g., >= 1.5.20 when required by recent AGP). (unpkg.com)
  • Practical change: add/update in android/build.gradle (top-level) an ext.kotlinVersion = "1.5.20" (or newer) and ensure classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" is present, then run expo prebuild / gradle sync. See Detox/Expo plugin docs if you need the config-plugin to add Kotlin automatically. (unpkg.com)

If you want, tell me your Expo SDK version and Android Gradle Plugin version and I’ll recommend the exact kotlinVersion to set and show the exact gradle lines to add.

Citations:


🌐 Web query:

React Native 0.72 Expo 49 recommended Kotlin version Android Gradle Plugin compatibility

💡 Result:

Short answer — for React Native 0.72 + Expo SDK 49 use Kotlin 1.8.10 and the AGP/Gradle versions that Expo templates expect (AGP ~7.4.x with Gradle 7.5.1). Expo SDK 49 sets compileSdk=33 and the SDK/template was updated to inject a default kotlinVersion = "1.8.10" to avoid older-module conflicts. [1][2]

Notes / when to change:

  • If you upgrade to RN 0.73 / target Android SDK 34+ (or move AGP to 8.x) you should move Kotlin to newer 1.8.x+ (and often 1.8.22+) or the version required by your Compose/third‑party libs; AGP 8.x requires newer Kotlin versions. [3][4]

Sources

  • Expo SDK 49 docs (compileSdk = 33). [1]
  • Expo / GitHub change adding default kotlinVersion '1.8.10' for SDK 49 templates. [2]
  • Community/React‑Native threads on AGP vs Kotlin compatibility and RN 0.73 requirements (AGP 8.x → newer Kotlin). [3][4]

References

  1. Expo SDK 49 docs — compileSdkVersion 33. [1]
  2. expo/expo PR/issue adding default kotlinVersion '1.8.10' for SDK49 templates. [2]
  3. Threads showing AGP 8.x requires newer Kotlin (and RN 0.73+ moves to Kotlin). [3]
  4. Community posts about recommended Kotlin 1.8+ when upgrading AGP/Gradle. [4]

@karlhorky I've found the root cause! The Android build failures started with PR #249 (merged July 29, 2025) that updated @config-plugins/detox from v8 to v11.

Root Cause Analysis:

  1. Detox v10+ requires Kotlin Gradle Plugin: Starting with Detox v10, the Kotlin Gradle plugin is mandatory in Android projects
  2. Your workflow only upgrades the Kotlin version (from 1.4.21 to 1.6.0) but doesn't add the kotlin-gradle-plugin to the buildscript classpath
  3. The generated android/build.gradle is missing the plugin declaration, which causes the error: Plugin with id 'kotlin-android' not found

The Fix:

Add a step in your workflow to inject the Kotlin Gradle plugin into the root android/build.gradle after expo prebuild generates it. Based on your React Native 0.72 + Expo 49 setup, you should use Kotlin 1.8.10 (not 1.6.0).

Update .github/workflows/detox-android.yml to replace the "Upgrade Kotlin version" step with this:

- name: Add Kotlin Gradle Plugin and upgrade Kotlin version
  run: |
    # Add kotlin-gradle-plugin to buildscript dependencies
    sed -i'' -e $'s/dependencies {/dependencies {\\\n        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10")/' android/build.gradle
    # Update Kotlin version to 1.8.10
    sed -i'' -e $'s/kotlinVersion = "1.4.21"/kotlinVersion = "1.8.10"/g' android/build.gradle

Apply the same fix to .github/workflows/expo-start-android.yml.

Why this happened:

  • Before v11, @config-plugins/detox likely handled Kotlin configuration differently
  • The upgrade to v11 exposed the missing Kotlin plugin configuration
  • This is why CI has been failing since July 29 on the main branch—it's not related to the macOS 15 update at all

Would you like me to provide the complete updated workflow step with proper context, or would you prefer to test this fix first?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you create a fresh PR with this change?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@coderabbitai can you create a fresh PR with this change?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@karlhorky I cannot create PRs or commit code directly to the repository. However, I can provide you with the exact changes you need to make.

Here are the complete changes for both workflow files:

.github/workflows/detox-android.yml

Replace the "Upgrade Kotlin version" step (lines 30-32) with:

      # Add Kotlin Gradle Plugin to buildscript and upgrade Kotlin version
      # to 1.8.10 for compatibility with Detox v11+ which requires the
      # kotlin-gradle-plugin to be present
      # https://github.com/upleveled/hotline-bling-codealong/pull/266#discussion_r2403932774
      - name: Add Kotlin Gradle Plugin and upgrade Kotlin version
        run: |
          sed -i'' -e $'s/dependencies {/dependencies {\\\n        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10")/' android/build.gradle
          sed -i'' -e $'s/kotlinVersion = "1.4.21"/kotlinVersion = "1.8.10"/g' android/build.gradle

.github/workflows/expo-start-android.yml

Replace the "Upgrade Kotlin version" step with:

      # Add Kotlin Gradle Plugin to buildscript and upgrade Kotlin version
      # to 1.8.10 for compatibility with Detox v11+ which requires the
      # kotlin-gradle-plugin to be present
      # https://github.com/upleveled/hotline-bling-codealong/pull/266#discussion_r2403932774
      - name: Add Kotlin Gradle Plugin and upgrade Kotlin version
        run: |
          sed -i'' -e $'s/dependencies {/dependencies {\\\n        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10")/' android/build.gradle
          sed -i'' -e $'s/kotlinVersion = "1.4.21"/kotlinVersion = "1.8.10"/g' android/build.gradle

To create the PR yourself:

# Create a new branch
git checkout -b fix/add-kotlin-gradle-plugin

# Make the changes to both files
# (edit .github/workflows/detox-android.yml and .github/workflows/expo-start-android.yml)

# Commit and push
git add .github/workflows/detox-android.yml .github/workflows/expo-start-android.yml
git commit -m "Add Kotlin Gradle Plugin to fix Android builds

Detox v11+ requires the Kotlin Gradle plugin to be present in the
buildscript classpath. This was missing after PR #249 upgraded
@config-plugins/detox from v8 to v11, causing the error:
'Plugin with id kotlin-android not found.'

Also upgrades Kotlin version from 1.4.21 to 1.8.10 for compatibility
with React Native 0.72 + Expo SDK 49."

git push origin fix/add-kotlin-gradle-plugin

# Create the PR
gh pr create --title "Add Kotlin Gradle Plugin to fix Android builds" \
  --body "Fixes Android build failures by adding the Kotlin Gradle Plugin to buildscript dependencies.

## Root Cause
- PR #249 upgraded @config-plugins/detox from v8 to v11
- Detox v11+ requires the Kotlin Gradle plugin in the buildscript classpath
- The workflow was only upgrading the Kotlin version but not adding the plugin

## Changes
- Added \`kotlin-gradle-plugin:1.8.10\` to buildscript dependencies
- Upgraded Kotlin version from 1.4.21 to 1.8.10 (recommended for RN 0.72 + Expo 49)
- Applied fix to both \`detox-android.yml\` and \`expo-start-android.yml\`

Related: #266"

This PR will fix the Android build failures on the main branch and allow PR #266 (the macOS 15 update) to proceed successfully.

build:
name: Expo Dev Server Tests
runs-on: macos-13
runs-on: macos-15
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Expo Android emulator also incompatible with macos-15 arm64 runners

macos-15 jobs execute on Apple Silicon. This workflow still spins up an Android emulator with arch: x86, which cannot run on arm64 hosts and will immediately fail. Adjust the emulator (arch: arm64-v8a, appropriate system image/API) before adopting the new runner image, or stay on the Intel runner.

🤖 Prompt for AI Agents
.github/workflows/expo-start-android.yml around line 8: the workflow uses
runs-on: macos-15 (Apple Silicon) but the job creates an Android emulator with
arch: x86 which fails on arm64 hosts; update the emulator configuration to use
an arm64 system image (arch: arm64-v8a) and a matching API level/system-image
package (or switch the job back to an Intel macOS runner like macos-12/13);
ensure the AVD creation/setup steps and emulator launch flags reference the
arm64 image name and package so the emulator can boot on Apple Silicon.

@renovate
Copy link
Contributor Author

renovate bot commented Oct 4, 2025

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant