name: Appium Android CI on: pull_request: push: branches: [ main ] workflow_dispatch: jobs: appium-android: runs-on: ubuntu-latest timeout-minutes: 45 steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version: 22 cache: npm - run: npm ci - run: npm install -g appium - run: appium driver install uiautomator2 - name: Enable KVM permissions run: | KVM_RULE_FILE=/etc/udev/rules.d/99-kvm4all.rules printf '%s%s\n' \ 'KERNEL=="kvm", GROUP="kvm", MODE="0666", ' \ 'OPTIONS+="static_node=kvm"' \ | sudo tee "$KVM_RULE_FILE" sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm - name: Run Appium tests on Android emulator uses: >- reactivecircus/android-emulator-runner@v2 with: api-level: 35 target: google_apis arch: x86_64 profile: pixel_6 script: | appium \ --address 127.0.0.1 \ --port 4723 \ --log appium.log & APPIUM_PID=$! trap 'kill "$APPIUM_PID"' EXIT curl \ --retry 30 \ --retry-all-errors \ --retry-delay 1 \ --fail \ --silent \ http://127.0.0.1:4723/status npm run test:appium - name: Upload Appium log if: always() uses: actions/upload-artifact@v7 with: name: appium-log path: appium.log if-no-files-found: ignore