Enable manual trigger of publish workflow #21
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: Build & Test | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
# schedule: | |
# # runs the CI everyday at 10AM | |
# - cron: "0 10 * * *" | |
jobs: | |
# General build, check, and test steps | |
build_and_test: | |
runs-on: ubuntu-latest | |
steps: | |
# Setup | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
- uses: bluefireteam/melos-action@v2 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
components: rustfmt, clippy | |
# Rust | |
- name: Check Rust format | |
working-directory: ./packages/savgol/native/src | |
run: rustfmt --check lib.rs | |
- name: Rust code analysis | |
run: cargo clippy -- -D warnings | |
- name: Run Rust tests | |
run: cargo test | |
- name: Build Rust code for Dart tests | |
run: cargo build -r | |
# Dart/Flutter | |
# TODO: ignore generated files | |
# - name: Check Dart format | |
# run: melos run check-format --no-select | |
# - name: Dart code analysis | |
# run: melos run analyze --no-select | |
# - name: Run Dart tests | |
# run: melos run test | |
macos_integration_test: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
- uses: bluefireteam/melos-action@v2 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
- name: Build the XCFramework | |
run: melos run build:apple | |
- name: Copy the XCFramework to the needed location | |
run: | | |
CURR_VERSION=savgol-v`awk '/^version: /{print $2}' packages/savgol/pubspec.yaml` | |
cp platform-build/SavGol.xcframework.zip packages/flutter_savgol/macos/Frameworks/$CURR_VERSION.zip | |
echo Copied file! | |
- name: Run Flutter integration tests | |
working-directory: packages/flutter_savgol/example | |
run: flutter test -d macos integration_test | |
windows_integration_test: | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
- uses: bluefireteam/melos-action@v2 | |
- uses: goto-bus-stop/setup-zig@v2 | |
- uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: "15" | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
- name: Build the binaries | |
run: melos run build:other | |
- name: Copy the binaries to the needed location | |
shell: bash | |
run: | | |
CURR_VERSION=savgol-v`awk '/^version: /{print $2}' packages/savgol/pubspec.yaml` | |
cp platform-build/other.tar.gz packages/flutter_savgol/windows/$CURR_VERSION.tar.gz | |
echo Copied file! | |
- name: Run Flutter integration tests | |
working-directory: packages/flutter_savgol/example | |
run: flutter test -d windows integration_test | |
linux_integration_test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install dependencies for flutter integration test | |
run: sudo apt update && sudo apt-get install -y libglu1-mesa ninja-build clang cmake pkg-config libgtk-3-dev liblzma-dev | |
- uses: pyvista/setup-headless-display-action@v1 | |
- uses: subosito/flutter-action@v2 | |
- uses: bluefireteam/melos-action@v2 | |
- uses: goto-bus-stop/setup-zig@v2 | |
- uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: "15" | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
- name: Build the binaries | |
run: melos run build:other | |
- name: Copy the binaries to the needed location | |
run: | | |
CURR_VERSION=savgol-v`awk '/^version: /{print $2}' packages/savgol/pubspec.yaml` | |
cp platform-build/other.tar.gz packages/flutter_savgol/linux/$CURR_VERSION.tar.gz | |
echo Copied file! | |
- name: Run Flutter integration tests | |
working-directory: packages/flutter_savgol/example | |
run: flutter test -d linux integration_test | |
ios_integration_test: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
- uses: bluefireteam/melos-action@v2 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
- name: Start iOS Simulator | |
run: | | |
DEVICE_ID=$(xcrun xctrace list devices | grep iPhone | head -1 | awk '{print $NF}' | tr -d '()') | |
echo "DEVICE_ID=$DEVICE_ID" >> $GITHUB_ENV | |
xcrun simctl boot $DEVICE_ID | |
- name: Build the XCFramework | |
run: melos run build:apple | |
- name: Copy the XCFramework to the needed location | |
run: | | |
CURR_VERSION=savgol-v`awk '/^version: /{print $2}' packages/savgol/pubspec.yaml` | |
cp platform-build/SavGol.xcframework.zip packages/flutter_savgol/ios/Frameworks/$CURR_VERSION.zip | |
echo Copied file! | |
- name: Run Flutter integration tests | |
working-directory: packages/flutter_savgol/example | |
run: flutter test -d ${{ env.DEVICE_ID }} integration_test | |
android_integration_test: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
- uses: bluefireteam/melos-action@v2 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
- uses: nttld/setup-ndk@v1 | |
with: | |
ndk-version: r25b | |
- uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: "11.x" | |
- name: Build the binaries | |
run: melos run build:android | |
- name: Copy the binaries to the needed location | |
run: | | |
CURR_VERSION=savgol-v`awk '/^version: /{print $2}' packages/savgol/pubspec.yaml` | |
cp platform-build/android.tar.gz packages/flutter_savgol/android/$CURR_VERSION.tar.gz | |
echo Copied file! | |
- name: Run Flutter integration tests | |
uses: Wandalen/wretry.action@master # sometimes android tests are flaky | |
with: | |
attempt_limit: 5 | |
action: reactivecircus/android-emulator-runner@v2 | |
with: | | |
api-level: 33 | |
target: google_apis | |
arch: x86_64 | |
ram-size: 1024M | |
disk-size: 2048M | |
script: cd packages/flutter_savgol/example && flutter test -d `flutter devices | grep android | tr ' ' '\n' | grep emulator-` integration_test |