name: Bindings tests on: workflow_dispatch: push: branches: [main] pull_request: branches: [main] types: - opened - reopened - synchronize - ready_for_review env: CARGO_TERM_COLOR: always MATRIX_SDK_CRYPTO_NODEJS_PATH: bindings/matrix-sdk-crypto-nodejs MATRIX_SDK_CRYPTO_JS_PATH: bindings/matrix-sdk-crypto-js jobs: xtask-linux: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v2 - name: Install Protoc uses: arduino/setup-protoc@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Check xtask cache uses: actions/cache@v3 id: xtask-cache with: path: target/debug/xtask key: xtask-linux-${{ hashFiles('Cargo.toml', 'xtask/**') }} - name: Install rust stable toolchain if: steps.xtask-cache.outputs.cache-hit != 'true' uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Build if: steps.xtask-cache.outputs.cache-hit != 'true' uses: actions-rs/cargo@v1 with: command: build args: -p xtask test-uniffi-codegen: name: Test UniFFI bindings generation needs: xtask-linux if: github.event_name == 'push' || !github.event.pull_request.draft runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Install Protoc uses: arduino/setup-protoc@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true - name: Load cache uses: Swatinem/rust-cache@v1 - name: Get xtask uses: actions/cache@v3 with: path: target/debug/xtask key: xtask-linux-${{ hashFiles('Cargo.toml', 'xtask/**') }} - name: Build library & generate bindings run: target/debug/xtask ci bindings test-matrix-sdk-crypto-nodejs: name: ${{ matrix.os-name }} [m]-crypto-nodejs, v${{ matrix.node-version }} if: github.event_name == 'push' || !github.event.pull_request.draft runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: os: [ubuntu-latest] node-version: [14.0, 16.0, 18.0, 19.0] include: - os: ubuntu-latest os-name: 🐧 - os: macos-latest os-name: 🍏 node-version: 18.0 - node-version: 18.0 build-doc: true steps: - name: Checkout the repo uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true - name: Load cache uses: Swatinem/rust-cache@v1 - name: Install Node.js uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Install NPM dependencies working-directory: ${{ env.MATRIX_SDK_CRYPTO_NODEJS_PATH }} run: npm install - name: Build the Node.js binding working-directory: ${{ env.MATRIX_SDK_CRYPTO_NODEJS_PATH }} run: npm run release-build - name: Test the Node.js binding working-directory: ${{ env.MATRIX_SDK_CRYPTO_NODEJS_PATH }} run: npm run test # Building in dev-mode and copy lib in failure case - name: Build the Node.js binding in non-release if: failure() working-directory: ${{ env.MATRIX_SDK_CRYPTO_NODEJS_PATH }} run: | cp *.node release-mode-lib.node npm run build - uses: actions/upload-artifact@v3 if: failure() with: name: Failure Files path: | bindings/matrix-sdk-crypto-nodejs/*.node /var/crash/*.crash - if: ${{ matrix.build-doc }} name: Build the documentation working-directory: ${{ env.MATRIX_SDK_CRYPTO_NODEJS_PATH }} run: npm run doc test-matrix-sdk-crypto-js: name: 🕸 [m]-crypto-js if: github.event_name == 'push' || !github.event.pull_request.draft runs-on: ubuntu-latest steps: - name: Checkout the repo uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable target: wasm32-unknown-unknown profile: minimal override: true - name: Load cache uses: Swatinem/rust-cache@v1 - name: Install Node.js uses: actions/setup-node@v3 with: node-version: 18.0 - name: Install NPM dependencies working-directory: ${{ env.MATRIX_SDK_CRYPTO_JS_PATH }} run: npm install - name: Build the WebAssembly + JavaScript binding working-directory: ${{ env.MATRIX_SDK_CRYPTO_JS_PATH }} run: npm run build - name: Test the JavaScript binding working-directory: ${{ env.MATRIX_SDK_CRYPTO_JS_PATH }} run: npm run test - name: Build the documentation working-directory: ${{ env.MATRIX_SDK_CRYPTO_JS_PATH }} run: npm run doc xtask-macos: runs-on: macos-12 steps: - name: Checkout repo uses: actions/checkout@v2 - name: Install Protoc uses: arduino/setup-protoc@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Check xtask cache uses: actions/cache@v3 id: xtask-cache with: path: target/debug/xtask key: xtask-macos-${{ hashFiles('Cargo.toml', 'xtask/**') }} - name: Install rust stable toolchain if: steps.xtask-cache.outputs.cache-hit != 'true' uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Build if: steps.xtask-cache.outputs.cache-hit != 'true' uses: actions-rs/cargo@v1 with: command: build args: -p xtask test-apple: name: matrix-rust-components-swift needs: xtask-macos runs-on: macos-12 if: github.event_name == 'push' || !github.event.pull_request.draft steps: - name: Checkout uses: actions/checkout@v1 - name: Install Protoc uses: arduino/setup-protoc@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: nightly profile: minimal override: true - name: Install aarch64-apple-ios target run: rustup target install aarch64-apple-ios - name: Load cache uses: Swatinem/rust-cache@v1 - name: Get xtask uses: actions/cache@v3 with: path: target/debug/xtask key: xtask-macos-${{ hashFiles('Cargo.toml', 'xtask/**') }} - name: Build library & bindings run: target/debug/xtask swift build-library - name: Run XCTests working-directory: bindings/apple run: swift test - name: Build Framework run: cargo xtask swift build-framework --only-target=aarch64-apple-ios