Skip to content

More fixes of insufficient atomics, and make most of the test suite runnable under miri #314

More fixes of insufficient atomics, and make most of the test suite runnable under miri

More fixes of insufficient atomics, and make most of the test suite runnable under miri #314

Workflow file for this run

name: CI
on:
push:
# Ignore bors branches, since they are covered by `clippy_bors.yml`
branches:
- main
# Don't run Clippy tests, when only textfiles were modified
paths-ignore:
- "README"
- "COPYRIGHT"
- "LICENSE-*"
- "**.md"
- "**.txt"
pull_request:
# Don't run Clippy tests, when only textfiles were modified
paths-ignore:
- "README"
- "COPYRIGHT"
- "LICENSE-*"
- "**.md"
- "**.txt"
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: -Dwarnings
RUST_BACKTRACE: 1
nightly: nightly
stable: stable
defaults:
run:
shell: bash
jobs:
# Check formatting
rustfmt:
name: rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Rust
run: rustup update stable && rustup default stable
- name: Check formatting
run: cargo fmt --all -- --check
# Apply clippy lints
clippy:
name: clippy
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Install Rust
# --no-self-update is necessary because the windows environment cannot self-update rustup.exe.
run: rustup update stable --no-self-update && rustup default stable
- name: Install cargo-hack
run: cargo install cargo-hack
- name: Apply clippy lints
run: cargo hack clippy --each-feature --exclude-no-default-features --exclude-features tracing
# Run tests on some extra platforms
cross:
name: cross
strategy:
matrix:
target:
- aarch64-unknown-linux-gnu
- aarch64-linux-android
- aarch64-unknown-linux-musl
- i686-linux-android
- x86_64-linux-android
- i686-pc-windows-gnu
- x86_64-pc-windows-gnu
- i686-unknown-linux-gnu
- powerpc64-unknown-linux-gnu
# - mips64-unknown-linux-gnuabi64
- riscv64gc-unknown-linux-gnu
- wasm32-unknown-unknown
- wasm32-unknown-emscripten
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Rust
run: rustup update stable && rustup default stable
- name: cross build --target ${{ matrix.target }}
run: |
cargo install cross
cross build --target ${{ matrix.target }}
if: matrix.target != 'wasm32-unknown-unknown'
# WASM support
- name: cargo build --target ${{ matrix.target }}
run: |
rustup target add ${{ matrix.target }}
cargo build --target ${{ matrix.target }}
if: matrix.target == 'wasm32-unknown-unknown'
# - name: cargo build --target ${{ matrix.target }}
# run: |
# rustup target add ${{ matrix.target }}
# cargo +nightly build --no-default-features --features alloc --target ${{ matrix.target }} -Z build-std=core,alloc
# if: matrix.target == 'mips64-unknown-linux-gnuabi64'
test:
name: test
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Cache cargo build and registry
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-test-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-test-
- name: Install Rust
# --no-self-update is necessary because the windows environment cannot self-update rustup.exe.
run: rustup update stable --no-self-update && rustup default stable
- name: Install cargo-hack
run: cargo install cargo-hack
- name: Cache ~/.cargo
uses: actions/cache@v3
with:
path: ~/.cargo
key: ${{ runner.os }}-coverage-dotcargo
- name: Run test
run: cargo hack test --feature-powerset --exclude-no-default-features --exclude-features tracing
sanitizer:
name: sanitizer
strategy:
matrix:
os:
- ubuntu-latest
# - macos-latest
# - windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Cache cargo build and registry
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-sanitizer-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-sanitizer-
- name: Install Rust
run: rustup update $nightly && rustup default $nightly
- name: Install rust-src
run: rustup component add rust-src
- name: Install cargo-hack
run: cargo install cargo-hack
- name: ASAN / LSAN / TSAN (Linux)
run: ci/sanitizer.sh
if: matrix.os == 'ubuntu-latest'
- name: ASAN / LSAN / TSAN
run: ci/sanitizer_generic.sh
if: matrix.os != 'ubuntu-latest'
# valgrind
valgrind:
name: valgrind
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Rust ${{ env.stable }}
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.stable }}
override: true
- uses: Swatinem/rust-cache@v1
- name: Install Valgrind
run: |
sudo apt-get update -y
sudo apt-get install -y valgrind
# Compile tests
- name: build & valgrind (vec backend)
run: |
cargo build --bin test-vec --target-dir .
valgrind --error-exitcode=1 --leak-check=full --track-origins=yes --show-leak-kinds=all ./debug/test-vec
working-directory: integration
- name: build & valgrind (mmap backend)
run: |
cargo build --bin test-mmap --target-dir .
valgrind --error-exitcode=1 --leak-check=full --track-origins=yes --show-leak-kinds=all ./debug/test-mmap
working-directory: integration
- name: build & valgrind (mmap-anon backend)
run: |
cargo build --bin test-mmap-anon --target-dir .
valgrind --error-exitcode=1 --leak-check=full --track-origins=yes --show-leak-kinds=all ./debug/test-mmap-anon
working-directory: integration
miri:
name: miri
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
# - windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Cache cargo build and registry
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-miri-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-miri-
- name: Install cargo-hack
run: cargo install cargo-hack
- name: Miri (Linux)
run: ci/miri.sh
if: matrix.os == 'ubuntu-latest'
- name: Miri
run: ci/miri_generic.sh
if: matrix.os != 'ubuntu-latest'
# loom:
# name: loom
# strategy:
# matrix:
# os:
# - ubuntu-latest
# - macos-latest
# - windows-latest
# runs-on: ${{ matrix.os }}
# steps:
# - uses: actions/checkout@v3
# - name: Cache cargo build and registry
# uses: actions/cache@v3
# with:
# path: |
# ~/.cargo/registry
# ~/.cargo/git
# target
# key: ${{ runner.os }}-loom-${{ hashFiles('**/Cargo.lock') }}
# restore-keys: |
# ${{ runner.os }}-loom-
# - name: Install Rust
# run: rustup update $nightly && rustup default $nightly
# - name: Loom tests
# run: cargo test --tests --features loom,memmap
coverage:
name: cargo tarpaulin
runs-on: ubuntu-latest
needs:
- rustfmt
- clippy
- test
- sanitizer
- valgrind
steps:
- uses: actions/checkout@v3
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- uses: actions-rs/[email protected]
with:
crate: cargo-tarpaulin
version: latest
- name: Cache ~/.cargo
uses: actions/cache@v3
with:
path: ~/.cargo
key: ${{ runner.os }}-coverage-dotcargo
- name: Cache cargo build
uses: actions/cache@v3
with:
path: target
key: ${{ runner.os }}-coverage-cargo-build-target
- name: Run tarpaulin
uses: actions-rs/cargo@v1
with:
command: tarpaulin
args: --all-features --run-types tests --run-types doctests --workspace --out xml
- name: Upload to codecov.io
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
slug: ${{ github.repository }}