From b39f55d838b261494345ad5a90b2297497287bb4 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:23:01 -0400 Subject: [PATCH 01/41] Add android option to install-and-build-with-sdk.sh --- .../scripts/install-and-build-with-sdk.sh | 122 ++++++++++++++++-- 1 file changed, 112 insertions(+), 10 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 6111a63..e76ca3a 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -18,6 +18,7 @@ error() { printf -- "** ERROR: %s\n" "$*" >&2; } fatal() { error "$@"; exit 1; } # Parse command line options +INSTALL_ANDROID=false INSTALL_STATIC_LINUX=false INSTALL_WASM=false BUILD_EMBEDDED_WASM=false @@ -27,6 +28,10 @@ SWIFT_BUILD_COMMAND="swift build" while [[ $# -gt 0 ]]; do case $1 in + --android) + INSTALL_ANDROID=true + shift + ;; --static) INSTALL_STATIC_LINUX=true shift @@ -64,14 +69,15 @@ done # Validate arguments if [[ -z "$SWIFT_VERSION_INPUT" ]]; then - fatal "Usage: $0 [--static] [--wasm] [--flags=\"\"] [--build-command=\"\"] " + fatal "Usage: $0 [--android] [--static] [--wasm] [--flags=\"\"] [--build-command=\"\"] " fi -if [[ "$INSTALL_STATIC_LINUX" == false && "$INSTALL_WASM" == false ]]; then - fatal "At least one of --static or --wasm must be specified" +if [[ "$INSTALL_ANDROID" == false && "$INSTALL_STATIC_LINUX" == false && "$INSTALL_WASM" == false ]]; then + fatal "At least one of --android or --static or --wasm must be specified" fi log "Requested Swift version: $SWIFT_VERSION_INPUT" +log "Install Android Swift SDK: $INSTALL_ANDROID" log "Install Static Linux Swift SDK: $INSTALL_STATIC_LINUX" log "Install Wasm Swift SDK: $INSTALL_WASM" if [[ -n "$SWIFT_BUILD_FLAGS" ]]; then @@ -103,7 +109,7 @@ SWIFT_API_INSTALL_ROOT="https://www.swift.org/api/v1/install" # and gets the checksum for the patch version's Static Linux and/or Wasm Swift SDK. # # $1 (string): A minor Swift version, e.g. "6.1" -# Output: A string of the form "|| +# Output: A string of the form "||| find_latest_swift_version() { local minor_version="$1" @@ -128,6 +134,23 @@ find_latest_swift_version() { log "Found latest patch version: $latest_version" + local android_sdk_checksum="" + if [[ "$INSTALL_ANDROID" == true ]]; then + android_sdk_checksum=$(echo "$releases_json" | jq -r --arg version "$latest_version" ' + .[] + | select(.name == $version) + | .platforms[] + | select(.platform == "android") + | .checksum + ') + + if [[ -z "$android_sdk_checksum" ]]; then + fatal "No Android Swift SDK checksum found for Swift $latest_version" + fi + + log "Found Android Swift SDK checksum: ${android_sdk_checksum:0:12}..." + fi + local static_linux_sdk_checksum="" if [[ "$INSTALL_STATIC_LINUX" == true ]]; then static_linux_sdk_checksum=$(echo "$releases_json" | jq -r --arg version "$latest_version" ' @@ -162,14 +185,15 @@ find_latest_swift_version() { log "Found Swift SDK for Wasm checksum: ${wasm_sdk_checksum:0:12}..." fi - echo "${latest_version}|${static_linux_sdk_checksum}|${wasm_sdk_checksum}" + echo "${latest_version}|${android_sdk_checksum}|${static_linux_sdk_checksum}|${wasm_sdk_checksum}" } -# Finds the latest Static Linux or Wasm Swift SDK development snapshot -# for the inputted Swift version and its checksum. +# Finds the latest Android or Static Linux or Wasm +# Swift SDK development snapshot for the inputted +# Swift version and its checksum. # # $1 (string): Nightly Swift version, e.g. "6.2" or "main" -# $2 (string): "static" or "wasm" +# $2 (string): "android" or "static" or "wasm" # Output: A string of the form "|", # e.g. "swift-6.2-DEVELOPMENT-SNAPSHOT-2025-07-29-a|" find_latest_sdk_snapshot() { @@ -206,6 +230,8 @@ find_latest_sdk_snapshot() { } SWIFT_VERSION_BRANCH="" +ANDROID_SDK_TAG="" +ANDROID_SDK_CHECKSUM="" STATIC_LINUX_SDK_TAG="" STATIC_LINUX_SDK_CHECKSUM="" WASM_SDK_TAG="" @@ -220,6 +246,13 @@ if [[ "$SWIFT_VERSION_INPUT" == nightly-* ]]; then SWIFT_VERSION_BRANCH="swift-${version}-branch" fi + if [[ "$INSTALL_ANDROID" == true ]]; then + android_sdk_info=$(find_latest_sdk_snapshot "$version" "android") + + ANDROID_SDK_TAG=$(echo "$android_sdk_info" | cut -d'|' -f1) + ANDROID_SDK_CHECKSUM=$(echo "$android_sdk_info" | cut -d'|' -f2) + fi + if [[ "$INSTALL_STATIC_LINUX" == true ]]; then static_linux_sdk_info=$(find_latest_sdk_snapshot "$version" "static") @@ -239,14 +272,21 @@ else latest_version=$(echo "$latest_version_info" | cut -d'|' -f1) SWIFT_VERSION_BRANCH="swift-${latest_version}-release" + ANDROID_SDK_TAG="swift-${latest_version}-RELEASE" + ANDROID_SDK_CHECKSUM=$(echo "$latest_version_info" | cut -d'|' -f2) + STATIC_LINUX_SDK_TAG="swift-${latest_version}-RELEASE" - STATIC_LINUX_SDK_CHECKSUM=$(echo "$latest_version_info" | cut -d'|' -f2) + STATIC_LINUX_SDK_CHECKSUM=$(echo "$latest_version_info" | cut -d'|' -f3) WASM_SDK_TAG="swift-${latest_version}-RELEASE" - WASM_SDK_CHECKSUM=$(echo "$latest_version_info" | cut -d'|' -f3) + WASM_SDK_CHECKSUM=$(echo "$latest_version_info" | cut -d'|' -f4) fi # Validate that required Swift SDK tags are set +if [[ "$INSTALL_ANDROID" == true && -z "$ANDROID_SDK_TAG" ]]; then + fatal "ANDROID_SDK_TAG is not set but Android Swift SDK installation was requested" +fi + if [[ "$INSTALL_STATIC_LINUX" == true && -z "$STATIC_LINUX_SDK_TAG" ]]; then fatal "STATIC_LINUX_SDK_TAG is not set but Static Linux Swift SDK installation was requested" fi @@ -439,9 +479,25 @@ download_and_extract_toolchain() { } INSTALLED_SWIFT_TAG=$(get_installed_swift_tag) +SWIFT_EXECUTABLE_FOR_ANDROID_SDK="" SWIFT_EXECUTABLE_FOR_STATIC_LINUX_SDK="" SWIFT_EXECUTABLE_FOR_WASM_SDK="" +if [[ "$INSTALL_ANDROID" == true ]]; then + if [[ "$INSTALLED_SWIFT_TAG" == "$ANDROID_SDK_TAG" ]]; then + log "Current toolchain matches Android Swift SDK snapshot: $ANDROID_SDK_TAG" + SWIFT_EXECUTABLE_FOR_ANDROID_SDK="swift" + else + log "Installing Swift toolchain to match Android Swift SDK snapshot: $ANDROID_SDK_TAG" + initialize_os_info + SWIFT_EXECUTABLE_FOR_ANDROID_SDK=$(download_and_extract_toolchain "$ANDROID_SDK_TAG") + if [[ $? -eq $EXIT_TOOLCHAIN_NOT_FOUND ]]; then + # Don't fail the workflow if we can't find the right toolchain + exit 0 + fi + fi +fi + if [[ "$INSTALL_STATIC_LINUX" == true ]]; then if [[ "$INSTALLED_SWIFT_TAG" == "$STATIC_LINUX_SDK_TAG" ]]; then log "Current toolchain matches Static Linux Swift SDK snapshot: $STATIC_LINUX_SDK_TAG" @@ -472,9 +528,31 @@ if [[ "$INSTALL_WASM" == true ]]; then fi fi +ANDROID_SDK_DOWNLOAD_ROOT="${SWIFT_DOWNLOAD_ROOT}/${SWIFT_VERSION_BRANCH}/android-sdk" STATIC_LINUX_SDK_DOWNLOAD_ROOT="${SWIFT_DOWNLOAD_ROOT}/${SWIFT_VERSION_BRANCH}/static-sdk" WASM_SDK_DOWNLOAD_ROOT="${SWIFT_DOWNLOAD_ROOT}/${SWIFT_VERSION_BRANCH}/wasm-sdk" +install_android_sdk() { + # Check if the Android Swift SDK is already installed + if "$SWIFT_EXECUTABLE_FOR_ANDROID_SDK" sdk list 2>/dev/null | grep -q "^${ANDROID_SDK_TAG}_android"; then + log "✅ Android Swift SDK ${ANDROID_SDK_TAG} is already installed, skipping installation" + return 0 + fi + + log "Installing Android Swift SDK: $ANDROID_SDK_TAG" + + local android_sdk_filename="${ANDROID_SDK_TAG}_android.artifactbundle.tar.gz" + local sdk_url="${ANDROID_SDK_DOWNLOAD_ROOT}/${ANDROID_SDK_TAG}/${android_sdk_filename}" + + log "Running: ${SWIFT_EXECUTABLE_FOR_ANDROID_SDK} sdk install ${sdk_url} --checksum ${ANDROID_SDK_CHECKSUM}" + + if "$SWIFT_EXECUTABLE_FOR_ANDROID_SDK" sdk install "$sdk_url" --checksum "$ANDROID_SDK_CHECKSUM"; then + log "✅ Android Swift SDK installed successfully" + else + fatal "Failed to install Android Swift SDK" + fi +} + install_static_linux_sdk() { # Check if the Static Linux Swift SDK is already installed if "$SWIFT_EXECUTABLE_FOR_STATIC_LINUX_SDK" sdk list 2>/dev/null | grep -q "^${STATIC_LINUX_SDK_TAG}_static-linux-0.0.1"; then @@ -518,6 +596,11 @@ install_wasm_sdk() { } install_sdks() { + if [[ "$INSTALL_ANDROID" == true ]]; then + log "Starting install of Swift ${SWIFT_VERSION_INPUT} Android Swift SDK" + install_android_sdk + fi + if [[ "$INSTALL_STATIC_LINUX" == true ]]; then log "Starting install of Swift ${SWIFT_VERSION_INPUT} Static Linux Swift SDK" install_static_linux_sdk @@ -533,6 +616,25 @@ build() { # Enable alias expansion to use a 'swift' alias for the executable path shopt -s expand_aliases + if [[ "$INSTALL_ANDROID" == true ]]; then + log "Running Swift build with Android Swift SDK" + + local sdk_name="${ANDROID_SDK_TAG}_android" + alias swift='$SWIFT_EXECUTABLE_FOR_ANDROID_SDK' + local build_command="$SWIFT_BUILD_COMMAND --swift-sdk $sdk_name" + if [[ -n "$SWIFT_BUILD_FLAGS" ]]; then + build_command="$build_command $SWIFT_BUILD_FLAGS" + fi + + log "Running: $build_command" + + if eval "$build_command"; then + log "✅ Swift build with Android Swift SDK completed successfully" + else + fatal "Swift build with Android Swift SDK failed" + fi + fi + if [[ "$INSTALL_STATIC_LINUX" == true ]]; then log "Running Swift build with Static Linux Swift SDK" From 9dd318a2351dc402f6ceb350b72063e0bfcc6bb4 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:30:21 -0400 Subject: [PATCH 02/41] Add CI to test Android --- .github/workflows/test-sdks.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/test-sdks.yml diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml new file mode 100644 index 0000000..74013d9 --- /dev/null +++ b/.github/workflows/test-sdks.yml @@ -0,0 +1,29 @@ +name: test-sdk-workflows +on: + push: + branches: [ main ] + workflow_dispatch: + pull_request: + branches: + - '*' +jobs: + linux-android: + strategy: + fail-fast: false + matrix: + swift-version: ['6.1', '6.2'] + os: ['ubuntu-latest'] + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - name: Create Package + run: swift package init --name SwiftDemo + - name: Build Static Linux + run: | + curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + bash -s -- --static --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} + - name: Build Android + run: | + curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + bash -s -- --android --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} + From 53f27590d8cb005eb27aa95cb095a445e3e900ad Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:30:46 -0400 Subject: [PATCH 03/41] Add CI to test Android --- .github/workflows/test-sdks.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 74013d9..8147de4 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -1,7 +1,8 @@ name: test-sdk-workflows on: push: - branches: [ main ] + branches: + - '*' workflow_dispatch: pull_request: branches: From 8544087639b1370a3a684cc02dbdae96bc7a3ba3 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:33:12 -0400 Subject: [PATCH 04/41] Update CI --- .github/workflows/test-sdks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 8147de4..91475f9 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - swift-version: ['6.1', '6.2'] + swift_version: ['6.1', '6.2'] os: ['ubuntu-latest'] runs-on: ubuntu-latest timeout-minutes: 60 From 1062734277283797726ebd2e1db04d5b0651ac0f Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:35:17 -0400 Subject: [PATCH 05/41] Update CI --- .github/workflows/test-sdks.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 91475f9..1d965cf 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -12,7 +12,8 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ['6.1', '6.2'] + swift_version: ['swift-DEVELOPMENT-SNAPSHOT-2025-10-16'] + #swift_version: ['6.1', '6.2'] os: ['ubuntu-latest'] runs-on: ubuntu-latest timeout-minutes: 60 From 300453586d0b592bca42b20ac00bbd6605619022 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:36:29 -0400 Subject: [PATCH 06/41] Update CI --- .github/workflows/test-sdks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 1d965cf..091352a 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ['swift-DEVELOPMENT-SNAPSHOT-2025-10-16'] + swift_version: ['main'] #swift_version: ['6.1', '6.2'] os: ['ubuntu-latest'] runs-on: ubuntu-latest From 8666be9d53f38eaf9dbee838c48ce64cd892b9e1 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:41:17 -0400 Subject: [PATCH 07/41] Update CI --- .github/workflows/test-sdks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 091352a..41b809a 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ['main'] + swift_version: ['nightly-main'] #swift_version: ['6.1', '6.2'] os: ['ubuntu-latest'] runs-on: ubuntu-latest From c1f68d381e5e31ae87751c4a249a6b2c9587b950 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:51:49 -0400 Subject: [PATCH 08/41] Update CI --- .../scripts/install-and-build-with-sdk.sh | 6 ++ .github/workflows/swift_package_test.yml | 77 +++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index e76ca3a..93c5167 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -203,6 +203,12 @@ find_latest_sdk_snapshot() { log "Finding latest ${sdk_name}-sdk for Swift nightly-${version}" log "Fetching development snapshots from swift.org API..." + if [[ "${sdk_name}" == "android" ]]; then + # FIXME: hardwired Android nightly until there is an API endpoint + echo "swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a|451844c232cf1fa02c52431084ed3dc27a42d103635c6fa71bae8d66adba2500" + return + fi + local sdk_json sdk_json=$(curl -fsSL "${SWIFT_API_INSTALL_ROOT}/dev/${version}/${sdk_name}-sdk.json") || fatal "Failed to fetch ${sdk_name}-sdk development snapshots" diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index 68125a4..93098d3 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -50,6 +50,14 @@ on: type: string description: "Exclude Wasm Swift SDK version list (JSON)" default: "[{\"swift_version\": \"\"}]" + android_sdk_versions: + type: string + description: "Android Swift SDK version list (JSON)" + default: "[\"nightly-main\", \"nightly-6.2\", \"6.2\"]" + android_exclude_swift_versions: + type: string + description: "Exclude Android Swift SDK version list (JSON)" + default: "[{\"swift_version\": \"\"}]" windows_swift_versions: type: string description: "Include Windows Swift version list (JSON)" @@ -79,6 +87,10 @@ on: type: string description: "Linux command to execute before building the Swift package with the Embedded Swift SDK for Wasm" default: "" + android_sdk_pre_build_command: + type: string + description: "Linux command to execute before building the Swift package with the Embedded Swift SDK for Android" + default: "" macos_pre_build_command: type: string description: "macOS command to execute before building the Swift package" @@ -99,6 +111,10 @@ on: type: string description: "Command to use when building the package with the Swift SDK for Wasm" default: "swift build" + android_sdk_build_command: + type: string + description: "Command to use when building the package with the Swift SDK for Android" + default: "swift build" windows_pre_build_command: type: string description: "Windows Command Prompt command to execute before building the Swift package" @@ -135,6 +151,10 @@ on: type: boolean description: "Boolean to enable building with the Embedded Swift SDK for Wasm. Defaults to false" default: false + enable_android_sdk_build: + type: boolean + description: "Boolean to enable building with the Swift SDK for Android. Defaults to false" + default: false enable_macos_checks: type: boolean description: "Boolean to enable macOS testing. Defaults to false" @@ -355,6 +375,63 @@ jobs: curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ bash -s -- --wasm --flags="$BUILD_FLAGS" --build-command="${{ inputs.wasm_sdk_build_command }}" ${{ matrix.swift_version }} + android-sdk-build: + name: Swift SDK for Android Build (${{ matrix.swift_version }} - ${{ matrix.os_version }}) + if: ${{ inputs.enable_android_sdk_build }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + swift_version: ${{ fromJson(inputs.android_sdk_versions) }} + os_version: ${{ fromJson(inputs.linux_os_versions) }} + exclude: + - ${{ fromJson(inputs.android_exclude_swift_versions) }} + container: + image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} + steps: + - name: Swift version + run: swift --version + - name: Clang version + run: clang --version + - name: Checkout repository + uses: actions/checkout@v4 + if: ${{ matrix.os_version != 'amazonlinux2' }} + - name: Checkout repository + uses: actions/checkout@v1 + if: ${{ matrix.os_version == 'amazonlinux2' }} + - name: Provide token + if: ${{ inputs.needs_token }} + run: | + echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV + - name: Set environment variables + if: ${{ inputs.linux_env_vars }} + run: | + for i in "${{ inputs.linux_env_vars }}" + do + printf "%s\n" $i >> $GITHUB_ENV + done + - name: Pre-build + run: ${{ inputs.linux_pre_build_command }} + - name: Install Swift SDK for Android and build + env: + BUILD_FLAGS: ${{ (contains(matrix.swift_version, 'nightly') && inputs.swift_nightly_flags) || inputs.swift_flags }} + run: | + ${{ inputs.android_sdk_pre_build_command }} + if command -v apt-get >/dev/null 2>&1 ; then # bookworm, noble, jammy, focal + apt-get -q update && apt-get -yq install curl + elif command -v dnf >/dev/null 2>&1 ; then # rhel-ubi9 + dnf -y update + dnf -y install curl-minimal + elif command -v yum >/dev/null 2>&1 ; then # amazonlinux2 + yum -y update + yum -y install curl + else + echo "Unknown package manager (tried apt-get, dnf, yum)" >&2 + exit 1 + fi + curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" ${{ matrix.swift_version }} + embedded-wasm-sdk-build: name: Embedded Swift SDK for Wasm Build (${{ matrix.swift_version }} - ${{ matrix.os_version }}) if: ${{ inputs.enable_embedded_wasm_sdk_build }} From 3719c06621ede4716a37f9b38946f1a7438c0296 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 16:55:51 -0400 Subject: [PATCH 09/41] Update CI --- .github/workflows/scripts/install-and-build-with-sdk.sh | 3 ++- .github/workflows/test-sdks.yml | 9 ++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 93c5167..87eee29 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -547,7 +547,8 @@ install_android_sdk() { log "Installing Android Swift SDK: $ANDROID_SDK_TAG" - local android_sdk_filename="${ANDROID_SDK_TAG}_android.artifactbundle.tar.gz" + # FIXME: we will be removing the "-0.1" suffix + local android_sdk_filename="${ANDROID_SDK_TAG}_android-0.1.artifactbundle.tar.gz" local sdk_url="${ANDROID_SDK_DOWNLOAD_ROOT}/${ANDROID_SDK_TAG}/${android_sdk_filename}" log "Running: ${SWIFT_EXECUTABLE_FOR_ANDROID_SDK} sdk install ${sdk_url} --checksum ${ANDROID_SDK_CHECKSUM}" diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 41b809a..83b4cd3 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -20,12 +20,11 @@ jobs: steps: - name: Create Package run: swift package init --name SwiftDemo - - name: Build Static Linux - run: | - curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --static --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} - name: Build Android run: | curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ bash -s -- --android --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} - + - name: Build Static Linux + run: | + curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + bash -s -- --static --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} From 628381c9b468987078b0c954e72dd8c7f618856e Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:00:34 -0400 Subject: [PATCH 10/41] Update CI --- .github/workflows/scripts/install-and-build-with-sdk.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 87eee29..2fb32cf 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -548,7 +548,9 @@ install_android_sdk() { log "Installing Android Swift SDK: $ANDROID_SDK_TAG" # FIXME: we will be removing the "-0.1" suffix - local android_sdk_filename="${ANDROID_SDK_TAG}_android-0.1.artifactbundle.tar.gz" + local android_sdk_suffix="-0.1" + + local android_sdk_filename="${ANDROID_SDK_TAG}_android${android_sdk_suffix}.artifactbundle.tar.gz" local sdk_url="${ANDROID_SDK_DOWNLOAD_ROOT}/${ANDROID_SDK_TAG}/${android_sdk_filename}" log "Running: ${SWIFT_EXECUTABLE_FOR_ANDROID_SDK} sdk install ${sdk_url} --checksum ${ANDROID_SDK_CHECKSUM}" @@ -626,7 +628,10 @@ build() { if [[ "$INSTALL_ANDROID" == true ]]; then log "Running Swift build with Android Swift SDK" - local sdk_name="${ANDROID_SDK_TAG}_android" + # FIXME: we will be changing the name in the next nightly + local sdk_name="${ANDROID_SDK_TAG}-android-0.1" + #local sdk_name="${ANDROID_SDK_TAG}_android" + alias swift='$SWIFT_EXECUTABLE_FOR_ANDROID_SDK' local build_command="$SWIFT_BUILD_COMMAND --swift-sdk $sdk_name" if [[ -n "$SWIFT_BUILD_FLAGS" ]]; then From 7a74b85c5a5767dec7cf1bbaf914889d25b2d714 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:07:55 -0400 Subject: [PATCH 11/41] Update CI --- .github/workflows/scripts/install-and-build-with-sdk.sh | 6 +++++- .github/workflows/test-sdks.yml | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 2fb32cf..f033a4c 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -550,7 +550,8 @@ install_android_sdk() { # FIXME: we will be removing the "-0.1" suffix local android_sdk_suffix="-0.1" - local android_sdk_filename="${ANDROID_SDK_TAG}_android${android_sdk_suffix}.artifactbundle.tar.gz" + local android_sdk_bundle_name="${ANDROID_SDK_TAG}_android${android_sdk_suffix}.artifactbundle" + local android_sdk_filename="${android_sdk_bundle_name}.tar.gz" local sdk_url="${ANDROID_SDK_DOWNLOAD_ROOT}/${ANDROID_SDK_TAG}/${android_sdk_filename}" log "Running: ${SWIFT_EXECUTABLE_FOR_ANDROID_SDK} sdk install ${sdk_url} --checksum ${ANDROID_SDK_CHECKSUM}" @@ -560,6 +561,9 @@ install_android_sdk() { else fatal "Failed to install Android Swift SDK" fi + + # now setup the link to the local ANDROID_NDK_HOME + ${HOME}/.config/swiftpm/swift-sdks/${android_sdk_bundle_name}/swift-android/scripts/setup-android-sdk.sh } install_static_linux_sdk() { diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 83b4cd3..b56d560 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -24,7 +24,14 @@ jobs: run: | curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ bash -s -- --android --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} + - name: Check Binary + run: file .build/debug/hello + - name: Build Static Linux run: | curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ bash -s -- --static --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} + + - name: Check Binary + run: file .build/debug/hello + From 05fe57cef76865028f26fdd71ae4319f9cb460e7 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:12:19 -0400 Subject: [PATCH 12/41] Update CI --- .github/workflows/scripts/install-and-build-with-sdk.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index f033a4c..3a660d0 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -563,6 +563,9 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME + ls ${HOME}/.config/ + ls ${HOME}/.config/swiftpm/ + ls ${HOME}/.config/swiftpm/swift-sdks/ ${HOME}/.config/swiftpm/swift-sdks/${android_sdk_bundle_name}/swift-android/scripts/setup-android-sdk.sh } From de933aa39805159f64c2216b4a870a466919f895 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:15:08 -0400 Subject: [PATCH 13/41] Update CI From c441f05d384a72202d6e177d9f7173ac04ef16c7 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:18:18 -0400 Subject: [PATCH 14/41] Update CI --- .github/workflows/scripts/install-and-build-with-sdk.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 3a660d0..d91d3ab 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -551,6 +551,8 @@ install_android_sdk() { local android_sdk_suffix="-0.1" local android_sdk_bundle_name="${ANDROID_SDK_TAG}_android${android_sdk_suffix}.artifactbundle" + # FIXME: next SDK will remove the "_" from the name + local android_sdk_bundle_dir=$(echo ${android_sdk_bundle_name}| sed 's;_android;-android;g') local android_sdk_filename="${android_sdk_bundle_name}.tar.gz" local sdk_url="${ANDROID_SDK_DOWNLOAD_ROOT}/${ANDROID_SDK_TAG}/${android_sdk_filename}" @@ -566,7 +568,7 @@ install_android_sdk() { ls ${HOME}/.config/ ls ${HOME}/.config/swiftpm/ ls ${HOME}/.config/swiftpm/swift-sdks/ - ${HOME}/.config/swiftpm/swift-sdks/${android_sdk_bundle_name}/swift-android/scripts/setup-android-sdk.sh + ${HOME}/.config/swiftpm/swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh } install_static_linux_sdk() { From 34ae290dd485e63cfb480941d069951119f716cb Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:23:47 -0400 Subject: [PATCH 15/41] Update CI --- .github/workflows/scripts/install-and-build-with-sdk.sh | 8 ++++++-- .github/workflows/test-sdks.yml | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index d91d3ab..9b336e2 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -32,6 +32,10 @@ while [[ $# -gt 0 ]]; do INSTALL_ANDROID=true shift ;; + --android-sdk=*) + ANDROID_SDK_NAME="${1#*=}" + shift + ;; --static) INSTALL_STATIC_LINUX=true shift @@ -637,12 +641,12 @@ build() { if [[ "$INSTALL_ANDROID" == true ]]; then log "Running Swift build with Android Swift SDK" - # FIXME: we will be changing the name in the next nightly + # FIXME: we will be trimming "-0.1" from the name in the next nightly local sdk_name="${ANDROID_SDK_TAG}-android-0.1" #local sdk_name="${ANDROID_SDK_TAG}_android" alias swift='$SWIFT_EXECUTABLE_FOR_ANDROID_SDK' - local build_command="$SWIFT_BUILD_COMMAND --swift-sdk $sdk_name" + local build_command="$SWIFT_BUILD_COMMAND --swift-sdk ${ANDROID_SDK_NAME:-$sdk_name}" if [[ -n "$SWIFT_BUILD_FLAGS" ]]; then build_command="$build_command $SWIFT_BUILD_FLAGS" fi diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index b56d560..688a6da 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -19,11 +19,11 @@ jobs: timeout-minutes: 60 steps: - name: Create Package - run: swift package init --name SwiftDemo + run: swift package init --name hello --type executable - name: Build Android run: | curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} + bash -s -- --android --flags="$BUILD_FLAGS" --android-sdk=aarch64-unknown-linux-android28 ${{ matrix.swift_version }} - name: Check Binary run: file .build/debug/hello From f4ba1d449e948fa569407292f59adc4857b70549 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:34:03 -0400 Subject: [PATCH 16/41] Update CI --- .../scripts/install-and-build-with-sdk.sh | 12 +++-- .github/workflows/swift_package_test.yml | 44 ++++++++++--------- .github/workflows/test-sdks.yml | 2 +- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 9b336e2..41758e7 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -32,8 +32,8 @@ while [[ $# -gt 0 ]]; do INSTALL_ANDROID=true shift ;; - --android-sdk=*) - ANDROID_SDK_NAME="${1#*=}" + --android-sdk-triple=*) + ANDROID_SDK_TRIPLE="${1#*=}" shift ;; --static) @@ -569,10 +569,8 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME - ls ${HOME}/.config/ - ls ${HOME}/.config/swiftpm/ - ls ${HOME}/.config/swiftpm/swift-sdks/ - ${HOME}/.config/swiftpm/swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh + cd ${HOME}/.config/swiftpm + ./swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh } install_static_linux_sdk() { @@ -646,7 +644,7 @@ build() { #local sdk_name="${ANDROID_SDK_TAG}_android" alias swift='$SWIFT_EXECUTABLE_FOR_ANDROID_SDK' - local build_command="$SWIFT_BUILD_COMMAND --swift-sdk ${ANDROID_SDK_NAME:-$sdk_name}" + local build_command="$SWIFT_BUILD_COMMAND --swift-sdk ${ANDROID_SDK_TRIPLE:-$sdk_name}" if [[ -n "$SWIFT_BUILD_FLAGS" ]]; then build_command="$build_command $SWIFT_BUILD_FLAGS" fi diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index 93098d3..6f7bb69 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -115,6 +115,10 @@ on: type: string description: "Command to use when building the package with the Swift SDK for Android" default: "swift build" + android_sdk_triple: + type: string + description: "The triple to use when building with the Swift SDK for Android" + default: "x86_64-unknown-linux-android28" windows_pre_build_command: type: string description: "Windows Command Prompt command to execute before building the Swift package" @@ -375,17 +379,17 @@ jobs: curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ bash -s -- --wasm --flags="$BUILD_FLAGS" --build-command="${{ inputs.wasm_sdk_build_command }}" ${{ matrix.swift_version }} - android-sdk-build: - name: Swift SDK for Android Build (${{ matrix.swift_version }} - ${{ matrix.os_version }}) - if: ${{ inputs.enable_android_sdk_build }} + embedded-wasm-sdk-build: + name: Embedded Swift SDK for Wasm Build (${{ matrix.swift_version }} - ${{ matrix.os_version }}) + if: ${{ inputs.enable_embedded_wasm_sdk_build }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: - swift_version: ${{ fromJson(inputs.android_sdk_versions) }} + swift_version: ${{ fromJson(inputs.wasm_sdk_versions) }} os_version: ${{ fromJson(inputs.linux_os_versions) }} exclude: - - ${{ fromJson(inputs.android_exclude_swift_versions) }} + - ${{ fromJson(inputs.wasm_exclude_swift_versions) }} container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} steps: @@ -395,10 +399,6 @@ jobs: run: clang --version - name: Checkout repository uses: actions/checkout@v4 - if: ${{ matrix.os_version != 'amazonlinux2' }} - - name: Checkout repository - uses: actions/checkout@v1 - if: ${{ matrix.os_version == 'amazonlinux2' }} - name: Provide token if: ${{ inputs.needs_token }} run: | @@ -412,11 +412,11 @@ jobs: done - name: Pre-build run: ${{ inputs.linux_pre_build_command }} - - name: Install Swift SDK for Android and build + - name: Install Swift SDK for Wasm and build env: BUILD_FLAGS: ${{ (contains(matrix.swift_version, 'nightly') && inputs.swift_nightly_flags) || inputs.swift_flags }} run: | - ${{ inputs.android_sdk_pre_build_command }} + ${{ inputs.wasm_sdk_pre_build_command }} if command -v apt-get >/dev/null 2>&1 ; then # bookworm, noble, jammy, focal apt-get -q update && apt-get -yq install curl elif command -v dnf >/dev/null 2>&1 ; then # rhel-ubi9 @@ -430,19 +430,19 @@ jobs: exit 1 fi curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" ${{ matrix.swift_version }} + bash -s -- --embedded-wasm --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} - embedded-wasm-sdk-build: - name: Embedded Swift SDK for Wasm Build (${{ matrix.swift_version }} - ${{ matrix.os_version }}) - if: ${{ inputs.enable_embedded_wasm_sdk_build }} + android-sdk-build: + name: Swift SDK for Android Build (${{ matrix.swift_version }} - ${{ matrix.os_version }}) + if: ${{ inputs.enable_android_sdk_build }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: - swift_version: ${{ fromJson(inputs.wasm_sdk_versions) }} + swift_version: ${{ fromJson(inputs.android_sdk_versions) }} os_version: ${{ fromJson(inputs.linux_os_versions) }} exclude: - - ${{ fromJson(inputs.wasm_exclude_swift_versions) }} + - ${{ fromJson(inputs.android_exclude_swift_versions) }} container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} steps: @@ -452,6 +452,10 @@ jobs: run: clang --version - name: Checkout repository uses: actions/checkout@v4 + if: ${{ matrix.os_version != 'amazonlinux2' }} + - name: Checkout repository + uses: actions/checkout@v1 + if: ${{ matrix.os_version == 'amazonlinux2' }} - name: Provide token if: ${{ inputs.needs_token }} run: | @@ -465,11 +469,11 @@ jobs: done - name: Pre-build run: ${{ inputs.linux_pre_build_command }} - - name: Install Swift SDK for Wasm and build + - name: Install Swift SDK for Android and build env: BUILD_FLAGS: ${{ (contains(matrix.swift_version, 'nightly') && inputs.swift_nightly_flags) || inputs.swift_flags }} run: | - ${{ inputs.wasm_sdk_pre_build_command }} + ${{ inputs.android_sdk_pre_build_command }} if command -v apt-get >/dev/null 2>&1 ; then # bookworm, noble, jammy, focal apt-get -q update && apt-get -yq install curl elif command -v dnf >/dev/null 2>&1 ; then # rhel-ubi9 @@ -483,7 +487,7 @@ jobs: exit 1 fi curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --embedded-wasm --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} + bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-tripe="${{ inputs.android_sdk_triple }}" ${{ matrix.swift_version }} windows-build: name: Windows (${{ matrix.swift_version }} - windows-2022) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 688a6da..2a0a8f6 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -23,7 +23,7 @@ jobs: - name: Build Android run: | curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="$BUILD_FLAGS" --android-sdk=aarch64-unknown-linux-android28 ${{ matrix.swift_version }} + bash -s -- --android --flags="$BUILD_FLAGS" --android-sdk-triple=aarch64-unknown-linux-android28 ${{ matrix.swift_version }} - name: Check Binary run: file .build/debug/hello From 8d92271b0f0a3a1fb1b02e6fd19fe7cf4ccc30ca Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:37:31 -0400 Subject: [PATCH 17/41] Update CI --- .github/workflows/scripts/install-and-build-with-sdk.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 41758e7..e494043 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -569,8 +569,7 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME - cd ${HOME}/.config/swiftpm - ./swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh + ${HOME}/.config/swiftpm/swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh } install_static_linux_sdk() { From 7761637a0537d6b34f1b15660bbbd5c68f3c2bfe Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:44:17 -0400 Subject: [PATCH 18/41] Update CI --- .github/workflows/test-sdks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 2a0a8f6..514b931 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -23,7 +23,7 @@ jobs: - name: Build Android run: | curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="$BUILD_FLAGS" --android-sdk-triple=aarch64-unknown-linux-android28 ${{ matrix.swift_version }} + bash -s -- --android --flags="--static-swift-stdlib" --android-sdk-triple=x86_64-unknown-linux-android28 ${{ matrix.swift_version }} - name: Check Binary run: file .build/debug/hello From 56b4f949136991d64585a35db740256e5d4d25d5 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:49:48 -0400 Subject: [PATCH 19/41] Default android_sdk_versions to nightly-main --- .github/workflows/swift_package_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index 6f7bb69..5185289 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -53,7 +53,7 @@ on: android_sdk_versions: type: string description: "Android Swift SDK version list (JSON)" - default: "[\"nightly-main\", \"nightly-6.2\", \"6.2\"]" + default: "[\"nightly-main\"]" android_exclude_swift_versions: type: string description: "Exclude Android Swift SDK version list (JSON)" From 03605e394641bddfa2c3ce7e17bff5902787584d Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:54:24 -0400 Subject: [PATCH 20/41] Lint fixes --- .github/workflows/scripts/install-and-build-with-sdk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index e494043..0d5b585 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -556,7 +556,7 @@ install_android_sdk() { local android_sdk_bundle_name="${ANDROID_SDK_TAG}_android${android_sdk_suffix}.artifactbundle" # FIXME: next SDK will remove the "_" from the name - local android_sdk_bundle_dir=$(echo ${android_sdk_bundle_name}| sed 's;_android;-android;g') + local android_sdk_bundle_dir="${android_sdk_bundle_name//_android/-android}" local android_sdk_filename="${android_sdk_bundle_name}.tar.gz" local sdk_url="${ANDROID_SDK_DOWNLOAD_ROOT}/${ANDROID_SDK_TAG}/${android_sdk_filename}" From 2f1467ef85176e707533d99f3af4e9435028ef82 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 17:57:08 -0400 Subject: [PATCH 21/41] Add Android to CI tests --- .github/workflows/pull_request.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 32b404a..384d049 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -44,6 +44,12 @@ jobs: cd MyPackage swift package init --type library enable_wasm_sdk_build: true + # Android + android_sdk_pre_build_command: | + mkdir MyPackage + cd MyPackage + swift package init --type library + enable_android_sdk_build: true # Windows windows_build_command: | mkdir MyPackage @@ -58,6 +64,12 @@ jobs: with: # Skip Linux which doesn't currently support docker-less workflow enable_linux_checks: false + # Android + android_sdk_pre_build_command: | + mkdir MyPackage + cd MyPackage + swift package init --type library + enable_android_sdk_build: true # Windows windows_build_command: | mkdir MyPackage From ad509880d85944f6187af1fba445a6350fd7f3a6 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:01:49 -0400 Subject: [PATCH 22/41] Lint fixes and update pull_request test to use branch install-and-build-with-sdk.sh --- .github/workflows/scripts/install-and-build-with-sdk.sh | 2 +- .github/workflows/swift_package_test.yml | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 0d5b585..c4e8439 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -569,7 +569,7 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME - ${HOME}/.config/swiftpm/swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh + "${HOME}"/.config/swiftpm/swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh } install_static_linux_sdk() { diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index 5185289..d328dd7 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -486,8 +486,10 @@ jobs: echo "Unknown package manager (tried apt-get, dnf, yum)" >&2 exit 1 fi - curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-tripe="${{ inputs.android_sdk_triple }}" ${{ matrix.swift_version }} + # FIXME: restore to main when this PR is ready to be merged + #curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-triple="${{ inputs.android_sdk_triple }}" ${{ matrix.swift_version }} windows-build: name: Windows (${{ matrix.swift_version }} - windows-2022) From b61be5e3543e37347bf9c05a014277cb6d2c361f Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:08:27 -0400 Subject: [PATCH 23/41] Lint fixes and better location of swift-sdks install location --- .github/workflows/scripts/install-and-build-with-sdk.sh | 4 +++- .github/workflows/test-sdks.yml | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index c4e8439..9b516e4 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -569,7 +569,9 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME - "${HOME}"/.config/swiftpm/swift-sdks/${android_sdk_bundle_dir}/swift-android/scripts/setup-android-sdk.sh + cd ~/Library/org.swift.swiftpm || cd "${XDG_CONFIG_HOME}"/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm + ./swift-sdks/"${android_sdk_bundle_dir}"/swift-android/scripts/setup-android-sdk.sh + cd - } install_static_linux_sdk() { diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index 514b931..e3c2d5e 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -34,4 +34,3 @@ jobs: - name: Check Binary run: file .build/debug/hello - From a430110d3aeef12a371fd18f4b7f2562fce64341 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:11:06 -0400 Subject: [PATCH 24/41] Lint fixes and better location of swift-sdks install location --- .github/workflows/scripts/install-and-build-with-sdk.sh | 2 +- .github/workflows/test-sdks.yml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 9b516e4..f4e81e2 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -569,7 +569,7 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME - cd ~/Library/org.swift.swiftpm || cd "${XDG_CONFIG_HOME}"/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm + cd ~/Library/org.swift.swiftpm || cd "${XDG_CONFIG_HOME:-$HOME}"/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm ./swift-sdks/"${android_sdk_bundle_dir}"/swift-android/scripts/setup-android-sdk.sh cd - } diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml index e3c2d5e..4a985d4 100644 --- a/.github/workflows/test-sdks.yml +++ b/.github/workflows/test-sdks.yml @@ -13,7 +13,6 @@ jobs: fail-fast: false matrix: swift_version: ['nightly-main'] - #swift_version: ['6.1', '6.2'] os: ['ubuntu-latest'] runs-on: ubuntu-latest timeout-minutes: 60 From fa17cb1ecb86c7d4b6c8427958f32afc4528fc3b Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:25:52 -0400 Subject: [PATCH 25/41] Better checking for swift-sdk install location; install NDK if it is not present --- .../scripts/install-and-build-with-sdk.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index f4e81e2..b716c24 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -554,7 +554,8 @@ install_android_sdk() { # FIXME: we will be removing the "-0.1" suffix local android_sdk_suffix="-0.1" - local android_sdk_bundle_name="${ANDROID_SDK_TAG}_android${android_sdk_suffix}.artifactbundle" + local android_sdk_name="${ANDROID_SDK_TAG}_android${android_sdk_suffix}" + local android_sdk_bundle_name="${android_sdk_name}.artifactbundle" # FIXME: next SDK will remove the "_" from the name local android_sdk_bundle_dir="${android_sdk_bundle_name//_android/-android}" local android_sdk_filename="${android_sdk_bundle_name}.tar.gz" @@ -569,7 +570,16 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME - cd ~/Library/org.swift.swiftpm || cd "${XDG_CONFIG_HOME:-$HOME}"/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm + swift sdk configure "${android_sdk_name}" --show-configuration + cd ~/Library/org.swift.swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm + + if [[ ! -d "${ANDROID_NDK_HOME}" ]]; then + # download and install the Android NDK + local android_ndk_version=r27d + curl --retry=3 -fsSLO https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip + unzip -q android-ndk-"${android_ndk_version}"-*.zip + export ANDROID_NDK_HOME="${PWD}"/android-ndk-"${android_ndk_version}" + fi ./swift-sdks/"${android_sdk_bundle_dir}"/swift-android/scripts/setup-android-sdk.sh cd - } From 39893865f5ab17f8f1c74a7378ea6c0e4cf4f2ec Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:28:53 -0400 Subject: [PATCH 26/41] Better checking for swift-sdk install location --- .github/workflows/scripts/install-and-build-with-sdk.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index b716c24..33aa64a 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -570,7 +570,8 @@ install_android_sdk() { fi # now setup the link to the local ANDROID_NDK_HOME - swift sdk configure "${android_sdk_name}" --show-configuration + swift sdk configure --show-configuration "$(swift sdk list | grep android | tail -n 1)" + cd ~/Library/org.swift.swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm if [[ ! -d "${ANDROID_NDK_HOME}" ]]; then From e823d65f75ff61ec961eb6b1e48bb2c1c427692c Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:32:04 -0400 Subject: [PATCH 27/41] Better checking for swift-sdk install location --- .github/workflows/scripts/install-and-build-with-sdk.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 33aa64a..5ac9d20 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -572,7 +572,8 @@ install_android_sdk() { # now setup the link to the local ANDROID_NDK_HOME swift sdk configure --show-configuration "$(swift sdk list | grep android | tail -n 1)" - cd ~/Library/org.swift.swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm + # guess some common places where the swift-sdks file lives + cd ~/Library/org.swift.swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm if [[ ! -d "${ANDROID_NDK_HOME}" ]]; then # download and install the Android NDK From 540421187b1caeb80e6e18eb1b62a1748017c094 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:37:19 -0400 Subject: [PATCH 28/41] Better checking for swift-sdk install location From 63138bbceb7ac881f9fddd50a75d925b7dd908e9 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:42:02 -0400 Subject: [PATCH 29/41] Better checking for swift-sdk install location --- .github/workflows/scripts/install-and-build-with-sdk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 5ac9d20..a086fcc 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -575,7 +575,7 @@ install_android_sdk() { # guess some common places where the swift-sdks file lives cd ~/Library/org.swift.swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm - if [[ ! -d "${ANDROID_NDK_HOME}" ]]; then + if [[ ! -d "${ANDROID_NDK_HOME:-}" ]]; then # download and install the Android NDK local android_ndk_version=r27d curl --retry=3 -fsSLO https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip From 122a8facb1ff487f7864d740d147cc87e50c04e5 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 18:44:54 -0400 Subject: [PATCH 30/41] Fix NDK installation --- .github/workflows/scripts/install-and-build-with-sdk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index a086fcc..adcd653 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -578,7 +578,7 @@ install_android_sdk() { if [[ ! -d "${ANDROID_NDK_HOME:-}" ]]; then # download and install the Android NDK local android_ndk_version=r27d - curl --retry=3 -fsSLO https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip + curl --retry 3 -fsSLO https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip unzip -q android-ndk-"${android_ndk_version}"-*.zip export ANDROID_NDK_HOME="${PWD}"/android-ndk-"${android_ndk_version}" fi From 2fd85c0fb217f3b26985e691c885e3b7678b5dac Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 19:01:49 -0400 Subject: [PATCH 31/41] Enable specifying --android-ndk-version flag --- .../scripts/install-and-build-with-sdk.sh | 12 +++++-- .github/workflows/swift_package_test.yml | 6 +++- .github/workflows/test-sdks.yml | 35 ------------------- 3 files changed, 15 insertions(+), 38 deletions(-) delete mode 100644 .github/workflows/test-sdks.yml diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index adcd653..b939642 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -32,6 +32,10 @@ while [[ $# -gt 0 ]]; do INSTALL_ANDROID=true shift ;; + --android-ndk-version=*) + ANDROID_NDK_VERSION="${1#*=}" + shift + ;; --android-sdk-triple=*) ANDROID_SDK_TRIPLE="${1#*=}" shift @@ -575,9 +579,13 @@ install_android_sdk() { # guess some common places where the swift-sdks file lives cd ~/Library/org.swift.swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm || cd /root/.swiftpm + # Download and install the Android NDK. + # Note that we could use the system package manager, but it is + # named different things for different distributions + # (e.g., "google-android-ndk-r26-installer" on Debian) if [[ ! -d "${ANDROID_NDK_HOME:-}" ]]; then - # download and install the Android NDK - local android_ndk_version=r27d + # permit the "--android-ndk" flag to override the default + local android_ndk_version="${ANDROID_NDK_VERSION:-r27d}" curl --retry 3 -fsSLO https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip unzip -q android-ndk-"${android_ndk_version}"-*.zip export ANDROID_NDK_HOME="${PWD}"/android-ndk-"${android_ndk_version}" diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index d328dd7..eaf3abe 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -119,6 +119,10 @@ on: type: string description: "The triple to use when building with the Swift SDK for Android" default: "x86_64-unknown-linux-android28" + android_ndk_version: + type: string + description: "The NDK version to use when building with the Swift SDK for Android" + default: "r27d" windows_pre_build_command: type: string description: "Windows Command Prompt command to execute before building the Swift package" @@ -489,7 +493,7 @@ jobs: # FIXME: restore to main when this PR is ready to be merged #curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-triple="${{ inputs.android_sdk_triple }}" ${{ matrix.swift_version }} + bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-triple="${{ inputs.android_sdk_triple }}" --android-ndk-version="${{ inputs.android_ndk_version }}" ${{ matrix.swift_version }} windows-build: name: Windows (${{ matrix.swift_version }} - windows-2022) diff --git a/.github/workflows/test-sdks.yml b/.github/workflows/test-sdks.yml deleted file mode 100644 index 4a985d4..0000000 --- a/.github/workflows/test-sdks.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: test-sdk-workflows -on: - push: - branches: - - '*' - workflow_dispatch: - pull_request: - branches: - - '*' -jobs: - linux-android: - strategy: - fail-fast: false - matrix: - swift_version: ['nightly-main'] - os: ['ubuntu-latest'] - runs-on: ubuntu-latest - timeout-minutes: 60 - steps: - - name: Create Package - run: swift package init --name hello --type executable - - name: Build Android - run: | - curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="--static-swift-stdlib" --android-sdk-triple=x86_64-unknown-linux-android28 ${{ matrix.swift_version }} - - name: Check Binary - run: file .build/debug/hello - - - name: Build Static Linux - run: | - curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --static --flags="$BUILD_FLAGS" ${{ matrix.swift_version }} - - - name: Check Binary - run: file .build/debug/hello From aefa7671a9dd8617c7ebab8efd70be6aac618d55 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 19:16:40 -0400 Subject: [PATCH 32/41] Add comments and cleanup command args --- .github/workflows/scripts/install-and-build-with-sdk.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index b939642..c72420f 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -212,7 +212,8 @@ find_latest_sdk_snapshot() { log "Fetching development snapshots from swift.org API..." if [[ "${sdk_name}" == "android" ]]; then - # FIXME: hardwired Android nightly until there is an API endpoint + # FIXME: hardwired Android nightly until there is an API endpoint like + # https://www.swift.org/api/v1/install/dev/main/android-sdk.json echo "swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a|451844c232cf1fa02c52431084ed3dc27a42d103635c6fa71bae8d66adba2500" return fi @@ -586,10 +587,11 @@ install_android_sdk() { if [[ ! -d "${ANDROID_NDK_HOME:-}" ]]; then # permit the "--android-ndk" flag to override the default local android_ndk_version="${ANDROID_NDK_VERSION:-r27d}" - curl --retry 3 -fsSLO https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip - unzip -q android-ndk-"${android_ndk_version}"-*.zip + curl -fsSLO --retry 3 -o "android-ndk-${android_ndk_version}.zip" https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip + unzip -q "android-ndk-${android_ndk_version}.zip" export ANDROID_NDK_HOME="${PWD}"/android-ndk-"${android_ndk_version}" fi + ./swift-sdks/"${android_sdk_bundle_dir}"/swift-android/scripts/setup-android-sdk.sh cd - } From 2b3754a69bbc5ed173006337ffe6d7b927c78baf Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Tue, 21 Oct 2025 19:20:26 -0400 Subject: [PATCH 33/41] Fix curl download file argument --- .github/workflows/scripts/install-and-build-with-sdk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index c72420f..9c13ac7 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -587,7 +587,7 @@ install_android_sdk() { if [[ ! -d "${ANDROID_NDK_HOME:-}" ]]; then # permit the "--android-ndk" flag to override the default local android_ndk_version="${ANDROID_NDK_VERSION:-r27d}" - curl -fsSLO --retry 3 -o "android-ndk-${android_ndk_version}.zip" https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip + curl -fsSL -o "android-ndk-${android_ndk_version}.zip" --retry 3 https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip unzip -q "android-ndk-${android_ndk_version}.zip" export ANDROID_NDK_HOME="${PWD}"/android-ndk-"${android_ndk_version}" fi From 54c793208342b506c1573d5d6319fa2dbfa0295a Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Wed, 22 Oct 2025 09:42:47 -0400 Subject: [PATCH 34/41] Use new Android endpoint to find SDK (https://github.com/swiftlang/swift-org-website/pull/1196) --- .github/workflows/scripts/install-and-build-with-sdk.sh | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 9c13ac7..3e17065 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -211,13 +211,6 @@ find_latest_sdk_snapshot() { log "Finding latest ${sdk_name}-sdk for Swift nightly-${version}" log "Fetching development snapshots from swift.org API..." - if [[ "${sdk_name}" == "android" ]]; then - # FIXME: hardwired Android nightly until there is an API endpoint like - # https://www.swift.org/api/v1/install/dev/main/android-sdk.json - echo "swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a|451844c232cf1fa02c52431084ed3dc27a42d103635c6fa71bae8d66adba2500" - return - fi - local sdk_json sdk_json=$(curl -fsSL "${SWIFT_API_INSTALL_ROOT}/dev/${version}/${sdk_name}-sdk.json") || fatal "Failed to fetch ${sdk_name}-sdk development snapshots" From b82279803f081b52b50efbf999fa2d6abdb04d4c Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Wed, 22 Oct 2025 13:08:53 -0400 Subject: [PATCH 35/41] Cleanup the FIXMEs --- .../scripts/install-and-build-with-sdk.sh | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 3e17065..b1c193b 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -240,6 +240,10 @@ find_latest_sdk_snapshot() { SWIFT_VERSION_BRANCH="" ANDROID_SDK_TAG="" ANDROID_SDK_CHECKSUM="" +# TODO: we will be removing the "-0.1" suffix in a future nightly +ANDROID_SDK_PATH_SUFFIX="-0.1" +ANDROID_SDK_PATH_SEP="-" + STATIC_LINUX_SDK_TAG="" STATIC_LINUX_SDK_CHECKSUM="" WASM_SDK_TAG="" @@ -549,13 +553,10 @@ install_android_sdk() { log "Installing Android Swift SDK: $ANDROID_SDK_TAG" - # FIXME: we will be removing the "-0.1" suffix - local android_sdk_suffix="-0.1" - - local android_sdk_name="${ANDROID_SDK_TAG}_android${android_sdk_suffix}" + local android_sdk_name="${ANDROID_SDK_TAG}_android${ANDROID_SDK_PATH_SUFFIX}" local android_sdk_bundle_name="${android_sdk_name}.artifactbundle" - # FIXME: next SDK will remove the "_" from the name - local android_sdk_bundle_dir="${android_sdk_bundle_name//_android/-android}" + # TODO: remove once the next nightly changes the "-" to "_" in the name + local android_sdk_bundle_dir="${android_sdk_bundle_name//_android/${ANDROID_SDK_PATH_SEP}android}" local android_sdk_filename="${android_sdk_bundle_name}.tar.gz" local sdk_url="${ANDROID_SDK_DOWNLOAD_ROOT}/${ANDROID_SDK_TAG}/${android_sdk_filename}" @@ -580,8 +581,9 @@ install_android_sdk() { if [[ ! -d "${ANDROID_NDK_HOME:-}" ]]; then # permit the "--android-ndk" flag to override the default local android_ndk_version="${ANDROID_NDK_VERSION:-r27d}" - curl -fsSL -o "android-ndk-${android_ndk_version}.zip" --retry 3 https://dl.google.com/android/repository/android-ndk-"${android_ndk_version}"-"$(uname -s)".zip - unzip -q "android-ndk-${android_ndk_version}.zip" + 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}" fi @@ -655,9 +657,7 @@ build() { if [[ "$INSTALL_ANDROID" == true ]]; then log "Running Swift build with Android Swift SDK" - # FIXME: we will be trimming "-0.1" from the name in the next nightly - local sdk_name="${ANDROID_SDK_TAG}-android-0.1" - #local sdk_name="${ANDROID_SDK_TAG}_android" + local sdk_name="${ANDROID_SDK_TAG}${ANDROID_SDK_PATH_SEP}android${ANDROID_SDK_PATH_SUFFIX}" alias swift='$SWIFT_EXECUTABLE_FOR_ANDROID_SDK' local build_command="$SWIFT_BUILD_COMMAND --swift-sdk ${ANDROID_SDK_TRIPLE:-$sdk_name}" From 3e6345e58359bed5ab641577cfcf6f3bae0fe8a0 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Wed, 22 Oct 2025 13:18:43 -0400 Subject: [PATCH 36/41] Use swiftlang main URL for install-and-build-with-sdk.sh --- .github/workflows/swift_package_test.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index eaf3abe..187f6df 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -490,9 +490,7 @@ jobs: echo "Unknown package manager (tried apt-get, dnf, yum)" >&2 exit 1 fi - # FIXME: restore to main when this PR is ready to be merged - #curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-triple="${{ inputs.android_sdk_triple }}" --android-ndk-version="${{ inputs.android_ndk_version }}" ${{ matrix.swift_version }} windows-build: From e3e913fd450cde3c23a21ebc5a4817943e34655a Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Wed, 22 Oct 2025 13:51:43 -0400 Subject: [PATCH 37/41] Test one more common location for the swiftpm folder --- .github/workflows/scripts/install-and-build-with-sdk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index b1c193b..7757eeb 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -572,7 +572,7 @@ install_android_sdk() { swift sdk configure --show-configuration "$(swift sdk list | grep android | tail -n 1)" # guess some common places where the swift-sdks file lives - cd ~/Library/org.swift.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 # Download and install the Android NDK. # Note that we could use the system package manager, but it is From 54759e2c2c24cb6fc73b3e7e59da03b9be5194c6 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Wed, 22 Oct 2025 14:17:41 -0400 Subject: [PATCH 38/41] Move package manager detection into install_package so we don't bail on macOS --- .../scripts/install-and-build-with-sdk.sh | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index 7757eeb..cdef00f 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -92,18 +92,17 @@ if [[ -n "$SWIFT_BUILD_FLAGS" ]]; then log "Additional build flags: $SWIFT_BUILD_FLAGS" fi -# Detect package manager -if command -v apt >/dev/null 2>&1; then - INSTALL_PACKAGE_COMMAND="apt update -q && apt install -yq" -elif command -v dnf >/dev/null 2>&1; then - INSTALL_PACKAGE_COMMAND="dnf install -y" -elif command -v yum >/dev/null 2>&1; then - INSTALL_PACKAGE_COMMAND="yum install -y" -else - fatal "No supported package manager found" -fi - install_package() { + # Detect package manager + if command -v apt >/dev/null 2>&1; then + INSTALL_PACKAGE_COMMAND="apt update -q && apt install -yq" + elif command -v dnf >/dev/null 2>&1; then + INSTALL_PACKAGE_COMMAND="dnf install -y" + elif command -v yum >/dev/null 2>&1; then + INSTALL_PACKAGE_COMMAND="yum install -y" + else + fatal "No supported package manager found" + fi eval "$INSTALL_PACKAGE_COMMAND $1" } From e619ba2b297665ec095e0cfaae37eb1d97e571e1 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Wed, 22 Oct 2025 19:00:48 -0400 Subject: [PATCH 39/41] Clear ANDROID_NDK_ROOT environment due to https://github.com/swiftlang/swift-driver/pull/1879 --- .github/workflows/scripts/install-and-build-with-sdk.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/scripts/install-and-build-with-sdk.sh b/.github/workflows/scripts/install-and-build-with-sdk.sh index cdef00f..986aa8c 100644 --- a/.github/workflows/scripts/install-and-build-with-sdk.sh +++ b/.github/workflows/scripts/install-and-build-with-sdk.sh @@ -666,6 +666,11 @@ build() { log "Running: $build_command" + # clear the ANDROID_NDK_ROOT environment variable if it is set + # due to https://github.com/swiftlang/swift-driver/pull/1879 + # otherwise build error: missing required module 'SwiftAndroid' + export ANDROID_NDK_ROOT="" + if eval "$build_command"; then log "✅ Swift build with Android Swift SDK completed successfully" else From ec33dc7a5d243f6ffaf02ade7d5b554fd9a20830 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 00:19:38 -0400 Subject: [PATCH 40/41] Make android_ndk_version and android_sdk_triple inputs matrix arrays --- .github/workflows/swift_package_test.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index 187f6df..1c3da6c 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -118,11 +118,11 @@ on: android_sdk_triple: type: string description: "The triple to use when building with the Swift SDK for Android" - default: "x86_64-unknown-linux-android28" + default: "[\"x86_64-unknown-linux-android28\"]" android_ndk_version: type: string description: "The NDK version to use when building with the Swift SDK for Android" - default: "r27d" + default: "[\"r27d\"]" windows_pre_build_command: type: string description: "Windows Command Prompt command to execute before building the Swift package" @@ -444,6 +444,8 @@ jobs: fail-fast: false matrix: swift_version: ${{ fromJson(inputs.android_sdk_versions) }} + sdk_triple: ${{ fromJson(inputs.android_sdk_triple) }} + ndk_version: ${{ fromJson(inputs.android_ndk_version) }} os_version: ${{ fromJson(inputs.linux_os_versions) }} exclude: - ${{ fromJson(inputs.android_exclude_swift_versions) }} @@ -490,8 +492,10 @@ jobs: echo "Unknown package manager (tried apt-get, dnf, yum)" >&2 exit 1 fi - curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-triple="${{ inputs.android_sdk_triple }}" --android-ndk-version="${{ inputs.android_ndk_version }}" ${{ matrix.swift_version }} + # TODO: restore + #curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-triple="${{ inputs.sdk_triple }}" --android-ndk-version="${{ inputs.ndk_version }}" ${{ matrix.swift_version }} windows-build: name: Windows (${{ matrix.swift_version }} - windows-2022) From 9f4bcb53d59c596b8b96974e131f6b3cc5079fef Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 23 Oct 2025 00:24:01 -0400 Subject: [PATCH 41/41] Restore base repository source for install-and-build-with-sdk.sh --- .github/workflows/swift_package_test.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/swift_package_test.yml b/.github/workflows/swift_package_test.yml index 1c3da6c..67eac73 100644 --- a/.github/workflows/swift_package_test.yml +++ b/.github/workflows/swift_package_test.yml @@ -492,9 +492,7 @@ jobs: echo "Unknown package manager (tried apt-get, dnf, yum)" >&2 exit 1 fi - # TODO: restore - #curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ - curl -s --retry 3 https://raw.githubusercontent.com/swift-android-sdk/github-workflows/refs/heads/android-workflow/.github/workflows/scripts/install-and-build-with-sdk.sh | \ + curl -s --retry 3 https://raw.githubusercontent.com/swiftlang/github-workflows/refs/heads/main/.github/workflows/scripts/install-and-build-with-sdk.sh | \ bash -s -- --android --flags="$BUILD_FLAGS" --build-command="${{ inputs.android_sdk_build_command }}" --android-sdk-triple="${{ inputs.sdk_triple }}" --android-ndk-version="${{ inputs.ndk_version }}" ${{ matrix.swift_version }} windows-build: