Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .github/workflows/mobile-sdk-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,41 @@ jobs:

- name: Test
run: cargo test

flutter-dart-gen:
name: Flutter Dart Binding Generation
runs-on: ubuntu-latest
defaults:
run:
working-directory: client/mobile

steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: subosito/flutter-action@v2
with:
flutter-version: '3.x'
channel: stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: client/mobile

- name: Install flutter_rust_bridge_codegen
run: cargo install flutter_rust_bridge_codegen

- name: Generate Dart bindings
run: |
mkdir -p flutter_dart_wrappers/lib/src/rust
flutter_rust_bridge_codegen generate \
--rust-input crate::api \
--rust-root flutter_ffi/ \
--dart-root flutter_dart_wrappers/ \
--dart-output flutter_dart_wrappers/lib/src/rust

- name: Verify generated files
run: |
test -f flutter_dart_wrappers/lib/src/rust/frb_generated.dart
echo "Dart bindings generated successfully"
74 changes: 73 additions & 1 deletion .github/workflows/mobile-sdk-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,65 @@ jobs:
path: client/mobile/android-sdk.tar.gz
retention-days: 5

build-flutter:
name: Build Flutter SDK
runs-on: macos-15
timeout-minutes: 40
defaults:
run:
working-directory: client/mobile

steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- name: Add Apple build targets
run: rustup target add aarch64-apple-ios aarch64-apple-ios-sim aarch64-apple-darwin

- name: Add Android targets
run: rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android

- name: Install cargo-ndk
run: cargo install cargo-ndk

- name: Setup Android NDK
uses: android-actions/setup-android@v3

- uses: subosito/flutter-action@v2
with:
flutter-version: '3.x'
channel: stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: client/mobile

- name: Install flutter_rust_bridge_codegen
run: cargo install flutter_rust_bridge_codegen

- name: Build Flutter SDK
run: ./build_flutter.sh

- name: Verify artifacts
run: |
test -f dist/flutter/lib/src/rust/frb_generated.dart
test -d dist/flutter/ios/rift_flutter_ffi.xcframework
test -d dist/flutter/android/jniLibs/arm64-v8a
echo "Flutter artifacts verified — frb_generated.dart, XCFramework, and Android jniLibs all present"

- name: Package Flutter SDK
run: tar -czf flutter-sdk.tar.gz -C dist flutter

- uses: actions/upload-artifact@v4
with:
name: flutter-sdk
path: client/mobile/flutter-sdk.tar.gz
retention-days: 5

release:
name: Create GitHub Release
needs: [build-ios, build-android]
needs: [build-ios, build-android, build-flutter]
runs-on: ubuntu-latest

steps:
Expand All @@ -137,6 +193,11 @@ jobs:
name: android-sdk
path: artifacts/

- uses: actions/download-artifact@v4
with:
name: flutter-sdk
path: artifacts/

- name: Determine version
id: version
run: |
Expand Down Expand Up @@ -186,6 +247,7 @@ jobs:
TAG="${{ steps.version.outputs.tag }}"
mv artifacts/ios-sdk.tar.gz "artifacts/rift-ios-sdk-${TAG}.tar.gz"
mv artifacts/android-sdk.tar.gz "artifacts/rift-android-sdk-${TAG}.tar.gz"
mv artifacts/flutter-sdk.tar.gz "artifacts/rift-flutter-sdk-${TAG}.tar.gz"

# IMPORTANT — order matters here. Both the release tag and the SPM
# semver tag must point at the commit that has the URL+checksum
Expand Down Expand Up @@ -251,9 +313,19 @@ jobs:
### Android (Gradle)
Download `rift-android-sdk-${{ steps.version.outputs.tag }}.tar.gz`, extract into your project.
Contains: jniLibs (arm64-v8a, armeabi-v7a, x86, x86_64), Kotlin bindings, `build.gradle.kts`

### Flutter / Dart
Download `rift-flutter-sdk-${{ steps.version.outputs.tag }}.tar.gz`, extract, and add as a path dependency:
```yaml
dependencies:
rift_flutter_ffi:
path: ./rift_flutter_ffi
```
Contains: generated Dart bindings, hand-written wrapper, iOS XCFramework, Android jniLibs.
files: |
artifacts/rift-ios-sdk-${{ steps.version.outputs.tag }}.tar.gz
artifacts/rift-android-sdk-${{ steps.version.outputs.tag }}.tar.gz
artifacts/rift-flutter-sdk-${{ steps.version.outputs.tag }}.tar.gz
artifacts/rift_ffiFFI.xcframework.zip
generate_release_notes: true
env:
Expand Down
Loading
Loading