Add ubuntu-24.04-arm runner #92
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: | |
| jobs: | |
| install-sdk: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| #- name: 'macOS 15 ARM' | |
| # os: 'macos-15' | |
| # ANDROID_API: 28 | |
| # EMULATOR_ARCH: 'arm64-v8a' | |
| # EMULATOR_ARCH_TRIPLE: 'aarch64' | |
| # EMULATOR_GPU: 'swiftshader_indirect' | |
| - name: 'macOS 15 X86 API 28' | |
| os: 'macos-15-intel' | |
| ANDROID_API: 28 | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| EMULATOR_GPU: 'swiftshader_indirect' | |
| - name: 'Ubuntu X86 API 28' | |
| os: 'ubuntu-latest' | |
| ANDROID_API: 28 | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| EMULATOR_GPU: 'swiftshader_indirect' | |
| - 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' | |
| - name: 'Ubuntu X86 API 35' | |
| os: 'ubuntu-latest' | |
| ANDROID_API: 35 | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| 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: "r27d" | |
| SWIFT_TOOLCHAIN_VERSION: "swift-DEVELOPMENT-SNAPSHOT-2025-10-16" | |
| SWIFT_ANDROID_SDK_VERSION: "swift-DEVELOPMENT-SNAPSHOT-2025-10-16" | |
| SWIFT_ANDROID_SDK_CHECKSUM: "451844c232cf1fa02c52431084ed3dc27a42d103635c6fa71bae8d66adba2500" | |
| steps: | |
| - 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 -O https://download.swift.org/swiftly/darwin/swiftly.pkg && \ | |
| installer -pkg swiftly.pkg -target CurrentUserHomeDirectory && \ | |
| ~/.swiftly/bin/swiftly init --quiet-shell-followup && \ | |
| . "${SWIFTLY_HOME_DIR:-$HOME/.swiftly}/env.sh" && \ | |
| hash -r | |
| elif [[ "${RUNNER_OS}" == "Linux" ]]; then | |
| curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz && \ | |
| tar zxf swiftly-$(uname -m).tar.gz && \ | |
| ./swiftly init --quiet-shell-followup && \ | |
| . "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" && \ | |
| hash -r | |
| else | |
| echo "Error: unsupported OS: ${RUNNER_OS}" | |
| exit 1 | |
| fi | |
| echo "${SWIFTLY_BIN_DIR}" >> "${GITHUB_PATH}" | |
| - name: Install Swift Host Toolchain | |
| run: swiftly install --use "${SWIFT_TOOLCHAIN_VERSION}" | |
| - name: Install Swift SDK for Android | |
| run: swift sdk install https://download.swift.org/development/android-sdk/${SWIFT_ANDROID_SDK_VERSION}-a/${SWIFT_ANDROID_SDK_VERSION}-a_android-0.1.artifactbundle.tar.gz --checksum ${SWIFT_ANDROID_SDK_CHECKSUM} | |
| - name: List Swift SDKs | |
| run: swift sdk list | |
| - name: Install Android NDK | |
| run: | | |
| 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 | |
| - 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}-a-android-0.1.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: | | |
| 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 | |
| - 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: Push Swift Executable to 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/ | |
| - name: Run Swift Executable on Android Emulator | |
| run: | | |
| adb shell /data/local/tmp/hello | |