Skip to content

wasm

wasm #17

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/**'
- 'flutter_rust_bridge.yaml'
- '.github/workflows/flutter-ci.yml'
pull_request:
paths:
- 'crates/fula-flutter/**'
- 'crates/fula-client/**'
- 'crates/fula-crypto/**'
- 'packages/fula_client/**'
- 'flutter_rust_bridge.yaml'
- '.github/workflows/flutter-ci.yml'
env:
CARGO_TERM_COLOR: always
FLUTTER_VERSION: '3.24.0'
jobs:
# Test Rust crates
test-rust:
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:
shared-key: rust-ci
- name: Run Rust tests
run: |
cargo test -p fula-flutter --lib
cargo test -p fula-client --lib
cargo test -p fula-crypto --lib
# Test WASM compilation
test-wasm:
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
with:
shared-key: rust-wasm
- name: Build WASM
run: cargo build -p fula-flutter --target wasm32-unknown-unknown --release
# Generate and validate Dart bindings
generate-bindings:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: stable
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Install LLVM/Clang
run: sudo apt-get update && sudo apt-get install -y libclang-dev llvm-dev
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: rust-frb
- name: Install flutter_rust_bridge_codegen
run: cargo install flutter_rust_bridge_codegen
- name: Get Flutter dependencies
working-directory: packages/fula_client
run: flutter pub get
- name: Generate Dart bindings
run: flutter_rust_bridge_codegen generate
- name: Analyze Dart code
working-directory: packages/fula_client
run: flutter analyze
- name: Upload generated bindings
uses: actions/upload-artifact@v4
with:
name: dart-bindings
path: packages/fula_client/lib/src/
retention-days: 7
# Build Android native libraries (check compilation)
build-android:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- target: aarch64-linux-android
cc: aarch64-linux-android21-clang
ar: llvm-ar
- target: armv7-linux-androideabi
cc: armv7a-linux-androideabi21-clang
ar: llvm-ar
- target: x86_64-linux-android
cc: x86_64-linux-android21-clang
ar: llvm-ar
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Setup Android NDK
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r25c
add-to-path: true
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: rust-android-${{ matrix.target }}
- name: Configure linker for Android
run: |
mkdir -p .cargo
cat >> .cargo/config.toml << INNEREOF
[target.aarch64-linux-android]
linker = "${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang"
[target.armv7-linux-androideabi]
linker = "${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang"
[target.x86_64-linux-android]
linker = "${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang"
INNEREOF
- name: Build for Android
env:
CC: ${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/${{ matrix.cc }}
AR: ${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/${{ matrix.ar }}
run: cargo build -p fula-flutter --target ${{ matrix.target }} --release
# Build iOS native libraries (check compilation)
build-ios:
runs-on: macos-latest
strategy:
matrix:
target:
- aarch64-apple-ios
- x86_64-apple-ios
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: rust-ios-${{ matrix.target }}
- name: Build for iOS
run: cargo build -p fula-flutter --target ${{ matrix.target }} --release