diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 710e291..eb839a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,7 @@ on: push: branches: [ main ] workflow_dispatch: - + pull_request: jobs: install-sdk: strategy: @@ -12,84 +12,95 @@ jobs: - name: 'macOS 26' os: 'macos-26' ANDROID_API: 28 - ANDROID_ARCH: 'arm64-v8a' - ANDROID_GPU: 'swiftshader_indirect' - - name: 'macOS 15' - os: 'macos-15' - ANDROID_API: 28 - ANDROID_ARCH: 'arm64-v8a' - ANDROID_GPU: 'swiftshader_indirect' - - name: 'macOS 14' - os: 'macos-14' - ANDROID_API: 28 - ANDROID_ARCH: 'arm64-v8a' - ANDROID_GPU: 'swiftshader_indirect' + EMULATOR_ARCH: 'arm64-v8a' + EMULATOR_GPU: 'swiftshader_indirect' + #- name: 'macOS 15' + # os: 'macos-15' + # ANDROID_API: 28 + # EMULATOR_ARCH: 'arm64-v8a' + # EMULATOR_GPU: 'swiftshader_indirect' + #- name: 'macOS 14' + # os: 'macos-14' + # ANDROID_API: 28 + # EMULATOR_ARCH: 'arm64-v8a' + # EMULATOR_GPU: 'swiftshader_indirect' - name: 'macOS 13' os: 'macos-13' ANDROID_API: 28 - ANDROID_ARCH: 'x86_64' - ANDROID_GPU: 'swiftshader_indirect' + EMULATOR_ARCH: 'x86_64' + EMULATOR_GPU: 'swiftshader_indirect' - name: 'Ubuntu Latest' os: 'ubuntu-latest' ANDROID_API: 28 - ANDROID_ARCH: 'x86_64' - ANDROID_GPU: 'none' + EMULATOR_ARCH: 'x86_64' + EMULATOR_GPU: 'swiftshader_indirect' fail-fast: false runs-on: ${{ matrix.os }} env: ANDROID_API: ${{ matrix.ANDROID_API }} - ANDROID_ARCH: ${{ matrix.ANDROID_ARCH }} - ANDROID_GPU: ${{ matrix.ANDROID_GPU }} + EMULATOR_ARCH: ${{ matrix.EMULATOR_ARCH }} + EMULATOR_GPU: ${{ matrix.EMULATOR_GPU }} + EMULATOR_ENGINE: ${{ matrix.EMULATOR_ENGINE }} ANDROID_TARGET: 'default' #ANDROID_BUILD_TOOLS_VERSION: 36.0.0 ANDROID_BUILD_TOOLS_VERSION: 'latest' - ANDROID_EMULATOR_NAME: 'test' + ANDROID_EMULATOR_NAME: 'demo' + ANDROID_PROFILE: "Nexus 10" + ANDROID_CHANNEL: "3" + BUILD_TOOLS_VERSION: "35.0.0" steps: + - uses: skiptools/actions/setup-skip@v1 + + - uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: r27d + - name: "Setup 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 + echo "ANDROID_NDK_HOME=${{ steps.setup-ndk.outputs.ndk-path }}" >> $GITHUB_ENV + # 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}/.android/avd" >> $GITHUB_ENV + fi - - name: "Launch emulator" - timeout-minutes: 10 - run: | - which adb + - uses: skiptools/swift-android-action@v2 + with: + build-package: false - yes Y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses + - name: SDKs - accept licenses + run: yes y | sdkmanager --licenses - # Install AVD files - yes Y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_ARCH}" - yes Y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --channel=3 emulator - # Create emulator - echo "no" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -f -n test -d "Nexus 10" --abi "${ANDROID_TARGET}/${ANDROID_ARCH}" -k "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_ARCH}" --force - $ANDROID_HOME/emulator/emulator -list-avds - echo "Starting emulator" - - # Start emulator in background - nohup $ANDROID_HOME/emulator/emulator -avd ${ANDROID_EMULATOR_NAME} -no-snapshot -no-window -no-audio -no-boot-anim -no-accel -no-metrics -camera-back none -accel off -gpu ${ANDROID_GPU} & - # Fixed quoting around "\r" - $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d "\r") ]]; do sleep 1; done; input keyevent 82' - $ANDROID_HOME/platform-tools/adb devices - echo "Emulator started" - - - name: "Check Emulator" - run: | - $ANDROID_HOME/platform-tools/adb shell 'echo Hello Android!' - - - name: "Install Skip (macOS)" - if: ${{ startsWith(matrix.os, 'macos-') }} - run: | - brew install skiptools/skip/skip - skip android sdk install + - name: SKDs - setup build tools + run: sdkmanager --install "build-tools;${BUILD_TOOLS_VERSION}" platform-tools "platforms;android-${ANDROID_API}" --channel="${ANDROID_CHANNEL}" - - name: Install Skip (Ubuntu) - if: ${{ startsWith(matrix.os, 'ubuntu-') }} + - name: SKDs - setup emulator + run: sdkmanager --install emulator --channel="${ANDROID_CHANNEL}" + + - name: SKDs - download required images + run: sdkmanager --install "system-images;android-${ANDROID_API};${ANDROID_TARGET};${EMULATOR_ARCH}" --channel="${ANDROID_CHANNEL}" + + - name: Emulator - Create + run: avdmanager --verbose create avd --force -n "${ANDROID_EMULATOR_NAME}" --device "${ANDROID_PROFILE}" --abi "${ANDROID_TARGET}/${EMULATOR_ARCH}" --package "system-images;android-${ANDROID_API};${ANDROID_TARGET};${EMULATOR_ARCH}" --sdcard 512M + + - name: Emulator - Find AVDs + run: find ~/ -type d -name '*.avd' + + - name: Emulator - List AVDs + run: emulator -list-avds + + - name: Emulator - Boot + run: emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -accel off -no-accel -gpu "${EMULATOR_GPU}" -no-snapshot -noaudio -no-boot-anim & + + - name: ADB Wait For Device + run: adb wait-for-any-device + timeout-minutes: 3 + + - name: "Check Emulator" run: | - mkdir -p ~/bin/skiptools - cd ~/bin/skiptools - curl -fsSLO https://github.com/skiptools/skip/releases/latest/download/skip-linux.zip - unzip skip-linux.zip - echo "PATH=${PWD}/skip.artifactbundle/$(uname -m)-swift-linux-musl:${PATH}" >> $GITHUB_ENV - cd - + adb shell 'echo Hello Android!' - name: "Test Swift Package" run: | @@ -97,5 +108,5 @@ jobs: cd PackageDemo swift package init swift test - skip android test + skip android test --arch ${EMULATOR_ARCH}