Skip to content

Build & Test

Build & Test #1555

Workflow file for this run

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: actions-rs/toolchain@v1
with:
toolchain: stable
components: rustfmt, clippy
# Rust
- name: Check Rust format
working-directory: ./packages/mimir/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 (embedded_milli) for Dart tests
run: cargo build -r
# Dart/Flutter
- name: Check Dart format
run: melos format --set-exit-if-changed
- name: Dart code analysis
run: melos analyze
- 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: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Build the XCFramework
run: melos run build:apple
- name: Copy the XCFramework to the needed location
run: |
CURR_VERSION=mimir-v`awk '/^version: /{print $2}' packages/mimir/pubspec.yaml`
cp platform-build/EmbeddedMilli.xcframework.zip packages/flutter_mimir/macos/Frameworks/$CURR_VERSION.zip
echo Copied file!
rm -rf target/ platform-build/ # free up some space on the runner
- name: Run Flutter integration tests
working-directory: packages/flutter_mimir/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: KyleMayes/install-llvm-action@v1
with:
version: "15"
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Build the binaries
run: dart pub global run melos run build:other
shell: bash
- name: Copy the binaries to the needed location
shell: bash
run: |
CURR_VERSION=mimir-v`awk '/^version: /{print $2}' packages/mimir/pubspec.yaml`
cp platform-build/EmbeddedMilli.tar.gz packages/flutter_mimir/windows/$CURR_VERSION.tar.gz
echo Copied file!
rm -rf target/ platform-build/ # free up some space on the runner
- name: Create Windows boilerplate
run: flutter create . --platforms=windows
working-directory: packages/flutter_mimir/example
- name: Run Flutter integration tests
working-directory: packages/flutter_mimir/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: mlugg/setup-zig@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Build the binaries
run: melos run build:other
- name: Copy the binaries to the needed location
run: |
CURR_VERSION=mimir-v`awk '/^version: /{print $2}' packages/mimir/pubspec.yaml`
cp platform-build/EmbeddedMilli.tar.gz packages/flutter_mimir/linux/$CURR_VERSION.tar.gz
echo Copied file!
rm -rf target/ platform-build/ # free up some space on the runner
- name: Create Linux boilerplate
run: flutter create . --platforms=linux
working-directory: packages/flutter_mimir/example
- name: Run Flutter integration tests
working-directory: packages/flutter_mimir/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: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Build the XCFramework
run: melos run build:apple
- name: Copy the XCFramework to the needed location
run: |
CURR_VERSION=mimir-v`awk '/^version: /{print $2}' packages/mimir/pubspec.yaml`
cp platform-build/EmbeddedMilli.xcframework.zip packages/flutter_mimir/ios/Frameworks/$CURR_VERSION.zip
echo Copied file!
rm -rf target/ platform-build/ # free up some space on the runner
- uses: futureware-tech/simulator-action@v3
id: start_simulator
name: Start iOS Simulator
with:
model: 'iPhone 15'
- name: Run Flutter integration tests
working-directory: packages/flutter_mimir/example
run: flutter test -d ${{ steps.start_simulator.outputs.udid }} integration_test
android_integration_test:
runs-on: macos-13
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
- uses: bluefireteam/melos-action@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- uses: nttld/setup-ndk@v1
with:
ndk-version: r25b
- uses: actions/setup-java@v3
with:
distribution: zulu
java-version: "17.x"
- name: Build the binaries
run: melos run build:android
- name: Copy the binaries to the needed location
run: |
CURR_VERSION=mimir-v`awk '/^version: /{print $2}' packages/mimir/pubspec.yaml`
cp platform-build/EmbeddedMilliAndroid.tar.gz packages/flutter_mimir/android/$CURR_VERSION.tar.gz
echo Copied file!
rm -rf target/ platform-build/ # free up some space on the runner
- name: Create Android boilerplate
run: flutter create . --platforms=android
working-directory: packages/flutter_mimir/example
- name: Run Flutter integration tests
uses: Wandalen/[email protected] # 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_mimir/example && flutter test -d `flutter devices | grep android | tr ' ' '\n' | grep emulator-` integration_test