[CI] Automate releases #114
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 install zig-build | |
rustup target add x86_64-unknown-linux-gnu | |
cargo zigbuild --target x86_64-unknown-linux-gnu -r --target-dir target | |
cp target/x86_64-unknown-linux-gnu/release/libcodde_protocol.so target/release | |
# 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: Bootstrap | |
run: melos bs | |
- 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` | |
mkdir -p packages/flutter_codde_protocol/ios/Frameworks | |
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: 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 | |
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 |