From 905fc32fd92790f9b86b99a07cbe1346d557a84a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Stankovi=C4=87?= Date: Fri, 21 Feb 2025 11:44:23 +0100 Subject: [PATCH 1/7] chore: ci: use ubuntu-latest for the JVM build --- .github/workflows/build-jvm-linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-jvm-linux.yml b/.github/workflows/build-jvm-linux.yml index 1ff1651b4c..e235e88d62 100644 --- a/.github/workflows/build-jvm-linux.yml +++ b/.github/workflows/build-jvm-linux.yml @@ -13,7 +13,7 @@ env: jobs: build-jvm: if: github.repository == 'wireapp/core-crypto' - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 From a618ce2dc523e6af26fe16a0cd6169ada6756e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Stankovi=C4=87?= Date: Fri, 21 Feb 2025 11:46:25 +0100 Subject: [PATCH 2/7] chore: ci: only run build-ios for wireapp/core-crypto This makes it consistent with build-jvm-linux and build-android. --- .github/workflows/build-ios.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index d8027d913e..d700d26479 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -12,6 +12,7 @@ env: jobs: build-ios: + if: github.repository == 'wireapp/core-crypto' runs-on: self-hosted strategy: matrix: From 00afd9053abb4d278e03b16d1b800da24ac3b2af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Stankovi=C4=87?= Date: Fri, 21 Feb 2025 12:20:08 +0100 Subject: [PATCH 3/7] chore: crypto-ffi: rename compile-ffi-* tasks Name them bindings-* to better reflect the fact that those tasks generate bindings. --- .github/workflows/publish-jvm.yml | 2 +- crypto-ffi/Makefile.toml | 36 +++++++++++++++---------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/publish-jvm.yml b/.github/workflows/publish-jvm.yml index 41c90ad7cb..5ccd068600 100644 --- a/.github/workflows/publish-jvm.yml +++ b/.github/workflows/publish-jvm.yml @@ -72,7 +72,7 @@ jobs: - name: build artifacts run: | cd crypto-ffi - cargo make compile-ffi-kotlin-jvm + cargo make bindings-kotlin-jvm - name: gradle setup uses: gradle/actions/setup-gradle@v4 - name: validate gradle wrapper diff --git a/crypto-ffi/Makefile.toml b/crypto-ffi/Makefile.toml index 614170ab83..50cda1939c 100644 --- a/crypto-ffi/Makefile.toml +++ b/crypto-ffi/Makefile.toml @@ -101,7 +101,7 @@ args = ["run", "--cwd", "bindings/js", "build"] ##################################### FFI ##################################### -[tasks.compile-ffi-swift] +[tasks._bindings-swift] command = "cargo" args = [ "run", @@ -115,13 +115,13 @@ args = [ "--library", "../target/release/deps/libcore_crypto_ffi.${LIBRARY_EXTENSION}" ] -[tasks.ffi-swift] -dependencies = ["compile-ffi-swift"] +[tasks.bindings-swift] +dependencies = ["_bindings-swift"] script = ''' mv ./bindings/swift/WireCoreCrypto/WireCoreCrypto/core_crypto_ffi.swift ./bindings/swift/WireCoreCrypto/WireCoreCrypto/CoreCrypto.swift ''' -[tasks.compile-ffi-kotlin-android] +[tasks.bindings-kotlin-android] command = "cargo" args = [ "run", @@ -136,7 +136,7 @@ args = [ "--library", "../target/release/deps/libcore_crypto_ffi.${LIBRARY_EXTENSION}" ] -[tasks.compile-ffi-kotlin-jvm] +[tasks.bindings-kotlin-jvm] command = "cargo" args = [ "run", @@ -150,11 +150,11 @@ args = [ "--library", "../target/release/deps/libcore_crypto_ffi.${LIBRARY_EXTENSION}" ] -[tasks.ffi-kotlin] -dependencies = ["compile-ffi-kotlin-android", "compile-ffi-kotlin-jvm"] +[tasks.bindings-kotlin] +dependencies = ["bindings-kotlin-android", "bindings-kotlin-jvm"] -[tasks.ffi] -dependencies = ["ffi-swift", "ffi-kotlin"] +[tasks.bindings] +dependencies = ["bindings-swift", "bindings-kotlin"] ##################################### iOS ##################################### @@ -162,14 +162,14 @@ dependencies = ["ffi-swift", "ffi-kotlin"] plugin = "detect-release" [tasks.ios-device] -dependencies = ["ffi-swift"] +dependencies = ["bindings-swift"] env = { "IPHONEOS_DEPLOYMENT_TARGET"="16.0" } condition = { platforms = ["mac"] } command = "cargo" args = ["rustc", "--target", "aarch64-apple-ios", "--crate-type=cdylib", "--crate-type=staticlib", "--release", "--locked", "--", "-C", "strip=symbols"] [tasks.ios-simulator-x86] -dependencies = ["ffi-swift"] +dependencies = ["bindings-swift"] condition = { platforms = ["mac"] } command = "cargo" args = [ @@ -184,7 +184,7 @@ args = [ ] [tasks.ios-simulator-arm] -dependencies = ["ffi-swift"] +dependencies = ["bindings-swift"] # override CFLAGS to fix ring compilation env = { "CRATE_CC_NO_DEFAULTS" = 1, "TARGET_CFLAGS" = { script = ["echo \"--target=arm64-apple-ios14.0.0-simulator -mios-simulator-version-min=14.0 -isysroot `xcrun --show-sdk-path --sdk iphonesimulator`\""] } } condition = { platforms = ["mac"] } @@ -230,7 +230,7 @@ args = [ "--", "-C", "strip=symbols" ] -dependencies = ["compile-ffi-kotlin-android", "android-env"] +dependencies = ["bindings-kotlin-android", "android-env"] [tasks.android-armv8] command = "cargo" @@ -244,7 +244,7 @@ args = [ "--", "-C", "strip=symbols" ] -dependencies = ["compile-ffi-kotlin-android", "android-env"] +dependencies = ["bindings-kotlin-android", "android-env"] [tasks.android-x86] command = "cargo" @@ -260,7 +260,7 @@ args = [ "-l", "static=clang_rt.builtins-x86_64-android", "-L", "${CLANG_RT_DIR}" ] -dependencies = ["compile-ffi-kotlin-android", "android-env"] +dependencies = ["bindings-kotlin-android", "android-env"] [tasks.android] dependencies = ["android-armv7", "android-armv8", "android-x86"] @@ -279,7 +279,7 @@ args = [ "--", "-C", "strip=symbols" ] -dependencies = ["compile-ffi-kotlin-jvm"] +dependencies = ["bindings-kotlin-jvm"] condition = { platforms = ["mac"] } [tasks.jvm-aarch64-darwin] @@ -294,7 +294,7 @@ args = [ "--", "-C", "strip=symbols" ] -dependencies = ["compile-ffi-kotlin-jvm"] +dependencies = ["bindings-kotlin-jvm"] condition = { platforms = ["mac"] } [tasks.jvm-x86-linux] @@ -309,7 +309,7 @@ args = [ "--", "-C", "strip=symbols" ] -dependencies = ["compile-ffi-kotlin-jvm"] +dependencies = ["bindings-kotlin-jvm"] condition = { platforms = ["linux"] } [tasks.jvm-darwin] From 2558615a7f6df56c8675ad9c671f67ec8ffad455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Stankovi=C4=87?= Date: Fri, 21 Feb 2025 12:45:41 +0100 Subject: [PATCH 4/7] chore: ci: simplify target selection in build-ios --- .github/workflows/build-ios.yml | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index d700d26479..1ed6942808 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -16,27 +16,18 @@ jobs: runs-on: self-hosted strategy: matrix: - task: - - ios-device - - ios-simulator-x86 - - ios-simulator-arm + include: + - task: ios-device + target: aarch64-apple-ios + - task: ios-simulator-x86 + target: x86_64-apple-ios + - task: ios-simulator-arm + target: aarch64-apple-ios-sim steps: - uses: actions/checkout@v4 - - - name: determine rust target - id: rust-target - run: | - if [[ "${{ matrix.task }}" == "ios-device" ]]; then - echo "target=aarch64-apple-ios" >> $GITHUB_ENV - elif [[ "${{ matrix.task }}" == "ios-simulator-x86" ]]; then - echo "target=x86_64-apple-ios" >> $GITHUB_ENV - elif [[ "${{ matrix.task }}" == "ios-simulator-arm" ]]; then - echo "target=aarch64-apple-ios-sim" >> $GITHUB_ENV - fi - - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - target: ${{ env.target }} + target: ${{ matrix.target }} - name: setup cargo-make uses: davidB/rust-cargo-make@v1 From 7bdcc46192b278be2cc024327c5cefcc1b5605ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Stankovi=C4=87?= Date: Fri, 21 Feb 2025 15:50:06 +0100 Subject: [PATCH 5/7] chore: crypto-ffi: uncouple bindings generation task from build tasks We now have two steps instead of one: cargo make android{-x86,-armv7,armv8} (to build the binaries) cargo make bindings-kotlin-android (to generate bindings) --- crypto-ffi/Makefile.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crypto-ffi/Makefile.toml b/crypto-ffi/Makefile.toml index 50cda1939c..5d3b2da18f 100644 --- a/crypto-ffi/Makefile.toml +++ b/crypto-ffi/Makefile.toml @@ -230,7 +230,7 @@ args = [ "--", "-C", "strip=symbols" ] -dependencies = ["bindings-kotlin-android", "android-env"] +dependencies = ["android-env"] [tasks.android-armv8] command = "cargo" @@ -244,7 +244,7 @@ args = [ "--", "-C", "strip=symbols" ] -dependencies = ["bindings-kotlin-android", "android-env"] +dependencies = ["android-env"] [tasks.android-x86] command = "cargo" @@ -260,7 +260,7 @@ args = [ "-l", "static=clang_rt.builtins-x86_64-android", "-L", "${CLANG_RT_DIR}" ] -dependencies = ["bindings-kotlin-android", "android-env"] +dependencies = ["android-env"] [tasks.android] dependencies = ["android-armv7", "android-armv8", "android-x86"] From 72ec9496c9aca17241e8f30ac6034b274c4b2651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Stankovi=C4=87?= Date: Fri, 21 Feb 2025 15:15:30 +0100 Subject: [PATCH 6/7] chore: ci: parallelize Android builds This also drops the run ID from artifact names (artifacts are per-run anyway) and minimizes the data stored in artifacts. --- .github/workflows/bindings.yml | 7 +-- .github/workflows/build-android.yml | 77 +++++++++++++++++++++------ .github/workflows/publish-android.yml | 7 +-- 3 files changed, 63 insertions(+), 28 deletions(-) diff --git a/.github/workflows/bindings.yml b/.github/workflows/bindings.yml index 20028dff24..a27032afdb 100644 --- a/.github/workflows/bindings.yml +++ b/.github/workflows/bindings.yml @@ -42,12 +42,7 @@ jobs: uses: gradle/actions/wrapper-validation@v4 - uses: actions/download-artifact@v4 with: - name: android-target-${{ github.run_id }} - path: target - - uses: actions/download-artifact@v4 - with: - name: android-${{ github.run_id }} - path: crypto-ffi/bindings + name: android - name: enable kvm group perms run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index bbc93f14ac..4f0d8583aa 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -14,6 +14,42 @@ jobs: build-android: if: github.repository == 'wireapp/core-crypto' runs-on: ubuntu-latest + strategy: + matrix: + include: + - task: android-armv7 + target: armv7-linux-androideabi + - task: android-armv8 + target: aarch64-linux-android + - task: android-x86 + target: x86_64-linux-android + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + target: ${{ matrix.target }} + - name: setup cargo-make + uses: davidB/rust-cargo-make@v1 + - name: setup android sdk + uses: android-actions/setup-android@v3 + - name: install ndk 25 + run: echo "y" | sdkmanager --install "ndk;25.2.9519653" + - name: build android package + env: + ANDROID_NDK_HOME: /usr/local/lib/android/sdk/ndk/25.2.9519653 + run: | + cd crypto-ffi + cargo make ${{ matrix.task }} + - uses: actions/upload-artifact@v4 + with: + name: android-target-${{ matrix.target }} + path: target/${{ matrix.target }}/release/libcore_crypto_ffi.* + retention-days: 1 + + package-android: + if: github.repository == 'wireapp/core-crypto' + runs-on: ubuntu-latest + needs: build-android steps: - uses: actions/checkout@v4 - name: set up jdk 17 @@ -25,34 +61,43 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: validate gradle wrapper uses: gradle/actions/wrapper-validation@v4 - - name: "setup rust" - uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts - with: - rustflags: '' - target: "armv7-linux-androideabi,aarch64-linux-android,x86_64-linux-android" - name: setup cargo-make uses: davidB/rust-cargo-make@v1 - name: setup android sdk uses: android-actions/setup-android@v3 - name: install ndk 25 run: echo "y" | sdkmanager --install "ndk;25.2.9519653" - - name: build android package - env: - ANDROID_NDK_HOME: /usr/local/lib/android/sdk/ndk/25.2.9519653 + + - name: download armv7-linux-androideabi binaries + uses: actions/download-artifact@v4 + with: + name: android-target-armv7-linux-androideabi + path: target/armv7-linux-androideabi/release + + - name: download aarch64-linux-android binaries + uses: actions/download-artifact@v4 + with: + name: android-target-aarch64-linux-android + path: target/aarch64-linux-android/release + + - name: download x86_64-linux-android binaries + uses: actions/download-artifact@v4 + with: + name: android-target-x86_64-linux-android + path: target/x86_64-linux-android/release + + - name: generate bindings run: | cd crypto-ffi - cargo make android + cargo make bindings-kotlin-android - name: build package run: | cd crypto-ffi/bindings ./gradlew android:build -x lint -x lintRelease - uses: actions/upload-artifact@v4 with: - name: android-target-${{ github.run_id }} - path: target/*android* - retention-days: 1 - - uses: actions/upload-artifact@v4 - with: - name: android-${{ github.run_id }} - path: crypto-ffi/bindings + name: android + path: | + crypto-ffi/bindings + target/*android* retention-days: 1 diff --git a/.github/workflows/publish-android.yml b/.github/workflows/publish-android.yml index 7fe7afc023..1e439bfc12 100644 --- a/.github/workflows/publish-android.yml +++ b/.github/workflows/publish-android.yml @@ -45,12 +45,7 @@ jobs: run: echo "y" | sdkmanager --install "ndk;25.2.9519653" - uses: actions/download-artifact@v4 with: - name: android-target-${{ github.run_id }} - path: target - - uses: actions/download-artifact@v4 - with: - name: android-${{ github.run_id }} - path: crypto-ffi/bindings + name: android - name: publish package run: | cd crypto-ffi/bindings From c30c5fb9606724f878b7147f75f2c1b5037b6eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Stankovi=C4=87?= Date: Fri, 21 Feb 2025 17:32:15 +0100 Subject: [PATCH 7/7] chore: fix 'useless conversion to the same type' warnings These were emitted by clippy. --- crypto-ffi/src/generic/mod.rs | 2 +- crypto-ffi/src/wasm/context/proteus.rs | 7 +++---- crypto-ffi/src/wasm/mod.rs | 7 +++---- crypto/src/mls/conversation/commit_delay.rs | 1 - interop/src/clients/corecrypto/ffi.rs | 2 +- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/crypto-ffi/src/generic/mod.rs b/crypto-ffi/src/generic/mod.rs index 6e28e123fb..dfdf2a3362 100644 --- a/crypto-ffi/src/generic/mod.rs +++ b/crypto-ffi/src/generic/mod.rs @@ -492,7 +492,7 @@ impl UniffiCustomTypeConverter for Ciphersuites { fn into_custom(val: Self::Builtin) -> uniffi::Result { val.iter().try_fold(Self(vec![]), |mut acc, c| -> uniffi::Result { - let cs = core_crypto::prelude::CiphersuiteName::try_from(*c).map(Into::into)?; + let cs = core_crypto::prelude::CiphersuiteName::try_from(*c)?; acc.0.push(cs); Ok(acc) }) diff --git a/crypto-ffi/src/wasm/context/proteus.rs b/crypto-ffi/src/wasm/context/proteus.rs index 84042541e2..07257e5505 100644 --- a/crypto-ffi/src/wasm/context/proteus.rs +++ b/crypto-ffi/src/wasm/context/proteus.rs @@ -232,7 +232,7 @@ impl CoreCryptoContext { let context = self.inner.clone(); proteus_impl! {{ - context.proteus_fingerprint().await.map_err(CoreCryptoError::from).map(Into::into) + context.proteus_fingerprint().await.map_err(CoreCryptoError::from) } or throw WasmCryptoResult<_> } } @@ -247,7 +247,6 @@ impl CoreCryptoContext { .proteus_fingerprint_local(&session_id) .await .map_err(CoreCryptoError::from) - .map(Into::into) } or throw WasmCryptoResult<_> } } @@ -259,7 +258,7 @@ impl CoreCryptoContext { proteus_impl! {{ context.proteus_fingerprint_remote(&session_id).await - .map_err(CoreCryptoError::from).map(Into::into) + .map_err(CoreCryptoError::from) } or throw WasmCryptoResult<_> } } @@ -269,7 +268,7 @@ impl CoreCryptoContext { pub fn proteus_fingerprint_prekeybundle(prekey: Box<[u8]>) -> WasmCryptoResult { proteus_impl!({ core_crypto::proteus::ProteusCentral::fingerprint_prekeybundle(&prekey) - .map_err(Into::into).map(Into::into) + .map_err(Into::into) } or throw WasmCryptoResult<_>) } diff --git a/crypto-ffi/src/wasm/mod.rs b/crypto-ffi/src/wasm/mod.rs index d360e906b4..85da67e48b 100644 --- a/crypto-ffi/src/wasm/mod.rs +++ b/crypto-ffi/src/wasm/mod.rs @@ -1708,7 +1708,7 @@ impl CoreCrypto { let central = self.inner.clone(); proteus_impl! {{ - central.proteus_fingerprint().await.map_err(CoreCryptoError::from).map(Into::into) + central.proteus_fingerprint().await.map_err(CoreCryptoError::from) } or throw WasmCryptoResult<_> } } @@ -1724,7 +1724,6 @@ impl CoreCrypto { .proteus_fingerprint_local(&session_id) .await .map_err(CoreCryptoError::from) - .map(Into::into) } or throw WasmCryptoResult<_> } } @@ -1737,7 +1736,7 @@ impl CoreCrypto { proteus_impl! {{ central.proteus_fingerprint_remote(&session_id).await - .map_err(CoreCryptoError::from).map(Into::into) + .map_err(CoreCryptoError::from) } or throw WasmCryptoResult<_> } } @@ -1748,7 +1747,7 @@ impl CoreCrypto { pub fn proteus_fingerprint_prekeybundle(prekey: Box<[u8]>) -> WasmCryptoResult { proteus_impl!({ core_crypto::proteus::ProteusCentral::fingerprint_prekeybundle(&prekey) - .map_err(Into::into).map(Into::into) + .map_err(Into::into) } or throw WasmCryptoResult<_>) } diff --git a/crypto/src/mls/conversation/commit_delay.rs b/crypto/src/mls/conversation/commit_delay.rs index 3f36b75a79..ee45494b8f 100644 --- a/crypto/src/mls/conversation/commit_delay.rs +++ b/crypto/src/mls/conversation/commit_delay.rs @@ -58,7 +58,6 @@ impl MlsConversation { Result::<_, MlsError>::Ok(acc) }) - .map_err(MlsError::from) .unwrap_or_default(); // Post-commit visualization of the number of members after remove proposals diff --git a/interop/src/clients/corecrypto/ffi.rs b/interop/src/clients/corecrypto/ffi.rs index fafa92c32c..610f1a6dc0 100644 --- a/interop/src/clients/corecrypto/ffi.rs +++ b/interop/src/clients/corecrypto/ffi.rs @@ -195,7 +195,7 @@ impl crate::clients::EmulatedProteusClient for CoreCryptoFfiClient { async fn init(&mut self) -> Result<()> { self.cc .transaction(TransactionHelper::new(move |context| async move { - context.proteus_init().await.map_err(Into::into) + context.proteus_init().await })) .await?; Ok(())