From ee8fbc9bae919b4c909c4da00013ca6a964b955d Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 15:56:45 -0400 Subject: [PATCH 1/7] Add post-install phase for Android to install_swift_sdk.sh --- .github/workflows/pull_request.yml | 2 -- Sources/NIOPerformanceTester/main.swift | 5 +++++ scripts/install_swift_sdk.sh | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 5b1e590eca..aef0ade08b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -109,8 +109,6 @@ jobs: name: Android Swift SDK # Workaround https://github.com/nektos/act/issues/1875 uses: apple/swift-nio/.github/workflows/android_sdk.yml@main - with: - additional_command_arguments: "--target NIOCore" release-builds: name: Release builds diff --git a/Sources/NIOPerformanceTester/main.swift b/Sources/NIOPerformanceTester/main.swift index b3c2840a7a..ac741839f3 100644 --- a/Sources/NIOPerformanceTester/main.swift +++ b/Sources/NIOPerformanceTester/main.swift @@ -28,7 +28,12 @@ import NIOCore import NIOEmbedded import NIOFoundationCompat import NIOHTTP1 +#if os(Android) +// workaround for error: reference to var 'stdout' is not concurrency-safe because it involves shared mutable state +@preconcurrency import NIOPosix +#else import NIOPosix +#endif import NIOWebSocket // Use unbuffered stdout to help detect exactly which test was running in the event of a crash. diff --git a/scripts/install_swift_sdk.sh b/scripts/install_swift_sdk.sh index 31a2205dfa..01f35da740 100755 --- a/scripts/install_swift_sdk.sh +++ b/scripts/install_swift_sdk.sh @@ -127,3 +127,18 @@ swift --version log "Installing Swift SDK" swift sdk install "$sdk_path" + +if [[ "$sdk" == "android-sdk" ]]; then + log "Swift SDK Post-install" + # guess some common places where the swift-sdks file lives + cd ~/Library/org.swift.swiftpm || cd ~/.config/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm + + # download and link the NDK + local android_ndk_version="r27d" + curl -fsSL -o ndk.zip --retry 3 "https://dl.google.com/android/repository/android-ndk-${android_ndk_version}-$(uname -s).zip" + unzip -q ndk.zip + rm ndk.zip + export ANDROID_NDK_HOME="${PWD}/android-ndk-${android_ndk_version}" + ./swift-sdks/*android*.artifactbundle/swift-android/scripts/setup-android-sdk.sh + cd - +fi From 7932b35aa7b19931dd162e8dfaaf8842c76fe201 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 16:06:44 -0400 Subject: [PATCH 2/7] Fixup install_swift_sdk.sh for shell link check --- .github/workflows/android_sdk.yml | 3 ++- scripts/install_swift_sdk.sh | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/android_sdk.yml b/.github/workflows/android_sdk.yml index 54f61f6a71..6ec67dbbd8 100644 --- a/.github/workflows/android_sdk.yml +++ b/.github/workflows/android_sdk.yml @@ -38,6 +38,7 @@ jobs: fi # Generate matrix with parsed environment variables + # FIXME: move script back from swift-android-sdk repo to swift-nio cat >> "$GITHUB_OUTPUT" << EOM android-sdk-matrix=$(echo '{ "config":[ @@ -47,7 +48,7 @@ jobs: "platform":"Linux", "runner":"ubuntu-latest", "image":"ubuntu:jammy", - "setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_sdk.sh | INSTALL_SWIFT_BRANCH=main INSTALL_SWIFT_ARCH=x86_64 INSTALL_SWIFT_SDK=android-sdk bash && hash -r", + "setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-android-sdk/main/scripts/install_swift_sdk.sh | INSTALL_SWIFT_BRANCH=main INSTALL_SWIFT_ARCH=x86_64 INSTALL_SWIFT_SDK=android-sdk bash && hash -r", "command":"curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/swift-build-with-android-sdk.sh | bash -s --", "command_arguments":"${{ inputs.additional_command_arguments }}", "env":'"$env_vars_json"' diff --git a/scripts/install_swift_sdk.sh b/scripts/install_swift_sdk.sh index 01f35da740..3420ad48db 100755 --- a/scripts/install_swift_sdk.sh +++ b/scripts/install_swift_sdk.sh @@ -131,14 +131,15 @@ swift sdk install "$sdk_path" if [[ "$sdk" == "android-sdk" ]]; then log "Swift SDK Post-install" # guess some common places where the swift-sdks file lives - cd ~/Library/org.swift.swiftpm || cd ~/.config/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm + cd ~/Library/org.swift.swiftpm || cd ~/.config/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm || exit 1 # download and link the NDK - local android_ndk_version="r27d" + android_ndk_version="r27d" curl -fsSL -o ndk.zip --retry 3 "https://dl.google.com/android/repository/android-ndk-${android_ndk_version}-$(uname -s).zip" unzip -q ndk.zip rm ndk.zip export ANDROID_NDK_HOME="${PWD}/android-ndk-${android_ndk_version}" - ./swift-sdks/*android*.artifactbundle/swift-android/scripts/setup-android-sdk.sh - cd - + bundledir=$(ls -d swift-sdks/*android*.artifactbundle | head -n 1) + ${bundledir}/swift-android/scripts/setup-android-sdk.sh + cd - || exit fi From d99b7dd537c09f3b2dac42919a6fe555342f3aa4 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 16:19:16 -0400 Subject: [PATCH 3/7] Fix location of SDK install script --- .github/workflows/android_sdk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android_sdk.yml b/.github/workflows/android_sdk.yml index 6ec67dbbd8..fb068f98fb 100644 --- a/.github/workflows/android_sdk.yml +++ b/.github/workflows/android_sdk.yml @@ -48,7 +48,7 @@ jobs: "platform":"Linux", "runner":"ubuntu-latest", "image":"ubuntu:jammy", - "setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-android-sdk/main/scripts/install_swift_sdk.sh | INSTALL_SWIFT_BRANCH=main INSTALL_SWIFT_ARCH=x86_64 INSTALL_SWIFT_SDK=android-sdk bash && hash -r", + "setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/swift-nio/main/scripts/install_swift_sdk.sh | INSTALL_SWIFT_BRANCH=main INSTALL_SWIFT_ARCH=x86_64 INSTALL_SWIFT_SDK=android-sdk bash && hash -r", "command":"curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/swift-build-with-android-sdk.sh | bash -s --", "command_arguments":"${{ inputs.additional_command_arguments }}", "env":'"$env_vars_json"' From 1636b5de39099a0c7cce31e42b0a9b5778f30197 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 16:23:49 -0400 Subject: [PATCH 4/7] Fix script syntax --- scripts/install_swift_sdk.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/install_swift_sdk.sh b/scripts/install_swift_sdk.sh index 3420ad48db..5539153ccd 100755 --- a/scripts/install_swift_sdk.sh +++ b/scripts/install_swift_sdk.sh @@ -128,8 +128,8 @@ swift --version log "Installing Swift SDK" swift sdk install "$sdk_path" +log "Swift SDK Post-install" if [[ "$sdk" == "android-sdk" ]]; then - log "Swift SDK Post-install" # guess some common places where the swift-sdks file lives cd ~/Library/org.swift.swiftpm || cd ~/.config/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm || exit 1 @@ -139,7 +139,7 @@ if [[ "$sdk" == "android-sdk" ]]; then unzip -q ndk.zip rm ndk.zip export ANDROID_NDK_HOME="${PWD}/android-ndk-${android_ndk_version}" - bundledir=$(ls -d swift-sdks/*android*.artifactbundle | head -n 1) - ${bundledir}/swift-android/scripts/setup-android-sdk.sh + bundledir=$(find . -type d -maxdepth 2 -name '*android*.artifactbundle' | head -n 1) + "${bundledir}"/swift-android/scripts/setup-android-sdk.sh cd - || exit fi From 987b251836953dee8662e4663fec3637062c1fb9 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 16:25:59 -0400 Subject: [PATCH 5/7] Fix script location --- .github/workflows/pull_request.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index aef0ade08b..f675100e27 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -108,7 +108,9 @@ jobs: android-sdk: name: Android Swift SDK # Workaround https://github.com/nektos/act/issues/1875 - uses: apple/swift-nio/.github/workflows/android_sdk.yml@main + uses: swift-android-sdk/swift-nio/.github/workflows/android_sdk.yml@main + # FIXME: restore this from swift-android-sdk to apple + #uses: apple/swift-nio/.github/workflows/android_sdk.yml@main release-builds: name: Release builds From cb85a53487a1d6f700e39b45818c61ef72226c51 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 16:40:53 -0400 Subject: [PATCH 6/7] Cleanup NDK install section of script --- .github/workflows/android_sdk.yml | 3 +-- .github/workflows/pull_request.yml | 4 +--- scripts/install_swift_sdk.sh | 6 ++++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/android_sdk.yml b/.github/workflows/android_sdk.yml index fb068f98fb..54f61f6a71 100644 --- a/.github/workflows/android_sdk.yml +++ b/.github/workflows/android_sdk.yml @@ -38,7 +38,6 @@ jobs: fi # Generate matrix with parsed environment variables - # FIXME: move script back from swift-android-sdk repo to swift-nio cat >> "$GITHUB_OUTPUT" << EOM android-sdk-matrix=$(echo '{ "config":[ @@ -48,7 +47,7 @@ jobs: "platform":"Linux", "runner":"ubuntu-latest", "image":"ubuntu:jammy", - "setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/swift-nio/main/scripts/install_swift_sdk.sh | INSTALL_SWIFT_BRANCH=main INSTALL_SWIFT_ARCH=x86_64 INSTALL_SWIFT_SDK=android-sdk bash && hash -r", + "setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_sdk.sh | INSTALL_SWIFT_BRANCH=main INSTALL_SWIFT_ARCH=x86_64 INSTALL_SWIFT_SDK=android-sdk bash && hash -r", "command":"curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/swift-build-with-android-sdk.sh | bash -s --", "command_arguments":"${{ inputs.additional_command_arguments }}", "env":'"$env_vars_json"' diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index f675100e27..aef0ade08b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -108,9 +108,7 @@ jobs: android-sdk: name: Android Swift SDK # Workaround https://github.com/nektos/act/issues/1875 - uses: swift-android-sdk/swift-nio/.github/workflows/android_sdk.yml@main - # FIXME: restore this from swift-android-sdk to apple - #uses: apple/swift-nio/.github/workflows/android_sdk.yml@main + uses: apple/swift-nio/.github/workflows/android_sdk.yml@main release-builds: name: Release builds diff --git a/scripts/install_swift_sdk.sh b/scripts/install_swift_sdk.sh index 5539153ccd..dcf307e50a 100755 --- a/scripts/install_swift_sdk.sh +++ b/scripts/install_swift_sdk.sh @@ -130,12 +130,14 @@ swift sdk install "$sdk_path" log "Swift SDK Post-install" if [[ "$sdk" == "android-sdk" ]]; then - # guess some common places where the swift-sdks file lives + # guess some common places where the swift-sdks folder lives cd ~/Library/org.swift.swiftpm || cd ~/.config/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm || exit 1 # download and link the NDK android_ndk_version="r27d" - curl -fsSL -o ndk.zip --retry 3 "https://dl.google.com/android/repository/android-ndk-${android_ndk_version}-$(uname -s).zip" + android_ndk_url="https://dl.google.com/android/repository/android-ndk-${android_ndk_version}-$(uname -s).zip" + log "Android Native Development Kit URL: ${android_ndk_url}" + curl -fsSL -o ndk.zip --retry 3 "${android_ndk_url}" unzip -q ndk.zip rm ndk.zip export ANDROID_NDK_HOME="${PWD}/android-ndk-${android_ndk_version}" From eea2e71aeef7a9071dc6041d6b996f37474e140a Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Fri, 24 Oct 2025 11:52:33 -0400 Subject: [PATCH 7/7] Move to android_ndk_version to header and allow it to be parameterized with INSTALL_ANDROID_NDK env --- scripts/install_swift_sdk.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install_swift_sdk.sh b/scripts/install_swift_sdk.sh index dcf307e50a..7ffeb3862b 100755 --- a/scripts/install_swift_sdk.sh +++ b/scripts/install_swift_sdk.sh @@ -25,6 +25,7 @@ version="${INSTALL_SWIFT_VERSION:=""}" arch="${INSTALL_SWIFT_ARCH:="aarch64"}" os_image="${INSTALL_SWIFT_OS_IMAGE:="ubuntu22.04"}" sdk="${INSTALL_SWIFT_SDK:="static-sdk"}" +android_ndk_version="${INSTALL_ANDROID_NDK:="r27d"}" if [[ ! ( -n "$branch" && -z "$version" ) && ! ( -z "$branch" && -n "$version") ]]; then fatal "Exactly one of build or version must be defined." @@ -134,10 +135,9 @@ if [[ "$sdk" == "android-sdk" ]]; then cd ~/Library/org.swift.swiftpm || cd ~/.config/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm || exit 1 # download and link the NDK - android_ndk_version="r27d" android_ndk_url="https://dl.google.com/android/repository/android-ndk-${android_ndk_version}-$(uname -s).zip" log "Android Native Development Kit URL: ${android_ndk_url}" - curl -fsSL -o ndk.zip --retry 3 "${android_ndk_url}" + "$CURL_BIN" -fsSL -o ndk.zip --retry 3 "${android_ndk_url}" unzip -q ndk.zip rm ndk.zip export ANDROID_NDK_HOME="${PWD}/android-ndk-${android_ndk_version}"