name: integration tests on: pull_request: branches: [main] types: [opened, synchronize, reopened] paths: - "lib/**" - "assets/**" - "fonts/**" - "integration_test/**" - "test_driver/**" - "android/**" - "ios/**" - "pubspec.yaml" - "pubspec.lock" - ".github/workflows/integration-tests.yml" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: android: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Checkout Repository uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v4 with: distribution: temurin java-version: 17 cache: gradle - name: Set up Flutter uses: subosito/flutter-action@v2 with: channel: stable flutter-version: 3.47.2 cache: true - name: Prepare project run: | cp .env.example .env flutter pub get --enforce-lockfile dart run build_runner build --delete-conflicting-outputs - 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: Run Android integration tests uses: reactivecircus/android-emulator-runner@v2 timeout-minutes: 30 with: api-level: 35 target: google_apis arch: x86_64 profile: pixel_7 script: flutter test integration_test -d emulator-5554 --reporter=expanded ios: runs-on: blacksmith-6vcpu-macos-26 steps: - name: Checkout Repository uses: actions/checkout@v4 - name: Set up Flutter uses: subosito/flutter-action@v2 with: channel: stable flutter-version: 3.47.2 cache: true - name: Prepare project run: | cp .env.example .env flutter pub get --enforce-lockfile dart run build_runner build --delete-conflicting-outputs - name: Run iOS integration tests timeout-minutes: 20 run: | DEVICE_ID=$(xcrun simctl list devices available | awk -F '[()]' '/iPhone/ { print $2; exit }') test -n "$DEVICE_ID" xcrun simctl boot "$DEVICE_ID" || true xcrun simctl bootstatus "$DEVICE_ID" -b flutter test integration_test -d "$DEVICE_ID" --reporter=expanded