From e337837dd633d86aa145c08d7e8ed6dfd41a9d84 Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Sat, 18 Oct 2025 21:05:47 +0200 Subject: [PATCH 01/38] feat: mobile support initial --- .github/workflows/uniffi.yaml | 106 +++++++++++++++++++++++++++++++++- bindings/uniffi/Cargo.toml | 2 +- core/engine/Cargo.toml | 2 +- 3 files changed, 106 insertions(+), 4 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 32dd5efa..adb7f717 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -22,7 +22,7 @@ on: jobs: build: - if: "!contains(github.event.head_commit.message, 'skip ci')" + if: false #"!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi @@ -79,7 +79,7 @@ jobs: release-java-kotlin: runs-on: ubuntu-latest needs: [ build ] - if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" + if: false # "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" defaults: run: working-directory: ${{ env.UNIFFI_DIRECTORY }} @@ -135,3 +135,105 @@ jobs: GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} GPG_SIGNING_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }} run: ./gradlew publishAllPublicationsToCentralPortal + + build-ios: + if: "!contains(github.event.head_commit.message, 'skip ci')" + env: + OUTPUT_NAME: zen_uniffi + IPHONEOS_DEPLOYMENT_TARGET: '16.0' + + strategy: + fail-fast: true + matrix: + settings: + - target: 'aarch64-apple-ios' + output: 'lib{0}.a' + lib_dir: 'ios-aarch64' + - target: 'x86_64-apple-ios' + output: 'lib{0}.a' + lib_dir: 'ios-x86-64' + - target: 'aarch64-apple-ios-sim' + output: 'lib{0}.a' + lib_dir: 'ios-aarch64-sim' + + name: UniFFI iOS - ${{ matrix.settings.target }} + runs-on: macos-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup Rust Toolchain + uses: dtolnay/rust-toolchain@stable + with: + target: ${{ matrix.settings.target }} + + - name: Build iOS + run: | + if [ "${{ matrix.settings.target }}" = "aarch64-apple-ios-sim" ]; then + export BINDGEN_EXTRA_CLANG_ARGS="--target=aarch64-apple-ios --sysroot=$(xcrun --sdk iphonesimulator --show-sdk-path)" + fi + cargo build -p zen-uniffi --target ${{ matrix.settings.target }} --release + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.settings.lib_dir }} + path: target/${{ matrix.settings.target }}/release/${{ format(matrix.settings.output, env.OUTPUT_NAME) }} + if-no-files-found: error + + create-xcframework: + runs-on: macos-latest + needs: [ build-ios ] + if: "!contains(github.event.head_commit.message, 'skip ci')" + + steps: + - uses: actions/checkout@v3 + + - name: Download iOS artifacts + uses: actions/download-artifact@v4 + with: + path: target-ios + + - name: Reorganize artifacts to match target structure + run: | + mkdir -p target/aarch64-apple-ios/release + mkdir -p target/x86_64-apple-ios/release + mkdir -p target/aarch64-apple-ios-sim/release + + cp target-ios/ios-aarch64/libzen_uniffi.a target/aarch64-apple-ios/release/ + cp target-ios/ios-x86-64/libzen_uniffi.a target/x86_64-apple-ios/release/ + cp target-ios/ios-aarch64-sim/libzen_uniffi.a target/aarch64-apple-ios-sim/release/ + + - name: Setup Rust Toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Generate Swift bindings + run: | + cargo run --bin uniffi-bindgen -- generate \ + --library target/aarch64-apple-ios/release/libzen_uniffi.a \ + --language swift \ + --out-dir bindings/uniffi/build/generated/swift + + - name: Create release structure + run: | + mkdir -p ios-release/ios/swift + + # Create XCFramework + xcodebuild -create-xcframework \ + -library target/aarch64-apple-ios/release/libzen_uniffi.a \ + -headers bindings/uniffi/build/generated/swift \ + -library target/x86_64-apple-ios/release/libzen_uniffi.a \ + -headers bindings/uniffi/build/generated/swift \ + -library target/aarch64-apple-ios-sim/release/libzen_uniffi.a \ + -headers bindings/uniffi/build/generated/swift \ + -output ios-release/ios/ZenUniffi.xcframework + + # Copy Swift bindings + cp -r bindings/uniffi/build/generated/swift/* ios-release/ios/swift/ + + - name: Upload iOS release bundle + uses: actions/upload-artifact@v4 + with: + name: ios-release + path: ios-release + if-no-files-found: error \ No newline at end of file diff --git a/bindings/uniffi/Cargo.toml b/bindings/uniffi/Cargo.toml index 52d36015..cc4078bf 100644 --- a/bindings/uniffi/Cargo.toml +++ b/bindings/uniffi/Cargo.toml @@ -6,7 +6,7 @@ license = "MIT" publish = false [lib] -crate-type = ["cdylib"] +crate-type = ["cdylib", "staticlib"] [[bin]] name = "uniffi-bindgen" diff --git a/core/engine/Cargo.toml b/core/engine/Cargo.toml index 0ffa7cc0..c251573d 100644 --- a/core/engine/Cargo.toml +++ b/core/engine/Cargo.toml @@ -25,7 +25,7 @@ fixedbitset = "0.5" tokio = { workspace = true, features = ["sync", "time"] } http = { version = "1.3" } reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false } -rquickjs = { version = "0.9", features = ["macro", "loader", "rust-alloc", "futures", "either", "properties"] } +rquickjs = { version = "0.9", features = ["macro", "loader", "rust-alloc", "futures", "either", "properties", "bindgen"] } rquickjs-serde = { version = "0.1" } jsonschema = "0.29" zen-types = { path = "../types", version = "0.51.0" } From 1cf98149ab7dbf171bc09afadb5f90d90939e6e1 Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Sat, 18 Oct 2025 21:15:47 +0200 Subject: [PATCH 02/38] fix: ios sim - lipo --- .github/workflows/uniffi.yaml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index adb7f717..84f8857b 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -214,17 +214,23 @@ jobs: --language swift \ --out-dir bindings/uniffi/build/generated/swift + - name: Create fat simulator library + run: | + mkdir -p target/universal-sim/release + lipo -create \ + target/x86_64-apple-ios/release/libzen_uniffi.a \ + target/aarch64-apple-ios-sim/release/libzen_uniffi.a \ + -output target/universal-sim/release/libzen_uniffi.a + - name: Create release structure run: | mkdir -p ios-release/ios/swift - - # Create XCFramework + + # Create XCFramework with device + universal simulator xcodebuild -create-xcframework \ -library target/aarch64-apple-ios/release/libzen_uniffi.a \ -headers bindings/uniffi/build/generated/swift \ - -library target/x86_64-apple-ios/release/libzen_uniffi.a \ - -headers bindings/uniffi/build/generated/swift \ - -library target/aarch64-apple-ios-sim/release/libzen_uniffi.a \ + -library target/universal-sim/release/libzen_uniffi.a \ -headers bindings/uniffi/build/generated/swift \ -output ios-release/ios/ZenUniffi.xcframework From e28b3cc587eb1866acebbf694c1ce57517adbdd8 Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Sat, 18 Oct 2025 21:35:23 +0200 Subject: [PATCH 03/38] fix: android libs --- .github/workflows/uniffi.yaml | 103 +++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 84f8857b..21856e3f 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -137,7 +137,7 @@ jobs: run: ./gradlew publishAllPublicationsToCentralPortal build-ios: - if: "!contains(github.event.head_commit.message, 'skip ci')" + if: false #"!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi IPHONEOS_DEPLOYMENT_TARGET: '16.0' @@ -242,4 +242,103 @@ jobs: with: name: ios-release path: ios-release - if-no-files-found: error \ No newline at end of file + if-no-files-found: error + + build-android: + if: "!contains(github.event.head_commit.message, 'skip ci')" + runs-on: ubuntu-latest + env: + OUTPUT_NAME: zen_uniffi + + steps: + - uses: actions/checkout@v3 + + - name: Setup Rust Toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Install cargo-ndk + run: cargo install cargo-ndk + + - name: Setup Android NDK + uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: r26d + add-to-path: true + + - name: Add Rust Android targets + run: | + rustup target add aarch64-linux-android + rustup target add armv7-linux-androideabi + rustup target add i686-linux-android + rustup target add x86_64-linux-android + + - name: Build for Android + env: + ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} + run: | + cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 \ + --platform 33 \ + -o ./android-libs \ + build -p zen-uniffi --release + + - name: Upload Android artifacts + uses: actions/upload-artifact@v4 + with: + name: android-libs + path: android-libs/ + if-no-files-found: error + + prepare-android-bindings: + runs-on: ubuntu-latest + needs: [ build-android ] + if: "!contains(github.event.head_commit.message, 'skip ci')" + + steps: + - uses: actions/checkout@v3 + + - name: Download Android artifacts + uses: actions/download-artifact@v4 + with: + name: android-libs + path: android-libs + + - name: Setup Rust Toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Generate Kotlin bindings + run: | + cargo run --bin uniffi-bindgen -- generate \ + --library android-libs/arm64-v8a/libzen_uniffi.so \ + --language kotlin \ + --out-dir build/generated/kotlin-android + + - name: Generate Java bindings + run: | + cargo install uniffi-bindgen-java + uniffi-bindgen-java generate \ + --library android-libs/arm64-v8a/libzen_uniffi.so \ + --out-dir build/generated/java-android + + - name: Create Android package structure + run: | + mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} + mkdir -p android-package/kotlin + mkdir -p android-package/java + + # Copy .so files + cp android-libs/arm64-v8a/libzen_uniffi.so android-package/libs/arm64-v8a/ + cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ + cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ + cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ + + # Copy bindings + cp -r build/generated/kotlin-android/* android-package/kotlin/ + cp -r build/generated/java-android/* android-package/java/ + + - name: Upload Android package + uses: actions/upload-artifact@v4 + with: + name: android-package + path: android-package + if-no-files-found: error From b76eea98c1fdf2c6d0c64b10d668e14c0260a8f4 Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Sat, 18 Oct 2025 22:15:49 +0200 Subject: [PATCH 04/38] fix: android --- .github/workflows/uniffi.yaml | 30 ++++++++++++++--------------- bindings/uniffi/uniffi-android.toml | 9 +++++++++ 2 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 bindings/uniffi/uniffi-android.toml diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 21856e3f..c3fcedf8 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -269,15 +269,16 @@ jobs: - name: Add Rust Android targets run: | rustup target add aarch64-linux-android - rustup target add armv7-linux-androideabi - rustup target add i686-linux-android - rustup target add x86_64-linux-android +# rustup target add armv7-linux-androideabi +# rustup target add i686-linux-android +# rustup target add x86_64-linux-android - name: Build for Android env: ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | - cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 \ +# cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 \ + cargo ndk -t arm64-v8a \ --platform 33 \ -o ./android-libs \ build -p zen-uniffi --release @@ -311,30 +312,29 @@ jobs: cargo run --bin uniffi-bindgen -- generate \ --library android-libs/arm64-v8a/libzen_uniffi.so \ --language kotlin \ + --config bindings/uniffi/uniffi-android.toml \ --out-dir build/generated/kotlin-android - - name: Generate Java bindings + - name: Test out dir run: | - cargo install uniffi-bindgen-java - uniffi-bindgen-java generate \ - --library android-libs/arm64-v8a/libzen_uniffi.so \ - --out-dir build/generated/java-android + ls -la build + ls -la build/generated + ls -la build/generated/kotlin-android - name: Create Android package structure run: | - mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} +# mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} + mkdir -p android-package/libs/arm64-v8a mkdir -p android-package/kotlin - mkdir -p android-package/java # Copy .so files cp android-libs/arm64-v8a/libzen_uniffi.so android-package/libs/arm64-v8a/ - cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ - cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ - cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ +# cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ +# cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ +# cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ # Copy bindings cp -r build/generated/kotlin-android/* android-package/kotlin/ - cp -r build/generated/java-android/* android-package/java/ - name: Upload Android package uses: actions/upload-artifact@v4 diff --git a/bindings/uniffi/uniffi-android.toml b/bindings/uniffi/uniffi-android.toml new file mode 100644 index 00000000..dad95a5b --- /dev/null +++ b/bindings/uniffi/uniffi-android.toml @@ -0,0 +1,9 @@ +# Kotlin Android +[bindings.kotlin] +package_name = "io.gorules.zen_engine.kotlin_android" +generate_immutable_records = true +android = true + +[bindings.kotlin.custom_types.JsonBuffer] +into_custom = "JsonBuffer({})" +from_custom = "{}.value" From a1d1e77a7d1a0c814b5131eecf10fbb1d129973b Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Sat, 18 Oct 2025 22:19:43 +0200 Subject: [PATCH 05/38] fix: workflow --- .github/workflows/uniffi.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index c3fcedf8..0906c78f 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -269,15 +269,15 @@ jobs: - name: Add Rust Android targets run: | rustup target add aarch64-linux-android -# rustup target add armv7-linux-androideabi -# rustup target add i686-linux-android -# rustup target add x86_64-linux-android + # rustup target add armv7-linux-androideabi + # rustup target add i686-linux-android + # rustup target add x86_64-linux-android - name: Build for Android env: ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | -# cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 \ + # cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 cargo ndk -t arm64-v8a \ --platform 33 \ -o ./android-libs \ @@ -323,15 +323,15 @@ jobs: - name: Create Android package structure run: | -# mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} + # mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} mkdir -p android-package/libs/arm64-v8a mkdir -p android-package/kotlin # Copy .so files cp android-libs/arm64-v8a/libzen_uniffi.so android-package/libs/arm64-v8a/ -# cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ -# cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ -# cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ + # cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ + # cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ + # cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ # Copy bindings cp -r build/generated/kotlin-android/* android-package/kotlin/ From a8711187bd91ea689e47a3349c5d5b2e98e8bb36 Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Sat, 18 Oct 2025 22:51:20 +0200 Subject: [PATCH 06/38] fix: linux metadata --- .github/workflows/uniffi.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 0906c78f..bbc327e1 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -306,25 +306,25 @@ jobs: - name: Setup Rust Toolchain uses: dtolnay/rust-toolchain@stable + with: + target: x86_64-unknown-linux-gnu - - name: Generate Kotlin bindings + - name: Build Linux library for metadata extraction run: | - cargo run --bin uniffi-bindgen -- generate \ - --library android-libs/arm64-v8a/libzen_uniffi.so \ - --language kotlin \ - --config bindings/uniffi/uniffi-android.toml \ - --out-dir build/generated/kotlin-android + echo "Building Linux x86_64 library to extract UniFFI metadata..." + cargo build -p zen-uniffi --target x86_64-unknown-linux-gnu --release - - name: Test out dir + - name: Generate Kotlin bindings (using Linux library for metadata) run: | - ls -la build - ls -la build/generated - ls -la build/generated/kotlin-android + cargo run --bin uniffi-bindgen -- generate \ + --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ + --language kotlin \ + --config bindings/uniffi/uniffi-android.toml \ + --out-dir build/generated/kotlin-android - name: Create Android package structure run: | - # mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} - mkdir -p android-package/libs/arm64-v8a + mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} mkdir -p android-package/kotlin # Copy .so files From bc94170c648ae13255529e2541c746a607124e2c Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Wed, 29 Oct 2025 20:17:28 +0100 Subject: [PATCH 07/38] fix: ios release test --- .github/workflows/uniffi.yaml | 168 +++++++++++++++++++++++++++------- 1 file changed, 133 insertions(+), 35 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index bbc327e1..a68ec48b 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -137,7 +137,8 @@ jobs: run: ./gradlew publishAllPublicationsToCentralPortal build-ios: - if: false #"!contains(github.event.head_commit.message, 'skip ci')" + # if: false + if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi IPHONEOS_DEPLOYMENT_TARGET: '16.0' @@ -168,23 +169,27 @@ jobs: target: ${{ matrix.settings.target }} - name: Build iOS + working-directory: ${{ env.UNIFFI_DIRECTORY }} run: | if [ "${{ matrix.settings.target }}" = "aarch64-apple-ios-sim" ]; then export BINDGEN_EXTRA_CLANG_ARGS="--target=aarch64-apple-ios --sysroot=$(xcrun --sdk iphonesimulator --show-sdk-path)" fi - cargo build -p zen-uniffi --target ${{ matrix.settings.target }} --release + cargo build --lib --target ${{ matrix.settings.target }} --release - name: Upload artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.settings.lib_dir }} - path: target/${{ matrix.settings.target }}/release/${{ format(matrix.settings.output, env.OUTPUT_NAME) }} + path: ${{ env.UNIFFI_DIRECTORY }}/target/${{ matrix.settings.target }}/release/${{ format(matrix.settings.output, env.OUTPUT_NAME) }} if-no-files-found: error create-xcframework: runs-on: macos-latest needs: [ build-ios ] if: "!contains(github.event.head_commit.message, 'skip ci')" + defaults: + run: + working-directory: ${{ env.UNIFFI_DIRECTORY }} steps: - uses: actions/checkout@v3 @@ -192,7 +197,7 @@ jobs: - name: Download iOS artifacts uses: actions/download-artifact@v4 with: - path: target-ios + path: ${{ env.UNIFFI_DIRECTORY }}/target-ios - name: Reorganize artifacts to match target structure run: | @@ -209,10 +214,11 @@ jobs: - name: Generate Swift bindings run: | + mkdir -p build/generated/swift cargo run --bin uniffi-bindgen -- generate \ --library target/aarch64-apple-ios/release/libzen_uniffi.a \ --language swift \ - --out-dir bindings/uniffi/build/generated/swift + --out-dir build/generated/swift - name: Create fat simulator library run: | @@ -222,30 +228,106 @@ jobs: target/aarch64-apple-ios-sim/release/libzen_uniffi.a \ -output target/universal-sim/release/libzen_uniffi.a - - name: Create release structure + - name: Create XCFramework run: | - mkdir -p ios-release/ios/swift + mkdir -p build/ios-release/ios/swift # Create XCFramework with device + universal simulator xcodebuild -create-xcframework \ -library target/aarch64-apple-ios/release/libzen_uniffi.a \ - -headers bindings/uniffi/build/generated/swift \ + -headers build/generated/swift \ -library target/universal-sim/release/libzen_uniffi.a \ - -headers bindings/uniffi/build/generated/swift \ - -output ios-release/ios/ZenUniffi.xcframework + -headers build/generated/swift \ + -output build/ios-release/ios/ZenUniffi.xcframework # Copy Swift bindings - cp -r bindings/uniffi/build/generated/swift/* ios-release/ios/swift/ + cp -r build/generated/swift/* build/ios-release/ios/swift/ - name: Upload iOS release bundle uses: actions/upload-artifact@v4 with: name: ios-release - path: ios-release + path: ${{ env.UNIFFI_DIRECTORY }}/build/ios-release if-no-files-found: error - build-android: + release-ios: + name: Release iOS to zen-ios + runs-on: macos-latest + needs: [ create-xcframework ] if: "!contains(github.event.head_commit.message, 'skip ci')" + + steps: + - name: Checkout zen-ios + uses: actions/checkout@v3 + with: + repository: gorules/zen-ios + persist-credentials: false + token: ${{ secrets.PAT }} + + - name: Download iOS artifacts + uses: actions/download-artifact@v4 + with: + name: ios-release + path: artifacts + + - name: Move artifacts + run: | + # Remove old XCFramework and Swift files if they exist + rm -rf ZenUniffi.xcframework + rm -rf swift + + # Move new artifacts to repository root + mv artifacts/ios/ZenUniffi.xcframework ./ + mv artifacts/ios/swift ./ + + # Clean up + rm -rf artifacts + + - name: Set branch name + run: | + echo "BRANCH_NAME=chore/${{ github.run_id }}-${{ github.run_attempt }}" >> $GITHUB_ENV + + - name: Commit + run: | + BRANCH_NAME="${{ env.BRANCH_NAME }}" + git checkout -b $BRANCH_NAME + + # Setup the committers identity + git config user.email "bot@gorules.io" + git config user.name "Bot GoRules" + git config http.postBuffer 524288000 + git config http.lowSpeedTime 600 + + # Commit the changes + git add . + git commit -m "chore: update iOS bindings" + + - name: Push changes + uses: ad-m/github-push-action@master + with: + repository: gorules/zen-ios + github_token: ${{ secrets.PAT }} + branch: ${{ env.BRANCH_NAME }} + + - name: Create PR + run: | + BRANCH_NAME="${{ env.BRANCH_NAME }}" + + # Store the PAT in a file that can be accessed by the GitHub CLI + echo "${{ secrets.PAT }}" > token.txt + + # Authorize GitHub CLI and create a pull request + echo "Authorizing for PR" + gh auth login --with-token < token.txt + gh pr create \ + --body "" \ + --title "chore: update iOS bindings" \ + --head "$BRANCH_NAME" \ + --base "master" + + build-android: + if: false + # if: "!contains(github.event.head_commit.message, 'skip ci')" runs-on: ubuntu-latest env: OUTPUT_NAME: zen_uniffi @@ -274,6 +356,7 @@ jobs: # rustup target add x86_64-linux-android - name: Build for Android + working-directory: ${{ env.UNIFFI_DIRECTORY }} env: ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | @@ -281,19 +364,22 @@ jobs: cargo ndk -t arm64-v8a \ --platform 33 \ -o ./android-libs \ - build -p zen-uniffi --release + build --lib --release - name: Upload Android artifacts uses: actions/upload-artifact@v4 with: name: android-libs - path: android-libs/ + path: ${{ env.UNIFFI_DIRECTORY }}/android-libs/ if-no-files-found: error - prepare-android-bindings: + create-android-bindings: runs-on: ubuntu-latest needs: [ build-android ] if: "!contains(github.event.head_commit.message, 'skip ci')" + defaults: + run: + working-directory: ${{ env.UNIFFI_DIRECTORY }} steps: - uses: actions/checkout@v3 @@ -302,7 +388,7 @@ jobs: uses: actions/download-artifact@v4 with: name: android-libs - path: android-libs + path: ${{ env.UNIFFI_DIRECTORY }}/android-libs - name: Setup Rust Toolchain uses: dtolnay/rust-toolchain@stable @@ -312,33 +398,45 @@ jobs: - name: Build Linux library for metadata extraction run: | echo "Building Linux x86_64 library to extract UniFFI metadata..." - cargo build -p zen-uniffi --target x86_64-unknown-linux-gnu --release + cargo build --lib --target x86_64-unknown-linux-gnu --release - - name: Generate Kotlin bindings (using Linux library for metadata) + - name: Generate Kotlin bindings run: | - cargo run --bin uniffi-bindgen -- generate \ - --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ - --language kotlin \ - --config bindings/uniffi/uniffi-android.toml \ - --out-dir build/generated/kotlin-android + mkdir -p build/generated/kotlin-android + + # Generate Kotlin bindings (with Android config if it exists) + if [ -f "uniffi-android.toml" ]; then + cargo run --bin uniffi-bindgen -- generate \ + --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ + --language kotlin \ + --config uniffi-android.toml \ + --out-dir build/generated/kotlin-android + else + cargo run --bin uniffi-bindgen -- generate \ + --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ + --language kotlin \ + --out-dir build/generated/kotlin-android + fi - name: Create Android package structure run: | - mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} - mkdir -p android-package/kotlin + mkdir -p build/android-package/libs + mkdir -p build/android-package/kotlin - # Copy .so files - cp android-libs/arm64-v8a/libzen_uniffi.so android-package/libs/arm64-v8a/ - # cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ - # cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ - # cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ + # Copy .so files (cargo ndk creates arch-specific subdirectories) + cp -r android-libs/* build/android-package/libs/ - # Copy bindings - cp -r build/generated/kotlin-android/* android-package/kotlin/ + # Copy Kotlin bindings + cp -r build/generated/kotlin-android/* build/android-package/kotlin/ + + - name: List package contents + run: | + echo "Android package structure:" + find build/android-package -type f - name: Upload Android package uses: actions/upload-artifact@v4 with: name: android-package - path: android-package - if-no-files-found: error + path: ${{ env.UNIFFI_DIRECTORY }}/build/android-package + if-no-files-found: error \ No newline at end of file From 77bc7d3b4a125e83ffc6b3544e51a0804261ed3f Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Wed, 29 Oct 2025 20:45:00 +0100 Subject: [PATCH 08/38] fix: ios release --- .github/workflows/uniffi.yaml | 171 ++++++++++++++++++---------------- 1 file changed, 93 insertions(+), 78 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index a68ec48b..1c18b993 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -137,7 +137,7 @@ jobs: run: ./gradlew publishAllPublicationsToCentralPortal build-ios: - # if: false +# if: false if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi @@ -169,27 +169,23 @@ jobs: target: ${{ matrix.settings.target }} - name: Build iOS - working-directory: ${{ env.UNIFFI_DIRECTORY }} run: | if [ "${{ matrix.settings.target }}" = "aarch64-apple-ios-sim" ]; then export BINDGEN_EXTRA_CLANG_ARGS="--target=aarch64-apple-ios --sysroot=$(xcrun --sdk iphonesimulator --show-sdk-path)" fi - cargo build --lib --target ${{ matrix.settings.target }} --release + cargo build -p zen-uniffi --target ${{ matrix.settings.target }} --release - name: Upload artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.settings.lib_dir }} - path: ${{ env.UNIFFI_DIRECTORY }}/target/${{ matrix.settings.target }}/release/${{ format(matrix.settings.output, env.OUTPUT_NAME) }} + path: target/${{ matrix.settings.target }}/release/${{ format(matrix.settings.output, env.OUTPUT_NAME) }} if-no-files-found: error create-xcframework: runs-on: macos-latest needs: [ build-ios ] if: "!contains(github.event.head_commit.message, 'skip ci')" - defaults: - run: - working-directory: ${{ env.UNIFFI_DIRECTORY }} steps: - uses: actions/checkout@v3 @@ -197,7 +193,7 @@ jobs: - name: Download iOS artifacts uses: actions/download-artifact@v4 with: - path: ${{ env.UNIFFI_DIRECTORY }}/target-ios + path: target-ios - name: Reorganize artifacts to match target structure run: | @@ -214,11 +210,10 @@ jobs: - name: Generate Swift bindings run: | - mkdir -p build/generated/swift cargo run --bin uniffi-bindgen -- generate \ --library target/aarch64-apple-ios/release/libzen_uniffi.a \ --language swift \ - --out-dir build/generated/swift + --out-dir swift-bindings - name: Create fat simulator library run: | @@ -230,28 +225,30 @@ jobs: - name: Create XCFramework run: | - mkdir -p build/ios-release/ios/swift - # Create XCFramework with device + universal simulator xcodebuild -create-xcframework \ -library target/aarch64-apple-ios/release/libzen_uniffi.a \ - -headers build/generated/swift \ + -headers swift-bindings \ -library target/universal-sim/release/libzen_uniffi.a \ - -headers build/generated/swift \ - -output build/ios-release/ios/ZenUniffi.xcframework - - # Copy Swift bindings - cp -r build/generated/swift/* build/ios-release/ios/swift/ + -headers swift-bindings \ + -output ZenUniffi.xcframework - - name: Upload iOS release bundle + - name: Upload XCFramework uses: actions/upload-artifact@v4 with: - name: ios-release - path: ${{ env.UNIFFI_DIRECTORY }}/build/ios-release + name: xcframework + path: ZenUniffi.xcframework + if-no-files-found: error + + - name: Upload Swift bindings + uses: actions/upload-artifact@v4 + with: + name: swift-bindings + path: swift-bindings if-no-files-found: error release-ios: - name: Release iOS to zen-ios + name: Release iOS runs-on: macos-latest needs: [ create-xcframework ] if: "!contains(github.event.head_commit.message, 'skip ci')" @@ -264,30 +261,62 @@ jobs: persist-credentials: false token: ${{ secrets.PAT }} - - name: Download iOS artifacts + - name: Download XCFramework uses: actions/download-artifact@v4 with: - name: ios-release - path: artifacts + name: xcframework + path: xcframework - - name: Move artifacts + - name: Download Swift bindings + uses: actions/download-artifact@v4 + with: + name: swift-bindings + path: swift-bindings + + - name: Move artifacts to repo run: | - # Remove old XCFramework and Swift files if they exist - rm -rf ZenUniffi.xcframework - rm -rf swift - - # Move new artifacts to repository root - mv artifacts/ios/ZenUniffi.xcframework ./ - mv artifacts/ios/swift ./ - - # Clean up - rm -rf artifacts + # Move XCFramework + mv xcframework/ZenUniffi.xcframework ./ + + # Move Swift bindings to Sources + mv swift-bindings Sources + + - name: Create Package.swift + run: | + cat > Package.swift << 'EOF' + // swift-tools-version:5.9 + import PackageDescription + + let package = Package( + name: "ZenUniffi", + platforms: [ + .iOS(.v16) + ], + products: [ + .library( + name: "ZenUniffi", + targets: ["ZenUniffiWrapper"] + ) + ], + targets: [ + .target( + name: "ZenUniffiWrapper", + dependencies: ["ZenUniffiBinary"], + path: "Sources" + ), + .binaryTarget( + name: "ZenUniffiBinary", + path: "ZenUniffi.xcframework" + ) + ] + ) + EOF - name: Set branch name run: | echo "BRANCH_NAME=chore/${{ github.run_id }}-${{ github.run_attempt }}" >> $GITHUB_ENV - - name: Commit + - name: Commit changes run: | BRANCH_NAME="${{ env.BRANCH_NAME }}" git checkout -b $BRANCH_NAME @@ -299,8 +328,10 @@ jobs: git config http.lowSpeedTime 600 # Commit the changes - git add . - git commit -m "chore: update iOS bindings" + git add ZenUniffi.xcframework + git add Package.swift + git add Sources/ + git commit -m "chore: update XCFramework" - name: Push changes uses: ad-m/github-push-action@master @@ -321,13 +352,13 @@ jobs: gh auth login --with-token < token.txt gh pr create \ --body "" \ - --title "chore: update iOS bindings" \ + --title "chore: update XCFramework" \ --head "$BRANCH_NAME" \ --base "master" build-android: if: false - # if: "!contains(github.event.head_commit.message, 'skip ci')" +# if: "!contains(github.event.head_commit.message, 'skip ci')" runs-on: ubuntu-latest env: OUTPUT_NAME: zen_uniffi @@ -356,7 +387,6 @@ jobs: # rustup target add x86_64-linux-android - name: Build for Android - working-directory: ${{ env.UNIFFI_DIRECTORY }} env: ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | @@ -364,22 +394,19 @@ jobs: cargo ndk -t arm64-v8a \ --platform 33 \ -o ./android-libs \ - build --lib --release + build -p zen-uniffi --release - name: Upload Android artifacts uses: actions/upload-artifact@v4 with: name: android-libs - path: ${{ env.UNIFFI_DIRECTORY }}/android-libs/ + path: android-libs/ if-no-files-found: error - create-android-bindings: + prepare-android-bindings: runs-on: ubuntu-latest needs: [ build-android ] if: "!contains(github.event.head_commit.message, 'skip ci')" - defaults: - run: - working-directory: ${{ env.UNIFFI_DIRECTORY }} steps: - uses: actions/checkout@v3 @@ -388,7 +415,7 @@ jobs: uses: actions/download-artifact@v4 with: name: android-libs - path: ${{ env.UNIFFI_DIRECTORY }}/android-libs + path: android-libs - name: Setup Rust Toolchain uses: dtolnay/rust-toolchain@stable @@ -398,45 +425,33 @@ jobs: - name: Build Linux library for metadata extraction run: | echo "Building Linux x86_64 library to extract UniFFI metadata..." - cargo build --lib --target x86_64-unknown-linux-gnu --release + cargo build -p zen-uniffi --target x86_64-unknown-linux-gnu --release - - name: Generate Kotlin bindings + - name: Generate Kotlin bindings (using Linux library for metadata) run: | - mkdir -p build/generated/kotlin-android - - # Generate Kotlin bindings (with Android config if it exists) - if [ -f "uniffi-android.toml" ]; then - cargo run --bin uniffi-bindgen -- generate \ - --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ - --language kotlin \ - --config uniffi-android.toml \ - --out-dir build/generated/kotlin-android - else - cargo run --bin uniffi-bindgen -- generate \ - --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ - --language kotlin \ - --out-dir build/generated/kotlin-android - fi + cargo run --bin uniffi-bindgen -- generate \ + --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ + --language kotlin \ + --config bindings/uniffi/uniffi-android.toml \ + --out-dir build/generated/kotlin-android - name: Create Android package structure run: | - mkdir -p build/android-package/libs - mkdir -p build/android-package/kotlin - - # Copy .so files (cargo ndk creates arch-specific subdirectories) - cp -r android-libs/* build/android-package/libs/ + mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} + mkdir -p android-package/kotlin - # Copy Kotlin bindings - cp -r build/generated/kotlin-android/* build/android-package/kotlin/ + # Copy .so files + cp android-libs/arm64-v8a/libzen_uniffi.so android-package/libs/arm64-v8a/ + # cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ + # cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ + # cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ - - name: List package contents - run: | - echo "Android package structure:" - find build/android-package -type f + # Copy bindings + cp -r build/generated/kotlin-android/* android-package/kotlin/ - name: Upload Android package uses: actions/upload-artifact@v4 with: name: android-package - path: ${{ env.UNIFFI_DIRECTORY }}/build/android-package + path: android-package if-no-files-found: error \ No newline at end of file From e69857023fb6fd49583d458ab61d8befd576d8c7 Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Wed, 29 Oct 2025 21:12:08 +0100 Subject: [PATCH 09/38] fix: paths --- .github/workflows/uniffi.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 1c18b993..54cdad02 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -265,7 +265,7 @@ jobs: uses: actions/download-artifact@v4 with: name: xcframework - path: xcframework + path: . - name: Download Swift bindings uses: actions/download-artifact@v4 @@ -275,10 +275,8 @@ jobs: - name: Move artifacts to repo run: | - # Move XCFramework - mv xcframework/ZenUniffi.xcframework ./ - - # Move Swift bindings to Sources + # Remove existing Sources if it exists, then move swift-bindings to Sources + rm -rf Sources mv swift-bindings Sources - name: Create Package.swift From 5323b92dbb46a16c2658d9d927a2999fa2eade4c Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Wed, 29 Oct 2025 21:25:46 +0100 Subject: [PATCH 10/38] fix: adding files and folders to git --- .github/workflows/uniffi.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 54cdad02..3dd7f76b 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -326,9 +326,12 @@ jobs: git config http.lowSpeedTime 600 # Commit the changes - git add ZenUniffi.xcframework - git add Package.swift - git add Sources/ + # Show what we have + ls -la + + # Commit the changes - add all new/modified files + git add -A + git status git commit -m "chore: update XCFramework" - name: Push changes From 711b15bea8739f408bee45a182c06bd1cc30e5cd Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Wed, 29 Oct 2025 21:44:19 +0100 Subject: [PATCH 11/38] fix: folder --- .github/workflows/uniffi.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 3dd7f76b..d23ad5ed 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -237,7 +237,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: xcframework - path: ZenUniffi.xcframework + path: ZenUniffi.xcframework/ if-no-files-found: error - name: Upload Swift bindings @@ -265,7 +265,7 @@ jobs: uses: actions/download-artifact@v4 with: name: xcframework - path: . + path: ZenUniffi.xcframework - name: Download Swift bindings uses: actions/download-artifact@v4 @@ -325,7 +325,6 @@ jobs: git config http.postBuffer 524288000 git config http.lowSpeedTime 600 - # Commit the changes # Show what we have ls -la From 46520ae6e396577d8474059ee6c9a2688f16853c Mon Sep 17 00:00:00 2001 From: Ivan Miletic Date: Thu, 30 Oct 2025 13:48:52 +0100 Subject: [PATCH 12/38] fix: ios bindings --- .github/workflows/uniffi.yaml | 69 ++++++++++++++++------------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index d23ad5ed..65b72772 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -137,7 +137,7 @@ jobs: run: ./gradlew publishAllPublicationsToCentralPortal build-ios: -# if: false + # if: false if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi @@ -213,7 +213,31 @@ jobs: cargo run --bin uniffi-bindgen -- generate \ --library target/aarch64-apple-ios/release/libzen_uniffi.a \ --language swift \ - --out-dir swift-bindings + --out-dir swift-bindings-temp + + - name: Organize Swift bindings structure + run: | + # Create the proper directory structure + mkdir -p swift-bindings/zen_uniffiFFI + mkdir -p swift-bindings/ZenUniffi + + # Move and rename the header file to zen_uniffiFFI.h in the zen_uniffiFFI folder + if [ -f swift-bindings-temp/zen_uniffiFFI.h ]; then + mv swift-bindings-temp/zen_uniffiFFI.h swift-bindings/zen_uniffiFFI/ + fi + + # Move and rename the modulemap to module.modulemap in the zen_uniffiFFI folder + if [ -f swift-bindings-temp/zen_uniffiFFI.modulemap ]; then + mv swift-bindings-temp/zen_uniffiFFI.modulemap swift-bindings/zen_uniffiFFI/module.modulemap + fi + + # Move the Swift file to zen_uniffi.swift in the ZenUniffi folder + if [ -f swift-bindings-temp/zen_uniffi.swift ]; then + mv swift-bindings-temp/zen_uniffi.swift swift-bindings/ZenUniffi/ + fi + + # Clean up temp directory + rm -rf swift-bindings-temp - name: Create fat simulator library run: | @@ -228,9 +252,9 @@ jobs: # Create XCFramework with device + universal simulator xcodebuild -create-xcframework \ -library target/aarch64-apple-ios/release/libzen_uniffi.a \ - -headers swift-bindings \ + -headers swift-bindings/zen_uniffiFFI \ -library target/universal-sim/release/libzen_uniffi.a \ - -headers swift-bindings \ + -headers swift-bindings/zen_uniffiFFI \ -output ZenUniffi.xcframework - name: Upload XCFramework @@ -275,41 +299,12 @@ jobs: - name: Move artifacts to repo run: | - # Remove existing Sources if it exists, then move swift-bindings to Sources + # Remove existing Sources if it exists rm -rf Sources + + # Move swift-bindings to Sources (already has the proper structure) mv swift-bindings Sources - - name: Create Package.swift - run: | - cat > Package.swift << 'EOF' - // swift-tools-version:5.9 - import PackageDescription - - let package = Package( - name: "ZenUniffi", - platforms: [ - .iOS(.v16) - ], - products: [ - .library( - name: "ZenUniffi", - targets: ["ZenUniffiWrapper"] - ) - ], - targets: [ - .target( - name: "ZenUniffiWrapper", - dependencies: ["ZenUniffiBinary"], - path: "Sources" - ), - .binaryTarget( - name: "ZenUniffiBinary", - path: "ZenUniffi.xcframework" - ) - ] - ) - EOF - - name: Set branch name run: | echo "BRANCH_NAME=chore/${{ github.run_id }}-${{ github.run_attempt }}" >> $GITHUB_ENV @@ -358,7 +353,7 @@ jobs: build-android: if: false -# if: "!contains(github.event.head_commit.message, 'skip ci')" + # if: "!contains(github.event.head_commit.message, 'skip ci')" runs-on: ubuntu-latest env: OUTPUT_NAME: zen_uniffi From 49ca17e9e2a8f62e35519fa1bb39ae9514dddd32 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Wed, 5 Nov 2025 12:24:27 +0100 Subject: [PATCH 13/38] test android --- .github/workflows/uniffi.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 65b72772..2d78c0e7 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -19,6 +19,7 @@ on: - 'core/**' - 'test-data/**' - '.github/workflows/uniffi.yaml' + workflow_dispatch: jobs: build: @@ -137,8 +138,8 @@ jobs: run: ./gradlew publishAllPublicationsToCentralPortal build-ios: - # if: false - if: "!contains(github.event.head_commit.message, 'skip ci')" + if: false + #if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi IPHONEOS_DEPLOYMENT_TARGET: '16.0' @@ -352,8 +353,7 @@ jobs: --base "master" build-android: - if: false - # if: "!contains(github.event.head_commit.message, 'skip ci')" + if: "!contains(github.event.head_commit.message, 'skip ci')" runs-on: ubuntu-latest env: OUTPUT_NAME: zen_uniffi From 942c9d5b37d590bfcf2c1db74f0de2d7003ff8dd Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Wed, 5 Nov 2025 15:34:27 +0100 Subject: [PATCH 14/38] test android --- .github/workflows/uniffi.yaml | 76 +++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 2d78c0e7..4fd11dbe 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -23,7 +23,7 @@ on: jobs: build: - if: false #"!contains(github.event.head_commit.message, 'skip ci')" + if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi @@ -31,26 +31,26 @@ jobs: fail-fast: true matrix: settings: - - host: windows-latest - target: 'x86_64-pc-windows-msvc' - output: '{0}.dll' - lib_dir: 'win32-x86-64' +# - host: windows-latest +# target: 'x86_64-pc-windows-msvc' +# output: '{0}.dll' +# lib_dir: 'win32-x86-64' - host: macos-latest target: 'x86_64-apple-darwin' output: 'lib{0}.dylib' lib_dir: 'darwin-x86-64' - - host: macos-latest - target: 'aarch64-apple-darwin' - output: 'lib{0}.dylib' - lib_dir: 'darwin-aarch64' - - host: ubuntu-latest - target: 'x86_64-unknown-linux-gnu' - output: 'lib{0}.so' - lib_dir: 'linux-x86-64' - - host: ubuntu-latest - target: 'aarch64-unknown-linux-gnu' - output: 'lib{0}.so' - lib_dir: 'linux-aarch64' +# - host: macos-latest +# target: 'aarch64-apple-darwin' +# output: 'lib{0}.dylib' +# lib_dir: 'darwin-aarch64' +# - host: ubuntu-latest +# target: 'x86_64-unknown-linux-gnu' +# output: 'lib{0}.so' +# lib_dir: 'linux-x86-64' +# - host: ubuntu-latest +# target: 'aarch64-unknown-linux-gnu' +# output: 'lib{0}.so' +# lib_dir: 'linux-aarch64' name: UniFFI - ${{ matrix.settings.target }} runs-on: ${{ matrix.settings.host }} @@ -400,7 +400,7 @@ jobs: prepare-android-bindings: runs-on: ubuntu-latest - needs: [ build-android ] + needs: [ build, build-android ] if: "!contains(github.event.head_commit.message, 'skip ci')" steps: @@ -412,23 +412,39 @@ jobs: name: android-libs path: android-libs - - name: Setup Rust Toolchain - uses: dtolnay/rust-toolchain@stable + - name: Download all artifacts + uses: actions/download-artifact@v4 with: - target: x86_64-unknown-linux-gnu + path: build/generated/resources - - name: Build Linux library for metadata extraction - run: | - echo "Building Linux x86_64 library to extract UniFFI metadata..." - cargo build -p zen-uniffi --target x86_64-unknown-linux-gnu --release + - name: Move artifacts + run: mv ../../build ./ - - name: Generate Kotlin bindings (using Linux library for metadata) + - name: Generate Kotlin sources run: | cargo run --bin uniffi-bindgen -- generate \ - --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ - --language kotlin \ - --config bindings/uniffi/uniffi-android.toml \ - --out-dir build/generated/kotlin-android + --library build/generated/resources/darwin-x86-64/libzen_uniffi.dylib \ + --language kotlin \ + --config bindings/uniffi/uniffi-android.toml \ + --out-dir build/generated/kotlin-android + + - name: Setup Rust Toolchain + uses: dtolnay/rust-toolchain@stable + with: + target: x86_64-unknown-linux-gnu + +# - name: Build Linux library for metadata extraction +# run: | +# echo "Building Linux x86_64 library to extract UniFFI metadata..." +# cargo build -p zen-uniffi --target x86_64-unknown-linux-gnu --release + +# - name: Generate Kotlin bindings (using Linux library for metadata) +# run: | +# cargo run --bin uniffi-bindgen -- generate \ +# --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ +# --language kotlin \ +# --config bindings/uniffi/uniffi-android.toml \ +# --out-dir build/generated/kotlin-android - name: Create Android package structure run: | From 98b6dfa5a4ca9052d639d76215ccd245107592b9 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Wed, 5 Nov 2025 16:30:10 +0100 Subject: [PATCH 15/38] test android --- .github/workflows/uniffi.yaml | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 4fd11dbe..745dfbb0 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -403,6 +403,10 @@ jobs: needs: [ build, build-android ] if: "!contains(github.event.head_commit.message, 'skip ci')" + defaults: + run: + working-directory: ${{ env.UNIFFI_DIRECTORY }} + steps: - uses: actions/checkout@v3 @@ -410,28 +414,28 @@ jobs: uses: actions/download-artifact@v4 with: name: android-libs - path: android-libs + path: ${{ env.UNIFFI_DIRECTORY }}/android-libs - name: Download all artifacts uses: actions/download-artifact@v4 with: - path: build/generated/resources + path: ${{ env.UNIFFI_DIRECTORY }}/build/generated/resources - - name: Move artifacts - run: mv ../../build ./ + - name: Print directory tree + run: tree build - name: Generate Kotlin sources run: | cargo run --bin uniffi-bindgen -- generate \ --library build/generated/resources/darwin-x86-64/libzen_uniffi.dylib \ --language kotlin \ - --config bindings/uniffi/uniffi-android.toml \ + --config uniffi-android.toml \ --out-dir build/generated/kotlin-android - - name: Setup Rust Toolchain - uses: dtolnay/rust-toolchain@stable - with: - target: x86_64-unknown-linux-gnu +# - name: Setup Rust Toolchain +# uses: dtolnay/rust-toolchain@stable +# with: +# target: x86_64-unknown-linux-gnu # - name: Build Linux library for metadata extraction # run: | @@ -460,9 +464,12 @@ jobs: # Copy bindings cp -r build/generated/kotlin-android/* android-package/kotlin/ + - name: Print directory tree + run: tree build + - name: Upload Android package uses: actions/upload-artifact@v4 with: name: android-package - path: android-package + path: ${{ env.UNIFFI_DIRECTORY }}/android-package if-no-files-found: error \ No newline at end of file From fc111cc86e05cf8347bb69149149b7e0c2dbecd0 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 6 Nov 2025 19:21:09 +0100 Subject: [PATCH 16/38] test android --- bindings/uniffi/uniffi-android.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/uniffi/uniffi-android.toml b/bindings/uniffi/uniffi-android.toml index dad95a5b..90e9110f 100644 --- a/bindings/uniffi/uniffi-android.toml +++ b/bindings/uniffi/uniffi-android.toml @@ -5,5 +5,5 @@ generate_immutable_records = true android = true [bindings.kotlin.custom_types.JsonBuffer] -into_custom = "JsonBuffer({})" +into_custom = "io.gorules.zen_engine.kotlin.JsonBuffer({})" from_custom = "{}.value" From e2b5a2d54f18c38dc2efa0ebd998c8a919797862 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 6 Nov 2025 21:11:35 +0100 Subject: [PATCH 17/38] test android --- bindings/uniffi/uniffi-android.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bindings/uniffi/uniffi-android.toml b/bindings/uniffi/uniffi-android.toml index 90e9110f..4afb32b5 100644 --- a/bindings/uniffi/uniffi-android.toml +++ b/bindings/uniffi/uniffi-android.toml @@ -5,5 +5,6 @@ generate_immutable_records = true android = true [bindings.kotlin.custom_types.JsonBuffer] -into_custom = "io.gorules.zen_engine.kotlin.JsonBuffer({})" +imports = ["io.gorules.zen_engine.kotlin.JsonBuffer"] +into_custom = "JsonBuffer({})" from_custom = "{}.value" From 438ee778c35824ed42406f05c35ad969589cfc2b Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Fri, 7 Nov 2025 12:02:25 +0100 Subject: [PATCH 18/38] test android --- .github/workflows/uniffi.yaml | 4 ++-- bindings/uniffi/Cargo.toml | 5 ++++- core/engine/Cargo.toml | 7 +++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 745dfbb0..e44156b4 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -138,8 +138,8 @@ jobs: run: ./gradlew publishAllPublicationsToCentralPortal build-ios: - if: false - #if: "!contains(github.event.head_commit.message, 'skip ci')" +# if: false + if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi IPHONEOS_DEPLOYMENT_TARGET: '16.0' diff --git a/bindings/uniffi/Cargo.toml b/bindings/uniffi/Cargo.toml index cc4078bf..4d2addea 100644 --- a/bindings/uniffi/Cargo.toml +++ b/bindings/uniffi/Cargo.toml @@ -22,4 +22,7 @@ async-trait = "0.1" tokio = "1.46" [build-dependencies] -uniffi = { version = "0.29", features = ["build"] } \ No newline at end of file +uniffi = { version = "0.29", features = ["build"] } + +[features] +bindgen = ["zen-engine/bindgen"] \ No newline at end of file diff --git a/core/engine/Cargo.toml b/core/engine/Cargo.toml index c251573d..20cb1dd8 100644 --- a/core/engine/Cargo.toml +++ b/core/engine/Cargo.toml @@ -25,7 +25,7 @@ fixedbitset = "0.5" tokio = { workspace = true, features = ["sync", "time"] } http = { version = "1.3" } reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false } -rquickjs = { version = "0.9", features = ["macro", "loader", "rust-alloc", "futures", "either", "properties", "bindgen"] } +rquickjs = { version = "0.9", features = ["macro", "loader", "rust-alloc", "futures", "either", "properties"] } rquickjs-serde = { version = "0.1" } jsonschema = "0.29" zen-types = { path = "../types", version = "0.51.0" } @@ -45,4 +45,7 @@ insta = { version = "1.43", features = ["yaml", "redactions"] } [[bench]] harness = false -name = "engine" \ No newline at end of file +name = "engine" + +[features] +bindgen = ["rquickjs/bindgen"] \ No newline at end of file From 9b0d3449ba930cdbd18197ec4bd34a9b44858694 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Fri, 7 Nov 2025 12:08:52 +0100 Subject: [PATCH 19/38] features bindgen --- .github/workflows/uniffi.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index e44156b4..785401d6 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -174,7 +174,7 @@ jobs: if [ "${{ matrix.settings.target }}" = "aarch64-apple-ios-sim" ]; then export BINDGEN_EXTRA_CLANG_ARGS="--target=aarch64-apple-ios --sysroot=$(xcrun --sdk iphonesimulator --show-sdk-path)" fi - cargo build -p zen-uniffi --target ${{ matrix.settings.target }} --release + cargo build -p zen-uniffi --target ${{ matrix.settings.target }} --release --features bindgen - name: Upload artifact uses: actions/upload-artifact@v4 @@ -389,7 +389,7 @@ jobs: cargo ndk -t arm64-v8a \ --platform 33 \ -o ./android-libs \ - build -p zen-uniffi --release + build -p zen-uniffi --release -features bindgen - name: Upload Android artifacts uses: actions/upload-artifact@v4 From e3844e12f9e913203b008da34ae7c1d487079b92 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Fri, 7 Nov 2025 13:04:20 +0100 Subject: [PATCH 20/38] features bindgen --- .github/workflows/uniffi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 785401d6..aebdce50 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -389,7 +389,7 @@ jobs: cargo ndk -t arm64-v8a \ --platform 33 \ -o ./android-libs \ - build -p zen-uniffi --release -features bindgen + build -p zen-uniffi --release --features bindgen - name: Upload Android artifacts uses: actions/upload-artifact@v4 From 7ed74a1c7afd9836e872b7801b78c17a064b7a28 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 10 Nov 2025 12:09:57 +0100 Subject: [PATCH 21/38] aar package --- .github/workflows/uniffi.yaml | 140 +++++++++++++----- .../uniffi/gradle.android/AndroidManifest.xml | 3 + .../uniffi/gradle.android/build.gradle.kts | 21 +++ .../uniffi/gradle.android/gradle.properties | 4 + .../uniffi/gradle.android/settings.gradle.kts | 2 + .../zen-engine-android-build.gradle.kts | 46 ++++++ 6 files changed, 180 insertions(+), 36 deletions(-) create mode 100644 bindings/uniffi/gradle.android/AndroidManifest.xml create mode 100644 bindings/uniffi/gradle.android/build.gradle.kts create mode 100644 bindings/uniffi/gradle.android/gradle.properties create mode 100644 bindings/uniffi/gradle.android/settings.gradle.kts create mode 100644 bindings/uniffi/gradle.android/zen-engine-android-build.gradle.kts diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index aebdce50..4e5672b6 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -410,11 +410,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Download Android artifacts - uses: actions/download-artifact@v4 - with: - name: android-libs - path: ${{ env.UNIFFI_DIRECTORY }}/android-libs +# - name: Download Android artifacts +# uses: actions/download-artifact@v4 +# with: +# name: android-libs +# path: ${{ env.UNIFFI_DIRECTORY }}/android-libs - name: Download all artifacts uses: actions/download-artifact@v4 @@ -432,44 +432,112 @@ jobs: --config uniffi-android.toml \ --out-dir build/generated/kotlin-android -# - name: Setup Rust Toolchain -# uses: dtolnay/rust-toolchain@stable -# with: -# target: x86_64-unknown-linux-gnu - -# - name: Build Linux library for metadata extraction -# run: | -# echo "Building Linux x86_64 library to extract UniFFI metadata..." -# cargo build -p zen-uniffi --target x86_64-unknown-linux-gnu --release - -# - name: Generate Kotlin bindings (using Linux library for metadata) -# run: | -# cargo run --bin uniffi-bindgen -- generate \ -# --library target/x86_64-unknown-linux-gnu/release/libzen_uniffi.so \ -# --language kotlin \ -# --config bindings/uniffi/uniffi-android.toml \ -# --out-dir build/generated/kotlin-android - - - name: Create Android package structure + - name: Upload Kotlin bindings + uses: actions/upload-artifact@v4 + with: + name: kotlin-android-bindings + path: ${{ env.UNIFFI_DIRECTORY }}/build/generated/kotlin-android + if-no-files-found: error + + - name: Print directory tree + run: tree build + + build-android-aar: + runs-on: ubuntu-latest + needs: [ prepare-android-bindings ] + if: "!contains(github.event.head_commit.message, 'skip ci')" + + env: + ANDROID_BUILD_DIR: android-build + + steps: + - uses: actions/checkout@v3 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + id: setup-android + + - name: Download Kotlin bindings + uses: actions/download-artifact@v4 + with: + name: kotlin-android-bindings + path: kotlin-bindings + + - name: Download Android native libraries + uses: actions/download-artifact@v4 + with: + name: android-libs + path: android-libs + + - name: Create AAR structure + run: | + rm -rf "${{ env.ANDROID_BUILD_DIR }}" + mkdir -p "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/src/main/java" + mkdir -p "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/src/main/jniLibs" + mkdir -p "${{ env.ANDROID_BUILD_DIR }}/gradle/wrapper" + + - name: Copy native libraries + run: | + cp -r android-libs/* "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/src/main/jniLibs/" + + - name: Copy Kotlin bindings + run: | + cp -r kotlin-bindings/* "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/src/main/java/" + + - name: Copy Gradle configuration files run: | - mkdir -p android-package/libs/{arm64-v8a,armeabi-v7a,x86,x86_64} - mkdir -p android-package/kotlin + cp gradlew "${{ env.ANDROID_BUILD_DIR }}" + cp -r gradle "${{ env.ANDROID_BUILD_DIR }}" + cp gradle.properties "${{ env.ANDROID_BUILD_DIR }}" - # Copy .so files - cp android-libs/arm64-v8a/libzen_uniffi.so android-package/libs/arm64-v8a/ - # cp android-libs/armeabi-v7a/libzen_uniffi.so android-package/libs/armeabi-v7a/ - # cp android-libs/x86/libzen_uniffi.so android-package/libs/x86/ - # cp android-libs/x86_64/libzen_uniffi.so android-package/libs/x86_64/ + - name: Copy Android Gradle files from repo + run: | + cp gradle.android/build.gradle.kts "${{ env.ANDROID_BUILD_DIR }}/" + cp gradle.android/settings.gradle.kts "${{ env.ANDROID_BUILD_DIR }}/" + cp gradle.android/zen-engine-android-build.gradle.kts "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build.gradle.kts" + cp gradle.android/AndroidManifest.xml "${{ env.ANDROID_BUILD_DIR }}" - # Copy bindings - cp -r build/generated/kotlin-android/* android-package/kotlin/ + - name: Create gradle.properties + run: | + cat >> "${{ env.ANDROID_BUILD_DIR }}/gradle.properties" << 'EOF' + android.useAndroidX=true + org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 + org.gradle.parallel=true + org.gradle.caching=true + EOF - name: Print directory tree run: tree build - - name: Upload Android package + - name: Build AAR with Gradle + env: + ANDROID_HOME: ${{ env.ANDROID_SDK_ROOT }} + ANDROID_NDK_HOME: ${{ env.ANDROID_NDK_ROOT }} + run: | + cd "${{ env.ANDROID_BUILD_DIR }}" + chmod +x gradlew + ./gradlew :zen-engine-android:assembleRelease --no-daemon --stacktrace + + - name: Verify AAR file + run: | + AAR_FILE="${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build/outputs/aar/zen-engine-android-release.aar" + if [ -f "$AAR_FILE" ]; then + ls -lh "$AAR_FILE" + unzip -l "$AAR_FILE" | grep -E "\.so|\.class|AndroidManifest" | head -20 + else + echo "AAR file not found!" + exit 1 + fi + + - name: Upload AAR artifact uses: actions/upload-artifact@v4 with: - name: android-package - path: ${{ env.UNIFFI_DIRECTORY }}/android-package + name: android-aar + path: ${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build/outputs/aar/zen-engine-android-release.aar if-no-files-found: error \ No newline at end of file diff --git a/bindings/uniffi/gradle.android/AndroidManifest.xml b/bindings/uniffi/gradle.android/AndroidManifest.xml new file mode 100644 index 00000000..74b7379f --- /dev/null +++ b/bindings/uniffi/gradle.android/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/bindings/uniffi/gradle.android/build.gradle.kts b/bindings/uniffi/gradle.android/build.gradle.kts new file mode 100644 index 00000000..e3e3a120 --- /dev/null +++ b/bindings/uniffi/gradle.android/build.gradle.kts @@ -0,0 +1,21 @@ +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath("com.android.tools.build:gradle:8.1.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0") + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +tasks.register("clean", Delete::class) { + delete(rootProject.layout.buildDirectory) +} diff --git a/bindings/uniffi/gradle.android/gradle.properties b/bindings/uniffi/gradle.android/gradle.properties new file mode 100644 index 00000000..984b83ad --- /dev/null +++ b/bindings/uniffi/gradle.android/gradle.properties @@ -0,0 +1,4 @@ +android.useAndroidX=true +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +org.gradle.parallel=true +org.gradle.caching=true diff --git a/bindings/uniffi/gradle.android/settings.gradle.kts b/bindings/uniffi/gradle.android/settings.gradle.kts new file mode 100644 index 00000000..8ff1814c --- /dev/null +++ b/bindings/uniffi/gradle.android/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "ZenEngineAndroid" +include(":zen-engine-android") diff --git a/bindings/uniffi/gradle.android/zen-engine-android-build.gradle.kts b/bindings/uniffi/gradle.android/zen-engine-android-build.gradle.kts new file mode 100644 index 00000000..b3ea2f19 --- /dev/null +++ b/bindings/uniffi/gradle.android/zen-engine-android-build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "io.gorules.zen_engine.kotlin_android" + compileSdk = 34 + + defaultConfig { + minSdk = 24 + targetSdk = 34 + version = "0.4.0" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = "11" + } + + sourceSets { + getByName("main") { + jniLibs.srcDirs("src/main/jniLibs") + } + } +} + +dependencies { + implementation("androidx.core:core-ktx:1.12.0") + implementation("net.java.dev.jna:jna:5.14.0@aar") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") +} From a9c18959c3fc8490eca06711ff52464f5f232735 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 10 Nov 2025 12:30:42 +0100 Subject: [PATCH 22/38] aar package --- .github/workflows/uniffi.yaml | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 4e5672b6..2aa66686 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -138,8 +138,8 @@ jobs: run: ./gradlew publishAllPublicationsToCentralPortal build-ios: -# if: false - if: "!contains(github.event.head_commit.message, 'skip ci')" + if: false +# if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi IPHONEOS_DEPLOYMENT_TARGET: '16.0' @@ -446,7 +446,9 @@ jobs: runs-on: ubuntu-latest needs: [ prepare-android-bindings ] if: "!contains(github.event.head_commit.message, 'skip ci')" - + defaults: + run: + working-directory: ${{ env.UNIFFI_DIRECTORY }} env: ANDROID_BUILD_DIR: android-build @@ -457,7 +459,7 @@ jobs: uses: actions/setup-java@v3 with: distribution: 'temurin' - java-version: '11' + java-version: '17' - name: Setup Android SDK uses: android-actions/setup-android@v2 @@ -467,13 +469,13 @@ jobs: uses: actions/download-artifact@v4 with: name: kotlin-android-bindings - path: kotlin-bindings + path: ${{ env.UNIFFI_DIRECTORY }}/kotlin-bindings - name: Download Android native libraries uses: actions/download-artifact@v4 with: name: android-libs - path: android-libs + path: ${{ env.UNIFFI_DIRECTORY }}/android-libs - name: Create AAR structure run: | @@ -490,6 +492,10 @@ jobs: run: | cp -r kotlin-bindings/* "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/src/main/java/" + - name: Copy custom Kotlin lib + run: | + cp -r lib/kotlin/* "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/src/main/java/" + - name: Copy Gradle configuration files run: | cp gradlew "${{ env.ANDROID_BUILD_DIR }}" @@ -502,15 +508,7 @@ jobs: cp gradle.android/settings.gradle.kts "${{ env.ANDROID_BUILD_DIR }}/" cp gradle.android/zen-engine-android-build.gradle.kts "${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build.gradle.kts" cp gradle.android/AndroidManifest.xml "${{ env.ANDROID_BUILD_DIR }}" - - - name: Create gradle.properties - run: | - cat >> "${{ env.ANDROID_BUILD_DIR }}/gradle.properties" << 'EOF' - android.useAndroidX=true - org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 - org.gradle.parallel=true - org.gradle.caching=true - EOF + cp gradle.android/gradle.properties "${{ env.ANDROID_BUILD_DIR }}" - name: Print directory tree run: tree build From 4145c33eaff2e9486a345ea6abb73c61b099e1d9 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 10 Nov 2025 12:42:13 +0100 Subject: [PATCH 23/38] aar package --- .github/workflows/uniffi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 2aa66686..51cd7b6e 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -511,7 +511,7 @@ jobs: cp gradle.android/gradle.properties "${{ env.ANDROID_BUILD_DIR }}" - name: Print directory tree - run: tree build + run: tree ${{ env.ANDROID_BUILD_DIR }} - name: Build AAR with Gradle env: From be99eb8dda94377225a0c600949c5816b610825a Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 10 Nov 2025 12:56:46 +0100 Subject: [PATCH 24/38] aar package --- .github/workflows/uniffi.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 51cd7b6e..9eaeb464 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -400,7 +400,7 @@ jobs: prepare-android-bindings: runs-on: ubuntu-latest - needs: [ build, build-android ] + needs: [ build ] if: "!contains(github.event.head_commit.message, 'skip ci')" defaults: @@ -444,7 +444,7 @@ jobs: build-android-aar: runs-on: ubuntu-latest - needs: [ prepare-android-bindings ] + needs: [ build-android, prepare-android-bindings ] if: "!contains(github.event.head_commit.message, 'skip ci')" defaults: run: @@ -537,5 +537,5 @@ jobs: uses: actions/upload-artifact@v4 with: name: android-aar - path: ${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build/outputs/aar/zen-engine-android-release.aar + path: ${{ env.UNIFFI_DIRECTORY }}/${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build/outputs/aar/zen-engine-android-release.aar if-no-files-found: error \ No newline at end of file From ed8d2031e3bb7acec667315d5126c6e69d9e74d1 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 13 Nov 2025 13:20:06 +0100 Subject: [PATCH 25/38] aar publishing --- .github/workflows/uniffi.yaml | 72 +++++++++++++++++++++++++++----- bindings/uniffi/build.gradle.kts | 45 ++++++++++++++++++++ 2 files changed, 106 insertions(+), 11 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 9eaeb464..2585a7c1 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -19,7 +19,7 @@ on: - 'core/**' - 'test-data/**' - '.github/workflows/uniffi.yaml' - workflow_dispatch: + workflow_dispatch: #TODO REMOVE jobs: build: @@ -31,7 +31,7 @@ jobs: fail-fast: true matrix: settings: -# - host: windows-latest +# - host: windows-latest #TODO UNCOMMENT # target: 'x86_64-pc-windows-msvc' # output: '{0}.dll' # lib_dir: 'win32-x86-64' @@ -80,7 +80,7 @@ jobs: release-java-kotlin: runs-on: ubuntu-latest needs: [ build ] - if: false # "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" + if: false # "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" #TODO UNCOMMENT defaults: run: working-directory: ${{ env.UNIFFI_DIRECTORY }} @@ -135,7 +135,8 @@ jobs: SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} GPG_SIGNING_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }} - run: ./gradlew publishAllPublicationsToCentralPortal + run: ./gradlew publishMavenKotlinPublicationToCentralPortal publishMavenJavaPublicationToCentralPortal + build-ios: if: false @@ -410,12 +411,6 @@ jobs: steps: - uses: actions/checkout@v3 -# - name: Download Android artifacts -# uses: actions/download-artifact@v4 -# with: -# name: android-libs -# path: ${{ env.UNIFFI_DIRECTORY }}/android-libs - - name: Download all artifacts uses: actions/download-artifact@v4 with: @@ -538,4 +533,59 @@ jobs: with: name: android-aar path: ${{ env.UNIFFI_DIRECTORY }}/${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build/outputs/aar/zen-engine-android-release.aar - if-no-files-found: error \ No newline at end of file + if-no-files-found: error + + publish-android: + runs-on: ubuntu-latest + needs: [ build-android-aar ] + if: startsWith(github.ref, 'refs/tags/v') && !contains(github.event.head_commit.message, 'skip ci') + + steps: + - uses: actions/checkout@v3 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + + - name: Download Kotlin bindings + uses: actions/download-artifact@v4 + with: + name: kotlin-android-bindings + path: ${{ env.UNIFFI_DIRECTORY }}/build/generated/kotlin-android + + - name: Download Android AAR artifact + uses: actions/download-artifact@v4 + with: + name: android-aar + path: build-android/aar/ + + - name: Publish Android Kotlin package to Maven Local + run: ./gradlew publishMavenKotlinAndroidPublicationToMavenLocal + + - name: Verify artifact + run: | + ARTIFACT_PATH="$HOME/.m2/repository/io/gorules/zen-engine-kotlin-android" + if [ -d "$ARTIFACT_PATH" ]; then + echo "✓ Artifact directory found:" + find "$ARTIFACT_PATH" -type f + else + echo "✗ Artifact not found at $ARTIFACT_PATH" + fi + - name: Print m2 directory + run: | + echo "M2 Home: $M2_HOME" + echo "M2 Directory contents:" + ls -la ~/.m2/ + echo "" + echo "Repository contents:" + find ~/.m2/repository -type f -name "*.jar" | head -20 + +# - name: Publish Android Kotlin package to Maven Central +# env: +# SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} +# SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} +# GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} +# GPG_SIGNING_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }} +# run: ./gradlew publishMavenKotlinAndroidPublicationToCentralPortal \ No newline at end of file diff --git a/bindings/uniffi/build.gradle.kts b/bindings/uniffi/build.gradle.kts index 45de6658..b4140e4f 100644 --- a/bindings/uniffi/build.gradle.kts +++ b/bindings/uniffi/build.gradle.kts @@ -48,6 +48,15 @@ sourceSets { compileClasspath += sourceSets["main"].compileClasspath runtimeClasspath += sourceSets["main"].runtimeClasspath } + + val kotlinAndroid by creating { + kotlin { + srcDirs("lib/kotlin", "build/generated/kotlin_android") + } + + compileClasspath += sourceSets["main"].compileClasspath + runtimeClasspath += sourceSets["main"].runtimeClasspath + } } @@ -82,6 +91,12 @@ tasks { from(sourceSets["kotlin"].kotlin) } + val generateKotlinAndroidSourcesJar by creating(Jar::class) { + archiveBaseName.set("zen_engine_kotlin_android") + archiveClassifier.set("sources") + from(sourceSets["kotlinAndroid"].kotlin) + } + val dokkaJavadocJava by creating(DokkaTask::class) { outputDirectory.set(layout.buildDirectory.dir("dokka/java")) dokkaSourceSets { named("java") } @@ -93,6 +108,11 @@ tasks { dokkaSourceSets { named("kotlin") } } + val dokkaJavadocKotlinAndroid by creating(DokkaTask::class) { + outputDirectory.set(layout.buildDirectory.dir("dokka/kotlin_android")) + dokkaSourceSets { named("kotlinAndroid") } + } + val javadocJarJava by creating(Jar::class) { dependsOn(dokkaGeneratePublicationJavadoc) archiveBaseName.set("zen_engine") @@ -108,6 +128,14 @@ tasks { from(dokkaGeneratePublicationJavadoc.get()) } + + val javadocJarKotlinAndroid by creating(Jar::class) { + dependsOn(dokkaGeneratePublicationJavadoc) + archiveBaseName.set("zen_engine_kotlin_android") + archiveClassifier.set("javadoc") + + from(dokkaGeneratePublicationJavadoc.get()) + } } publishing { @@ -135,6 +163,23 @@ publishing { dependency("net.java.dev.jna:jna:5.17.0") } } + + create("mavenKotlinAndroid") { + groupId = "io.gorules" + artifactId = "zen-engine-kotlin-android" + + artifact("build-android/aar/zen-engine-android-release.aar") { + extension = "aar" + } + artifact(tasks["generateKotlinAndroidSourcesJar"]) + artifact(tasks["javadocJarKotlinAndroid"]) + + configurePom { + dependency("net.java.dev.jna:jna:5.17.0") + dependency("androidx.core:core-ktx:1.12.0") + dependency("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") + } + } } repositories { mavenLocal() From 67ad748a3705a9730d77e779d614a31cdac6f6c2 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 13 Nov 2025 13:31:05 +0100 Subject: [PATCH 26/38] aar publishing --- .github/workflows/uniffi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 2585a7c1..30737321 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -538,7 +538,7 @@ jobs: publish-android: runs-on: ubuntu-latest needs: [ build-android-aar ] - if: startsWith(github.ref, 'refs/tags/v') && !contains(github.event.head_commit.message, 'skip ci') + if: !contains(github.event.head_commit.message, 'skip ci') steps: - uses: actions/checkout@v3 From 7361f15462a87416e51219963747631e3f2dfe27 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 13 Nov 2025 13:42:48 +0100 Subject: [PATCH 27/38] aar publishing --- .github/workflows/uniffi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 30737321..53405a56 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -538,7 +538,7 @@ jobs: publish-android: runs-on: ubuntu-latest needs: [ build-android-aar ] - if: !contains(github.event.head_commit.message, 'skip ci') + if: "!contains(github.event.head_commit.message, 'skip ci')" steps: - uses: actions/checkout@v3 From 54bf4aef35c7561996e2a7f22a1078d50dcf9e59 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 13 Nov 2025 14:00:45 +0100 Subject: [PATCH 28/38] aar publishing --- .github/workflows/uniffi.yaml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 53405a56..d8d6e36c 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -539,15 +539,22 @@ jobs: runs-on: ubuntu-latest needs: [ build-android-aar ] if: "!contains(github.event.head_commit.message, 'skip ci')" + defaults: + run: + working-directory: ${{ env.UNIFFI_DIRECTORY }} steps: - uses: actions/checkout@v3 - - - name: Setup Java - uses: actions/setup-java@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v4 with: + java-version: '21' distribution: 'temurin' - java-version: '17' + + - name: Validate Gradle wrapper jar + uses: gradle/actions/wrapper-validation@v3 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 - name: Download Kotlin bindings uses: actions/download-artifact@v4 @@ -559,7 +566,7 @@ jobs: uses: actions/download-artifact@v4 with: name: android-aar - path: build-android/aar/ + path: ${{ env.UNIFFI_DIRECTORY }}/build-android/aar/ - name: Publish Android Kotlin package to Maven Local run: ./gradlew publishMavenKotlinAndroidPublicationToMavenLocal From c3ac9e68ee0e9a8811d91ac58685256988f934b2 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 13 Nov 2025 14:22:48 +0100 Subject: [PATCH 29/38] aar publishing --- .github/workflows/uniffi.yaml | 56 +++++++++++++++++------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index d8d6e36c..4fb34cfa 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -568,31 +568,31 @@ jobs: name: android-aar path: ${{ env.UNIFFI_DIRECTORY }}/build-android/aar/ - - name: Publish Android Kotlin package to Maven Local - run: ./gradlew publishMavenKotlinAndroidPublicationToMavenLocal - - - name: Verify artifact - run: | - ARTIFACT_PATH="$HOME/.m2/repository/io/gorules/zen-engine-kotlin-android" - if [ -d "$ARTIFACT_PATH" ]; then - echo "✓ Artifact directory found:" - find "$ARTIFACT_PATH" -type f - else - echo "✗ Artifact not found at $ARTIFACT_PATH" - fi - - name: Print m2 directory - run: | - echo "M2 Home: $M2_HOME" - echo "M2 Directory contents:" - ls -la ~/.m2/ - echo "" - echo "Repository contents:" - find ~/.m2/repository -type f -name "*.jar" | head -20 - -# - name: Publish Android Kotlin package to Maven Central -# env: -# SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} -# SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} -# GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} -# GPG_SIGNING_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }} -# run: ./gradlew publishMavenKotlinAndroidPublicationToCentralPortal \ No newline at end of file +# - name: Publish Android Kotlin package to Maven Local +# run: ./gradlew publishMavenKotlinAndroidPublicationToMavenLocal +# +# - name: Verify artifact +# run: | +# ARTIFACT_PATH="$HOME/.m2/repository/io/gorules/zen-engine-kotlin-android" +# if [ -d "$ARTIFACT_PATH" ]; then +# echo "✓ Artifact directory found:" +# find "$ARTIFACT_PATH" -type f +# else +# echo "✗ Artifact not found at $ARTIFACT_PATH" +# fi +# - name: Print m2 directory +# run: | +# echo "M2 Home: $M2_HOME" +# echo "M2 Directory contents:" +# ls -la ~/.m2/ +# echo "" +# echo "Repository contents:" +# find ~/.m2/repository -type f -name "*.jar" | head -20 + + - name: Publish Android Kotlin package to Maven Central + env: + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} + GPG_SIGNING_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }} + run: ./gradlew publishMavenKotlinAndroidPublicationToCentralPortal \ No newline at end of file From 81c6a343fe7f45fc8d241f4d14ec75a99fa974c9 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Thu, 13 Nov 2025 14:59:49 +0100 Subject: [PATCH 30/38] aar publishing --- bindings/uniffi/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/uniffi/build.gradle.kts b/bindings/uniffi/build.gradle.kts index b4140e4f..819cf30e 100644 --- a/bindings/uniffi/build.gradle.kts +++ b/bindings/uniffi/build.gradle.kts @@ -194,7 +194,7 @@ signing { val signingKey = Base64.getDecoder().decode(signingKeyBase64.get()).toString(Charsets.UTF_8) useInMemoryPgpKeys(signingKey, signingPassphrase.get()) - sign(publishing.publications["mavenJava"], publishing.publications["mavenKotlin"]) + sign(publishing.publications["mavenJava"], publishing.publications["mavenKotlin"], publishing.publications["mavenKotlinAndroid"]) } } From e1ffda508237dabb331ab5ab0b40090c3c9c3160 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 10:11:30 +0100 Subject: [PATCH 31/38] aar publishing --- bindings/uniffi/build.gradle.kts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/bindings/uniffi/build.gradle.kts b/bindings/uniffi/build.gradle.kts index 819cf30e..67f5336b 100644 --- a/bindings/uniffi/build.gradle.kts +++ b/bindings/uniffi/build.gradle.kts @@ -175,7 +175,7 @@ publishing { artifact(tasks["javadocJarKotlinAndroid"]) configurePom { - dependency("net.java.dev.jna:jna:5.17.0") + dependency("net.java.dev.jna:jna:5.14.0", "aar") dependency("androidx.core:core-ktx:1.12.0") dependency("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") } @@ -259,20 +259,28 @@ fun MavenPublication.configurePom(dependencyConfig: PomDependencyBuilder.() -> U } class PomDependencyBuilder { - private val dependencies = mutableListOf>() + private val dependencies = mutableListOf>() - fun dependency(notation: String) { + fun dependency(notation: String, type: String = "jar") { val parts = notation.split(":") require(parts.size == 3) { "Dependency notation must be 'group:artifact:version'" } - dependencies.add(Triple(parts[0], parts[1], parts[2])) + dependencies.add(mapOf( + "groupId" to parts[0], + "artifactId" to parts[1], + "version" to parts[2], + "type" to type + )) } fun addToXml(dependenciesNode: groovy.util.Node) { - dependencies.forEach { (groupId, artifactId, version) -> + dependencies.forEach { dep -> val dependencyNode = dependenciesNode.appendNode("dependency") - dependencyNode.appendNode("groupId", groupId) - dependencyNode.appendNode("artifactId", artifactId) - dependencyNode.appendNode("version", version) + dependencyNode.appendNode("groupId", dep["groupId"]) + dependencyNode.appendNode("artifactId", dep["artifactId"]) + dependencyNode.appendNode("version", dep["version"]) + if (dep["type"] != "jar") { + dependencyNode.appendNode("type", dep["type"]) + } dependencyNode.appendNode("scope", "runtime") } } From bdc4810249a1288688d1fbdef784616dff51cc7d Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 11:26:42 +0100 Subject: [PATCH 32/38] aar publishing --- bindings/uniffi/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/uniffi/Cargo.toml b/bindings/uniffi/Cargo.toml index 4d2addea..1ad01fbd 100644 --- a/bindings/uniffi/Cargo.toml +++ b/bindings/uniffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zen-uniffi" -version = "0.4.0" +version = "0.4.2" edition = "2024" license = "MIT" publish = false From 745f840412d66b4acf6385fe8c95d3dd8a0b344b Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 12:44:27 +0100 Subject: [PATCH 33/38] aar publishing --- .github/workflows/uniffi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 4fb34cfa..f133ac94 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -567,7 +567,7 @@ jobs: with: name: android-aar path: ${{ env.UNIFFI_DIRECTORY }}/build-android/aar/ - +# # - name: Publish Android Kotlin package to Maven Local # run: ./gradlew publishMavenKotlinAndroidPublicationToMavenLocal # From 1d0f86ca70f6107193aae9944714d03ef4423730 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 13:04:00 +0100 Subject: [PATCH 34/38] touch --- .github/workflows/uniffi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index f133ac94..f8962bf8 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -505,7 +505,7 @@ jobs: cp gradle.android/AndroidManifest.xml "${{ env.ANDROID_BUILD_DIR }}" cp gradle.android/gradle.properties "${{ env.ANDROID_BUILD_DIR }}" - - name: Print directory tree + - name: Print directory tree for ${{ env.ANDROID_BUILD_DIR }} run: tree ${{ env.ANDROID_BUILD_DIR }} - name: Build AAR with Gradle From efb0e6406290b546b3db58c8b7ee9d2cdd8c3954 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 15:33:53 +0100 Subject: [PATCH 35/38] all architectures --- .github/workflows/uniffi.yaml | 71 ++++++++++++----------------------- bindings/uniffi/Cargo.toml | 2 +- 2 files changed, 25 insertions(+), 48 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index f8962bf8..f027d184 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -19,7 +19,6 @@ on: - 'core/**' - 'test-data/**' - '.github/workflows/uniffi.yaml' - workflow_dispatch: #TODO REMOVE jobs: build: @@ -31,26 +30,26 @@ jobs: fail-fast: true matrix: settings: -# - host: windows-latest #TODO UNCOMMENT -# target: 'x86_64-pc-windows-msvc' -# output: '{0}.dll' -# lib_dir: 'win32-x86-64' + - host: windows-latest + target: 'x86_64-pc-windows-msvc' + output: '{0}.dll' + lib_dir: 'win32-x86-64' - host: macos-latest target: 'x86_64-apple-darwin' output: 'lib{0}.dylib' lib_dir: 'darwin-x86-64' -# - host: macos-latest -# target: 'aarch64-apple-darwin' -# output: 'lib{0}.dylib' -# lib_dir: 'darwin-aarch64' -# - host: ubuntu-latest -# target: 'x86_64-unknown-linux-gnu' -# output: 'lib{0}.so' -# lib_dir: 'linux-x86-64' -# - host: ubuntu-latest -# target: 'aarch64-unknown-linux-gnu' -# output: 'lib{0}.so' -# lib_dir: 'linux-aarch64' + - host: macos-latest + target: 'aarch64-apple-darwin' + output: 'lib{0}.dylib' + lib_dir: 'darwin-aarch64' + - host: ubuntu-latest + target: 'x86_64-unknown-linux-gnu' + output: 'lib{0}.so' + lib_dir: 'linux-x86-64' + - host: ubuntu-latest + target: 'aarch64-unknown-linux-gnu' + output: 'lib{0}.so' + lib_dir: 'linux-aarch64' name: UniFFI - ${{ matrix.settings.target }} runs-on: ${{ matrix.settings.host }} @@ -80,7 +79,7 @@ jobs: release-java-kotlin: runs-on: ubuntu-latest needs: [ build ] - if: false # "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" #TODO UNCOMMENT + if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" defaults: run: working-directory: ${{ env.UNIFFI_DIRECTORY }} @@ -139,8 +138,7 @@ jobs: build-ios: - if: false -# if: "!contains(github.event.head_commit.message, 'skip ci')" + if: "!contains(github.event.head_commit.message, 'skip ci')" env: OUTPUT_NAME: zen_uniffi IPHONEOS_DEPLOYMENT_TARGET: '16.0' @@ -277,7 +275,7 @@ jobs: name: Release iOS runs-on: macos-latest needs: [ create-xcframework ] - if: "!contains(github.event.head_commit.message, 'skip ci')" + if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" steps: - name: Checkout zen-ios @@ -386,8 +384,7 @@ jobs: env: ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | - # cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 - cargo ndk -t arm64-v8a \ + cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 --platform 33 \ -o ./android-libs \ build -p zen-uniffi --release --features bindgen @@ -437,7 +434,7 @@ jobs: - name: Print directory tree run: tree build - build-android-aar: + package-android-aar: runs-on: ubuntu-latest needs: [ build-android, prepare-android-bindings ] if: "!contains(github.event.head_commit.message, 'skip ci')" @@ -535,10 +532,11 @@ jobs: path: ${{ env.UNIFFI_DIRECTORY }}/${{ env.ANDROID_BUILD_DIR }}/zen-engine-android/build/outputs/aar/zen-engine-android-release.aar if-no-files-found: error - publish-android: + release-android: runs-on: ubuntu-latest - needs: [ build-android-aar ] + needs: [ package-android-aar ] if: "!contains(github.event.head_commit.message, 'skip ci')" +# if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" defaults: run: working-directory: ${{ env.UNIFFI_DIRECTORY }} @@ -567,27 +565,6 @@ jobs: with: name: android-aar path: ${{ env.UNIFFI_DIRECTORY }}/build-android/aar/ -# -# - name: Publish Android Kotlin package to Maven Local -# run: ./gradlew publishMavenKotlinAndroidPublicationToMavenLocal -# -# - name: Verify artifact -# run: | -# ARTIFACT_PATH="$HOME/.m2/repository/io/gorules/zen-engine-kotlin-android" -# if [ -d "$ARTIFACT_PATH" ]; then -# echo "✓ Artifact directory found:" -# find "$ARTIFACT_PATH" -type f -# else -# echo "✗ Artifact not found at $ARTIFACT_PATH" -# fi -# - name: Print m2 directory -# run: | -# echo "M2 Home: $M2_HOME" -# echo "M2 Directory contents:" -# ls -la ~/.m2/ -# echo "" -# echo "Repository contents:" -# find ~/.m2/repository -type f -name "*.jar" | head -20 - name: Publish Android Kotlin package to Maven Central env: diff --git a/bindings/uniffi/Cargo.toml b/bindings/uniffi/Cargo.toml index 1ad01fbd..f702547a 100644 --- a/bindings/uniffi/Cargo.toml +++ b/bindings/uniffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zen-uniffi" -version = "0.4.2" +version = "0.4.3" edition = "2024" license = "MIT" publish = false From bf566cbb2f7420e5720d8acff61e748b1cceb3c2 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 15:37:48 +0100 Subject: [PATCH 36/38] all architectures --- .github/workflows/uniffi.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index f027d184..a18284be 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -376,9 +376,9 @@ jobs: - name: Add Rust Android targets run: | rustup target add aarch64-linux-android - # rustup target add armv7-linux-androideabi - # rustup target add i686-linux-android - # rustup target add x86_64-linux-android + rustup target add armv7-linux-androideabi + rustup target add i686-linux-android + rustup target add x86_64-linux-android - name: Build for Android env: From 90f9c634e280d12355b00ac758375babd6f10773 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 16:18:46 +0100 Subject: [PATCH 37/38] all architectures --- .github/workflows/uniffi.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index a18284be..441280a9 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -384,7 +384,7 @@ jobs: env: ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | - cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 + cargo ndk -t arm64-v8a -t armeabi-v7a -t x86 -t x86_64 \ --platform 33 \ -o ./android-libs \ build -p zen-uniffi --release --features bindgen @@ -536,7 +536,7 @@ jobs: runs-on: ubuntu-latest needs: [ package-android-aar ] if: "!contains(github.event.head_commit.message, 'skip ci')" -# if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" +# if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" TODO UNCOMMENT defaults: run: working-directory: ${{ env.UNIFFI_DIRECTORY }} From f1ae6e6d99a91796b000ad4de093140e3be22e72 Mon Sep 17 00:00:00 2001 From: bojancrevar Date: Mon, 17 Nov 2025 17:04:30 +0100 Subject: [PATCH 38/38] all architectures --- .github/workflows/uniffi.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/uniffi.yaml b/.github/workflows/uniffi.yaml index 441280a9..b4193941 100644 --- a/.github/workflows/uniffi.yaml +++ b/.github/workflows/uniffi.yaml @@ -535,8 +535,7 @@ jobs: release-android: runs-on: ubuntu-latest needs: [ package-android-aar ] - if: "!contains(github.event.head_commit.message, 'skip ci')" -# if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" TODO UNCOMMENT + if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')" defaults: run: working-directory: ${{ env.UNIFFI_DIRECTORY }}