From cb481e0ed0d9c19985f236062fa7801aded8b07f Mon Sep 17 00:00:00 2001 From: Russell Wheatley Date: Wed, 11 Sep 2024 08:46:16 +0100 Subject: [PATCH] test: separate out e2e test workflows (#13304) --- .github/workflows/android.yaml | 88 ++++++ .github/workflows/e2e_tests.yaml | 457 ------------------------------- .github/workflows/ios.yaml | 100 +++++++ .github/workflows/macos.yaml | 95 +++++++ .github/workflows/web.yaml | 185 +++++++++++++ .github/workflows/windows.yaml | 84 ++++++ 6 files changed, 552 insertions(+), 457 deletions(-) create mode 100644 .github/workflows/android.yaml delete mode 100644 .github/workflows/e2e_tests.yaml create mode 100644 .github/workflows/ios.yaml create mode 100644 .github/workflows/macos.yaml create mode 100644 .github/workflows/web.yaml create mode 100644 .github/workflows/windows.yaml diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml new file mode 100644 index 000000000000..ca7cf4c2e93c --- /dev/null +++ b/.github/workflows/android.yaml @@ -0,0 +1,88 @@ +name: e2e-android + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + pull_request: + paths-ignore: + - 'docs/**' + - 'website/**' + - '**/example/**' + - '**/flutterfire_ui/**' + - '**.md' + push: + branches: + - main + paths-ignore: + - 'docs/**' + - 'website/**' + - '**/example/**' + - '**/flutterfire_ui/**' + - '**.md' + +jobs: + android: + runs-on: ubuntu-latest + timeout-minutes: 45 + strategy: + fail-fast: false + matrix: + working_directory: + ['tests', 'packages/cloud_firestore/cloud_firestore/example'] + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b + name: Install Node.js 20 + with: + node-version: '20' + - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 + with: + distribution: 'temurin' + java-version: '17' + - name: Firebase Emulator Cache + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 + with: + path: ~/.cache/firebase/emulators + key: firebase-emulators-v3-${{ github.run_id }} + restore-keys: firebase-emulators-v3 + - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + with: + channel: 'stable' + cache: true + - uses: bluefireteam/melos-action@7e70fbe34bbd91a75eb505eeb4174b0ac9a1df52 + with: + run-bootstrap: false + melos-version: '5.3.0' + - name: 'Bootstrap package' + run: melos bootstrap --scope tests && melos bootstrap --scope "cloud_firestore*" + - name: 'Install Tools' + run: | + sudo npm i -g firebase-tools + - name: Start Firebase Emulator + run: cd ./.github/workflows/scripts && ./start-firebase-emulator.sh + - 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: Gradle cache + uses: gradle/actions/setup-gradle@v4 + - name: AVD cache + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-ubuntu + - name: Start AVD then run E2E tests + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 34 + target: google_apis + arch: x86_64 + working-directory: ${{ matrix.working_directory }} + script: | + flutter test integration_test/e2e_test.dart --dart-define=CI=true -d emulator-5554 diff --git a/.github/workflows/e2e_tests.yaml b/.github/workflows/e2e_tests.yaml deleted file mode 100644 index 5654a620a4d3..000000000000 --- a/.github/workflows/e2e_tests.yaml +++ /dev/null @@ -1,457 +0,0 @@ -name: e2e - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -on: - pull_request: - paths-ignore: - - 'docs/**' - - 'website/**' - - '**/example/**' - - '**/flutterfire_ui/**' - - '**.md' - push: - branches: - - main - paths-ignore: - - 'docs/**' - - 'website/**' - - '**/example/**' - - '**/flutterfire_ui/**' - - '**.md' - -jobs: - android: - runs-on: ubuntu-latest - timeout-minutes: 45 - strategy: - fail-fast: false - matrix: - working_directory: - ['tests', 'packages/cloud_firestore/cloud_firestore/example'] - steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b - name: Install Node.js 20 - with: - node-version: '20' - - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 - with: - distribution: 'temurin' - java-version: '17' - - name: Firebase Emulator Cache - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 - with: - path: ~/.cache/firebase/emulators - key: firebase-emulators-v3-${{ github.run_id }} - restore-keys: firebase-emulators-v3 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@7e70fbe34bbd91a75eb505eeb4174b0ac9a1df52 - with: - run-bootstrap: false - melos-version: '5.3.0' - - name: 'Bootstrap package' - run: melos bootstrap --scope tests && melos bootstrap --scope "cloud_firestore*" - - name: 'Install Tools' - run: | - sudo npm i -g firebase-tools - - name: Start Firebase Emulator - run: cd ./.github/workflows/scripts && ./start-firebase-emulator.sh - - 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: Gradle cache - uses: gradle/actions/setup-gradle@v4 - - name: AVD cache - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-ubuntu - - name: Start AVD then run E2E tests - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 34 - target: google_apis - arch: x86_64 - working-directory: ${{ matrix.working_directory }} - script: | - flutter test integration_test/e2e_test.dart --dart-define=CI=true -d emulator-5554 - - ios: - runs-on: macos-14 - timeout-minutes: 45 - strategy: - fail-fast: false - matrix: - working_directory: - ['tests', 'packages/cloud_firestore/cloud_firestore/example'] - steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b - name: Install Node.js 20 - with: - node-version: '20' - - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 - with: - distribution: 'temurin' - java-version: '17' - - uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 - name: Xcode Compile Cache - with: - key: ${{ runner.os }}-ios-v3 - max-size: 700M - - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 - name: Pods Cache - id: pods-cache - with: - path: tests/ios/Pods - key: ${{ runner.os }}-pods-v3-${{ hashFiles('tests/ios/Podfile.lock') }} - restore-keys: ${{ runner.os }}-ios-pods-v2 - - name: Firebase Emulator Cache - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 - with: - path: ~/.cache/firebase/emulators - key: firebase-emulators-v3-${{ github.run_id }} - restore-keys: firebase-emulators-v3 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@7e70fbe34bbd91a75eb505eeb4174b0ac9a1df52 - with: - run-bootstrap: false - melos-version: '5.3.0' - - name: 'Bootstrap package' - run: melos bootstrap --scope tests && melos bootstrap --scope "cloud_firestore*" - - name: 'Install Tools' - run: | - sudo npm i -g firebase-tools - - name: 'Build Application' - working-directory: ${{ matrix.working_directory }} - run: | - export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - export CCACHE_SLOPPINESS=clang_index_store,file_stat_matches,include_file_ctime,include_file_mtime,ivfsoverlay,pch_defines,modules,system_headers,time_macros - export CCACHE_FILECLONE=true - export CCACHE_DEPEND=true - export CCACHE_INODECACHE=true - ccache -s - flutter build ios --no-codesign --simulator --debug --target=./integration_test/e2e_test.dart --dart-define=CI=true - ccache -s - - name: Start Firebase Emulator - run: sudo chown -R 501:20 "/Users/runner/.npm" && cd ./.github/workflows/scripts && ./start-firebase-emulator.sh - - name: 'E2E Tests' - working-directory: ${{ matrix.working_directory }} - run: | - # Boot simulator and wait for System app to be ready. - # List of available simulators: https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#installed-simulators - SIMULATOR="iPhone 15" - xcrun simctl bootstatus "$SIMULATOR" -b - xcrun simctl logverbose "$SIMULATOR" enable - # Sleep to allow simulator to settle. - sleep 15 - # Uncomment following line to have simulator logs printed out for debugging purposes. - # xcrun simctl spawn booted log stream --predicate 'eventMessage contains "flutter"' & - flutter test integration_test/e2e_test.dart -d "$SIMULATOR" --dart-define=CI=true - - macos: - runs-on: macos-14 - timeout-minutes: 45 - strategy: - fail-fast: false - matrix: - working_directory: - ['tests', 'packages/cloud_firestore/cloud_firestore/example'] - steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b - name: Install Node.js 20 - with: - node-version: '20' - - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 - with: - distribution: 'temurin' - java-version: '17' - - uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 - name: Xcode Compile Cache - with: - key: ${{ runner.os }}-macos-v2 - max-size: 700M - - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 - name: Pods Cache - id: pods-cache - with: - path: tests/macos/Pods - key: ${{ runner.os }}-pods-v2-${{ hashFiles('tests/macos/Podfile.lock') }} - restore-keys: ${{ runner.os }}-macos-pods-v1 - - name: Cache Firebase Emulator - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 - with: - path: ~/.cache/firebase/emulators - key: firebase-emulators-v3-${{ github.run_id }} - restore-keys: firebase-emulators-v3 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@7e70fbe34bbd91a75eb505eeb4174b0ac9a1df52 - with: - run-bootstrap: false - melos-version: '5.3.0' - - name: 'Bootstrap package' - run: melos bootstrap --scope tests && melos bootstrap --scope "cloud_firestore*" - - name: 'Install Tools' - run: | - sudo npm i -g firebase-tools - - name: 'Build Application' - working-directory: ${{ matrix.working_directory }} - run: | - export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - export CCACHE_SLOPPINESS=clang_index_store,file_stat_matches,include_file_ctime,include_file_mtime,ivfsoverlay,pch_defines,modules,system_headers,time_macros - export CCACHE_FILECLONE=true - export CCACHE_DEPEND=true - export CCACHE_INODECACHE=true - ccache -s - flutter build macos --debug --target=./integration_test/e2e_test.dart --device-id=macos --dart-define=CI=true - ccache -s - - name: Start Firebase Emulator - # Chown the npm cache directory to the runner user to avoid permission issues - run: sudo chown -R 501:20 "/Users/runner/.npm" && cd ./.github/workflows/scripts && ./start-firebase-emulator.sh - - name: 'E2E Tests' - working-directory: ${{ matrix.working_directory }} - run: | - flutter test \ - integration_test/e2e_test.dart \ - -d macos \ - --dart-define=CI=true - - web: - runs-on: macos-latest - timeout-minutes: 15 - strategy: - fail-fast: false - matrix: - working_directory: - ['tests', 'packages/cloud_firestore/cloud_firestore/example'] - steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b - name: Install Node.js 20 - with: - node-version: '20' - - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 - with: - distribution: 'temurin' - java-version: '17' - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@7e70fbe34bbd91a75eb505eeb4174b0ac9a1df52 - with: - run-bootstrap: false - melos-version: '5.3.0' - - name: 'Bootstrap package' - run: melos bootstrap --scope tests && melos bootstrap --scope "cloud_firestore*" - - name: 'Install Tools' - run: sudo npm i -g firebase-tools - - name: Cache Firebase Emulator - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 - with: - path: ~/.cache/firebase/emulators - key: firebase-emulators-v3-${{ github.run_id }} - restore-keys: firebase-emulators-v3 - - name: Start Firebase Emulator - run: sudo chown -R 501:20 "/Users/runner/.npm" && cd ./.github/workflows/scripts && ./start-firebase-emulator.sh - - name: 'E2E Tests' - working-directory: ${{ matrix.working_directory }} - # Web devices are not supported for the `flutter test` command yet. As a - # workaround we can use the `flutter drive` command. Tracking issue: - # https://github.com/flutter/flutter/issues/66264 - run: | - chromedriver --port=4444 --trace-buffer-size=100000 & - flutter drive --target=./integration_test/e2e_test.dart --driver=./test_driver/integration_test.dart -d chrome --dart-define=CI=true | tee output.log - # We have to check the output for failed tests matching the string "[E]" - output=$(