Commit cf68b8a

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-06-11 12:33:54
add integration testing to CI
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 5978698
Changed files (2)
.github
workflows
docs
.github/workflows/app-CI.yml
@@ -14,10 +14,11 @@ env:
   FLUTTER_CHANNEL: 'beta'
   DART_SDK: 'beta'
   JAVA_VERSION: '17'
+  EMULATOR_VERSION: 'android-34'
 
 jobs:
-  test:
-    name: "🧪 Run test"
+  unit-test:
+    name: "🧩🧪 Run unit tests"
     runs-on: ubuntu-latest
  
     steps:
@@ -28,28 +29,64 @@ jobs:
         sparse-checkout: |
           app
           health_data_store
-    - name: Setup dart
-      uses: dart-lang/setup-dart@v1
-      with:
-        sdk: ${{ env.DART_SDK }}
-    - name: Generate code
-      run: dart pub get
-      working-directory: ./health_data_store
-    - name: Generate code
-      run: dart run build_runner build
-      working-directory: ./health_data_store
 
     - name: Setup Flutter
       uses: subosito/flutter-action@v2
       with:
         channel: ${{ env.FLUTTER_CHANNEL }}
-    - name: Get dependencies
-      run: flutter pub get
-      working-directory: ./app
     - name: Run tests
       run: flutter test
       working-directory: ./app
 
+  integration-test:
+    name: "🛠️🧪 Run integration tests"
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+        with:
+          # ensures there are no unexpected directories needed
+          sparse-checkout: |
+            app
+            health_data_store
+      - name: Enable KVM group perms
+        # see: https://github.com/actions/runner-images/discussions/7191
+        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: Setup Java
+        uses: actions/setup-java@v3
+        with:
+          distribution: 'zulu'
+          java-version: ${{ env.JAVA_VERSION }}
+      - name: Setup Flutter
+        uses: subosito/flutter-action@v2
+        with:
+          channel: ${{ env.FLUTTER_CHANNEL }}
+      - name: Download Android emulator image
+        run: |
+          export ANDROID_TOOLS="$ANDROID_HOME/cmdline-tools/latest/bin"
+          echo "y" | $ANDROID_TOOLS/sdkmanager --install "system-images;${{ env.EMULATOR_VERSION }};aosp_atd;x86"
+          echo "no" | $ANDROID_TOOLS/avdmanager create avd --force --name emu --device "Pixel 3a" -k 'system-images;${{ env.EMULATOR_VERSION }};aosp_atd;x86'
+          echo "Android emulator installed"
+          $ANDROID_HOME/emulator/emulator -list-avds
+      - name: Start Android emulator
+        timeout-minutes: 10
+        run: |
+          export ANDROID_TOOLS="$ANDROID_HOME/cmdline-tools/latest/bin"
+          echo "Starting emulator"
+          $ANDROID_TOOLS/sdkmanager "platform-tools" "platforms;${{ env.EMULATOR_VERSION }}"
+          nohup $ANDROID_HOME/emulator/emulator -avd emu -no-audio -no-snapshot -no-window &
+          $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'
+          $ANDROID_HOME/platform-tools/adb devices
+          echo "Android emulator started"
+
+      - name: Run integration tests
+        run: flutter test integration_test --flavor github
+        working-directory: ./app
+
   build-android:
     name: "🛠️ Build Android"
     runs-on: ubuntu-latest
@@ -58,29 +95,15 @@ jobs:
     - name: Checkout code
       uses: actions/checkout@v4
     - name: Setup Java
-      uses: actions/setup-java@v2
+      uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
         java-version: ${{ env.JAVA_VERSION }}
-    - name: Setup dart
-      uses: dart-lang/setup-dart@v1
-      with:
-        sdk: ${{ env.DART_SDK }}
-    - name: Generate code
-      run: dart pub get
-      working-directory: ./health_data_store
-    - name: Generate code
-      run: dart run build_runner build
-      working-directory: ./health_data_store
 
     - name: Setup Flutter
       uses: subosito/flutter-action@v2
       with:
         channel: ${{ env.FLUTTER_CHANNEL }}
-    - name: Get dependencies
-      run: flutter pub get
-      working-directory: ./app
-    
     - name: Build apk
       run: flutter build apk --flavor github --debug
       working-directory: ./app
docs/testing.md
@@ -14,6 +14,7 @@ flutter test
 
 To run integration tests an android emulator needs to be running.
 
+Single test: 
 ```bash
 flutter drive \
   --driver=test_driver/integration_test.dart \
@@ -24,3 +25,8 @@ flutter drive \
 
 To ues the emulator `--browser-name android-chrome --android-emulator` is 
 required. `--flavor github` is needed for the driver to find the apk.
+
+All tests:
+```bash
+flutter test integration_test --flavor github
+```