[CI] Automate releases #99
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/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 |