Improve Fuzz GitHub Actions CI (#1080) #3741
Workflow file for this run
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: [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 (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 |