Fix CI #1095
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
# Runner details on https://github.com/actions/runner-images/tree/main/images | |
name: CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
workflow_call: | |
inputs: | |
run_all: | |
type: boolean | |
description: 'Run all jobs regardless of path filters' | |
required: false | |
default: false | |
jobs: | |
cancel: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
filter: | |
runs-on: ubuntu-latest | |
outputs: | |
common_changed: ${{ steps.filter.outputs.common }} | |
windows_changed: ${{ steps.filter.outputs.windows }} | |
macos_changed: ${{ steps.filter.outputs.macos }} | |
ios_changed: ${{ steps.filter.outputs.ios }} | |
android_changed: ${{ steps.filter.outputs.android }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Filter changes | |
id: filter | |
uses: dorny/paths-filter@v3 | |
with: | |
filters: | | |
common: | |
- '**/ci.yml' | |
- '**/lib/**' | |
- '**/pubspec.yaml' | |
- '**/pubspec.lock' | |
windows: | |
- '**/windows/**' | |
macos: | |
- 'darwin/**' | |
- 'example/macos/**' | |
ios: | |
- 'darwin/**' | |
- 'example/ios/**' | |
android: | |
- '**/android/**' | |
windows: | |
needs: filter | |
if: ${{ needs.filter.outputs.windows_changed == 'true' || needs.filter.outputs.common_changed == 'true' || inputs.run_all == 'true' }} | |
runs-on: windows-latest | |
timeout-minutes: 30 | |
strategy: | |
matrix: | |
windows-version: [10] | |
fail-fast: false | |
steps: | |
- name: Check out | |
uses: actions/checkout@v4 | |
- name: Setup Flutter SDK | |
timeout-minutes: 10 | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: stable | |
- name: Run integration tests | |
id: Run-integration-tests | |
timeout-minutes: 15 | |
run: | | |
cd example | |
flutter test integration_test/integration_test.dart windows | |
macos: | |
needs: filter | |
if: ${{ needs.filter.outputs.macos_changed == 'true' || needs.filter.outputs.common_changed == 'true' || inputs.run_all == 'true' }} | |
runs-on: macos-${{ matrix.macos-version }} | |
timeout-minutes: 30 | |
strategy: | |
matrix: | |
macos-version: [13, 14] | |
package_manager: [cocoapods, swiftpm] | |
fail-fast: false | |
steps: | |
- name: Check out | |
uses: actions/checkout@v4 | |
- name: Setup Flutter SDK | |
timeout-minutes: 10 | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: beta | |
- name: Set Package Manager Configuration | |
run: | | |
if [ "${{ matrix.package_manager }}" == "cocoapods" ]; then | |
flutter config --no-enable-swift-package-manager | |
else | |
flutter config --enable-swift-package-manager | |
fi | |
- name: Run integration tests | |
run: | | |
cd example | |
flutter test -d macos integration_test/integration_test.dart macos | |
- name: Validate Podspec in CocoaPods | |
if: matrix.package_manager == 'cocoapods' | |
run: | | |
pod lib lint darwin/gal.podspec --configuration=Debug --skip-tests --use-modular-headers --use-libraries | |
pod lib lint darwin/gal.podspec --configuration=Debug --skip-tests --use-modular-headers | |
ios: | |
needs: filter | |
if: ${{ needs.filter.outputs.ios_changed == 'true' || needs.filter.outputs.common_changed == 'true' || inputs.run_all == 'true' }} | |
runs-on: macos-14 | |
timeout-minutes: 60 | |
strategy: | |
matrix: | |
ios-version: [17, 18] | |
package_manager: [cocoapods, swiftpm] | |
fail-fast: false | |
steps: | |
- name: Check out | |
uses: actions/checkout@v4 | |
- name: Setup Flutter SDK | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: beta | |
- name: Boot iOS simulator | |
uses: futureware-tech/simulator-action@v4 | |
with: | |
os: iOS | |
model: 'iPhone 15' | |
os_version: ^${{ matrix.ios-version }} | |
- name: Grant permission | |
run: | | |
brew tap wix/brew | |
brew install applesimutils | |
cd example | |
applesimutils --booted --bundle studio.midoridesign.galExample --setPermissions photos=YES | |
- name: Set Package Manager Configuration | |
run: | | |
if [ "${{ matrix.package_manager }}" == "cocoapods" ]; then | |
flutter config --no-enable-swift-package-manager | |
else | |
flutter config --enable-swift-package-manager | |
fi | |
- name: Run integration tests | |
run: | | |
cd example | |
flutter test integration_test/integration_test.dart | |
- name: Validate Podspec in CocoaPods | |
if: matrix.package_manager == 'cocoapods' | |
run: | | |
pod lib lint darwin/gal.podspec --configuration=Debug --skip-tests --use-modular-headers --use-libraries | |
pod lib lint darwin/gal.podspec --configuration=Debug --skip-tests --use-modular-headers | |
- name: Clean Flutter | |
run: flutter clean | |
android: | |
needs: filter | |
if: ${{ needs.filter.outputs.android_changed == 'true' || needs.filter.outputs.common_changed == 'true' || inputs.run_all == 'true' }} | |
timeout-minutes: 60 | |
runs-on: macos-13 | |
strategy: | |
matrix: | |
api-level: [34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21] | |
fail-fast: false | |
steps: | |
- name: Check out | |
uses: actions/checkout@v4 | |
- name: Setup Flutter SDK | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: beta | |
- name: Install Flutter dependencies | |
run: flutter pub get ./example | |
- name: Set up JDK | |
uses: actions/setup-java@v4 | |
with: | |
java-version: 17 | |
distribution: temurin | |
- name: Cache Gradle | |
uses: actions/cache@v4 | |
with: | |
path: ~/.gradle/caches | |
key: gradle | |
- name: Cache AVD | |
uses: actions/cache@v4 | |
id: cache-avd | |
with: | |
path: | | |
~/.android/avd/* | |
~/.android/adb* | |
key: avd-${{ matrix.api-level }} | |
- name: Run integration tests | |
id: Run-integration-tests | |
continue-on-error: true | |
timeout-minutes: 20 | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ matrix.api-level }} | |
working-directory: ./example | |
arch: x86_64 | |
emulator-boot-timeout: 200 | |
disable-spellchecker: true | |
force-avd-creation: false | |
disk-size: 4GB | |
sdcard-path-or-size: ${{ matrix.api-level < 29 && '10M' || null }} | |
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -camera-front none | |
script: | | |
if [ ${{ matrix.api-level }} -le 29 ]; then flutter build apk --debug; adb install -r build/app/outputs/flutter-apk/app-debug.apk; adb shell pm grant studio.midoridesign.gal_example android.permission.WRITE_EXTERNAL_STORAGE; adb shell pm grant studio.midoridesign.gal_example android.permission.READ_EXTERNAL_STORAGE; fi | |
flutter test integration_test/integration_test.dart | |
- name: Retry integration tests | |
id: Retry-integration-tests | |
continue-on-error: true | |
timeout-minutes: 20 | |
if: steps.Run-integration-tests.outcome == 'failure' | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ matrix.api-level }} | |
working-directory: ./example | |
arch: x86_64 | |
emulator-boot-timeout: 200 | |
disable-spellchecker: true | |
force-avd-creation: false | |
disk-size: 4GB | |
sdcard-path-or-size: ${{ matrix.api-level < 29 && '10M' || null }} | |
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -camera-front none | |
pre-emulator-launch-script: | | |
adb kill-server | |
adb start-server | |
script: | | |
flutter clean && flutter pub get | |
if [ ${{ matrix.api-level }} -le 29 ]; then flutter build apk --debug; adb install -r build/app/outputs/flutter-apk/app-debug.apk; adb shell pm grant studio.midoridesign.gal_example android.permission.WRITE_EXTERNAL_STORAGE; adb shell pm grant studio.midoridesign.gal_example android.permission.READ_EXTERNAL_STORAGE; fi | |
flutter test integration_test/integration_test.dart | |
- name: Re:Retry integration tests | |
if: steps.Retry-integration-tests.outcome == 'failure' | |
timeout-minutes: 20 | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ matrix.api-level }} | |
working-directory: ./example | |
arch: x86_64 | |
emulator-boot-timeout: 200 | |
disable-spellchecker: true | |
force-avd-creation: false | |
disk-size: 4GB | |
sdcard-path-or-size: ${{ matrix.api-level < 29 && '10M' || null }} | |
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -camera-front none | |
pre-emulator-launch-script: | | |
adb kill-server | |
adb start-server | |
script: | | |
flutter clean && flutter pub get | |
if [ ${{ matrix.api-level }} -le 29 ]; then flutter build apk --debug; adb install -r build/app/outputs/flutter-apk/app-debug.apk; adb shell pm grant studio.midoridesign.gal_example android.permission.WRITE_EXTERNAL_STORAGE; adb shell pm grant studio.midoridesign.gal_example android.permission.READ_EXTERNAL_STORAGE; fi | |
flutter test integration_test/integration_test.dart |