Skip to content

Build & Test

Build & Test #110

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: dtolnay/rust-toolchain@stable
with:
toolchain: stable
components: rustfmt, clippy
# Rust
- name: Check Rust format
working-directory: ./packages/codde_protocol/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
- 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
build:
name: Build PyPi distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install pypa/build
run: >-
python3 -m
pip install
build
--user
- name: Build a binary wheel and a source tarball
run: python3 -m build
- name: Store the distribution packages
uses: actions/upload-artifact@v3
with:
name: python-package-distributions
path: dist/
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=codde_protocol-v`awk '/^version: /{print $2}' packages/codde_protocol/pubspec.yaml`
cp platform-build/CoddeProtocol.xcframework.zip packages/flutter_codde_protocol/macos/Frameworks/$CURR_VERSION.zip
echo Copied file!
- name: Run Flutter integration tests
working-directory: packages/flutter_codde_protocol/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=codde_protocol-v`awk '/^version: /{print $2}' packages/codde_protocol/pubspec.yaml`
cp platform-build/other.tar.gz packages/flutter_codde_protocol/windows/$CURR_VERSION.tar.gz
echo Copied file!
- name: Run Flutter integration tests
working-directory: packages/flutter_codde_protocol/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=codde_protocol-v`awk '/^version: /{print $2}' packages/codde_protocol/pubspec.yaml`
cp platform-build/other.tar.gz packages/flutter_codde_protocol/linux/$CURR_VERSION.tar.gz
echo Copied file!
- name: Run Flutter integration tests
working-directory: packages/flutter_codde_protocol/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=codde_protocol-v`awk '/^version: /{print $2}' packages/codde_protocol/pubspec.yaml`
cp platform-build/CoddeProtocol.xcframework.zip packages/flutter_codde_protocol/ios/Frameworks/$CURR_VERSION.zip
echo Copied file!
- name: Run Flutter integration tests
working-directory: packages/flutter_codde_protocol/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=codde_protocol-v`awk '/^version: /{print $2}' packages/codde_protocol/pubspec.yaml`
cp platform-build/android.tar.gz packages/flutter_codde_protocol/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_codde_protocol/example && flutter test -d `flutter devices | grep android | tr ' ' '\n' | grep emulator-` integration_test