name: Android e2e # Never on push: booting an emulator and installing the SDK takes far longer # than the rest of the test suite. Nightly plus on demand. on: schedule: - cron: "17 3 * * *" workflow_dispatch: inputs: jellyfin_android_version: description: "jellyfin-android release tag to test against" required: false default: "v2.7.3" concurrency: group: android-e2e-${{ github.ref }} cancel-in-progress: true jobs: android: runs-on: ubuntu-latest timeout-minutes: 90 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "22" - uses: actions/setup-java@v4 with: distribution: temurin java-version: "17" - uses: actions/setup-dotnet@v4 with: dotnet-version: "10.0.x" # The emulator needs hardware acceleration; without this the device node # is not writable for the runner user. - name: Enable KVM 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: Start the Jellyfin stack env: JELLYFIN_PORT: "8098" COMPOSE_PROJECT_NAME: chaosflix-e2e-android E2E_ARTIFACTS_DIR: ${{ github.workspace }}/e2e/android/.artifacts/stack E2E_FIXTURE_SECONDS: "180" run: | e2e/scripts/build-artifacts.sh docker compose -f e2e/docker-compose.yml up -d --wait - name: Run the Android e2e suite uses: reactivecircus/android-emulator-runner@v2 env: # The emulator is provided by the action, and the stack is already up. ANDROID_E2E_USE_RUNNING_EMULATOR: "1" E2E_REUSE_STACK: "1" JELLYFIN_PORT: "8098" COMPOSE_PROJECT_NAME: chaosflix-e2e-android JELLYFIN_ANDROID_VERSION: ${{ inputs.jellyfin_android_version || 'v2.7.3' }} with: api-level: 33 target: google_apis arch: x86_64 profile: pixel_5 emulator-options: -no-window -no-boot-anim -no-snapshot -gpu swiftshader_indirect -no-audio -camera-back none disable-animations: true script: e2e/android/run.sh - name: Collect artifacts if: always() uses: actions/upload-artifact@v4 with: name: android-e2e-artifacts path: | e2e/android/.artifacts/*.xml e2e/android/.artifacts/*.log e2e/android/.artifacts/*.png e2e/android/.artifacts/*.txt # .artifacts is a hidden directory, and upload-artifact skips hidden # files by default — without this the step matched nothing and every # red nightly was undiagnosable (#123). include-hidden-files: true if-no-files-found: warn - name: Stop the Jellyfin stack if: always() env: COMPOSE_PROJECT_NAME: chaosflix-e2e-android E2E_ARTIFACTS_DIR: ${{ github.workspace }}/e2e/android/.artifacts/stack run: docker compose -f e2e/docker-compose.yml down -v