Skip to content

build

build #12

Workflow file for this run

name: Flutter CI
on:
push:
branches: [main]
paths:
- 'crates/fula-flutter/**'
- 'crates/fula-client/**'
- 'crates/fula-crypto/**'
- 'packages/fula_client/**'
- '.github/workflows/flutter-ci.yml'
pull_request:
paths:
- 'crates/fula-flutter/**'
- 'crates/fula-client/**'
- 'crates/fula-crypto/**'
- 'packages/fula_client/**'
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
jobs:
# Run Rust tests for all related crates
test-rust:
name: Rust Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
workspaces: "."
- name: Run tests
run: |
cargo test -p fula-crypto --all-features
cargo test -p fula-client --all-features
cargo test -p fula-flutter
# Verify WASM compilation
test-wasm:
name: WASM Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
- name: Build for WASM
run: |
cargo build -p fula-crypto --target wasm32-unknown-unknown --no-default-features --features wasm
cargo build -p fula-client --target wasm32-unknown-unknown --no-default-features
cargo build -p fula-flutter --target wasm32-unknown-unknown
# Verify binding generation works
test-codegen:
name: Binding Generation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.0'
channel: 'stable'
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
- name: Install flutter_rust_bridge_codegen
run: cargo install flutter_rust_bridge_codegen
- name: Clean old generated files
run: |
rm -f packages/fula_client/lib/src/frb_generated*.dart
rm -f packages/fula_client/lib/src/api/*.freezed.dart
- name: Install dependencies
working-directory: packages/fula_client
run: flutter pub get
- name: Generate bindings
run: |
mkdir -p packages/fula_client/lib/src
# flutter_rust_bridge v2 - use config file (flutter_rust_bridge.yaml)
flutter_rust_bridge_codegen generate
- name: Verify generated files
run: |
ls -la packages/fula_client/lib/src/
echo "=== Checking for wire methods ==="
grep -c "wire__" packages/fula_client/lib/src/frb_generated.io.dart || echo "No wire methods in io.dart"
# Check Flutter package structure
check-flutter:
name: Flutter Package Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.0'
channel: 'stable'
- name: Check package
working-directory: packages/fula_client
run: |
flutter pub get || echo "Dependencies not fully resolved (expected without generated bindings)"
flutter analyze --no-fatal-infos || echo "Analysis completed with warnings"
# Build Android native libraries (verification only)
build-android-check:
name: Android Build Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android
- name: Setup Android NDK
id: setup-ndk
uses: nttld/setup-ndk@v1
with:
ndk-version: r25c
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
- name: Configure Cargo for Android
run: |
NDK_PATH="${{ steps.setup-ndk.outputs.ndk-path }}"
echo "[target.aarch64-linux-android]" >> ~/.cargo/config.toml
echo "linker = \"$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang\"" >> ~/.cargo/config.toml
- name: Build for Android (arm64)
run: |
NDK_PATH="${{ steps.setup-ndk.outputs.ndk-path }}"
# Set CC and AR for ring/rustls cross-compilation
export CC_aarch64_linux_android="$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
export AR_aarch64_linux_android="$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
cargo build -p fula-flutter --target aarch64-linux-android --release