Use swift_package_test.yml workflow for build #100
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: | |
| #swift_version: ['nightly-main'] | |
| include: | |
| - name: 'macOS 15 X64 API 28' | |
| os: 'macos-15-intel' | |
| ANDROID_API: 28 | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| EMULATOR_GPU: 'swiftshader_indirect' | |
| - name: 'Ubuntu X64 API 28' | |
| os: 'ubuntu-latest' | |
| ANDROID_API: 28 | |
| EMULATOR_ARCH: 'x86_64' | |
| EMULATOR_ARCH_TRIPLE: 'x86_64' | |
| EMULATOR_GPU: 'swiftshader_indirect' | |
| - name: 'Ubuntu X64 API 35' | |
| os: 'ubuntu-latest' | |
| ANDROID_API: 35 | |
| 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: "r27d" | |
| SWIFT_VERSION: "nightly-main" | |
| BUILD_FLAGS: "--static-swift-stdlib" | |
| 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: Create Swift Package | |
| run: | | |
| swift package init --name hello --type executable | |
| - name: Build Package for Android | |
| run: | | |
| # TODO: the install-and-build-with-sdk.sh script does not yet | |
| # support macOS, so use swiftly to install and setup the toolchain… | |
| #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" --android-sdk-triple="${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" --android-ndk-version="${ANDROID_NDK_VERSION}" ${SWIFT_VERSION} | |
| - name: Check Swift Package | |
| run: | | |
| 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: Setup Android Environment | |
| run: | | |
| echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${{ env.ANDROID_BUILD_TOOLS_VERSION }}" >> $GITHUB_PATH | |
| # needed for Linux or else the emulator will be created in | |
| # ~/.android/avd but it will be sought in ~/.config/.android/avd | |
| if [[ "${RUNNER_OS}" == "Linux" ]]; then | |
| echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV | |
| fi | |
| - name: Android SDKs - setup environment | |
| 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 - 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: Check Android Emulator | |
| run: | | |
| adb shell 'echo Hello Android!' | |
| - name: Push Swift Executable to Android Emulator | |
| run: | | |
| 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 | |