Skip to content

Update SDK version to 0.16.1-rc.1 #392

Update SDK version to 0.16.1-rc.1

Update SDK version to 0.16.1-rc.1 #392

Workflow file for this run

name: android
on:
push:
branches:
- main
pull_request:
# Cancel in-progress CI jobs when a new commit is pushed to a PR.
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
pre_check:
name: pre_check
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.check_changes.outputs.run_tests }}
steps:
# Checkout repo to Github Actions runner
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Check for Bazel build file changes
- name: Check for Bazel build file changes
id: bazel_check
run: ./ci/check_bazel.sh //examples/android:android_app
continue-on-error: true
- name: Check for workflow file changes
id: workflow_check
run: ./ci/files_changed.sh .github/workflows/android.yaml
continue-on-error: true
- name: Check for relevant Gradle changes
id: gradle_check
run: ./ci/files_changed.sh "^platform/jvm/gradle-test-app/.*\.(gradle|kts|kt|xml)$"
continue-on-error: true
- name: Determine if tests should run
id: check_changes_separate
run: |
bazel_status="${{ steps.bazel_check.outputs.check_result }}"
workflow_status="${{ steps.workflow_check.outputs.check_result }}"
gradle_status="${{ steps.gradle_check.outputs.check_result }}"
# Check if any status indicates a relevant change or error
if [[ "$bazel_status" == "1" || "$workflow_status" == "1" || "$gradle_status" == "1" ]]; then
echo "An unexpected issue occurred during checks."
exit 1
elif [[ "$bazel_status" == "0" || "$workflow_status" == "0" || "$gradle_status" == "0" ]]; then
echo "Changes detected in one or more checks. Running tests."
echo "run_tests=true" >> $GITHUB_ENV
elif [[ "$bazel_status" == "2" && "$workflow_status" == "2" && "$gradle_status" == "2" ]]; then
echo "No relevant changes found."
echo "run_tests=false" >> $GITHUB_ENV
else
echo "Unknown issue."
exit 1
fi
shell: bash
- name: Run downstream tests if changes are detected
id: check_changes
if: env.run_tests == 'true'
run: ./ci/run_tests.sh
build_apk:
runs-on: ubuntu-latest
if: needs.pre_check.outputs.should_run == 'true'
needs: pre_check
steps:
# Checkout repo to Github Actions runner
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: build apk
timeout-minutes: 30
run: ./bazelw build --config ci --config release-android --fat_apk_cpu=x86_64 //examples/android:android_app
- uses: actions/upload-artifact@v4
with:
name: android_app.apk
path: ./bazel-bin/examples/android/android_app.apk
gradle_tests:
# Requires a "larger runner", for nested virtualization support
runs-on: ubuntu-latest-8-cores
env:
SKIP_PROTO_GEN: 1
if: needs.pre_check.outputs.should_run == 'true'
needs: pre_check
steps:
- name: Checkout project sources
uses: actions/checkout@v4
# See https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/
- name: Enable KVM group perms
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: Install NDK
run: |
NDK_VERSION="27.2.12479018"
NDK_PATH="${ANDROID_SDK_ROOT}/ndk/$NDK_VERSION"
if [ -d "$NDK_PATH" ]; then
// The NDK is already installed.
exit 0
fi
ANDROID_HOME=$ANDROID_SDK_ROOT
SDKMANAGER="${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager"
$SDKMANAGER --uninstall "ndk-bundle"
echo "y" | $SDKMANAGER "ndk;$NDK_VERSION"
ln -sfn "$NDK_PATH" "${ANDROID_SDK_ROOT}/ndk-bundle"
$SDKMANAGER --install "build-tools;34.0.0"
echo "ANDROID_NDK_HOME=${ANDROID_HOME}/ndk/$NDK_VERSION" >> "$GITHUB_ENV"
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'
cache: gradle
- name: Set up Rust ARM target
run: rustup update && rustup target add aarch64-linux-android && rustup target add x86_64-linux-android
- name: AVD cache
uses: actions/cache@v4
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: ${{ runner.os }}-avd-api-21-2
- name: Create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
timeout-minutes: 30
uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # [email protected]
with:
channel: stable
force-avd-creation: false
api-level: 21
target: default
ram-size: 2048M
arch: x86_64
disk-size: 6144M
profile: Nexus 6
disable-animations: true
emulator-options: -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
script: echo "Generated AVD snapshot for caching."
- name: Gradle capture-timber unit tests
working-directory: ./platform/jvm
run: ./gradlew capture-timber:testReleaseUnitTest --info
- name: Check Licenses for modules
working-directory: ./platform/jvm
run: ./gradlew replay:checkLicense common:checkLicense # capture:checkLicense doesn't work at the moment
- name: Instrumentation Tests
uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # [email protected]
with:
channel: stable
force-avd-creation: false
api-level: 21
target: default
ram-size: 2048M
arch: x86_64
disk-size: 6144M
profile: Nexus 6
disable-animations: true
emulator-options: -no-snapshot-save -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
script: cd platform/jvm && adb uninstall io.bitdrift.gradletestapp.test; adb uninstall io.bitdrift.gradletestapp; cd ../.. && ./tools/android_sdk_wrapper.sh platform/jvm/gradlew -p platform/jvm gradle-test-app:check gradle-test-app:connectedCheck --stacktrace
verify_android_hello_world_per_version:
needs: build_apk
runs-on: ubuntu-latest-8-cores
strategy:
matrix:
api-level: [21, 34]
steps:
# Checkout repo to Github Actions runner
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# See https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/
- name: Enable KVM group perms
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
- uses: actions/download-artifact@v4
with:
name: android_app.apk
path: .
- name: AVD cache
uses: actions/cache@v3
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: ${{ runner.os }}-avd-api${{ matrix.api-level }}-1
- name: Create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
timeout-minutes: 30
uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b # pin@v2
with:
channel: stable
api-level: ${{ matrix.api-level }}
target: google_apis
ram-size: 2048M
arch: x86_64
disk-size: 6144M
profile: Nexus 6
emulator-options: -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
script: echo "Generated AVD snapshot for caching."
- name: run tests
uses: reactivecircus/android-emulator-runner@v2
timeout-minutes: 15
with:
force-avd-creation: false
channel: stable
api-level: ${{ matrix.api-level }}
target: google_apis
ram-size: 2048M
arch: x86_64
disk-size: 6144M
profile: Nexus 6
emulator-options: -no-snapshot-save -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
script: ./ci/verify_android.sh
# This is a noop job that completes once all the jobs spawned by the previous step completes. By blocking PR merges on this
# job completing, we are able to gate it on all the previous jobs without explicitly enumerating them.
verify_android:
runs-on: ubuntu-latest
needs: ["pre_check", "build_apk", "verify_android_hello_world_per_version", "gradle_tests"]
if: always()
steps:
# Checkout repo to Github Actions runner
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: check result
run: ./ci/check_result.sh ${{ needs.pre_check.result }} && ./ci/check_result.sh ${{ needs.build_apk.result }} && ./ci/check_result.sh ${{ needs.verify_android_hello_world_per_version.result }} && ./ci/check_result.sh ${{ needs.gradle_tests.result }}