build: use reusable workflows in ci [WPB-14852] #5170
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: Rust | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.ref }}" | |
cancel-in-progress: true | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- '*' | |
pull_request: | |
env: | |
RUST_BACKTRACE: 1 | |
CARGO_TERM_COLOR: always | |
CARGO_NET_GIT_FETCH_WITH_CLI: true | |
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse | |
jobs: | |
prepare_wasm: | |
if: github.repository == 'wireapp/core-crypto' | |
uses: ./.github/workflows/rust-build.yml | |
check: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
tool: | |
- name: fmt | |
trailer: --all -- --check | |
- name: clippy | |
trailer: -- -D warnings | |
- name: check | |
trailer: --tests | |
target: ["", "--target wasm32-unknown-unknown"] | |
exclude: | |
- {tool: {name: fmt}, | |
target: "--target wasm32-unknown-unknown"} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
components: rustfmt, clippy | |
rustflags: '' | |
target: wasm32-unknown-unknown | |
- run: cargo ${{ matrix.tool.name }} ${{ matrix.target }} ${{ matrix.tool.trailer }} | |
test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
rustflags: '' | |
- uses: taiki-e/install-action@nextest | |
- name: "Test CoreCrypto" | |
run: cargo nextest run --verbose | |
- name: "Test CoreCrypto documentation" | |
run: cargo test --doc | |
- name: "Upload test results" | |
if: startsWith(github.ref, 'refs/tags/') | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: target/nextest/default/junit.xml | |
test-keystore-regressions: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
rustflags: '' | |
- name: "Test Keystore regressions" | |
run: | | |
cd extras/keystore-regression-versions | |
cargo run | |
proteus-test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
rustflags: '' | |
- uses: taiki-e/install-action@nextest | |
- name: "Test CoreCrypto's proteus implementation" | |
run: cargo nextest run --verbose --features proteus,cryptobox-migrate,proteus-keystore proteus | |
wasm-test: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
crate_paths: [ "keystore", "mls-provider" ] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
target: wasm32-unknown-unknown | |
rustflags: '' | |
- uses: browser-actions/setup-chrome@latest | |
id: setup-chrome | |
with: | |
chrome-version: stable | |
- run: | | |
echo "CHROME_PATH=${{ steps.setup-chrome.outputs.chrome-path }}" >> $GITHUB_ENV | |
- name: Install wasm-pack | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: wasm-pack | |
- name: Run tests (wasm) | |
run: wasm-pack test --headless --chrome ./${{ matrix.crate_paths }} | |
# TODO: pending a proper solution to fix the size limit for WASM tests. Tracking issue: WPB-9581 | |
wasm-core-test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
target: wasm32-unknown-unknown | |
rustflags: '' | |
- uses: browser-actions/setup-chrome@latest | |
id: setup-chrome | |
with: | |
chrome-version: stable | |
- run: | | |
echo "CHROME_PATH=${{ steps.setup-chrome.outputs.chrome-path }}" >> $GITHUB_ENV | |
- name: Install wasm-pack | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: wasm-pack | |
- name: Run core tests (wasm) | |
run: sh crypto-ffi/bindings/js/test/wasm-tests.sh | |
proteus-wasm-test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
target: wasm32-unknown-unknown | |
rustflags: '' | |
- uses: browser-actions/setup-chrome@latest | |
id: setup-chrome | |
with: | |
chrome-version: stable | |
- run: | | |
echo "CHROME_PATH=${{ steps.setup-chrome.outputs.chrome-path }}" >> $GITHUB_ENV | |
- name: Install wasm-pack | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: wasm-pack | |
- name: Run tests (wasm) | |
run: | | |
wasm-pack test --headless --chrome ./keystore -F "proteus-keystore" -- proteus | |
wasm-pack test --headless --chrome ./crypto -F "proteus,cryptobox-migrate" -- proteus | |
e2e-interop-test: | |
runs-on: ubuntu-latest | |
needs: prepare_wasm | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
target: wasm32-unknown-unknown | |
rustflags: '' | |
- uses: browser-actions/setup-chrome@latest | |
id: setup-chrome | |
with: | |
chrome-version: stable | |
- run: | | |
echo "CHROME_PATH=${{ steps.setup-chrome.outputs.chrome-path }}" >> $GITHUB_ENV | |
- name: retrieve artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: build-wasm-${{ github.run_id }} | |
path: crypto-ffi/bindings/js | |
- name: Run E2E interop test | |
run: cargo run --bin interop | |
hack: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 # this implicitly caches Rust tools and build artifacts | |
with: | |
rustflags: '' | |
- uses: taiki-e/install-action@cargo-hack | |
- name: cargo/hack (verify features compile in isolation) | |
run: cargo hack check --each-feature --exclude-features uniffi --no-dev-deps |