fix: use correct package name uniffi_bindgen #20
Workflow file for this run
This file contains hidden or 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: Release | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| dry_run: | |
| description: 'Dry run (skip release creation)' | |
| required: false | |
| default: 'false' | |
| type: boolean | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| # Build iOS artifacts on macOS | |
| build-ios: | |
| name: Build iOS | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios | |
| - name: Cache Rust dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-ios-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: ${{ runner.os }}-ios-cargo- | |
| - name: Install uniffi-bindgen | |
| run: | | |
| if ! command -v uniffi-bindgen &> /dev/null; then | |
| cargo install uniffi_bindgen --version "^0.28" | |
| fi | |
| - name: Build iOS targets | |
| run: | | |
| cargo build --release --target aarch64-apple-ios --features uniffi | |
| cargo build --release --target aarch64-apple-ios-sim --features uniffi | |
| cargo build --release --target x86_64-apple-ios --features uniffi | |
| - name: Generate Swift bindings | |
| run: | | |
| mkdir -p target/ios/swift | |
| uniffi-bindgen generate \ | |
| --library target/aarch64-apple-ios/release/libcooklang_import.a \ | |
| --language swift \ | |
| --out-dir target/ios/swift | |
| - name: Create XCFramework | |
| run: | | |
| mkdir -p target/ios/ios-device target/ios/ios-simulator | |
| # Copy device library | |
| cp target/aarch64-apple-ios/release/libcooklang_import.a target/ios/ios-device/ | |
| # Create fat library for simulator | |
| lipo -create \ | |
| target/aarch64-apple-ios-sim/release/libcooklang_import.a \ | |
| target/x86_64-apple-ios/release/libcooklang_import.a \ | |
| -output target/ios/ios-simulator/libcooklang_import.a | |
| # Create headers | |
| mkdir -p target/ios/ios-device/Headers target/ios/ios-simulator/Headers | |
| cp target/ios/swift/cooklang_importFFI.h target/ios/ios-device/Headers/ | |
| cp target/ios/swift/cooklang_importFFI.h target/ios/ios-simulator/Headers/ | |
| # Create module maps | |
| mkdir -p target/ios/ios-device/Modules target/ios/ios-simulator/Modules | |
| echo 'module CooklangImportFFI { header "cooklang_importFFI.h" export * }' > target/ios/ios-device/Modules/module.modulemap | |
| echo 'module CooklangImportFFI { header "cooklang_importFFI.h" export * }' > target/ios/ios-simulator/Modules/module.modulemap | |
| # Create XCFramework | |
| xcodebuild -create-xcframework \ | |
| -library target/ios/ios-device/libcooklang_import.a \ | |
| -headers target/ios/ios-device/Headers \ | |
| -library target/ios/ios-simulator/libcooklang_import.a \ | |
| -headers target/ios/ios-simulator/Headers \ | |
| -output target/ios/CooklangImportFFI.xcframework | |
| - name: Create Swift Package | |
| run: | | |
| mkdir -p target/ios/CooklangImport/Sources/CooklangImport | |
| cp target/ios/swift/cooklang_import.swift target/ios/CooklangImport/Sources/CooklangImport/ | |
| cp -R target/ios/CooklangImportFFI.xcframework target/ios/CooklangImport/ | |
| cat > target/ios/CooklangImport/Package.swift << 'EOF' | |
| // swift-tools-version:5.5 | |
| import PackageDescription | |
| let package = Package( | |
| name: "CooklangImport", | |
| platforms: [ | |
| .iOS(.v13), | |
| .macOS(.v10_15) | |
| ], | |
| products: [ | |
| .library( | |
| name: "CooklangImport", | |
| targets: ["CooklangImport", "CooklangImportFFI"] | |
| ), | |
| ], | |
| targets: [ | |
| .target( | |
| name: "CooklangImport", | |
| dependencies: ["CooklangImportFFI"] | |
| ), | |
| .binaryTarget( | |
| name: "CooklangImportFFI", | |
| path: "CooklangImportFFI.xcframework" | |
| ), | |
| ] | |
| ) | |
| EOF | |
| - name: Package iOS artifacts | |
| run: | | |
| cd target/ios | |
| zip -r ../../cooklang-import-ios.zip CooklangImport CooklangImportFFI.xcframework swift | |
| - name: Upload iOS artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ios-artifacts | |
| path: cooklang-import-ios.zip | |
| # Build Android artifacts on Linux | |
| build-android: | |
| name: Build Android | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-linux-android,armv7-linux-androideabi,x86_64-linux-android | |
| - name: Cache Rust dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-android-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: ${{ runner.os }}-android-cargo- | |
| - name: Setup Android NDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Install NDK | |
| run: | | |
| sdkmanager --install "ndk;26.1.10909125" | |
| echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/26.1.10909125" >> $GITHUB_ENV | |
| - name: Install cargo-ndk and uniffi-bindgen | |
| run: | | |
| cargo install cargo-ndk --locked || cargo install cargo-ndk | |
| cargo install uniffi_bindgen --version "^0.28" | |
| - name: Build Android targets | |
| run: | | |
| cargo ndk --target aarch64-linux-android --platform 21 build --release --features uniffi | |
| cargo ndk --target armv7-linux-androideabi --platform 21 build --release --features uniffi | |
| cargo ndk --target x86_64-linux-android --platform 21 build --release --features uniffi | |
| - name: Generate Kotlin bindings | |
| run: | | |
| mkdir -p target/android/kotlin | |
| uniffi-bindgen generate \ | |
| --library target/aarch64-linux-android/release/libcooklang_import.so \ | |
| --language kotlin \ | |
| --out-dir target/android/kotlin | |
| - name: Organize JNI libraries | |
| run: | | |
| mkdir -p target/android/jniLibs/{arm64-v8a,armeabi-v7a,x86_64} | |
| cp target/aarch64-linux-android/release/libcooklang_import.so target/android/jniLibs/arm64-v8a/ | |
| cp target/armv7-linux-androideabi/release/libcooklang_import.so target/android/jniLibs/armeabi-v7a/ | |
| cp target/x86_64-linux-android/release/libcooklang_import.so target/android/jniLibs/x86_64/ | |
| - name: Create Android library module | |
| run: | | |
| mkdir -p target/android/cooklang-import-android/src/main/kotlin | |
| mkdir -p target/android/cooklang-import-android/src/main/jniLibs | |
| # Copy JNI libs | |
| cp -R target/android/jniLibs/* target/android/cooklang-import-android/src/main/jniLibs/ | |
| # Copy Kotlin bindings | |
| cp target/android/kotlin/*.kt target/android/cooklang-import-android/src/main/kotlin/ | |
| # Create build.gradle.kts | |
| cat > target/android/cooklang-import-android/build.gradle.kts << 'EOF' | |
| plugins { | |
| id("com.android.library") | |
| id("org.jetbrains.kotlin.android") | |
| } | |
| android { | |
| namespace = "com.cooklang.import_lib" | |
| compileSdk = 34 | |
| defaultConfig { | |
| minSdk = 21 | |
| testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" | |
| consumerProguardFiles("consumer-rules.pro") | |
| } | |
| buildTypes { | |
| release { | |
| isMinifyEnabled = false | |
| proguardFiles( | |
| getDefaultProguardFile("proguard-android-optimize.txt"), | |
| "proguard-rules.pro" | |
| ) | |
| } | |
| } | |
| compileOptions { | |
| sourceCompatibility = JavaVersion.VERSION_1_8 | |
| targetCompatibility = JavaVersion.VERSION_1_8 | |
| } | |
| kotlinOptions { | |
| jvmTarget = "1.8" | |
| } | |
| sourceSets { | |
| getByName("main") { | |
| jniLibs.srcDirs("src/main/jniLibs") | |
| } | |
| } | |
| } | |
| dependencies { | |
| implementation("net.java.dev.jna:jna:5.14.0@aar") | |
| implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") | |
| } | |
| EOF | |
| # Create AndroidManifest.xml | |
| mkdir -p target/android/cooklang-import-android/src/main | |
| cat > target/android/cooklang-import-android/src/main/AndroidManifest.xml << 'EOF' | |
| <?xml version="1.0" encoding="utf-8"?> | |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android"> | |
| <uses-permission android:name="android.permission.INTERNET" /> | |
| </manifest> | |
| EOF | |
| # Create proguard rules | |
| cat > target/android/cooklang-import-android/proguard-rules.pro << 'EOF' | |
| -keep class uniffi.** { *; } | |
| -keep class com.cooklang.** { *; } | |
| -keep class com.sun.jna.** { *; } | |
| -keepclassmembers class * extends com.sun.jna.** { public *; } | |
| EOF | |
| cat > target/android/cooklang-import-android/consumer-rules.pro << 'EOF' | |
| -keep class uniffi.** { *; } | |
| -keep class com.cooklang.** { *; } | |
| EOF | |
| - name: Package Android artifacts | |
| run: | | |
| cd target/android | |
| zip -r ../../cooklang-import-android.zip cooklang-import-android jniLibs kotlin | |
| - name: Upload Android artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-artifacts | |
| path: cooklang-import-android.zip | |
| # Create GitHub Release | |
| release: | |
| name: Create Release | |
| needs: [build-ios, build-android] | |
| runs-on: ubuntu-latest | |
| if: startsWith(github.ref, 'refs/tags/') && github.event.inputs.dry_run != 'true' | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v4 | |
| - name: Download iOS artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ios-artifacts | |
| - name: Download Android artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: android-artifacts | |
| - name: Get version from tag | |
| id: version | |
| run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| name: Release ${{ steps.version.outputs.VERSION }} | |
| draft: false | |
| prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }} | |
| generate_release_notes: true | |
| files: | | |
| cooklang-import-ios.zip | |
| cooklang-import-android.zip | |
| body: | | |
| ## Mobile SDK Release ${{ steps.version.outputs.VERSION }} | |
| ### iOS | |
| Download `cooklang-import-ios.zip` which contains: | |
| - `CooklangImport/` - Swift Package ready to use | |
| - `CooklangImportFFI.xcframework` - XCFramework for manual integration | |
| - `swift/` - Swift bindings source files | |
| ### Android | |
| Download `cooklang-import-android.zip` which contains: | |
| - `cooklang-import-android/` - Android library module | |
| - `jniLibs/` - Native libraries for all architectures | |
| - `kotlin/` - Kotlin bindings source files | |
| ### Supported Architectures | |
| **iOS:** | |
| - arm64 (devices) | |
| - arm64 (simulator, Apple Silicon) | |
| - x86_64 (simulator, Intel) | |
| **Android:** | |
| - arm64-v8a | |
| - armeabi-v7a | |
| - x86_64 | |
| See the README for integration instructions. |