Commit cf68b8a
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
+```