WIP: Add optional NaN canonicalization #4261
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 - Continuous Integration | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
# disable running jobs on earlier commits | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
check: | |
name: Build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: wasm32-unknown-unknown, x86_64-unknown-none | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Build (default features) | |
run: cargo build --workspace --locked --verbose | |
- name: Build (all features) | |
run: cargo build --workspace --locked --all-features --verbose | |
- name: Build (no_std) | |
run: >- | |
cargo build | |
--package wasmi | |
--package wasmi_c_api_impl | |
--locked | |
--lib | |
--no-default-features | |
--target x86_64-unknown-none | |
--verbose | |
- name: Build (no_std + no-hash-maps) | |
run: >- | |
cargo build | |
--package wasmi | |
--locked | |
--lib | |
--no-default-features | |
--features no-hash-maps | |
--target x86_64-unknown-none | |
--verbose | |
- name: Build (no_std + wasm32) | |
run: >- | |
cargo build | |
--package wasmi | |
--package wasmi_c_api_impl | |
--locked | |
--lib | |
--no-default-features | |
--target wasm32-unknown-unknown | |
--verbose | |
- name: Build (CMake) | |
run: | | |
cmake --version | |
cmake -S crates/c_api -B target/c_api --install-prefix "$(pwd)/artifacts" | |
cmake --build target/c_api --target install | |
test-asan: | |
name: Test (Address Sanitizer) | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@nightly | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Show Rust Toolchain | |
run: rustup show | |
- name: "Add Rust Component: `rust-src`" | |
run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu | |
- name: Build Tests | |
env: | |
RUSTFLAGS: "-C debug-assertions -Zsanitizer=address" | |
run: cargo build --tests --workspace --locked -Zbuild-std --target x86_64-unknown-linux-gnu --verbose | |
- name: Test | |
env: | |
RUSTFLAGS: "-C debug-assertions -Zsanitizer=address" | |
run: cargo test --workspace --locked --tests -Zbuild-std --target x86_64-unknown-linux-gnu | |
min-version: | |
name: Check mininum supported Rust version | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/[email protected] | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo check --workspace | |
test: | |
name: Test | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Build (default features) | |
env: | |
RUSTFLAGS: "--cfg debug_assertions" | |
run: cargo build --tests --workspace --locked --verbose | |
- name: Test (default features) | |
env: | |
RUSTFLAGS: "--cfg debug_assertions" | |
run: cargo test --workspace --locked | |
- name: Build (all features) | |
env: | |
RUSTFLAGS: "--cfg debug_assertions" | |
run: cargo build --tests --workspace --locked --all-features --verbose | |
- name: Test (all features) | |
env: | |
RUSTFLAGS: "--cfg debug_assertions" | |
run: cargo test --workspace --locked --all-features | |
fmt: | |
name: Formatting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: rustfmt | |
- name: Foramtting | |
run: cargo fmt --all -- --check | |
- name: Formatting (fuzz) | |
run: pushd fuzz && cargo fmt --all -- --check && popd | |
- name: Format (CMake) | |
run: | | |
cmake --version | |
cmake -S crates/c_api -B target/c_api --install-prefix "$(pwd)/artifacts" | |
cmake --build target/c_api --target check-format | |
doc: | |
name: Documentation | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rust-docs, rust-src | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Check Docs | |
env: | |
RUSTDOCFLAGS: "-D warnings" | |
run: cargo doc --workspace --locked --all-features --no-deps --document-private-items | |
- name: Install Doxygen | |
run: | | |
tar --version | |
curl -L https://sourceforge.net/projects/doxygen/files/rel-1.11.0/doxygen-1.11.0.linux.bin.tar.gz/download | tar xzf - -C $GITHUB_WORKSPACE | |
echo "$GITHUB_WORKSPACE/doxygen-1.11.0/bin" >> $GITHUB_PATH | |
- name: Configure CMake for Wasmi C-API | |
run: cmake -S crates/c_api -B target/c_api | |
- name: Generate Docs via Cmake and Doxygen | |
run: cmake --build target/c_api --target doc | |
audit: | |
name: Audit | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Install cargo-audit | |
run: | | |
# Note: We use `|| true` because cargo install returns an error | |
# if cargo-audit was already installed on the CI runner. | |
cargo install cargo-audit || true | |
- name: Check Audit | |
run: cargo audit | |
udeps: | |
name: uDeps | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@nightly | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Install cargo-udeps | |
run: | | |
# Note: We use `|| true` because cargo install returns an error | |
# if cargo-udeps was already installed on the CI runner. | |
cargo install --locked cargo-udeps || true | |
- name: Check uDeps | |
run: cargo udeps --all-targets | |
fuzz: | |
name: Fuzz | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
fuzz_target: ['translate', 'translate_metered', 'execute', 'differential'] | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
# Pin nightly so that it does not invalidate GitHub Actions cache too frequently. | |
toolchain: nightly-2024-09-24 | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
with: | |
cache-directories: | | |
${{ github.workspace }}/hfuzz_target | |
${{ github.workspace }}/hfuzz_workspace | |
- name: Install cargo-honggfuzz and dependencies | |
run: | | |
cargo install honggfuzz || true | |
sudo apt-get update && sudo apt-get install --yes binutils-dev libunwind-dev | |
- name: Run HFuzz | |
env: | |
HFUZZ_RUN_ARGS: "--run_time 120 --verbose --quiet" # 2 minutes of fuzzing | |
run: cargo hfuzz run ${{ matrix.fuzz_target }} | |
miri: | |
name: Miri | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: miri | |
targets: x86_64-unknown-linux-gnu | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Install cargo-nextest | |
run: | | |
# Note: We use `|| true` because cargo install returns an error | |
# if cargo-nextest was already installed on the CI runner. | |
cargo install cargo-nextest || true | |
- name: Miri (setup) | |
run: cargo miri setup --target x86_64-unknown-linux-gnu --lib --workspace --locked | |
- name: Miri (--lib) | |
run: cargo miri nextest run --target x86_64-unknown-linux-gnu --lib --workspace --locked | |
- name: Miri (--doc) | |
run: cargo miri test --target x86_64-unknown-linux-gnu --doc --workspace --locked | |
miri-spec: | |
name: Miri (spec) | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: miri | |
targets: x86_64-unknown-linux-gnu | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Install cargo-nextest | |
run: | | |
# Note: We use `|| true` because cargo install returns an error | |
# if cargo-nextest was already installed on the CI runner. | |
cargo install cargo-nextest || true | |
- name: Miri (setup) | |
run: cargo miri setup --target x86_64-unknown-linux-gnu --locked | |
- name: Miri - Wasm Spec Testsuite (store) | |
# We just run the `store.wast` test since running the entire Wasm spec testsuite | |
# simply takes too long to do on every pull request commit. There exists an entire | |
# CRON job that runs the entire Wasm spec testsuite using miri every night. | |
run: cargo miri nextest run --target x86_64-unknown-linux-gnu ::wasm_store --locked | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: clippy | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Clippy (default features) | |
run: cargo clippy --workspace --locked -- -D warnings | |
- name: Clippy (all features) | |
run: cargo clippy --workspace --locked --all-features -- -D warnings | |
- name: Clippy (no_std) | |
run: cargo clippy --workspace --locked --no-default-features -- -D warnings | |
- name: Clippy (tests) | |
run: cargo clippy --workspace --locked --tests -- -D warnings | |
- name: Clippy (benches) | |
run: cargo clippy --workspace --locked --benches -- -D warnings | |
- name: Clippy (fuzz) | |
run: pushd fuzz && cargo clippy -- -D warnings && popd | |
coverage: | |
name: Coverage | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Set up Rust cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Run cargo-tarpaulin (default features) | |
uses: actions-rs/[email protected] | |
with: | |
version: "0.18.0" | |
args: --workspace --locked | |
- name: Upload to codecov.io | |
uses: codecov/[email protected] | |
with: | |
token: ${{secrets.CODECOV_TOKEN}} | |
- name: Archive code coverage results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: code-coverage-report | |
path: cobertura.xml |