Skip to content

[CI] Automate releases #99

[CI] Automate releases

[CI] Automate releases #99

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: Check Rust format
working-directory: ./packages/codde_protocol/native/client/src
run: rustfmt --check lib.rs
- name: Rust code analysis
working-directory: ./packages/codde_protocol/native
run: cargo clippy -- -D warnings
- name: Run Rust tests
working-directory: ./packages/codde_protocol/native
run: cargo test
- name: Build Rust code for Dart tests
working-directory: ./packages/codde_protocol/native/client
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
working-directory: ./packages/codde_protocol/native
run: >-
python3 -m
pip install
build maturin
--user
- name: Build a binary wheel and a source tarball
working-directory: ./packages/codde_protocol/native
run: maturin build --release
- 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
# 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
# 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
# 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
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: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- 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: arm64-v8a
ram-size: 1024M
disk-size: 2048M
script: cd packages/flutter_codde_protocol && flutter test -d `flutter devices | grep android | tr ' ' '\n' | grep emulator-` integration_test