From 5eb1d13ad815883de90023efc8d6b248c63eafe1 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 12:16:18 -0500 Subject: [PATCH 01/38] Attempt to re-use existing Android emulator configuration --- .github/workflows/ci.yml | 75 +++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7cfdd0f..ae9547d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: pull_request: schedule: - - cron: '0 1,7,13,20 * * *' + - cron: '0 13 * * *' jobs: install-sdk: @@ -15,17 +15,17 @@ jobs: include: - name: 'macOS 15 X64 API 28' os: 'macos-15-intel' - ANDROID_API: 28 + ANDROID_API: 35 NDK_VERSION: 'r27d' EMULATOR_ARCH: 'x86_64' EMULATOR_ARCH_TRIPLE: 'x86_64' - - name: 'Ubuntu X64 API 28' - os: 'ubuntu-latest' - ANDROID_API: 28 - NDK_VERSION: 'r28c' - EMULATOR_ARCH: 'x86_64' - EMULATOR_ARCH_TRIPLE: 'x86_64' + #- name: 'Ubuntu X64 API 28' + # os: 'ubuntu-latest' + # ANDROID_API: 28 + # NDK_VERSION: 'r28c' + # EMULATOR_ARCH: 'x86_64' + # EMULATOR_ARCH_TRIPLE: 'x86_64' - name: 'Ubuntu X64 API 35' os: 'ubuntu-latest' @@ -71,6 +71,38 @@ jobs: sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" + - name: Android SDKs - list installed SDKs + run: sdkmanager --list_installed + + - name: Android SDKs - setup environment + if: false + run: yes y | sdkmanager --licenses > /dev/null + + - name: Android SKDs - setup build tools + if: false + run: sdkmanager --install "build-tools;${BUILD_TOOLS_VERSION}" platform-tools "platforms;android-${ANDROID_API}" --channel="${ANDROID_CHANNEL}" + + - name: Android SKDs - setup emulator + if: false + run: sdkmanager --install emulator --channel="${ANDROID_CHANNEL}" + + - name: Android Emulator - download required images + if: false + run: sdkmanager --install "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --channel="${ANDROID_CHANNEL}" + + - name: Android Emulator - Create + run: avdmanager --verbose create avd --force -n "${ANDROID_EMULATOR_NAME}" --device "${ANDROID_PROFILE}" --abi "${ANDROID_TARGET}/${ANDROID_EMULATOR_ARCH}" --package "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --sdcard 512M + + #- name: Android - Find AVDs + # run: find ~/ -type d -name '*.avd' + + #- name: Android - List AVDs + # run: emulator -list-avds + + - name: Android - Boot + run: nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & + + - name: Install Prerequisites run: | if [[ "${RUNNER_OS}" == "Linux" ]]; then @@ -169,33 +201,6 @@ jobs: sudo udevadm trigger --name-match=kvm fi - - name: Android SDKs - list installed SDKs - run: sdkmanager --list_installed - - - name: Android SDKs - setup environment - run: yes y | sdkmanager --licenses > /dev/null - - - name: Android SKDs - setup build tools - run: sdkmanager --install "build-tools;${BUILD_TOOLS_VERSION}" platform-tools "platforms;android-${ANDROID_API}" --channel="${ANDROID_CHANNEL}" - - - name: Android SKDs - setup emulator - run: sdkmanager --install emulator --channel="${ANDROID_CHANNEL}" - - - name: Android Emulator - download required images - run: sdkmanager --install "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --channel="${ANDROID_CHANNEL}" - - - name: Android Emulator - Create - run: avdmanager --verbose create avd --force -n "${ANDROID_EMULATOR_NAME}" --device "${ANDROID_PROFILE}" --abi "${ANDROID_TARGET}/${ANDROID_EMULATOR_ARCH}" --package "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --sdcard 512M - - #- name: Android - Find AVDs - # run: find ~/ -type d -name '*.avd' - - #- name: Android - List AVDs - # run: emulator -list-avds - - - name: Android - Boot - run: nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & - - name: ADB Wait For Device run: adb wait-for-any-device timeout-minutes: 5 From 3dc7ff067d839e18b969c7ca8c24f0ce27b1186f Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 12:28:58 -0500 Subject: [PATCH 02/38] Setup Android environment before running sdkmanager --- .github/workflows/ci.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae9547d..40bb28e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,6 +71,16 @@ jobs: sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" + - name: Setup Android Environment + run: | + echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${{ env.ANDROID_BUILD_TOOLS_VERSION }}" >> $GITHUB_PATH + # needed for Linux or else the emulator will be created in + # ~/.android/avd but it will be sought in ~/.config/.android/avd + if [[ "${RUNNER_OS}" == "Linux" ]]; then + echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV + fi + + - name: Android SDKs - list installed SDKs run: sdkmanager --list_installed @@ -170,15 +180,6 @@ jobs: # https://github.com/swiftlang/swift-driver/pull/1879 echo "ANDROID_NDK_ROOT=" >> $GITHUB_ENV - - name: Setup Android Environment - run: | - echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${{ env.ANDROID_BUILD_TOOLS_VERSION }}" >> $GITHUB_PATH - # needed for Linux or else the emulator will be created in - # ~/.android/avd but it will be sought in ~/.config/.android/avd - if [[ "${RUNNER_OS}" == "Linux" ]]; then - echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV - fi - - name: Setup Swift SDK for Android run: | cd ~/Library/org.swift.swiftpm || cd ${XDG_CONFIG_HOME}/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm From d7475f31aeba4336f244f95d984c064aa4aa1d02 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 12:42:17 -0500 Subject: [PATCH 03/38] Update emualtor creation --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40bb28e..defca28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -101,7 +101,10 @@ jobs: run: sdkmanager --install "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --channel="${ANDROID_CHANNEL}" - name: Android Emulator - Create - run: avdmanager --verbose create avd --force -n "${ANDROID_EMULATOR_NAME}" --device "${ANDROID_PROFILE}" --abi "${ANDROID_TARGET}/${ANDROID_EMULATOR_ARCH}" --package "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --sdcard 512M + run: | + # avdmanager --verbose create avd --force -n "${ANDROID_EMULATOR_NAME}" --device "${ANDROID_PROFILE}" --abi "${ANDROID_TARGET}/${ANDROID_EMULATOR_ARCH}" --package "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --sdcard 512M + echo "no" | avdmanager create avd -n emulator-5554 -k "system-images;android-34;default;x86_64" --device "pixel_6" + $ANDROID_HOME/emulator/emulator -list-avds #- name: Android - Find AVDs # run: find ~/ -type d -name '*.avd' From 34834be66d8bff9cf2c658774bc5ea32f1be09f9 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 12:57:34 -0500 Subject: [PATCH 04/38] Update emulator --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index defca28..a057fe7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,9 +102,11 @@ jobs: - name: Android Emulator - Create run: | - # avdmanager --verbose create avd --force -n "${ANDROID_EMULATOR_NAME}" --device "${ANDROID_PROFILE}" --abi "${ANDROID_TARGET}/${ANDROID_EMULATOR_ARCH}" --package "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --sdcard 512M - echo "no" | avdmanager create avd -n emulator-5554 -k "system-images;android-34;default;x86_64" --device "pixel_6" + which sdkmanager + sdkmanager --install "platform-tools" "platforms;android-34" "system-images;android-34;default;x86_64" "emulator" + echo "no" | avdmanager create avd -n testing -k "system-images;android-34;default;x86_64" --device "pixel_6" $ANDROID_HOME/emulator/emulator -list-avds + nohup emulator -memory 4096 -avd testing -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & #- name: Android - Find AVDs # run: find ~/ -type d -name '*.avd' From 0a127d3ad60375c7d752fe6e8cc8fb58399c43c4 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:03:43 -0500 Subject: [PATCH 05/38] Update emulator testing --- .github/workflows/ci.yml | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a057fe7..f6b45eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,10 +80,6 @@ jobs: echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV fi - - - name: Android SDKs - list installed SDKs - run: sdkmanager --list_installed - - name: Android SDKs - setup environment if: false run: yes y | sdkmanager --licenses > /dev/null @@ -102,9 +98,10 @@ jobs: - name: Android Emulator - Create run: | - which sdkmanager - sdkmanager --install "platform-tools" "platforms;android-34" "system-images;android-34;default;x86_64" "emulator" - echo "no" | avdmanager create avd -n testing -k "system-images;android-34;default;x86_64" --device "pixel_6" + which avdmanager + $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed + $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-${ANDROID_API};default;x86_64" + echo "no" | avdmanager create avd -n testing -k "system-images;android-${ANDROID_API};default;x86_64" --device "${ANDROID_PROFILE}" $ANDROID_HOME/emulator/emulator -list-avds nohup emulator -memory 4096 -avd testing -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & @@ -114,9 +111,8 @@ jobs: #- name: Android - List AVDs # run: emulator -list-avds - - name: Android - Boot - run: nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & - + #- name: Android - Boot + # run: nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & - name: Install Prerequisites run: | @@ -211,12 +207,6 @@ jobs: run: adb wait-for-any-device timeout-minutes: 5 - - name: Pause briefly - run: sleep 30 - - #- name: ADB Press Power Button - # run: adb shell input keyevent 82 - - name: Check Android Emulator run: | adb shell 'echo Hello Android!' From d18035a7084be2dee8f9e0b2b0ee984db96342f1 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:08:40 -0500 Subject: [PATCH 06/38] Update emulator testing --- .github/workflows/ci.yml | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f6b45eb..0494992 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,17 +15,17 @@ jobs: include: - name: 'macOS 15 X64 API 28' os: 'macos-15-intel' - ANDROID_API: 35 + ANDROID_API: 28 NDK_VERSION: 'r27d' EMULATOR_ARCH: 'x86_64' EMULATOR_ARCH_TRIPLE: 'x86_64' - #- name: 'Ubuntu X64 API 28' - # os: 'ubuntu-latest' - # ANDROID_API: 28 - # NDK_VERSION: 'r28c' - # EMULATOR_ARCH: 'x86_64' - # EMULATOR_ARCH_TRIPLE: 'x86_64' + - name: 'Ubuntu X64 API 28' + os: 'ubuntu-latest' + ANDROID_API: 28 + NDK_VERSION: 'r28c' + EMULATOR_ARCH: 'x86_64' + EMULATOR_ARCH_TRIPLE: 'x86_64' - name: 'Ubuntu X64 API 35' os: 'ubuntu-latest' @@ -34,6 +34,13 @@ jobs: EMULATOR_ARCH: 'x86_64' EMULATOR_ARCH_TRIPLE: 'x86_64' + - name: 'macOS 15 X64 API 36' + os: 'macos-15-intel' + ANDROID_API: 36 + NDK_VERSION: 'r27d' + EMULATOR_ARCH: 'x86_64' + EMULATOR_ARCH_TRIPLE: 'x86_64' + # Android SDK for Linux is only x86_64 #- name: 'Ubuntu ARM API 28' # os: 'ubuntu-24.04-arm' @@ -98,12 +105,11 @@ jobs: - name: Android Emulator - Create run: | - which avdmanager $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed - $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-${ANDROID_API};default;x86_64" - echo "no" | avdmanager create avd -n testing -k "system-images;android-${ANDROID_API};default;x86_64" --device "${ANDROID_PROFILE}" + $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-${ANDROID_API};default;${EMULATOR_ARCH}" + echo "no" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "system-images;android-${ANDROID_API};default;${EMULATOR_ARCH}" --device "${ANDROID_PROFILE}" $ANDROID_HOME/emulator/emulator -list-avds - nohup emulator -memory 4096 -avd testing -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & + nohup $ANDROID_HOME/emulator/emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & #- name: Android - Find AVDs # run: find ~/ -type d -name '*.avd' From e510d6fe39898c76a50fbaba29ed76ee499dc782 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:11:06 -0500 Subject: [PATCH 07/38] Update emulator testing --- .github/workflows/ci.yml | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0494992..9b9052f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,35 +78,10 @@ jobs: sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" - - name: Setup Android Environment - run: | - echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${{ env.ANDROID_BUILD_TOOLS_VERSION }}" >> $GITHUB_PATH - # needed for Linux or else the emulator will be created in - # ~/.android/avd but it will be sought in ~/.config/.android/avd - if [[ "${RUNNER_OS}" == "Linux" ]]; then - echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV - fi - - - name: Android SDKs - setup environment - if: false - run: yes y | sdkmanager --licenses > /dev/null - - - name: Android SKDs - setup build tools - if: false - run: sdkmanager --install "build-tools;${BUILD_TOOLS_VERSION}" platform-tools "platforms;android-${ANDROID_API}" --channel="${ANDROID_CHANNEL}" - - - name: Android SKDs - setup emulator - if: false - run: sdkmanager --install emulator --channel="${ANDROID_CHANNEL}" - - - name: Android Emulator - download required images - if: false - run: sdkmanager --install "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --channel="${ANDROID_CHANNEL}" - - name: Android Emulator - Create run: | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed - $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-${ANDROID_API};default;${EMULATOR_ARCH}" + $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-${ANDROID_API};default;${EMULATOR_ARCH}" --channel=3 echo "no" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "system-images;android-${ANDROID_API};default;${EMULATOR_ARCH}" --device "${ANDROID_PROFILE}" $ANDROID_HOME/emulator/emulator -list-avds nohup $ANDROID_HOME/emulator/emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & From 0ef5373d01f7fc9c69187511773e1dfcb64a70ee Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:12:33 -0500 Subject: [PATCH 08/38] Update emulator testing --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9b9052f..b868117 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -81,8 +81,9 @@ jobs: - name: Android Emulator - Create run: | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed - $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-${ANDROID_API};default;${EMULATOR_ARCH}" --channel=3 - echo "no" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "system-images;android-${ANDROID_API};default;${EMULATOR_ARCH}" --device "${ANDROID_PROFILE}" + EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" + $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "${EMULATOR_SPEC}" --channel=3 + echo "no" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" $ANDROID_HOME/emulator/emulator -list-avds nohup $ANDROID_HOME/emulator/emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & From 1d1e5306c7a25fb867582b9a512193fcdf7ed744 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:13:22 -0500 Subject: [PATCH 09/38] Update emulator testing --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b868117..41d611a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,7 +83,7 @@ jobs: $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "${EMULATOR_SPEC}" --channel=3 - echo "no" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" + yes | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" $ANDROID_HOME/emulator/emulator -list-avds nohup $ANDROID_HOME/emulator/emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & From bf96182d0a45c7afc35643480cad6b429a683f54 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:15:42 -0500 Subject: [PATCH 10/38] Update emulator testing --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 41d611a..682ff17 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: run: | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" - $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "${EMULATOR_SPEC}" --channel=3 + $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "${EMULATOR_SPEC}" yes | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" $ANDROID_HOME/emulator/emulator -list-avds nohup $ANDROID_HOME/emulator/emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & From 128175a4ae5ef3abffe03b3a2e239142bd85ca5b Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:21:51 -0500 Subject: [PATCH 11/38] Update emulator testing --- .github/workflows/ci.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 682ff17..62c763e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,14 +78,23 @@ jobs: sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" + - name: Setup Android Environment + run: | + echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${{ env.ANDROID_BUILD_TOOLS_VERSION }}" >> $GITHUB_PATH + # needed for Linux or else the emulator will be created in + # ~/.android/avd but it will be sought in ~/.config/.android/avd + if [[ "${RUNNER_OS}" == "Linux" ]]; then + echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV + fi + - name: Android Emulator - Create run: | - $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" - $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "${EMULATOR_SPEC}" - yes | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" - $ANDROID_HOME/emulator/emulator -list-avds - nohup $ANDROID_HOME/emulator/emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & + sdkmanager --list_installed + sdkmanager --install "${EMULATOR_SPEC}" + yes | avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" + emulator -list-avds + nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & #- name: Android - Find AVDs # run: find ~/ -type d -name '*.avd' From 29a890df2c366a9cf58b636d37149bf1bfcb3723 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:39:09 -0500 Subject: [PATCH 12/38] Update emulator testing --- .github/workflows/ci.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62c763e..86a6260 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,6 @@ jobs: #ANDROID_BUILD_TOOLS_VERSION: 36.0.0 ANDROID_BUILD_TOOLS_VERSION: 'latest' BUILD_TOOLS_VERSION: "35.0.0" - ANDROID_EMULATOR_NAME: 'demo' ANDROID_PROFILE: "Nexus 10" ANDROID_CHANNEL: "3" ANDROID_NDK_VERSION: "${{ matrix.NDK_VERSION }}" @@ -89,12 +88,14 @@ jobs: - name: Android Emulator - Create run: | - EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" sdkmanager --list_installed + yes | sdkmanager --licenses > /dev/null + EMULATOR_NAME="emulator-${ANDROID_API}" + EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" sdkmanager --install "${EMULATOR_SPEC}" - yes | avdmanager create avd -n "${ANDROID_EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" + avdmanager create avd -n "${EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" emulator -list-avds - nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & + nohup emulator -memory 4096 -avd "${EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & #- name: Android - Find AVDs # run: find ~/ -type d -name '*.avd' From 1e0dc916b77a13ff3a699e9e6485318b0e494449 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:42:35 -0500 Subject: [PATCH 13/38] Update emulator testing --- .github/workflows/ci.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 86a6260..298f293 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,13 @@ jobs: EMULATOR_ARCH: 'x86_64' EMULATOR_ARCH_TRIPLE: 'x86_64' + - name: 'macOS 15 X64 API 30' + os: 'macos-15-intel' + ANDROID_API: 30 + NDK_VERSION: 'r27d' + EMULATOR_ARCH: 'x86_64' + EMULATOR_ARCH_TRIPLE: 'x86_64' + - name: 'Ubuntu X64 API 35' os: 'ubuntu-latest' ANDROID_API: 35 @@ -34,13 +41,6 @@ jobs: EMULATOR_ARCH: 'x86_64' EMULATOR_ARCH_TRIPLE: 'x86_64' - - name: 'macOS 15 X64 API 36' - os: 'macos-15-intel' - ANDROID_API: 36 - NDK_VERSION: 'r27d' - EMULATOR_ARCH: 'x86_64' - EMULATOR_ARCH_TRIPLE: 'x86_64' - # Android SDK for Linux is only x86_64 #- name: 'Ubuntu ARM API 28' # os: 'ubuntu-24.04-arm' @@ -92,7 +92,7 @@ jobs: yes | sdkmanager --licenses > /dev/null EMULATOR_NAME="emulator-${ANDROID_API}" EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" - sdkmanager --install "${EMULATOR_SPEC}" + sdkmanager --install "${EMULATOR_SPEC}" "emulator" avdmanager create avd -n "${EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" emulator -list-avds nohup emulator -memory 4096 -avd "${EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & From 3b018d23210d1460e9c6af02306b38469fed4627 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 13:54:42 -0500 Subject: [PATCH 14/38] Update emulator testing --- .github/workflows/ci.yml | 61 ++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 298f293..9806b46 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,17 +57,6 @@ jobs: # EMULATOR_ARCH_TRIPLE: 'aarch64' runs-on: ${{ matrix.os }} - env: - ANDROID_API: ${{ matrix.ANDROID_API }} - ANDROID_EMULATOR_ARCH: ${{ matrix.EMULATOR_ARCH }} - ANDROID_EMULATOR_ARCH_TRIPLE: ${{ matrix.EMULATOR_ARCH_TRIPLE }} - ANDROID_TARGET: 'default' - #ANDROID_BUILD_TOOLS_VERSION: 36.0.0 - ANDROID_BUILD_TOOLS_VERSION: 'latest' - BUILD_TOOLS_VERSION: "35.0.0" - ANDROID_PROFILE: "Nexus 10" - ANDROID_CHANNEL: "3" - ANDROID_NDK_VERSION: "${{ matrix.NDK_VERSION }}" steps: - name: Free Disk Space if: runner.os == 'Linux' @@ -79,14 +68,32 @@ jobs: - name: Setup Android Environment run: | - echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${{ env.ANDROID_BUILD_TOOLS_VERSION }}" >> $GITHUB_PATH - # needed for Linux or else the emulator will be created in - # ~/.android/avd but it will be sought in ~/.config/.android/avd + echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH + echo "$ANDROID_HOME/emulator" >> $GITHUB_PATH + echo "$ANDROID_HOME/tools" >> $GITHUB_PATH + echo "$ANDROID_HOME/platform-tools" >> $GITHUB_PATH + echo "$ANDROID_HOME/build-tools/latest" >> $GITHUB_PATH + + echo "ANDROID_API=${{ matrix.ANDROID_API }}" >> $GITHUB_ENV + echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV + echo "ANDROID_EMULATOR_ARCH_TRIPLE=${{ matrix.EMULATOR_ARCH_TRIPLE }}" >> $GITHUB_ENV + echo "ANDROID_TARGET=default" >> $GITHUB_ENV + echo "ANDROID_PROFILE="Nexus 10"" >> $GITHUB_ENV + echo "ANDROID_CHANNEL=3" >> $GITHUB_ENV + echo "ANDROID_NDK_VERSION=${{ matrix.NDK_VERSION }}" >> $GITHUB_ENV + if [[ "${RUNNER_OS}" == "Linux" ]]; then + # needed for Linux or else the emulator will be created in + # ~/.android/avd but it will be sought in ~/.config/.android/avd echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV + + # enable KVM on Linux for emulator performance + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm fi - - name: Android Emulator - Create + - name: Create and Launch Android Emulator run: | sdkmanager --list_installed yes | sdkmanager --licenses > /dev/null @@ -95,17 +102,9 @@ jobs: sdkmanager --install "${EMULATOR_SPEC}" "emulator" avdmanager create avd -n "${EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" emulator -list-avds + # launch the emulator in the background; we will cat the log at the end nohup emulator -memory 4096 -avd "${EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & - #- name: Android - Find AVDs - # run: find ~/ -type d -name '*.avd' - - #- name: Android - List AVDs - # run: emulator -list-avds - - #- name: Android - Boot - # run: nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & - - name: Install Prerequisites run: | if [[ "${RUNNER_OS}" == "Linux" ]]; then @@ -186,22 +185,12 @@ jobs: swiftly run swift build --swift-sdk "${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" --static-swift-stdlib file .build/debug/hello - - name: Enable KVM - if: runner.os == 'Linux' - run: | - if [[ "${RUNNER_ARCH}" == "X64" ]]; then - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm - fi - - - name: ADB Wait For Device + - name: Wait for Android Emulator run: adb wait-for-any-device timeout-minutes: 5 - name: Check Android Emulator - run: | - adb shell 'echo Hello Android!' + run: adb shell 'echo Hello Android!' - name: Run Swift Executable on Android Emulator run: | From d26f4a8f6c46422b7136528d990693bd5b2fdbea Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:00:16 -0500 Subject: [PATCH 15/38] Update emulator testing --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9806b46..7704bcb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,7 +78,7 @@ jobs: echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV echo "ANDROID_EMULATOR_ARCH_TRIPLE=${{ matrix.EMULATOR_ARCH_TRIPLE }}" >> $GITHUB_ENV echo "ANDROID_TARGET=default" >> $GITHUB_ENV - echo "ANDROID_PROFILE="Nexus 10"" >> $GITHUB_ENV + echo "ANDROID_PROFILE='Nexus 10'" >> $GITHUB_ENV echo "ANDROID_CHANNEL=3" >> $GITHUB_ENV echo "ANDROID_NDK_VERSION=${{ matrix.NDK_VERSION }}" >> $GITHUB_ENV @@ -87,7 +87,8 @@ jobs: # ~/.android/avd but it will be sought in ~/.config/.android/avd echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV - # enable KVM on Linux for emulator performance + # enable KVM on Linux, else error on emulator launch: + # CPU acceleration status: This user doesn't have permissions to use KVM (/dev/kvm). echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm From 42f64a7652f929035bca6070a579ce12973c8537 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:02:47 -0500 Subject: [PATCH 16/38] Update emulator testing --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7704bcb..48fa08b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,7 +78,7 @@ jobs: echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV echo "ANDROID_EMULATOR_ARCH_TRIPLE=${{ matrix.EMULATOR_ARCH_TRIPLE }}" >> $GITHUB_ENV echo "ANDROID_TARGET=default" >> $GITHUB_ENV - echo "ANDROID_PROFILE='Nexus 10'" >> $GITHUB_ENV + echo "ANDROID_PROFILE=Nexus 10" >> $GITHUB_ENV echo "ANDROID_CHANNEL=3" >> $GITHUB_ENV echo "ANDROID_NDK_VERSION=${{ matrix.NDK_VERSION }}" >> $GITHUB_ENV From 963578599f2f004d0cf8344874c7dd08eb14d371 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:04:17 -0500 Subject: [PATCH 17/38] Update emulator testing --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 48fa08b..aa6aeb0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,7 +78,7 @@ jobs: echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV echo "ANDROID_EMULATOR_ARCH_TRIPLE=${{ matrix.EMULATOR_ARCH_TRIPLE }}" >> $GITHUB_ENV echo "ANDROID_TARGET=default" >> $GITHUB_ENV - echo "ANDROID_PROFILE=Nexus 10" >> $GITHUB_ENV + echo "ANDROID_PROFILE=Pixel 6" >> $GITHUB_ENV echo "ANDROID_CHANNEL=3" >> $GITHUB_ENV echo "ANDROID_NDK_VERSION=${{ matrix.NDK_VERSION }}" >> $GITHUB_ENV From 6bd429ece6da85160527c8ef4de3f9b6f2b0110f Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:14:44 -0500 Subject: [PATCH 18/38] Update emulator testing --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa6aeb0..969b3c7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,7 +78,8 @@ jobs: echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV echo "ANDROID_EMULATOR_ARCH_TRIPLE=${{ matrix.EMULATOR_ARCH_TRIPLE }}" >> $GITHUB_ENV echo "ANDROID_TARGET=default" >> $GITHUB_ENV - echo "ANDROID_PROFILE=Pixel 6" >> $GITHUB_ENV + #echo "ANDROID_PROFILE=Pixel 6" >> $GITHUB_ENV + echo "ANDROID_PROFILE=Nexus 10" >> $GITHUB_ENV echo "ANDROID_CHANNEL=3" >> $GITHUB_ENV echo "ANDROID_NDK_VERSION=${{ matrix.NDK_VERSION }}" >> $GITHUB_ENV @@ -100,7 +101,7 @@ jobs: yes | sdkmanager --licenses > /dev/null EMULATOR_NAME="emulator-${ANDROID_API}" EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" - sdkmanager --install "${EMULATOR_SPEC}" "emulator" + sdkmanager --install "${EMULATOR_SPEC}" avdmanager create avd -n "${EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" emulator -list-avds # launch the emulator in the background; we will cat the log at the end From 8ef46635ce9de4be8fd8b92ab0641554ddfcac22 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:27:24 -0500 Subject: [PATCH 19/38] Update emulator testing --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 969b3c7..5dc63d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,11 +97,11 @@ jobs: - name: Create and Launch Android Emulator run: | + EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" + EMULATOR_NAME="emulator-${ANDROID_API}" sdkmanager --list_installed yes | sdkmanager --licenses > /dev/null - EMULATOR_NAME="emulator-${ANDROID_API}" - EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" - sdkmanager --install "${EMULATOR_SPEC}" + sdkmanager --install "${EMULATOR_SPEC}" "emulator" "platform-tools" "platforms;android-${ANDROID_API}" avdmanager create avd -n "${EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" emulator -list-avds # launch the emulator in the background; we will cat the log at the end From 6c3b39129d5248ee69c3b8192b8f064675084acb Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:29:41 -0500 Subject: [PATCH 20/38] Update emulator testing --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5dc63d9..4c7648e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: - name: Create and Launch Android Emulator run: | EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}" - EMULATOR_NAME="emulator-${ANDROID_API}" + EMULATOR_NAME="swiftemu" sdkmanager --list_installed yes | sdkmanager --licenses > /dev/null sdkmanager --install "${EMULATOR_SPEC}" "emulator" "platform-tools" "platforms;android-${ANDROID_API}" From cb5179eb6602cf40909651b32b8de31ae2d00fc0 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:32:02 -0500 Subject: [PATCH 21/38] Update emulator testing --- .github/workflows/ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4c7648e..16a8b98 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,11 +68,7 @@ jobs: - name: Setup Android Environment run: | - echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH - echo "$ANDROID_HOME/emulator" >> $GITHUB_PATH - echo "$ANDROID_HOME/tools" >> $GITHUB_PATH - echo "$ANDROID_HOME/platform-tools" >> $GITHUB_PATH - echo "$ANDROID_HOME/build-tools/latest" >> $GITHUB_PATH + echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools" >> $GITHUB_PATH echo "ANDROID_API=${{ matrix.ANDROID_API }}" >> $GITHUB_ENV echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV From 95a19e7ea55ad4b475362856eaf2508d8416d2bc Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 14:32:56 -0500 Subject: [PATCH 22/38] Update emulator testing --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 16a8b98..3aaf081 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,7 +68,11 @@ jobs: - name: Setup Android Environment run: | - echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools" >> $GITHUB_PATH + echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH + echo "$ANDROID_HOME/platform-tools" >> $GITHUB_PATH + echo "$ANDROID_HOME/build-tools/latest" >> $GITHUB_PATH + echo "$ANDROID_HOME/tools" >> $GITHUB_PATH + echo "$ANDROID_HOME/emulator" >> $GITHUB_PATH echo "ANDROID_API=${{ matrix.ANDROID_API }}" >> $GITHUB_ENV echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV From 45bdff697d44d5a33a00f62e2719cba9e2b5186f Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 15:10:13 -0500 Subject: [PATCH 23/38] Update emulator testing --- .github/workflows/ci.yml | 46 +++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3aaf081..3a28aa8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -104,8 +104,9 @@ jobs: sdkmanager --install "${EMULATOR_SPEC}" "emulator" "platform-tools" "platforms;android-${ANDROID_API}" avdmanager create avd -n "${EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}" emulator -list-avds - # launch the emulator in the background; we will cat the log at the end + # launch the emulator in the background; we will cat the logs at the end nohup emulator -memory 4096 -avd "${EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log & + adb logcat 2>&1 > logcat.log & - name: Install Prerequisites run: | @@ -178,6 +179,8 @@ jobs: run: | cd ~/Library/org.swift.swiftpm || cd ${XDG_CONFIG_HOME}/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm ./swift-sdks/${SWIFT_ANDROID_SDK_VERSION}*.artifactbundle/swift-android/scripts/setup-android-sdk.sh + cd ./swift-sdks/${SWIFT_ANDROID_SDK_VERSION}*.artifactbundle + echo "SWIFT_ANDROID_SDK_HOME=${PWD}" >> $GITHUB_ENV - name: Build Swift Executable for Android run: | @@ -211,24 +214,27 @@ jobs: git clone https://github.com/${ORG}/${PACKAGE} cd ${PACKAGE} - swiftly run swift build --swift-sdk "${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}" + TRIPLE="${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" + swiftly run swift build --swift-sdk "${TRIPLE}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}" - adb push .build/debug/${PACKAGE}PackageTests.xctest /data/local/tmp/ - # copy up any test resources - adb push .build/debug/*.resources /data/local/tmp/ || true + STAGING=".build/android-test-${PACKAGE}/" + rm -rf "${STAGING}" + mkdir "${STAGING}" - # push potential dependent libraries - adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ - - # Since we are building with --static-swift-stdlib, we don't - # need to copy any of the other libraries - cd ~/Library/org.swift.swiftpm || cd ${XDG_CONFIG_HOME}/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm - adb push swift-sdks/${SWIFT_ANDROID_SDK_VERSION}*.artifactbundle/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so /data/local/tmp/ - cd - + cp -a .build/"${TRIPLE}"/"${PACKAGE}"PackageTests.xctest "${STAGING}" + cp -a .build/"${TRIPLE}"/*.resources "${STAGING}" + # for the common case of tests referencing their own resources + cp -a Tests "${STAGING}" + cp -a $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so "${STAGING}" + cp -a "${SWIFT_ANDROID_SDK_HOME}"/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so /data/local/tmp/ - adb shell ls /data/local/tmp/ + cd .build/ + STAGING_BASE=$(basename "${STAGING}") + zip -r "${STAGING_BASE}.zip" "${STAGING_BASE}" - adb shell /data/local/tmp/${PACKAGE}PackageTests.xctest + adb push "${STAGING_BASE}.zip" /data/local/tmp/ + adb shell unzip -d /data/local/tmp/ /data/local/tmp/"${STAGING_BASE}.zip" + adb shell /data/local/tmp/"${STAGING_BASE}"/"${PACKAGE}"PackageTests.xctest EOF chmod +x run-tests.sh @@ -252,8 +258,6 @@ jobs: run: ./run-tests.sh apple/swift-system - name: Run swift-crypto tests - # needs: Tests/CryptoExtrasVectors/rfc-7914-scrypt.txt - if: false run: ./run-tests.sh apple/swift-crypto - name: Run swift-nio tests @@ -266,7 +270,11 @@ jobs: if: false run: ./run-tests.sh apple/swift-argument-parser - - name: Android - Show Emulator Log + - name: Show Android Emulator Log + if: always() + run: cat emulator.log + + - name: Show Android Logcat Output if: always() - run: cat emulator.log || true + run: cat logcat.log From f4d38c1a665569686a5575db3d28ff00808e2bfa Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 15:28:24 -0500 Subject: [PATCH 24/38] Update emulator testing --- .github/workflows/ci.yml | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3a28aa8..8056744 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -217,22 +217,26 @@ jobs: TRIPLE="${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" swiftly run swift build --swift-sdk "${TRIPLE}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}" - STAGING=".build/android-test-${PACKAGE}/" - rm -rf "${STAGING}" - mkdir "${STAGING}" + cd .build + STAGING="android-test-${PACKAGE}" + rm -rf .build/"${STAGING}" + mkdir .build/"${STAGING}" - cp -a .build/"${TRIPLE}"/"${PACKAGE}"PackageTests.xctest "${STAGING}" - cp -a .build/"${TRIPLE}"/*.resources "${STAGING}" - # for the common case of tests referencing their own resources - cp -a Tests "${STAGING}" - cp -a $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so "${STAGING}" - cp -a "${SWIFT_ANDROID_SDK_HOME}"/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so /data/local/tmp/ + # for the common case of tests referencing their own files as hardwired resource paths + cp -a Tests .build/"${STAGING}" cd .build/ - STAGING_BASE=$(basename "${STAGING}") - zip -r "${STAGING_BASE}.zip" "${STAGING_BASE}" + cp -a debug/*.xctest "${STAGING}" + cp -a debug/*.resources "${STAGING}" || true + cp -a ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so "${STAGING}" + cp -a ${SWIFT_ANDROID_SDK_HOME}/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so "${STAGING}" + + zip -r "${STAGING}.zip" "${STAGING}" + + adb push "${STAGING}.zip" /data/local/tmp/ + + cd - - adb push "${STAGING_BASE}.zip" /data/local/tmp/ adb shell unzip -d /data/local/tmp/ /data/local/tmp/"${STAGING_BASE}.zip" adb shell /data/local/tmp/"${STAGING_BASE}"/"${PACKAGE}"PackageTests.xctest EOF From d4d4c45c521aa59fc35a9df66734e64b240206f9 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 15:34:13 -0500 Subject: [PATCH 25/38] Update emulator testing --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8056744..f301c5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -217,7 +217,6 @@ jobs: TRIPLE="${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" swiftly run swift build --swift-sdk "${TRIPLE}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}" - cd .build STAGING="android-test-${PACKAGE}" rm -rf .build/"${STAGING}" mkdir .build/"${STAGING}" From e509d051dfe3189b3bfbda2dbe55b2619858a3cf Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 15:40:25 -0500 Subject: [PATCH 26/38] Update emulator testing --- .github/workflows/ci.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f301c5e..6878ab5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -230,14 +230,11 @@ jobs: cp -a ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so "${STAGING}" cp -a ${SWIFT_ANDROID_SDK_HOME}/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so "${STAGING}" - zip -r "${STAGING}.zip" "${STAGING}" - - adb push "${STAGING}.zip" /data/local/tmp/ + adb push ${STAGING} /data/local/tmp/ cd - - adb shell unzip -d /data/local/tmp/ /data/local/tmp/"${STAGING_BASE}.zip" - adb shell /data/local/tmp/"${STAGING_BASE}"/"${PACKAGE}"PackageTests.xctest + adb shell "cd /data/local/tmp/${STAGING} && ./${PACKAGE}PackageTests.xctest" EOF chmod +x run-tests.sh From c68dea29ee2de4a19ab268f44b06e16febc23e71 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 15:54:37 -0500 Subject: [PATCH 27/38] Update emulator testing --- .github/workflows/ci.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6878ab5..0950ed4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -234,7 +234,17 @@ jobs: cd - - adb shell "cd /data/local/tmp/${STAGING} && ./${PACKAGE}PackageTests.xctest" + TEST_CMD="./${PACKAGE}PackageTests.xctest" + TEST_SHELL="cd /data/local/tmp/${STAGING}" + TEST_SHELL="${TEST_SHELL} && ${TEST_CMD}" + + # Run a second time with the Swift Testing library + # We additionally need to handle the special exit code EXIT_NO_TESTS_FOUND (69 on Android), + # which can happen when the tests link to Testing, but no tests are executed + # see: https://github.com/swiftlang/swift-package-manager/blob/1b593469e8ad3daf2cc10e798340bd2de68c402d/Sources/Commands/SwiftTestCommand.swift#L1542 + TEST_SHELL="${TEST_SHELL} && ${TEST_CMD} --testing-library swift-testing && [ \$? -eq 0 ] || [ \$? -eq 69 ]" + + adb shell "${TEST_SHELL}" EOF chmod +x run-tests.sh @@ -258,6 +268,8 @@ jobs: run: ./run-tests.sh apple/swift-system - name: Run swift-crypto tests + # references Tests/ file paths by absolute filename + if: false run: ./run-tests.sh apple/swift-crypto - name: Run swift-nio tests From 80d788a88a5bf6add544bf75fb722a883cfe17e6 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 16:44:36 -0500 Subject: [PATCH 28/38] Update emulator testing --- .github/workflows/ci.yml | 58 +++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0950ed4..8b6b7a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -204,12 +204,19 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - name: Create run-tests script + - name: Create android-ci script run: | - cat > run-tests.sh << "EOF" + cat > android-ci.sh << "EOF" #!/bin/bash -ex - ORG=$(echo "${1}" | cut -d '/' -f 1) - PACKAGE=$(echo "${1}" | cut -d '/' -f 2) + + if [[ -z "${2}" ]]; then + echo "$0: Usage: $0 build/test org/package + exit 1 + fi + + ACT=${1} + ORG=$(echo "${2}" | cut -d '/' -f 1) + PACKAGE=$(echo "${2}" | cut -d '/' -f 2) git clone https://github.com/${ORG}/${PACKAGE} cd ${PACKAGE} @@ -217,6 +224,17 @@ jobs: TRIPLE="${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" swiftly run swift build --swift-sdk "${TRIPLE}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}" + if [[ "${ACT}" == "build" ]]; then + # build-only, not test + exit 0 + fi + + if [[ "${ACT}" != "test" ]]; then + # build-only, not test + echo "$0: Usage: $0 build/test org/package + exit 1 + fi + STAGING="android-test-${PACKAGE}" rm -rf .build/"${STAGING}" mkdir .build/"${STAGING}" @@ -247,40 +265,36 @@ jobs: adb shell "${TEST_SHELL}" EOF - chmod +x run-tests.sh - cat run-tests.sh - - - name: Run swift-collections tests - # too slow - if: false - run: ./run-tests.sh apple/swift-collections + chmod +x android-ci.sh + cat android-ci.sh - name: Run swift-numerics tests - run: ./run-tests.sh apple/swift-numerics + run: ./android-ci.sh test apple/swift-numerics - name: Run swift-algorithms tests - run: ./run-tests.sh apple/swift-algorithms + run: ./android-ci.sh test apple/swift-algorithms - name: Run swift-atomics tests - run: ./run-tests.sh apple/swift-atomics + run: ./android-ci.sh test apple/swift-atomics + + - name: Run swift-collections tests + run: ./android-ci.sh test apple/swift-collections - name: Run swift-system tests - run: ./run-tests.sh apple/swift-system + # build-only: https://github.com/apple/swift-system/pull/272 + run: ./android-ci.sh build apple/swift-system - name: Run swift-crypto tests - # references Tests/ file paths by absolute filename - if: false - run: ./run-tests.sh apple/swift-crypto + # build-only: tests references Tests/ file paths by absolute filename + run: ./android-ci.sh build apple/swift-crypto - name: Run swift-nio tests - if: false - run: ./run-tests.sh apple/swift-nio + run: ./android-ci.sh build apple/swift-nio - name: Run swift-argument-parser tests # needs local files: # error: MathExampleTests.testMath_AddHelp : failed - No executable at '/data/local/tmp/math'. - if: false - run: ./run-tests.sh apple/swift-argument-parser + run: ./android-ci.sh build apple/swift-argument-parser - name: Show Android Emulator Log if: always() From adf54ab2aae7ce4378723dcf1bd1bd6a0a9aefd6 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 17:11:43 -0500 Subject: [PATCH 29/38] Update action script --- .github/workflows/ci.yml | 66 ++-------------------------------------- android-ci.sh | 57 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 64 deletions(-) create mode 100755 android-ci.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8b6b7a9..4fe4de6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,6 +58,8 @@ jobs: runs-on: ${{ matrix.os }} steps: + - uses: actions/checkout@v4 + - name: Free Disk Space if: runner.os == 'Linux' run: | @@ -204,70 +206,6 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - name: Create android-ci script - run: | - cat > android-ci.sh << "EOF" - #!/bin/bash -ex - - if [[ -z "${2}" ]]; then - echo "$0: Usage: $0 build/test org/package - exit 1 - fi - - ACT=${1} - ORG=$(echo "${2}" | cut -d '/' -f 1) - PACKAGE=$(echo "${2}" | cut -d '/' -f 2) - - git clone https://github.com/${ORG}/${PACKAGE} - cd ${PACKAGE} - - TRIPLE="${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" - swiftly run swift build --swift-sdk "${TRIPLE}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}" - - if [[ "${ACT}" == "build" ]]; then - # build-only, not test - exit 0 - fi - - if [[ "${ACT}" != "test" ]]; then - # build-only, not test - echo "$0: Usage: $0 build/test org/package - exit 1 - fi - - STAGING="android-test-${PACKAGE}" - rm -rf .build/"${STAGING}" - mkdir .build/"${STAGING}" - - # for the common case of tests referencing their own files as hardwired resource paths - cp -a Tests .build/"${STAGING}" - - cd .build/ - cp -a debug/*.xctest "${STAGING}" - cp -a debug/*.resources "${STAGING}" || true - cp -a ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so "${STAGING}" - cp -a ${SWIFT_ANDROID_SDK_HOME}/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so "${STAGING}" - - adb push ${STAGING} /data/local/tmp/ - - cd - - - TEST_CMD="./${PACKAGE}PackageTests.xctest" - TEST_SHELL="cd /data/local/tmp/${STAGING}" - TEST_SHELL="${TEST_SHELL} && ${TEST_CMD}" - - # Run a second time with the Swift Testing library - # We additionally need to handle the special exit code EXIT_NO_TESTS_FOUND (69 on Android), - # which can happen when the tests link to Testing, but no tests are executed - # see: https://github.com/swiftlang/swift-package-manager/blob/1b593469e8ad3daf2cc10e798340bd2de68c402d/Sources/Commands/SwiftTestCommand.swift#L1542 - TEST_SHELL="${TEST_SHELL} && ${TEST_CMD} --testing-library swift-testing && [ \$? -eq 0 ] || [ \$? -eq 69 ]" - - adb shell "${TEST_SHELL}" - EOF - - chmod +x android-ci.sh - cat android-ci.sh - - name: Run swift-numerics tests run: ./android-ci.sh test apple/swift-numerics diff --git a/android-ci.sh b/android-ci.sh new file mode 100755 index 0000000..570d997 --- /dev/null +++ b/android-ci.sh @@ -0,0 +1,57 @@ +#!/bin/bash -ex + +if [[ -z "${2}" ]]; then + echo "$0: Usage: $0 build/test org/package" + exit 1 +fi + +ACT=${1} +ORG=$(echo "${2}" | cut -d '/' -f 1) +PACKAGE=$(echo "${2}" | cut -d '/' -f 2) + +git clone https://github.com/${ORG}/${PACKAGE} +cd ${PACKAGE} + +TRIPLE="${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" +swiftly run swift build --swift-sdk "${TRIPLE}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}" + +if [[ "${ACT}" == "build" ]]; then + # build-only, not test, so we are done + exit 0 +fi + +if [[ "${ACT}" != "test" ]]; then + # build-only, not test + echo "$0: Usage: $0 build/test org/package" + exit 1 +fi + +STAGING="android-test-${PACKAGE}" +rm -rf .build/"${STAGING}" +mkdir .build/"${STAGING}" + +# for the common case of tests referencing their own files as hardwired resource paths +cp -a Tests .build/"${STAGING}" + +cd .build/ +cp -a debug/*.xctest "${STAGING}" +cp -a debug/*.resources "${STAGING}" || true +cp -a ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so "${STAGING}" +cp -a ${SWIFT_ANDROID_SDK_HOME}/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so "${STAGING}" + +adb push ${STAGING} /data/local/tmp/ + +cd - + +TEST_CMD="./${PACKAGE}PackageTests.xctest" +TEST_SHELL="cd /data/local/tmp/${STAGING}" +TEST_SHELL="${TEST_SHELL} && ${TEST_CMD}" + +# Run a second time with the Swift Testing library +# We additionally need to handle the special exit code EXIT_NO_TESTS_FOUND (69 on Android), +# which can happen when the tests link to Testing, but no tests are executed +# see: https://github.com/swiftlang/swift-package-manager/blob/1b593469e8ad3daf2cc10e798340bd2de68c402d/Sources/Commands/SwiftTestCommand.swift#L1542 +TEST_SHELL="${TEST_SHELL} && ${TEST_CMD} --testing-library swift-testing && [ \$? -eq 0 ] || [ \$? -eq 69 ]" + +adb shell "${TEST_SHELL}" + From 64847ca9bf082e0ffc873c82ee50c85bcc127042 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 17:30:00 -0500 Subject: [PATCH 30/38] Add more package tests --- .github/workflows/ci.yml | 45 ++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fe4de6..b4eeb37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,33 +206,38 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - name: Run swift-numerics tests - run: ./android-ci.sh test apple/swift-numerics + - run: ./android-ci.sh test apple/swift-toolchain-sqlite - - name: Run swift-algorithms tests - run: ./android-ci.sh test apple/swift-algorithms + - run: ./android-ci.sh test apple/swift-markdown - - name: Run swift-atomics tests - run: ./android-ci.sh test apple/swift-atomics + - run: ./android-ci.sh test apple/swift-tools-support-core - - name: Run swift-collections tests - run: ./android-ci.sh test apple/swift-collections + - run: ./android-ci.sh test apple/swift-syntax - - name: Run swift-system tests - # build-only: https://github.com/apple/swift-system/pull/272 - run: ./android-ci.sh build apple/swift-system + - run: ./android-ci.sh test apple/swift-subprocess - - name: Run swift-crypto tests - # build-only: tests references Tests/ file paths by absolute filename - run: ./android-ci.sh build apple/swift-crypto + - run: ./android-ci.sh test apple/swift-java - - name: Run swift-nio tests - run: ./android-ci.sh build apple/swift-nio + - run: ./android-ci.sh test apple/swift-numerics - - name: Run swift-argument-parser tests - # needs local files: - # error: MathExampleTests.testMath_AddHelp : failed - No executable at '/data/local/tmp/math'. - run: ./android-ci.sh build apple/swift-argument-parser + - run: ./android-ci.sh test apple/swift-algorithms + + - run: ./android-ci.sh test apple/swift-atomics + + # build-only: tests work, but they take a very long time + - run: ./android-ci.sh build apple/swift-collections + + # build-only: https://github.com/apple/swift-system/pull/272 + - run: ./android-ci.sh build apple/swift-system + + # build-only: tests references Tests/ file paths by absolute filename + - run: ./android-ci.sh build apple/swift-crypto + + - run: ./android-ci.sh build apple/swift-nio + + # build-only, since tests needs local files: + # error: MathExampleTests.testMath_AddHelp : failed - No executable at '/data/local/tmp/math'. + - run: ./android-ci.sh build apple/swift-argument-parser - name: Show Android Emulator Log if: always() From 984de91b3f31508e10f16dc03c17d2b821f5e429 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 17:43:22 -0500 Subject: [PATCH 31/38] Update testing packages --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4eeb37..f417cf5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,17 +206,17 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - run: ./android-ci.sh test apple/swift-toolchain-sqlite + - run: ./android-ci.sh test swiftlang/swift-toolchain-sqlite - - run: ./android-ci.sh test apple/swift-markdown + - run: ./android-ci.sh test swiftlang/swift-markdown - - run: ./android-ci.sh test apple/swift-tools-support-core + - run: ./android-ci.sh test swiftlang/swift-tools-support-core - - run: ./android-ci.sh test apple/swift-syntax + - run: ./android-ci.sh test swiftlang/swift-syntax - - run: ./android-ci.sh test apple/swift-subprocess + - run: ./android-ci.sh test swiftlang/swift-subprocess - - run: ./android-ci.sh test apple/swift-java + - run: ./android-ci.sh test swiftlang/swift-java - run: ./android-ci.sh test apple/swift-numerics From 9a99d4a13bc4ef04a947194ce9fa0e2d151129b2 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 17:48:52 -0500 Subject: [PATCH 32/38] Update testing packages --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f417cf5..7c1d209 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,8 +206,6 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - run: ./android-ci.sh test swiftlang/swift-toolchain-sqlite - - run: ./android-ci.sh test swiftlang/swift-markdown - run: ./android-ci.sh test swiftlang/swift-tools-support-core @@ -224,6 +222,9 @@ jobs: - run: ./android-ci.sh test apple/swift-atomics + # no tests in swift-toolchain-sqlite + - run: ./android-ci.sh build swiftlang/swift-toolchain-sqlite + # build-only: tests work, but they take a very long time - run: ./android-ci.sh build apple/swift-collections From 23a5cd8e518e2cadb12b840b692269584be35a2b Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 17:56:39 -0500 Subject: [PATCH 33/38] Update testing packages --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7c1d209..b21f7d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,8 +206,6 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - run: ./android-ci.sh test swiftlang/swift-markdown - - run: ./android-ci.sh test swiftlang/swift-tools-support-core - run: ./android-ci.sh test swiftlang/swift-syntax @@ -222,6 +220,9 @@ jobs: - run: ./android-ci.sh test apple/swift-atomics + # build-only because it tries to write to "/tmp/old.txt" and "/tmp/" does not exist + - run: ./android-ci.sh build swiftlang/swift-markdown + # no tests in swift-toolchain-sqlite - run: ./android-ci.sh build swiftlang/swift-toolchain-sqlite From 7bf89579114ee94f66339b531bf498d3319ff719 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 18:10:18 -0500 Subject: [PATCH 34/38] Update testing packages --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b21f7d9..66dfa8b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,8 +206,6 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - run: ./android-ci.sh test swiftlang/swift-tools-support-core - - run: ./android-ci.sh test swiftlang/swift-syntax - run: ./android-ci.sh test swiftlang/swift-subprocess @@ -220,6 +218,10 @@ jobs: - run: ./android-ci.sh test apple/swift-atomics + # build-only because tests crash in NetrcTests.testNoErrorMixedAccount + # and tests use abslute file paths + - run: ./android-ci.sh build swiftlang/swift-tools-support-core + # build-only because it tries to write to "/tmp/old.txt" and "/tmp/" does not exist - run: ./android-ci.sh build swiftlang/swift-markdown From 0260e3a8d086d79f1b39ab19d67b92879d45bc10 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 18:41:26 -0500 Subject: [PATCH 35/38] Update testing packages --- .github/workflows/ci.yml | 5 +++-- android-ci.sh | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 66dfa8b..1be07a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,8 +206,6 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - run: ./android-ci.sh test swiftlang/swift-syntax - - run: ./android-ci.sh test swiftlang/swift-subprocess - run: ./android-ci.sh test swiftlang/swift-java @@ -218,6 +216,9 @@ jobs: - run: ./android-ci.sh test apple/swift-atomics + # build-only because it uses hardwired StringLiteralRepresentedLiteralValueTests.swift + - run: ./android-ci.sh build swiftlang/swift-syntax + # build-only because tests crash in NetrcTests.testNoErrorMixedAccount # and tests use abslute file paths - run: ./android-ci.sh build swiftlang/swift-tools-support-core diff --git a/android-ci.sh b/android-ci.sh index 570d997..e600ee6 100755 --- a/android-ci.sh +++ b/android-ci.sh @@ -31,7 +31,9 @@ rm -rf .build/"${STAGING}" mkdir .build/"${STAGING}" # for the common case of tests referencing their own files as hardwired resource paths -cp -a Tests .build/"${STAGING}" +if [[ -d Tests ]]; then + cp -a Tests .build/"${STAGING}" +fi cd .build/ cp -a debug/*.xctest "${STAGING}" From b7c863c2a7d270df76d19f565657195198bf14ff Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 18:54:45 -0500 Subject: [PATCH 36/38] Update testing packages --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1be07a4..3f89966 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,16 +206,16 @@ jobs: adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/ adb shell /data/local/tmp/hello - - run: ./android-ci.sh test swiftlang/swift-subprocess - - - run: ./android-ci.sh test swiftlang/swift-java - - run: ./android-ci.sh test apple/swift-numerics - run: ./android-ci.sh test apple/swift-algorithms - run: ./android-ci.sh test apple/swift-atomics + - run: ./android-ci.sh build swiftlang/swift-subprocess + + - run: ./android-ci.sh build swiftlang/swift-java + # build-only because it uses hardwired StringLiteralRepresentedLiteralValueTests.swift - run: ./android-ci.sh build swiftlang/swift-syntax From c43bf24dbe7d0d80f732edbddfa9f194eaa21832 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 19:58:58 -0500 Subject: [PATCH 37/38] Update testing packages --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f89966..4136ee5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -214,8 +214,6 @@ jobs: - run: ./android-ci.sh build swiftlang/swift-subprocess - - run: ./android-ci.sh build swiftlang/swift-java - # build-only because it uses hardwired StringLiteralRepresentedLiteralValueTests.swift - run: ./android-ci.sh build swiftlang/swift-syntax From d13bf4d0762a3b33f45c72c7126bbc84897afab9 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 7 Dec 2025 20:49:27 -0500 Subject: [PATCH 38/38] Update testing packages --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4136ee5..32a8413 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -240,7 +240,7 @@ jobs: # build-only, since tests needs local files: # error: MathExampleTests.testMath_AddHelp : failed - No executable at '/data/local/tmp/math'. - - run: ./android-ci.sh build apple/swift-argument-parser + #- run: ./android-ci.sh build apple/swift-argument-parser - name: Show Android Emulator Log if: always()