on: push: branches: [main] pull_request: name: safety jobs: sanitizers: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true - name: Install nightly uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly default: true - run: | # to get the symbolizer for debug symbol resolution sudo apt install llvm # to fix buggy leak analyzer: # https://github.com/japaric/rust-san#unrealiable-leaksanitizer sed -i '/\[features\]/i [profile.dev]' Cargo.toml sed -i '/profile.dev/a opt-level = 1' Cargo.toml cat Cargo.toml name: Enable debug symbols - name: cargo test -Zsanitizer=address uses: actions-rs/cargo@v1 with: command: test # only --lib --tests b/c of https://github.com/rust-lang/rust/issues/53945 args: --lib --tests --all-features --target x86_64-unknown-linux-gnu env: ASAN_OPTIONS: "detect_odr_violation=0:detect_leaks=0" RUSTFLAGS: "-Z sanitizer=address" - name: cargo test -Zsanitizer=leak if: always() uses: actions-rs/cargo@v1 with: command: test args: --all-features --target x86_64-unknown-linux-gnu env: LSAN_OPTIONS: "suppressions=lsan-suppressions.txt" RUSTFLAGS: "-Z sanitizer=leak" miri: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true - run: | echo "NIGHTLY=nightly-$(curl -s https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/miri)" >> $GITHUB_ENV - name: Install ${{ env.NIGHTLY }} uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: ${{ env.NIGHTLY }} default: true components: miri - name: cargo miri test uses: actions-rs/cargo@v1 with: command: miri args: test env: MIRIFLAGS: "-Zmiri-tag-raw-pointers" loom: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true - name: Install stable uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal - name: cargo test --test loom uses: actions-rs/cargo@v1 with: command: test args: --release --test loom env: LOOM_MAX_PREEMPTIONS: 2 RUSTFLAGS: "--cfg loom"