Fix run-tests.sh script #113
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: sdk-install-demo ci | |
| on: | |
| push: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| pull_request: | |
| schedule: | |
| - cron: '0 1,7,13,20 * * *' | |
| jobs: | |
| install-sdk: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: 'macOS 15 X64 API 28' | |
| os: 'macos-15-intel' | |
| ANDROID_API: 28 | |
| NDK_VERSION: 'r27d' | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| EMULATOR_GPU: 'swiftshader_indirect' | |
| - name: 'Ubuntu X64 API 28' | |
| os: 'ubuntu-latest' | |
| ANDROID_API: 28 | |
| NDK_VERSION: 'r28c' | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| EMULATOR_GPU: 'swiftshader_indirect' | |
| - name: 'Ubuntu X64 API 35' | |
| os: 'ubuntu-latest' | |
| ANDROID_API: 35 | |
| NDK_VERSION: 'r29' | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| EMULATOR_GPU: 'swiftshader_indirect' | |
| # Android SDK for Linux is only x86_64 | |
| #- name: 'Ubuntu ARM API 28' | |
| # os: 'ubuntu-24.04-arm' | |
| # ANDROID_API: 28 | |
| # EMULATOR_ARCH: 'arm64-v8a' | |
| # EMULATOR_ARCH_TRIPLE: 'aarch64' | |
| # EMULATOR_GPU: 'swiftshader_indirect' | |
| # Cannot test on ARM macOS because Android emulator required nested | |
| # virtualization | |
| #- name: 'macOS 15 ARM' | |
| # os: 'macos-15' | |
| # ANDROID_API: 28 | |
| # EMULATOR_ARCH: 'arm64-v8a' | |
| # EMULATOR_ARCH_TRIPLE: 'aarch64' | |
| # EMULATOR_GPU: 'swiftshader_indirect' | |
| 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_EMULATOR_GPU: ${{ matrix.EMULATOR_GPU }} | |
| ANDROID_TARGET: 'default' | |
| #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 }}" | |
| steps: | |
| - name: Create run-tests script | |
| run: | | |
| cat > run-tests.sh << "EOF" | |
| #!/bin/bash -ex | |
| ORG=$(echo "${1}" | cut -f '/' -d 1) | |
| PACKAGE=$(echo "${1}" | cut -f '/' -d 2) | |
| 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 | |
| adb push .build/debug/${PACKAGE}PackageTests.xctest /data/local/tmp | |
| adb shell /data/local/tmp/${PACKAGE}PackageTests.xctest | |
| EOF | |
| chmod +x run-tests.sh | |
| cat run-tests.sh | |
| - name: Free Disk Space | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf "/usr/local/share/boost" | |
| sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
| - name: Install Prerequisites | |
| run: | | |
| if [[ "${RUNNER_OS}" == "Linux" ]]; then | |
| # libcurl4-openssl-dev needed for host toolchain | |
| sudo apt-get -y install libcurl4-openssl-dev | |
| fi | |
| # swiftly install instructions from https://www.swift.org/install/linux/ | |
| - name: Install Swiftly | |
| run: | | |
| if [[ "${RUNNER_OS}" == "macOS" ]]; then | |
| curl -fsSL -O https://download.swift.org/swiftly/darwin/swiftly.pkg | |
| installer -pkg swiftly.pkg -target CurrentUserHomeDirectory | |
| ~/.swiftly/bin/swiftly init --quiet-shell-followup --skip-install | |
| . "${SWIFTLY_HOME_DIR:-$HOME/.swiftly}/env.sh" | |
| elif [[ "${RUNNER_OS}" == "Linux" ]]; then | |
| curl -fsSL -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz | |
| tar zxf swiftly-$(uname -m).tar.gz | |
| ./swiftly init --quiet-shell-followup --skip-install | |
| . "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" | |
| else | |
| echo "Error: unsupported OS: ${RUNNER_OS}" | |
| exit 1 | |
| fi | |
| hash -r | |
| echo "${SWIFTLY_BIN_DIR}" >> "${GITHUB_PATH}" | |
| - name: Get Latest Toolchain Info | |
| run: | | |
| sdk_json=$(curl -fsSL "https://www.swift.org/api/v1/install/dev/main/android-sdk.json") || fatal "Failed to fetch android-sdk development snapshots" | |
| snapshot_tag=$(echo "$sdk_json" | jq -r '.[0].dir') | |
| checksum=$(echo "$sdk_json" | jq -r '.[0].checksum') | |
| echo "SWIFT_TOOLCHAIN_VERSION=${snapshot_tag}" >> ${GITHUB_ENV} | |
| echo "SWIFT_ANDROID_SDK_VERSION=${snapshot_tag}" >> ${GITHUB_ENV} | |
| echo "SWIFT_ANDROID_SDK_CHECKSUM=${checksum}" >> ${GITHUB_ENV} | |
| - name: Install Swift Host Toolchain | |
| run: swiftly install --use "${SWIFT_TOOLCHAIN_VERSION}" | |
| - name: Install Swift SDK for Android | |
| run: swiftly run swift sdk install https://download.swift.org/development/android-sdk/${SWIFT_ANDROID_SDK_VERSION}/${SWIFT_ANDROID_SDK_VERSION}_android-0.1.artifactbundle.tar.gz --checksum ${SWIFT_ANDROID_SDK_CHECKSUM} | |
| - name: List Swift SDKs | |
| run: swiftly run swift sdk list | |
| - name: Install Android NDK | |
| run: | | |
| # Only install the NDK if it is overridden | |
| # Otherwise use the runner-installed NDK | |
| if [[ ! -z "${ANDROID_NDK_VERSION}" ]]; then | |
| mkdir ~/android-ndk | |
| cd ~/android-ndk | |
| curl -fsSLO https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-$(uname -s).zip | |
| unzip -q android-ndk-${ANDROID_NDK_VERSION}-*.zip | |
| echo "ANDROID_NDK_HOME=${PWD}/android-ndk-${ANDROID_NDK_VERSION}" >> $GITHUB_ENV | |
| fi | |
| - 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 | |
| ./swift-sdks/${SWIFT_ANDROID_SDK_VERSION}*.artifactbundle/swift-android/scripts/setup-android-sdk.sh | |
| - name: Build Swift Executable for Android | |
| run: | | |
| mkdir hello | |
| cd hello | |
| swiftly run swift package init --type executable | |
| 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: 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 -accel off -no-accel -gpu "${ANDROID_EMULATOR_GPU}" -no-snapshot -noaudio -no-boot-anim & | |
| - name: ADB Wait For Device | |
| 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!' | |
| - name: Run Swift Executable on Android Emulator | |
| run: | | |
| cd hello | |
| adb push .build/debug/hello /data/local/tmp | |
| 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: Install testing prerequisites on Android Emulator | |
| run: | | |
| cd ~/Library/org.swift.swiftpm || cd ${XDG_CONFIG_HOME}/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm | |
| # add necessary dependencies | |
| 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 - | |
| - name: Run swift-algorithms tests | |
| run: ./run-tests.sh apple/swift-algorithms | |
| - name: Run swift-crypto tests | |
| run: ./run-tests.sh apple/swift-crypto | |
| - name: Run swift-argument-parser tests | |
| run: ./run-tests.sh apple/swift-argument-parser | |