feat: log errors at ffi boundary [WPB-14355] #4182
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build bindings | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.ref }}" | |
cancel-in-progress: true | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
env: | |
CARGO_TERM_COLOR: always | |
CARGO_NET_GIT_FETCH_WITH_CLI: true | |
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse | |
jobs: | |
build-android: | |
uses: ./.github/workflows/build-android.yml | |
build-jvm-linux: | |
uses: ./.github/workflows/build-jvm-linux.yml | |
test-android: | |
if: github.repository == 'wireapp/core-crypto' | |
runs-on: ubuntu-latest | |
needs: build-android | |
steps: | |
- uses: actions/checkout@v4 | |
- name: set up jdk 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: "17" | |
distribution: "adopt" | |
- name: gradle setup | |
uses: gradle/actions/setup-gradle@v4 | |
- name: validate gradle wrapper | |
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: 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 | |
sudo udevadm control --reload-rules | |
sudo udevadm trigger --name-match=kvm | |
- name: android instrumentation tests | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: 32 | |
arch: x86_64 | |
working-directory: ./crypto-ffi/bindings | |
script: ./gradlew android:connectedAndroidTest | |
build-and-test-jvm: | |
if: github.repository == 'wireapp/core-crypto' | |
runs-on: ubuntu-latest | |
needs: build-jvm-linux | |
steps: | |
- uses: actions/checkout@v4 | |
- name: set up jdk 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: "17" | |
distribution: "adopt" | |
- name: gradle setup | |
uses: gradle/actions/setup-gradle@v4 | |
- name: validate gradle wrapper | |
uses: gradle/actions/wrapper-validation@v4 | |
- name: download linux library | |
uses: actions/download-artifact@v4 | |
with: | |
name: jvm-linux-so-file-${{ github.run_id }} | |
path: target/x86_64-unknown-linux-gnu/release | |
- name: download linux bindings | |
uses: actions/download-artifact@v4 | |
with: | |
name: jvm-linux-bindings-${{ github.run_id }} | |
path: crypto-ffi/bindings | |
- name: build and test jvm package | |
run: | | |
cd crypto-ffi/bindings | |
./gradlew jvm:build -x lint -x lintRelease | |
build-swift: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
task: | |
- ios-device | |
- ios-simulator-x86 | |
- ios-simulator-arm | |
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 }} | |
- name: setup cargo-make | |
uses: davidB/rust-cargo-make@v1 | |
- name: build ${{ matrix.task }} | |
run: | | |
cd crypto-ffi | |
cargo make ${{ matrix.task }} | |
- name: upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{github.event.number}}-${{ matrix.task }} | |
path: target | |
retention-days: 1 | |
overwrite: 'true' | |
# Only needs to be uploaded once, this step finishes fastest. | |
- name: upload ffi artifact | |
if: startsWith(matrix.task, 'ios-simulator-arm') | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{github.event.number}}-swift-ffi | |
path: crypto-ffi/bindings/swift/WireCoreCrypto | |
retention-days: 1 | |
overwrite: 'true' | |
create-xcframework: | |
needs: build-swift | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: download artifacts for ios | |
uses: actions/download-artifact@v4 | |
with: | |
path: target | |
pattern: ${{github.event.number}}-ios-* | |
merge-multiple: 'true' | |
- name: download ffi artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{github.event.number}}-swift-ffi | |
path: crypto-ffi/bindings/swift/WireCoreCrypto | |
- name: create xcframework | |
run: | | |
cd crypto-ffi/bindings/swift | |
./build-xcframework.sh | |
build-and-test-wasm: | |
runs-on: ubuntu-latest | |
env: | |
# ensures we have same flags as when publishing | |
RUSTFLAGS: "-D warnings -W unreachable-pub" | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: browser-actions/setup-chrome@latest | |
id: setup-chrome | |
with: | |
chrome-version: stable | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
target: wasm32-unknown-unknown | |
- uses: oven-sh/setup-bun@v2 | |
with: | |
bun-version: latest | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
- name: install wasm-pack | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: wasm-pack | |
- uses: davidB/rust-cargo-make@v1 | |
- name: build wasm | |
run: | | |
cd crypto-ffi | |
cargo make wasm | |
- name: build ts | |
run: | | |
cd crypto-ffi/bindings/js | |
bun install | |
bun run build | |
- name: lint | |
run: | | |
cd crypto-ffi/bindings/js | |
bun eslint . --max-warnings=0 | |
- name: check all ts files | |
run: | | |
cd crypto-ffi/bindings/js | |
bun tsc --noEmit | |
- name: test | |
run: | | |
cd crypto-ffi/bindings/js | |
bun run test |