-
Notifications
You must be signed in to change notification settings - Fork 58
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ci: run
flutter test integration_test
across platforms
- Loading branch information
Showing
3 changed files
with
189 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -53,28 +53,32 @@ jobs: | |
os: macos | ||
- target: linux | ||
os: ubuntu | ||
- target: windows | ||
os: windows | ||
|
||
# Windows build failing | ||
# - target: windows | ||
# os: windows | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: recursive | ||
|
||
# (Android-only) Setup java | ||
- uses: actions/[email protected] | ||
- name: (iOS/macOS-only) Copy zxing src to ios/macos flutter build dir | ||
if: matrix.target == 'ios' || matrix.target == 'macos' | ||
run: ./scripts/update_ios_macos_src.sh | ||
|
||
- name: (Android-only) Setup Java | ||
uses: actions/setup-java@v4 | ||
if: matrix.target == 'android' | ||
with: | ||
java-version: 11 | ||
distribution: temurin | ||
|
||
# (Linux-only) Install required Flutter dependencies | ||
- name: 'Setup Linux' | ||
- name: (Linux-only) Install Flutter apt dependencies | ||
if: matrix.target == 'linux' && matrix.os == 'ubuntu' | ||
run: | | ||
sudo apt update | ||
sudo apt install -y cmake dbus libblkid-dev libgtk-3-dev liblzma-dev ninja-build pkg-config xvfb | ||
sudo apt install -y network-manager upower | ||
if: matrix.target == 'linux' | ||
sudo apt install -y \ | ||
cmake dbus libblkid-dev libgtk-3-dev liblzma-dev ninja-build \ | ||
pkg-config xvfb network-manager upower | ||
# Setup flutter | ||
- uses: subosito/flutter-action@v2 | ||
|
@@ -90,27 +94,171 @@ jobs: | |
|
||
- name: 'Build example ${{ matrix.target }}' | ||
run: | | ||
flutter config --enable-windows-desktop | ||
flutter config --enable-macos-desktop | ||
flutter config --enable-linux-desktop | ||
cd example | ||
TARGET=${{ matrix.target }} | ||
case $TARGET in | ||
ios) | ||
flutter build ios --no-codesign | ||
flutter build ios --debug --no-codesign | ||
;; | ||
macos) | ||
flutter build macos | ||
flutter build macos --debug | ||
;; | ||
android) | ||
flutter build appbundle | ||
flutter build appbundle --debug | ||
;; | ||
linux) | ||
flutter build linux | ||
;; | ||
windows) | ||
flutter build windows | ||
flutter build linux --debug | ||
;; | ||
# Windows build failing | ||
# windows) | ||
# flutter build windows --debug | ||
# ;; | ||
esac | ||
# Run `cd ./example && flutter test integration_test` across supported | ||
# platforms, (except android, which has its own flow below). | ||
test-example: | ||
name: 'test-example (${{ matrix.target }}, ${{ matrix.os }})' | ||
runs-on: ${{ matrix.os }}-latest | ||
timeout-minutes: 30 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
- target: ios | ||
os: macos | ||
device: iphone | ||
|
||
- target: macos | ||
os: macos | ||
device: macos | ||
|
||
- target: linux | ||
os: ubuntu | ||
device: linux | ||
|
||
# Windows build failing | ||
# - target: windows | ||
# os: windows | ||
# device: windows | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: recursive | ||
|
||
- name: (iOS/macOS-only) Copy zxing src to ios/macos flutter build dir | ||
if: matrix.target == 'ios' || matrix.target == 'macos' | ||
run: ./scripts/update_ios_macos_src.sh | ||
|
||
# Setup flutter | ||
- uses: subosito/flutter-action@v2 | ||
with: | ||
channel: "stable" | ||
cache: true | ||
|
||
# Setup melos | ||
- uses: bluefireteam/melos-action@v3 | ||
with: | ||
run-bootstrap: true | ||
enforce-lockfile: true | ||
|
||
- name: (Linux-only) Install Flutter apt dependencies | ||
if: matrix.target == 'linux' && matrix.os == 'ubuntu' | ||
run: | | ||
sudo apt update | ||
sudo apt install -y \ | ||
cmake dbus libblkid-dev libgtk-3-dev liblzma-dev ninja-build \ | ||
pkg-config xvfb network-manager upower | ||
- name: (iOS-only) Launch iOS simulator | ||
if: matrix.target == 'ios' | ||
run: | | ||
# # List available iOS simulator devices and runtimes | ||
# xcrun simctl list devices available --json | ||
simulator_id=$(xcrun simctl create iphone-zxing \ | ||
com.apple.CoreSimulator.SimDeviceType.iPhone-15 \ | ||
com.apple.CoreSimulator.SimRuntime.iOS-17-5) | ||
xcrun simctl boot ${simulator_id} | ||
- run: flutter devices | ||
|
||
- if: matrix.target != 'linux' | ||
run: cd ./example && flutter test integration_test -d "${{ matrix.device }}" --verbose | ||
- if: matrix.target == 'linux' | ||
run: cd ./example && xvfb-run flutter test integration_test -d "${{ matrix.device }}" --verbose | ||
|
||
# Run `cd ./example && flutter test integration_test` on an Android emulator. | ||
# Android has a lot of extra steps, so it has its own section. | ||
test-example-android: | ||
name: 'test-example (android v${{ matrix.api-level}}, ubuntu)' | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 30 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
api-level: [21] | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: recursive | ||
|
||
- name: Setup Java | ||
uses: actions/setup-java@v4 | ||
with: | ||
java-version: 11 | ||
distribution: temurin | ||
|
||
# Setup flutter | ||
- uses: subosito/flutter-action@v2 | ||
with: | ||
channel: "stable" | ||
cache: true | ||
|
||
# Setup melos | ||
- uses: bluefireteam/melos-action@v3 | ||
with: | ||
run-bootstrap: true | ||
enforce-lockfile: true | ||
|
||
# Enable nested virtualization so we can run an Android emulator VM | ||
- 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 | ||
# Gradle cache | ||
- uses: gradle/actions/setup-gradle@v3 | ||
|
||
- name: Setup AVD actions/cache | ||
uses: actions/cache@v4 | ||
id: avd-cache | ||
with: | ||
path: | | ||
~/.android/avd/* | ||
~/.android/adb* | ||
key: avd-${{ matrix.api-level }} | ||
|
||
- name: Create and cache AVD snapshot | ||
if: steps.avd-cache.outputs.cache-hit != 'true' | ||
uses: reactivecircus/android-emulator-runner@v2 | ||
with: | ||
api-level: ${{ matrix.api-level }} | ||
force-avd-creation: false | ||
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | ||
disable-animations: false | ||
script: echo "Generated AVD snapshot for caching." | ||
|
||
# Run tests on the android emulator | ||
- name: flutter test integration_test | ||
uses: reactivecircus/android-emulator-runner@v2 | ||
with: | ||
api-level: ${{ matrix.api-level }} | ||
force-avd-creation: false | ||
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | ||
disable-animations: true | ||
script: | | ||
flutter devices | ||
cd ./example && flutter test integration_test --verbose |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,28 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -euxo pipefail | ||
|
||
# This script copies the source files from the src directory to the ios and macos directories. | ||
# Should be run every time the src directory files are updated. | ||
|
||
srcPath="../src" | ||
zxingPath="$srcPath/zxing/core/src" | ||
iosSrcPath="../ios/Classes/src" | ||
macosSrcPath="../macos/Classes/src" | ||
REPO_DIR="$(git rev-parse --show-toplevel)" | ||
|
||
SRC_DIR="$REPO_DIR/src" | ||
ZXING_SRC_DIR="$REPO_DIR/src/zxing/core/src" | ||
IOS_SRC_DIR="$REPO_DIR/ios/Classes/src" | ||
MACOS_SRC_PATH="$REPO_DIR/macos/Classes/src" | ||
|
||
# Remove the source files if they exist | ||
rm -rf $iosSrcPath | ||
rm -rf $macosSrcPath | ||
rm -rf "$IOS_SRC_DIR" | ||
rm -rf "$MACOS_SRC_PATH" | ||
|
||
# create the source directories | ||
mkdir -p $iosSrcPath | ||
mkdir -p $macosSrcPath | ||
mkdir -p "$IOS_SRC_DIR" | ||
mkdir -p "$MACOS_SRC_PATH" | ||
|
||
# Copy the source files | ||
rsync -av --exclude '*.txt' --exclude "zxing/" "$srcPath/" "$iosSrcPath/" | ||
rsync -av "$zxingPath/" "$iosSrcPath/zxing/" | ||
rsync -av --exclude '*.txt' --exclude "zxing/" "$SRC_DIR/" "$IOS_SRC_DIR/" | ||
rsync -av "$ZXING_SRC_DIR/" "$IOS_SRC_DIR/zxing/" | ||
|
||
rsync -av --exclude '*.txt' --exclude "zxing/" "$srcPath/" "$macosSrcPath/" | ||
rsync -av "$zxingPath/" "$macosSrcPath/zxing/" | ||
rsync -av --exclude '*.txt' --exclude "zxing/" "$SRC_DIR/" "$MACOS_SRC_PATH/" | ||
rsync -av "$ZXING_SRC_DIR/" "$MACOS_SRC_PATH/zxing/" |