Skip to content

Improve Memory API (#1082) #3749

Improve Memory API (#1082)

Improve Memory API (#1082) #3749

Workflow file for this run

name: Rust - Continuous Integration
on:
push:
branches: [master]
pull_request:
branches: [master]
# 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 Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Build (default features)
run: cargo build --workspace
- name: Build (all features)
run: cargo build --workspace --all-features
- name: Build (no_std + no-hash-maps)
run: cargo build -p wasmi_collections --no-default-features --features no-hash-maps
- name: Build (no_std)
run: cargo build --workspace --lib --no-default-features --target x86_64-unknown-none --exclude wasmi_cli --exclude wasmi_wasi --exclude wasmi_fuzz
- name: Build (wasm32)
run: cargo build --workspace --lib --no-default-features --target wasm32-unknown-unknown --exclude wasmi_cli --exclude wasmi_wasi --exclude wasmi_fuzz
test-asan:
name: Test (Address Sanitizer)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@nightly
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- 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: "--cfg debug_assertions -Zsanitizer=address"
run: cargo build --tests --workspace -Zbuild-std --target x86_64-unknown-linux-gnu
- name: Test
env:
RUSTFLAGS: "--cfg debug_assertions -Zsanitizer=address"
run: cargo test --workspace --tests -Zbuild-std --target x86_64-unknown-linux-gnu
test:
name: Test
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@stable
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- name: Build (default features)
env:
RUSTFLAGS: "--cfg debug_assertions"
run: cargo build --tests --workspace --release
- name: Test (default features)
env:
RUSTFLAGS: "--cfg debug_assertions"
run: cargo test --workspace --release
- name: Build (all features)
env:
RUSTFLAGS: "--cfg debug_assertions"
run: cargo build --tests --workspace --release --all-features
- name: Test (all features)
env:
RUSTFLAGS: "--cfg debug_assertions"
run: cargo test --workspace --release --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
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 Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Check Docs
env:
RUSTDOCFLAGS: "-D warnings"
run: cargo doc --workspace --all-features --no-deps --document-private-items
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
- uses: dtolnay/rust-toolchain@nightly
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- 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-translate:
name: Fuzz (Translation)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@nightly
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
~/target/x86_64-unknown-linux-gnu/
~/target/x86_64-unknown-linux-gnu/release/
~/fuzz/corpus/translate/
~/fuzz/curpus/translate_metered/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- name: Install cargo-fuzz
run: |
# Note: We use `|| true` because cargo install returns an error
# if cargo-udeps was already installed on the CI runner.
cargo install cargo-fuzz || true
- name: Build Fuzzing
run: cargo fuzz build translate
- name: Fuzz (Translation)
run: cargo fuzz run translate -j 2 --verbose -- -max_total_time=60 # 1 minute of fuzzing
- name: Fuzz (Translation) + fuel
run: cargo fuzz run translate_metered -j 2 --verbose -- -max_total_time=60 # 1 minute of fuzzing
fuzz-execute:
name: Fuzz (Execution)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@nightly
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
~/target/x86_64-unknown-linux-gnu/
~/target/x86_64-unknown-linux-gnu/release/
~/target/release/
~/target/debug/
~/fuzz/corpus/execute/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- name: Install cargo-fuzz
run: |
# Note: We use `|| true` because cargo install returns an error
# if cargo-udeps was already installed on the CI runner.
cargo install cargo-fuzz || true
- name: Build Fuzzing
run: cargo fuzz build execute
- name: Fuzz (Execution)
run: cargo fuzz run execute -j 2 --verbose -- -max_total_time=120 # 2 minutes of fuzzing
fuzz-differential:
name: Fuzz (Differential)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@nightly
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
~/target/x86_64-unknown-linux-gnu/
~/target/x86_64-unknown-linux-gnu/release/
~/target/release/
~/target/debug/
~/fuzz/corpus/execute/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- name: Install cargo-fuzz
run: |
# Note: We use `|| true` because cargo install returns an error
# if cargo-udeps was already installed on the CI runner.
cargo install cargo-fuzz || true
- name: Build Fuzzing
run: cargo fuzz build differential
- name: Fuzz (Differential)
run: cargo fuzz run differential -j 2 --verbose -- -max_total_time=120 # 2 minutes of fuzzing
miri:
name: Miri
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@nightly
with:
components: miri
targets: x86_64-unknown-linux-gnu
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/bin/cargo-nextest
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
~/target/miri/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- 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 (--lib)
run: cargo miri nextest run --target x86_64-unknown-linux-gnu --lib --workspace
- name: Miri (--doc)
run: cargo miri test --doc --workspace --target x86_64-unknown-linux-gnu
miri-spec:
name: Miri (spec)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@nightly
with:
components: miri
targets: x86_64-unknown-linux-gnu
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/bin/cargo-nextest
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
~/target/miri/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- 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 - 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
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: dtolnay/rust-toolchain@nightly
with:
components: clippy
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- name: Clippy (default features)
run: cargo clippy --workspace -- -D warnings
- name: Clippy (all features)
run: cargo clippy --workspace --all-features -- -D warnings
- name: Clippy (no_std)
run: cargo clippy --workspace --no-default-features -- -D warnings
- name: Clippy (tests)
run: cargo clippy --workspace --tests -- -D warnings
- name: Clippy (benches)
run: cargo clippy --workspace --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:
fetch-depth: 0
- uses: dtolnay/rust-toolchain@stable
- name: Set up Cargo cache
uses: actions/cache@v4
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/target/
key: ${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-${{ github.job }}-
- name: Checkout Submodules
run: git submodule update --init --recursive
- name: Run cargo-tarpaulin (default features)
uses: actions-rs/[email protected]
with:
version: "0.18.0"
args: --workspace
- 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