Skip to content

Use swift_package_test.yml workflow for build #98

Use swift_package_test.yml workflow for build

Use swift_package_test.yml workflow for build #98

Workflow file for this run

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"
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: |
#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="${{ inputs.android_sdk_triple }}" --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