name: Rust
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
toolchain: ["stable", "nightly"]
features:
[
"",
"--no-default-features",
"--no-default-features --features std",
"--no-default-features --features persistent-pool-rayon",
"--no-default-features --features transient-pool",
]
steps:
- uses: actions/checkout@v4
- name: Cache cargo registry & target
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-stable-${{ matrix.features || 'default' }}
- name: Install toolchain
uses: dtolnay/rust-toolchain@nightly
with:
components: clippy
- name: Build
run: cargo build --verbose ${{ matrix.features }}
- name: Test
run: cargo test --verbose ${{ matrix.features }} --features long-tests
- name: Clippy
run: cargo clippy --all-targets ${{ matrix.features }} -- -D warnings --verbose
miri:
name: Miri
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install nightly toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Install miri
run: rustup component add --toolchain nightly-x86_64-unknown-linux-gnu miri
- name: Miri with BasicPool (default)
env:
MIRIFLAGS: -Zmiri-ignore-leaks
run: cargo +nightly miri test --lib --bins --tests --verbose --no-default-features --features std
- name: Miri with OncePool (transient-pool)
run: cargo +nightly miri test --lib --bins --tests --verbose --no-default-features --features transient-pool
wasm:
name: Check (wasm)
runs-on: ubuntu-latest
needs: build
strategy:
matrix:
wasm-features: ["--no-default-features --features wasm"]
env:
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@v4
- name: Cache cargo registry & target
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-nightly-wasm-${{ matrix.wasm-features || 'default' }}
- name: Install nightly toolchain with wasm target and rust-src
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
targets: wasm32-unknown-unknown
components: rust-src
- name: Check-wasm
env:
RUSTFLAGS: >-
-C target-feature=+atomics,+bulk-memory,+mutable-globals
-C link-arg=--shared-memory
-C link-arg=--max-memory=1073741824
-C link-arg=--import-memory
-C link-arg=--export=__heap_base
-C link-arg=--export=__wasm_init_tls
-C link-arg=--export=__tls_size
-C link-arg=--export=__tls_align
-C link-arg=--export=__tls_base
run: cargo +nightly check --verbose --target wasm32-unknown-unknown ${{ matrix.wasm-features }} -Z build-std=panic_abort,std
- name: Build-wasm
env:
RUSTFLAGS: >-
-C target-feature=+atomics,+bulk-memory,+mutable-globals
-C link-arg=--shared-memory
-C link-arg=--max-memory=1073741824
-C link-arg=--import-memory
-C link-arg=--export=__heap_base
-C link-arg=--export=__wasm_init_tls
-C link-arg=--export=__tls_size
-C link-arg=--export=__tls_align
-C link-arg=--export=__tls_base
run: cargo +nightly build --verbose --target wasm32-unknown-unknown ${{ matrix.wasm-features }} -Z build-std=panic_abort,std
- name: Test-wasm
env:
RUSTFLAGS: >-
-C target-feature=+atomics,+bulk-memory,+mutable-globals
-C link-arg=--shared-memory
-C link-arg=--max-memory=1073741824
-C link-arg=--import-memory
-C link-arg=--export=__heap_base
-C link-arg=--export=__wasm_init_tls
-C link-arg=--export=__tls_size
-C link-arg=--export=__tls_align
-C link-arg=--export=__tls_base
run: cargo +nightly test --verbose --target wasm32-unknown-unknown ${{ matrix.wasm-features }} -Z build-std=panic_abort,std --no-run
test-32:
name: Test (i686)
runs-on: ubuntu-latest
needs: build
env:
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@v4
- name: Cache cargo registry & target
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-stable-i686
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@nightly
with:
components: clippy
- name: Set up QEMU for multi-arch Docker
uses: docker/setup-qemu-action@v2
- name: Install Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Install cross
run: cargo install --locked cross
- name: Run tests for i686 target via cross
run: |
# Run unit tests under QEMU inside Docker so i686 test binaries are executed reliably.
# Uses the glibc i686 target by default. Change to i686-unknown-linux-musl if you require musl.
cross test --target i686-unknown-linux-gnu --verbose