test #70
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
name: test | |
on: | |
workflow_dispatch: | |
inputs: | |
flutter_version: | |
description: 'Flutter Version' | |
required: false | |
default: 'any' | |
type: choice | |
options: | |
- 'any' | |
- '3.13.x' | |
- '3.10.x' | |
- '3.7.x' | |
- '3.3.x' | |
fatal_warnings: | |
description: 'Treat warnings as fatal' | |
required: false | |
default: true | |
type: boolean | |
enable_android: | |
description: 'Test Android' | |
required: false | |
default: true | |
type: boolean | |
enable_web: | |
description: 'Test Web' | |
required: false | |
default: true | |
type: boolean | |
enable_ios: | |
description: 'Test IOS' | |
required: false | |
default: true | |
type: boolean | |
enable_windows: | |
description: 'Test Windows' | |
required: false | |
default: true | |
type: boolean | |
enable_linux: | |
description: 'Test Linux' | |
required: false | |
default: true | |
type: boolean | |
enable_macos: | |
description: 'Test MacOS' | |
required: false | |
default: true | |
type: boolean | |
workflow_call: | |
inputs: | |
flutter_version: | |
required: false | |
default: '3.13.0' | |
type: string | |
fatal_warnings: | |
required: false | |
default: true | |
type: boolean | |
enable_android: | |
required: false | |
default: true | |
type: boolean | |
enable_web: | |
required: false | |
default: true | |
type: boolean | |
enable_ios: | |
required: false | |
default: true | |
type: boolean | |
enable_windows: | |
required: false | |
default: true | |
type: boolean | |
enable_linux: | |
required: false | |
default: true | |
type: boolean | |
enable_macos: | |
required: false | |
default: true | |
type: boolean | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ inputs.flutter_version }} | |
channel: 'stable' | |
- uses: bluefireteam/melos-action@main | |
- run: melos run format-check | |
- run: melos run analyze -- ${{ inputs.fatal_warnings && '--fatal-infos' || '--no-fatal-warnings --no-fatal-infos' }} | |
- run: melos run test | |
- name: Lint Code Base | |
uses: super-linter/super-linter@v5 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
VALIDATE_ALL_CODEBASE: false | |
DEFAULT_BRANCH: main | |
VALIDATE_KOTLIN_ANDROID: true | |
VALIDATE_CLANG_FORMAT: true | |
- name: Lint Swift | |
# TODO: check if swift-format can be integrated in super-linter, as soon as Alpine is supported | |
# https://github.com/apple/swift-docker/issues/231 | |
# https://github.com/super-linter/super-linter/pull/4568 | |
run: | | |
docker run --rm --workdir=/work --volume=$PWD:/work mtgto/swift-format:5.8 \ | |
lint --parallel --strict --recursive packages/audioplayers_darwin | |
web: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
if: inputs.enable_web | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ inputs.flutter_version }} | |
channel: 'stable' | |
- uses: bluefireteam/melos-action@main | |
- uses: nanasess/setup-chromedriver@v2 | |
- name: Run Flutter integration tests | |
working-directory: ./packages/audioplayers/example | |
run: | | |
export DISPLAY=:99 | |
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & | |
chromedriver --port=4444 & | |
( cd server; dart run bin/server.dart ) & | |
flutter drive \ | |
--driver=test_driver/integration_test.dart \ | |
--target=integration_test/platform_test.dart \ | |
-d web-server \ | |
--web-browser-flag="--autoplay-policy=no-user-gesture-required" \ | |
--web-browser-flag="--disable-web-security" \ | |
--dart-define USE_LOCAL_SERVER=true | |
flutter drive \ | |
--driver=test_driver/integration_test.dart \ | |
--target=integration_test/lib_test.dart \ | |
-d web-server \ | |
--web-browser-flag="--autoplay-policy=no-user-gesture-required" \ | |
--web-browser-flag="--disable-web-security" \ | |
--dart-define USE_LOCAL_SERVER=true | |
flutter drive \ | |
--driver=test_driver/integration_test.dart \ | |
--target=integration_test/app_test.dart \ | |
-d web-server \ | |
--web-browser-flag="--autoplay-policy=no-user-gesture-required" \ | |
--web-browser-flag="--disable-web-security" \ | |
--dart-define USE_LOCAL_SERVER=true | |
android: | |
runs-on: macos-13 | |
timeout-minutes: 90 | |
if: inputs.enable_android | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-java@v3 | |
with: | |
# AGP8 needs JDK 17 | |
distribution: 'temurin' | |
java-version: '17' | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ inputs.flutter_version }} | |
channel: 'stable' | |
- uses: bluefireteam/melos-action@main | |
- name: Download Android emulator image | |
run: | | |
export ANDROID_TOOLS="$ANDROID_HOME/cmdline-tools/latest/bin" | |
echo "y" | $ANDROID_TOOLS/sdkmanager --install "system-images;android-30;aosp_atd;x86" | |
echo "no" | $ANDROID_TOOLS/avdmanager create avd --force --name emu --device "Nexus 5X" -k 'system-images;android-30;aosp_atd;x86' | |
$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;android-30" | |
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 "Emulator started" | |
- name: Run Flutter integration tests | |
working-directory: ./packages/audioplayers/example | |
# Need to execute lib and app tests one by one, see: https://github.com/flutter/flutter/issues/101031 | |
run: | | |
( cd server; dart run bin/server.dart ) & | |
flutter test integration_test/platform_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test integration_test/lib_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test integration_test/app_test.dart --dart-define USE_LOCAL_SERVER=true | |
- name: Run Android unit tests | |
working-directory: ./packages/audioplayers/example/android | |
run: ./gradlew test | |
ios: | |
runs-on: macos-latest | |
timeout-minutes: 60 | |
if: inputs.enable_ios | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ inputs.flutter_version }} | |
channel: 'stable' | |
- uses: bluefireteam/melos-action@main | |
- name: List all simulators | |
run: "xcrun simctl list devices" | |
- name: Start simulator | |
run: | | |
UDID=$(xcrun simctl list devices | grep "iPhone" | sed -n 1p | grep -E -o -i "([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})") | |
echo "Using simulator $UDID" | |
xcrun simctl boot "${UDID:?No Simulator with this name iPhone found}" | |
- name: Run Flutter integration tests | |
working-directory: ./packages/audioplayers/example | |
# Need to execute lib and app tests one by one, see: https://github.com/flutter/flutter/issues/101031 | |
run: | | |
( cd server; dart run bin/server.dart ) & | |
flutter test integration_test/platform_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test integration_test/lib_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test integration_test/app_test.dart --dart-define USE_LOCAL_SERVER=true | |
macos: | |
runs-on: macos-13 | |
timeout-minutes: 30 | |
if: inputs.enable_macos | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ inputs.flutter_version }} | |
channel: 'stable' | |
- uses: bluefireteam/melos-action@main | |
- name: setup-cocoapods | |
uses: maxim-lobanov/setup-cocoapods@v1 | |
with: | |
podfile-path: ./packages/audioplayers/example/macos/Podfile.lock | |
- name: Run Flutter integration tests | |
working-directory: ./packages/audioplayers/example | |
# Need to execute lib and app tests one by one, see: https://github.com/flutter/flutter/issues/101031 | |
run: | | |
( cd server; dart run bin/server.dart ) & | |
flutter test -d macos integration_test/platform_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test -d macos integration_test/lib_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test -d macos integration_test/app_test.dart --dart-define USE_LOCAL_SERVER=true | |
windows: | |
runs-on: windows-latest | |
timeout-minutes: 30 | |
if: inputs.enable_windows | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ inputs.flutter_version }} | |
channel: 'stable' | |
- uses: bluefireteam/melos-action@main | |
- name: Start audio server | |
run: net start audiosrv | |
- name: Disable time sync with Hyper-V & setting system date time (#1573) | |
# TODO(gustl22): Remove workaround of setting the time when virtual audio device certificate is valid again (#1573) | |
run: | | |
Set-Service -Name vmictimesync -Status stopped -StartupType disabled | |
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\services\W32Time\Parameters -Name 'Type' -Value 'NoSync' | |
net stop w32time; Set-Date (Get-Date "2023-07-04 12:00:00") | |
- name: Install virtual audio device | |
timeout-minutes: 1 | |
run: | | |
Invoke-WebRequest https://github.com/duncanthrax/scream/releases/download/4.0/Scream4.0.zip -OutFile Scream.zip | |
Expand-Archive -Path Scream.zip -DestinationPath Scream | |
Import-Certificate -FilePath Scream\Install\driver\x64\Scream.cat -CertStoreLocation Cert:\LocalMachine\TrustedPublisher | |
Scream\Install\helpers\devcon-x64.exe install Scream\Install\driver\x64\Scream.inf *Scream | |
- name: Resetting system date time (#1573) | |
run: | | |
Set-Service -Name vmictimesync -Status running -StartupType automatic | |
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\services\W32Time\Parameters -Name 'Type' -Value 'NTP' | |
net start w32time; w32tm /resync /force; $currentDate = Get-Date; Write-Host "Current System Date: $currentDate"; | |
- name: Run Flutter integration tests | |
working-directory: ./packages/audioplayers/example | |
# Need to execute lib and app tests one by one, see: https://github.com/flutter/flutter/issues/101031 | |
run: | | |
Start-Process -NoNewWindow -WorkingDirectory "server" dart -ArgumentList "run", "bin/server.dart" | |
flutter test -d windows integration_test/platform_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test -d windows integration_test/lib_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test -d windows integration_test/app_test.dart --dart-define USE_LOCAL_SERVER=true | |
linux: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
if: inputs.enable_linux | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ inputs.flutter_version }} | |
channel: 'stable' | |
- uses: bluefireteam/melos-action@main | |
- name: Install Flutter requirements for Linux | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev | |
- name: Install GStreamer | |
# Install libunwind-dev, see https://github.com/actions/runner-images/issues/6399#issuecomment-1285011525 | |
run: | | |
sudo apt install -y libunwind-dev | |
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good gstreamer1.0-plugins-bad | |
- name: Run Flutter integration tests | |
working-directory: ./packages/audioplayers/example | |
# Need to execute lib and app tests one by one, see: https://github.com/flutter/flutter/issues/101031 | |
# TODO(gustl22): Linux tests are flaky with LIVE_MODE=false | |
run: | | |
export DISPLAY=:99 | |
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & | |
( cd server; LIVE_MODE=true dart run bin/server.dart ) & | |
flutter test -d linux integration_test/platform_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test -d linux integration_test/lib_test.dart --dart-define USE_LOCAL_SERVER=true | |
flutter test -d linux integration_test/app_test.dart --dart-define USE_LOCAL_SERVER=true |