From 09b6763615275151c3115c4e360013efb526ad0c Mon Sep 17 00:00:00 2001 From: Gabe Cohen Date: Wed, 3 Dec 2025 21:23:22 -0800 Subject: [PATCH 1/4] rust crate publishing --- .github/workflows/publish-rust.yml | 51 ++++++++++++++++++++++++++++++ Cargo.lock | 6 ++-- rust/core/Cargo.toml | 4 +-- rust/core/src/bridge.rs | 2 +- rust/core/src/verification.rs | 2 +- rust/uniffi-bindings/Cargo.toml | 2 +- rust/wasm/Cargo.toml | 2 +- swift/README.md | 2 +- 8 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/publish-rust.yml diff --git a/.github/workflows/publish-rust.yml b/.github/workflows/publish-rust.yml new file mode 100644 index 0000000..f0dc7ca --- /dev/null +++ b/.github/workflows/publish-rust.yml @@ -0,0 +1,51 @@ +name: Publish Rust Release + +on: + pull_request: + types: [closed] + branches: + - main + +permissions: + contents: write + +jobs: + publish-rust: + if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'release') + runs-on: ubuntu-latest + environment: production + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Rust toolchain + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: stable + + - name: Ensure release version + id: version + run: | + VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name=="idkit") | .version') + if [ -z "$VERSION" ]; then + echo "Could not find idkit crate in workspace" >&2 + exit 1 + fi + if echo "$VERSION" | grep -q "-"; then + echo "Version contains pre-release identifier ($VERSION); aborting publish." >&2 + exit 1 + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Run tests + run: cargo test -p idkit --all-features + + - name: Cargo publish dry run + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + run: cargo publish -p idkit --locked --dry-run + + - name: Publish crate to crates.io + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + run: cargo publish -p idkit --locked diff --git a/Cargo.lock b/Cargo.lock index 3f23a9f..29c293d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1302,7 +1302,7 @@ dependencies = [ ] [[package]] -name = "idkit-core" +name = "idkit" version = "4.0.0" dependencies = [ "aes-gcm", @@ -1328,7 +1328,7 @@ name = "idkit-uniffi" version = "4.0.0" dependencies = [ "hex", - "idkit-core", + "idkit", "serde_json", "thiserror 1.0.69", "tokio", @@ -1339,7 +1339,7 @@ dependencies = [ name = "idkit-wasm" version = "4.0.0" dependencies = [ - "idkit-core", + "idkit", "js-sys", "serde", "serde-wasm-bindgen", diff --git a/rust/core/Cargo.toml b/rust/core/Cargo.toml index 995a555..75ad06a 100644 --- a/rust/core/Cargo.toml +++ b/rust/core/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "idkit-core" +name = "idkit" version.workspace = true edition.workspace = true license.workspace = true @@ -44,4 +44,4 @@ uniffi-bindings = ["uniffi"] # Enable UniFFI scaffolding for Swift/Kotlin bindi # Protocol features bridge = ["uuid/v4", "reqwest", "dep:tokio", "dep:urlencoding"] # Bridge client and session management for verifications bridge-wasm = ["uuid/js", "reqwest", "dep:urlencoding"] # Bridge for WASM (no tokio) -verification = ["reqwest", "dep:tokio"] # Backend proof verification via Developer Portal API \ No newline at end of file +verification = ["reqwest", "dep:tokio"] # Backend proof verification via Developer Portal API diff --git a/rust/core/src/bridge.rs b/rust/core/src/bridge.rs index 1088391..64cc834 100644 --- a/rust/core/src/bridge.rs +++ b/rust/core/src/bridge.rs @@ -188,7 +188,7 @@ impl Session { // Send to bridge let client = reqwest::Client::builder() - .user_agent(format!("idkit-core/{}", env!("CARGO_PKG_VERSION"))) + .user_agent(format!("idkit/{}", env!("CARGO_PKG_VERSION"))) .build()?; let response = client diff --git a/rust/core/src/verification.rs b/rust/core/src/verification.rs index 94f0450..c06deae 100644 --- a/rust/core/src/verification.rs +++ b/rust/core/src/verification.rs @@ -112,7 +112,7 @@ pub async fn verify_proof_with_endpoint( .post(&url) .header( "User-Agent", - &format!("idkit-core/{}", env!("CARGO_PKG_VERSION")), + &format!("idkit/{}", env!("CARGO_PKG_VERSION")), ) .json(&request) .send() diff --git a/rust/uniffi-bindings/Cargo.toml b/rust/uniffi-bindings/Cargo.toml index 5fff3af..fb5ff78 100644 --- a/rust/uniffi-bindings/Cargo.toml +++ b/rust/uniffi-bindings/Cargo.toml @@ -12,7 +12,7 @@ crate-type = ["staticlib", "cdylib"] name = "idkit" [dependencies] -idkit-core = { path = "../core", default-features = false, features = ["uniffi-bindings", "native-crypto", "bridge"] } +idkit-core = { package = "idkit", path = "../core", default-features = false, features = ["uniffi-bindings", "native-crypto", "bridge"] } uniffi = { workspace = true } thiserror = { workspace = true } serde_json = { workspace = true } diff --git a/rust/wasm/Cargo.toml b/rust/wasm/Cargo.toml index fd31818..473114a 100644 --- a/rust/wasm/Cargo.toml +++ b/rust/wasm/Cargo.toml @@ -14,7 +14,7 @@ wasm-opt = false crate-type = ["cdylib", "rlib"] [dependencies] -idkit-core = { path = "../core", default-features = false, features = ["wasm-crypto", "bridge-wasm"] } +idkit-core = { package = "idkit", path = "../core", default-features = false, features = ["wasm-crypto", "bridge-wasm"] } wasm-bindgen = { workspace = true } wasm-bindgen-futures = { workspace = true } js-sys = { workspace = true } diff --git a/swift/README.md b/swift/README.md index f386a2d..4589b32 100644 --- a/swift/README.md +++ b/swift/README.md @@ -8,7 +8,7 @@ This Swift SDK is a wrapper over the Rust core: ``` ┌─────────────────────────────────────┐ -│ Rust Core (idkit-core) │ +│ Rust Core (idkit) │ │ - All business logic │ │ - Session management │ │ - Constraints │ From 680e7254330c22b90dd3de00185062532437b86a Mon Sep 17 00:00:00 2001 From: Gabe Cohen Date: Wed, 3 Dec 2025 21:42:22 -0800 Subject: [PATCH 2/4] update other ci --- .gitignore | 1 + rust/uniffi-bindings/Cargo.toml | 2 +- scripts/build-kotlin.sh | 4 ++-- scripts/package-swift.sh | 37 ++++++++++++++++++++------------- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 4e74283..b543c3d 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ /kotlin/bindings/src/main/jniLibs/ /kotlin/bindings/src/main/kotlin/uniffi/ /kotlin/bindings/src/main/resources/libidkit.* +/kotlin/bindings/src/main/resources/libidkitffi.* /kotlin/dist/ /kotlin/idkit-kotlin-*.zip diff --git a/rust/uniffi-bindings/Cargo.toml b/rust/uniffi-bindings/Cargo.toml index fb5ff78..37d459a 100644 --- a/rust/uniffi-bindings/Cargo.toml +++ b/rust/uniffi-bindings/Cargo.toml @@ -9,7 +9,7 @@ description = "UniFFI bindings for IDKit - generates native Swift and Kotlin bin [lib] crate-type = ["staticlib", "cdylib"] -name = "idkit" +name = "idkitffi" [dependencies] idkit-core = { package = "idkit", path = "../core", default-features = false, features = ["uniffi-bindings", "native-crypto", "bridge"] } diff --git a/scripts/build-kotlin.sh b/scripts/build-kotlin.sh index afa60d3..a8b0451 100755 --- a/scripts/build-kotlin.sh +++ b/scripts/build-kotlin.sh @@ -19,7 +19,7 @@ case "$SYSTEM" in MINGW*|MSYS*|CYGWIN*) LIB_EXT="dll" ;; esac -HOST_LIB="$PROJECT_ROOT/target/release/libidkit.$LIB_EXT" +HOST_LIB="$PROJECT_ROOT/target/release/libidkitffi.$LIB_EXT" echo "🔧 Building Rust library (host) for binding generation" cargo build --package idkit-uniffi --release --locked @@ -60,7 +60,7 @@ else echo " • $TARGET -> $ABI" CROSS_NO_WARNINGS=1 cross build --package idkit-uniffi --target "$TARGET" --release --locked mkdir -p "$JNI_DIR/$ABI" - cp "$PROJECT_ROOT/target/$TARGET/release/libidkit.so" "$JNI_DIR/$ABI/libidkit.so" + cp "$PROJECT_ROOT/target/$TARGET/release/libidkitffi.so" "$JNI_DIR/$ABI/libidkitffi.so" done fi fi diff --git a/scripts/package-swift.sh b/scripts/package-swift.sh index 547f465..7f16b57 100755 --- a/scripts/package-swift.sh +++ b/scripts/package-swift.sh @@ -35,11 +35,17 @@ cargo build --package idkit-uniffi --target aarch64-apple-ios --release --locked cargo build --package idkit-uniffi --target aarch64-apple-darwin --release --locked cargo build --package idkit-uniffi --target x86_64-apple-darwin --release --locked -cp target/aarch64-apple-ios/release/libidkit.a target/aarch64-apple-ios/release/libidkitFFI.a -cp target/x86_64-apple-ios/release/libidkit.a target/x86_64-apple-ios/release/libidkitFFI.a -cp target/aarch64-apple-ios-sim/release/libidkit.a target/aarch64-apple-ios-sim/release/libidkitFFI.a -cp target/aarch64-apple-darwin/release/libidkit.a target/aarch64-apple-darwin/release/libidkitFFI.a -cp target/x86_64-apple-darwin/release/libidkit.a target/x86_64-apple-darwin/release/libidkitFFI.a +rm -f target/aarch64-apple-ios/release/libidkitFFI.a +rm -f target/x86_64-apple-ios/release/libidkitFFI.a +rm -f target/aarch64-apple-ios-sim/release/libidkitFFI.a +rm -f target/aarch64-apple-darwin/release/libidkitFFI.a +rm -f target/x86_64-apple-darwin/release/libidkitFFI.a + +cp target/aarch64-apple-ios/release/deps/libidkitffi.a target/aarch64-apple-ios/release/libidkitFFI.a +cp target/x86_64-apple-ios/release/deps/libidkitffi.a target/x86_64-apple-ios/release/libidkitFFI.a +cp target/aarch64-apple-ios-sim/release/deps/libidkitffi.a target/aarch64-apple-ios-sim/release/libidkitFFI.a +cp target/aarch64-apple-darwin/release/deps/libidkitffi.a target/aarch64-apple-darwin/release/libidkitFFI.a +cp target/x86_64-apple-darwin/release/deps/libidkitffi.a target/x86_64-apple-darwin/release/libidkitFFI.a strip -S -x target/aarch64-apple-ios/release/libidkitFFI.a strip -S -x target/x86_64-apple-ios/release/libidkitFFI.a @@ -62,21 +68,19 @@ lipo -info $IOS_BUILD/target/universal-macos/release/libidkitFFI.a echo "🧬 Generating UniFFI Swift bindings" cargo run -p uniffi-bindgen generate \ - --library target/aarch64-apple-ios-sim/release/libidkit.dylib \ + --library target/aarch64-apple-ios-sim/release/libidkitffi.dylib \ --language swift \ --no-format \ --out-dir "$IOS_BUILD/bindings" rm -f "$GENERATED_DIR"/* -cp "$IOS_BUILD/bindings"/idkit.swift "$GENERATED_DIR/" +cp "$IOS_BUILD/bindings"/idkitffi.swift "$GENERATED_DIR/idkit.swift" cp "$IOS_BUILD/bindings"/idkit_core.swift "$GENERATED_DIR/" -cp "$IOS_BUILD/bindings"/idkitFFI.h "$GENERATED_DIR/" -cp "$IOS_BUILD/bindings"/idkitFFI.modulemap "$GENERATED_DIR/" +cp "$IOS_BUILD/bindings"/idkitffiFFI.h "$GENERATED_DIR/idkitFFI.h" cp "$IOS_BUILD/bindings"/idkit_coreFFI.h "$GENERATED_DIR/" -cp "$IOS_BUILD/bindings"/idkit_coreFFI.modulemap "$GENERATED_DIR/" rm -f "$FFI_INCLUDE_DIR"/idkitFFI.h "$FFI_INCLUDE_DIR"/idkit_coreFFI.h "$FFI_INCLUDE_DIR"/module.modulemap -cp "$IOS_BUILD/bindings"/idkitFFI.h "$FFI_INCLUDE_DIR/" +cp "$IOS_BUILD/bindings"/idkitffiFFI.h "$FFI_INCLUDE_DIR/idkitFFI.h" cp "$IOS_BUILD/bindings"/idkit_coreFFI.h "$FFI_INCLUDE_DIR/" cat <<'EOF' > "$FFI_INCLUDE_DIR/module.modulemap" module idkitFFI { @@ -86,10 +90,15 @@ module idkitFFI { } EOF -cp "$IOS_BUILD/bindings"/idkitFFI.h "$IOS_BUILD/Headers/IDKit/" +cp "$IOS_BUILD/bindings"/idkitffiFFI.h "$IOS_BUILD/Headers/IDKit/idkitFFI.h" cp "$IOS_BUILD/bindings"/idkit_coreFFI.h "$IOS_BUILD/Headers/IDKit/" -cat "$IOS_BUILD/bindings"/idkitFFI.modulemap > "$IOS_BUILD/Headers/IDKit/module.modulemap" -cat "$IOS_BUILD/bindings"/idkit_coreFFI.modulemap >> "$IOS_BUILD/Headers/IDKit/module.modulemap" +cat <<'EOF' > "$IOS_BUILD/Headers/IDKit/module.modulemap" +module idkitFFI { + header "idkitFFI.h" + header "idkit_coreFFI.h" + export * +} +EOF echo "🏗️ Creating XCFramework" xcodebuild -create-xcframework \ From eac9c13fb56d47c78d2ae4041ce2ce050a5ce315 Mon Sep 17 00:00:00 2001 From: Gabe Cohen Date: Wed, 3 Dec 2025 21:42:59 -0800 Subject: [PATCH 3/4] fix rust ci --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff76aca..e701dd3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,10 +41,10 @@ jobs: run: cargo clippy --all-targets --all-features -- -D warnings - name: Build Rust core - run: cargo build --release --package idkit-core + run: cargo build --release --package idkit - name: Run Rust tests - run: cargo test --package idkit-core + run: cargo test --package idkit --all-features swift-bindings: name: Swift Bindings - Build & Test From b7e43e4b967d590ec3e87545ce17c0f7f1732f4a Mon Sep 17 00:00:00 2001 From: Gabe Cohen Date: Fri, 5 Dec 2025 15:54:03 -0800 Subject: [PATCH 4/4] pr comment --- .github/workflows/publish-rust.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/publish-rust.yml b/.github/workflows/publish-rust.yml index f0dc7ca..eb660d5 100644 --- a/.github/workflows/publish-rust.yml +++ b/.github/workflows/publish-rust.yml @@ -38,14 +38,7 @@ jobs: echo "version=$VERSION" >> "$GITHUB_OUTPUT" - name: Run tests - run: cargo test -p idkit --all-features - - - name: Cargo publish dry run - env: - CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} - run: cargo publish -p idkit --locked --dry-run + run: cargo test -p idkit --all-features --no-default-features - name: Publish crate to crates.io - env: - CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} run: cargo publish -p idkit --locked