From 386bd961b208351242f1dc62045c186b39a56919 Mon Sep 17 00:00:00 2001 From: Erisu Date: Tue, 14 May 2024 12:54:57 +0900 Subject: [PATCH] ci(android): test all sdk on push, limit set on PR --- .github/workflows/android-pr.yml | 130 ++++++++++++++++++ .../{android.yml => android-push.yml} | 25 +++- conf/pr/local/android-14.config.json | 7 + 3 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/android-pr.yml rename .github/workflows/{android.yml => android-push.yml} (94%) create mode 100644 conf/pr/local/android-14.config.json diff --git a/.github/workflows/android-pr.yml b/.github/workflows/android-pr.yml new file mode 100644 index 00000000..2d2bc931 --- /dev/null +++ b/.github/workflows/android-pr.yml @@ -0,0 +1,130 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Android Pull Request Testsuite + +on: + pull_request: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.eslint*' + +jobs: + test: + name: Android ${{ matrix.versions.android }} Test + runs-on: ubuntu-latest + continue-on-error: true + + # hoist configurations to top that are expected to be updated + env: + # Storing a copy of the repo + repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + + node-version: 20 + + # These are the default Java configurations used by most tests. + # To customize these options, add "java-distro" or "java-version" to the strategy matrix with its overriding value. + default_java-distro: temurin + default_java-version: 11 + + # These are the default Android System Image configurations used by most tests. + # To customize these options, add "system-image-arch" or "system-image-target" to the strategy matrix with its overriding value. + default_system-image-arch: x86_64 + default_system-image-target: google_apis # Most system images have a google_api option. Set this as default. + + # configurations for each testing strategy (test matrix) + strategy: + matrix: + versions: + - android: 7 + android-api: 24 + + - android: 10 + android-api: 29 + + - android: 14 + android-api: 34 + + timeout-minutes: 60 + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + - uses: actions/setup-java@v4 + env: + java-version: ${{ matrix.versions.java-version == '' && env.default_java-version || matrix.versions.java-version }} + java-distro: ${{ matrix.versions.java-distro == '' && env.default_java-distro || matrix.versions.java-distro }} + with: + distribution: ${{ env.java-distro }} + java-version: ${{ env.java-version }} + + - 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: Run Environment Information + run: | + node --version + npm --version + java -version + + - name: Run npm install + run: | + export PATH="/usr/local/lib/android/sdk/platform-tools":$PATH + export JAVA_HOME=$JAVA_HOME_11_X64 + npm i -g cordova@latest + npm ci + + - name: Run paramedic install + if: ${{ endswith(env.repo, '/cordova-paramedic') != true }} + run: npm i -g github:apache/cordova-paramedic + + - uses: reactivecircus/android-emulator-runner@v2 + env: + system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }} + system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }} + with: + api-level: ${{ matrix.versions.android-api }} + target: ${{ env.system-image-target }} + arch: ${{ env.system-image-arch }} + force-avd-creation: false + disable-animations: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim + script: echo "Pregenerate the AVD before running Paramedic" + + - name: Run paramedic tests + uses: reactivecircus/android-emulator-runner@v2 + env: + system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }} + system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }} + test_config: 'android-${{ matrix.versions.android }}.config.json' + # Generally, this should automatically work for cordova-paramedic & plugins. If the path is unique, this can be manually changed. + test_plugin_path: ${{ endswith(env.repo, '/cordova-paramedic') && './spec/testable-plugin/' || './' }} + paramedic: ${{ endswith(env.repo, '/cordova-paramedic') && 'node main.js' || 'cordova-paramedic' }} + with: + api-level: ${{ matrix.versions.android-api }} + target: ${{ env.system-image-target }} + arch: ${{ env.system-image-arch }} + force-avd-creation: false + disable-animations: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim + script: ${{ env.paramedic }} --config ./pr/local/${{ env.test_config }} --plugin ${{ env.test_plugin_path }} diff --git a/.github/workflows/android.yml b/.github/workflows/android-push.yml similarity index 94% rename from .github/workflows/android.yml rename to .github/workflows/android-push.yml index f0c0bb0a..80fbe23b 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android-push.yml @@ -23,11 +23,6 @@ on: - '**.md' - 'LICENSE' - '.eslint*' - pull_request: - paths-ignore: - - '**.md' - - 'LICENSE' - - '.eslint*' jobs: test: @@ -56,23 +51,39 @@ jobs: strategy: matrix: versions: - # Test the lowest minimum supported APIs - android: 7 android-api: 24 - # Test the last 3-4 supported APIs + - android: 7.1 + android-api: 25 + + - android: 8 + android-api: 26 + + - android: 8.1 + android-api: 27 + + - android: 9 + android-api: 28 + - android: 10 android-api: 29 - android: 11 android-api: 30 + - android: 12 + android-api: 31 + - android: 12L android-api: 32 - android: 13 android-api: 33 + - android: 14 + android-api: 34 + timeout-minutes: 60 steps: diff --git a/conf/pr/local/android-14.config.json b/conf/pr/local/android-14.config.json new file mode 100644 index 00000000..c3fecfaa --- /dev/null +++ b/conf/pr/local/android-14.config.json @@ -0,0 +1,7 @@ +{ + "platform": "android@latest", + "action": "run", + "cleanUpAfterRun": true, + "verbose": true, + "skipAppiumTests": true +}