Build & Test #957
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 * * *" | |
env: | |
CARGO_INCREMENTAL: "1" | |
jobs: | |
semantic_pull_request: | |
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 | |
# General build, check, and test steps | |
build_and_test: | |
runs-on: macos-latest | |
steps: | |
# Setup | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: '3.13.0' | |
channel: 'stable' | |
cache: true | |
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }} | |
- uses: bluefireteam/melos-action@v2 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: 1.71.1 | |
override: true | |
components: rustfmt, clippy | |
- name: Set up cargo cache | |
uses: actions/cache@v3 | |
continue-on-error: false | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ runner.os }}-cargo- | |
# Dart/Flutter format checking | |
- name: Clean before check-format | |
run: melos clean | |
- name: Boostrap everything | |
run: melos bs | |
- name: Check Dart format | |
run: melos run check-format --no-select | |
# Rust | |
- name: Build Rust code for Dart tests | |
run: cargo build -r | |
- name: Check Rust format | |
working-directory: ./packages/nekoton_bridge/native/src | |
run: rustfmt --check lib.rs --edition 2018 | |
- name: Rust code analysis | |
run: cargo clippy -- -D warnings | |
- name: Run Rust tests | |
run: cargo test | |
# Dart/Flutter | |
- name: Generate dart code | |
run: melos codegen --no-select | |
- name: Dart code analysis | |
run: melos run analyze --no-select | |
- name: Run Dart tests | |
run: melos run test --no-select | |
# Check if all the generated code is up to date | |
- name: Check git diff | |
run: melos git-check | |
# macos_integration_test: | |
# runs-on: macos-latest | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - uses: subosito/flutter-action@v2 | |
# with: | |
# flutter-version: '3.13.0' | |
# channel: 'stable' | |
# cache: true | |
# cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }} | |
# - uses: bluefireteam/melos-action@v2 | |
# - uses: actions-rs/toolchain@v1 | |
# with: | |
# toolchain: stable | |
# - name: Set up cargo cache | |
# uses: actions/cache@v3 | |
# continue-on-error: false | |
# with: | |
# path: | | |
# ~/.cargo/bin/ | |
# ~/.cargo/registry/index/ | |
# ~/.cargo/registry/cache/ | |
# ~/.cargo/git/db/ | |
# target/ | |
# key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
# restore-keys: ${{ runner.os }}-cargo- | |
# - name: Build the XCFramework | |
# run: melos run build:apple | |
# - name: Copy the XCFramework to the needed location | |
# run: | | |
# CURR_VERSION=nekoton_bridge-v`awk '/^version: /{print $2}' packages/nekoton_bridge/pubspec.yaml` | |
# cp platform-build/NekotonBridge.xcframework.zip packages/flutter_nekoton_bridge/macos/Frameworks/$CURR_VERSION.zip | |
# echo Copied file! | |
# - name: Run Flutter integration tests | |
# working-directory: packages/flutter_nekoton_bridge/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 | |
# with: | |
# flutter-version: '3.13.0' | |
# channel: 'stable' | |
# cache: true | |
# cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }} | |
# - uses: bluefireteam/melos-action@v2 | |
# - uses: goto-bus-stop/setup-zig@v2 | |
# - uses: KyleMayes/install-llvm-action@v1 | |
# with: | |
# version: "15" | |
# - uses: actions-rs/toolchain@v1 | |
# with: | |
# toolchain: stable | |
# - name: Set up cargo cache | |
# uses: actions/cache@v3 | |
# continue-on-error: false | |
# with: | |
# path: | | |
# ~/.cargo/bin/ | |
# ~/.cargo/registry/index/ | |
# ~/.cargo/registry/cache/ | |
# ~/.cargo/git/db/ | |
# target/ | |
# key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
# restore-keys: ${{ runner.os }}-cargo- | |
# - name: Build the binaries | |
# run: melos run build:other | |
# - name: Copy the binaries to the needed location | |
# shell: bash | |
# run: | | |
# CURR_VERSION=nekoton_bridge-v`awk '/^version: /{print $2}' packages/nekoton_bridge/pubspec.yaml` | |
# cp platform-build/other.tar.gz packages/flutter_nekoton_bridge/windows/$CURR_VERSION.tar.gz | |
# echo Copied file! | |
# - name: Run Flutter integration tests | |
# working-directory: packages/flutter_nekoton_bridge/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 | |
# with: | |
# flutter-version: '3.13.0' | |
# channel: 'stable' | |
# cache: true | |
# cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }} | |
# - uses: bluefireteam/melos-action@v2 | |
# - uses: goto-bus-stop/setup-zig@v2 | |
# - uses: KyleMayes/install-llvm-action@v1 | |
# with: | |
# version: "15" | |
# - uses: actions-rs/toolchain@v1 | |
# with: | |
# toolchain: stable | |
# - name: Set up cargo cache | |
# uses: actions/cache@v3 | |
# continue-on-error: false | |
# with: | |
# path: | | |
# ~/.cargo/bin/ | |
# ~/.cargo/registry/index/ | |
# ~/.cargo/registry/cache/ | |
# ~/.cargo/git/db/ | |
# target/ | |
# key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
# restore-keys: ${{ runner.os }}-cargo- | |
# - name: Build the binaries | |
# run: melos run build:other | |
# - name: Copy the binaries to the needed location | |
# run: | | |
# CURR_VERSION=nekoton_bridge-v`awk '/^version: /{print $2}' packages/nekoton_bridge/pubspec.yaml` | |
# cp platform-build/other.tar.gz packages/flutter_nekoton_bridge/linux/$CURR_VERSION.tar.gz | |
# echo Copied file! | |
# - name: Run Flutter integration tests | |
# working-directory: packages/flutter_nekoton_bridge/example | |
# run: flutter test -d linux integration_test | |
ios_integration_test: | |
runs-on: macos-latest | |
timeout-minutes: 360 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
cache: true | |
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }} | |
- uses: bluefireteam/melos-action@v2 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
- name: Set up cargo cache | |
uses: actions/cache@v3 | |
continue-on-error: false | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ runner.os }}-cargo- | |
- 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=nekoton_bridge-v`awk '/^version: /{print $2}' packages/nekoton_bridge/pubspec.yaml` | |
cp platform-build/NekotonBridge.xcframework.zip packages/flutter_nekoton_bridge/ios/Frameworks/$CURR_VERSION.zip | |
echo Copied file! | |
# This is fucking hilarious, but no one has an idea how to fix | |
# TimeoutException after 0:12:00.000000 bug: | |
# https://github.com/flutter/flutter/issues/105913 | |
# So, this is a magic that probably can 'fix' | |
- name: Pre-build the Flutter app | |
working-directory: packages/flutter_nekoton_bridge/example | |
run: flutter build ios --no-codesign --simulator --target=integration_test/app_test.dart | |
- name: Run Flutter integration tests | |
working-directory: packages/flutter_nekoton_bridge/example | |
run: flutter test -d ${{ env.DEVICE_ID }} --dart-define=FLUTTER_TEST_SKIP_FLAKY_IOS=${{ vars.FLUTTER_TEST_SKIP_FLAKY_IOS }} integration_test | |
android_integration_test: | |
runs-on: macos-latest | |
timeout-minutes: 360 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: subosito/flutter-action@v2 | |
with: | |
cache: true | |
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }} | |
- uses: bluefireteam/melos-action@v2 | |
- name: Set up cargo cache | |
uses: actions/cache@v3 | |
continue-on-error: false | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ runner.os }}-cargo- | |
- 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=nekoton_bridge-v`awk '/^version: /{print $2}' packages/nekoton_bridge/pubspec.yaml` | |
cp platform-build/android.tar.gz packages/flutter_nekoton_bridge/android/$CURR_VERSION.tar.gz | |
echo Copied file! | |
- name: Run Flutter integration tests | |
uses: Wandalen/wretry.action@v1.0.36 # 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_nekoton_bridge/example && flutter test --dart-define=FLUTTER_TEST_SKIP_FLAKY_ANDROID=${{ vars.FLUTTER_TEST_SKIP_FLAKY_ANDROID }} -d `flutter devices | grep android | tr ' ' '\n' | grep emulator-` integration_test |