Implement Kapur's algorithm for binary thresholding (#696) (#699) #445
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
# This workflow runs checks for unsafe code. In crates that don't have any unsafe code, this can be | |
# removed. Runs: | |
# - address sanitizer - detects memory errors | |
# - leak sanitizer - detects memory leaks | |
# - miri - detects undefined behavior and memory leaks | |
# See check.yml for information about how the concurrency cancellation and workflow triggering works | |
permissions: | |
contents: read | |
on: | |
push: | |
branches: [master] | |
pull_request: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
name: safety | |
jobs: | |
sanitizers: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install nightly | |
uses: dtolnay/rust-toolchain@nightly | |
- run: | | |
sudo apt update | |
sudo apt install libsdl2-2.0-0 -y | |
name: Install sdl2 | |
- 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 | |
# ensure there's a profile.dev section | |
if ! grep -qE '^[ \t]*[profile.dev]' Cargo.toml; then | |
echo >> Cargo.toml | |
echo '[profile.dev]' >> Cargo.toml | |
fi | |
# remove pre-existing opt-levels in profile.dev | |
sed -i '/^\s*\[profile.dev\]/,/^\s*\[/ {/^\s*opt-level/d}' Cargo.toml | |
# now set opt-level to 1 | |
sed -i '/^\s*\[profile.dev\]/a opt-level = 1' Cargo.toml | |
cat Cargo.toml | |
name: Enable debug symbols | |
- name: cargo test -Zsanitizer=address | |
# only --lib --tests b/c of https://github.com/rust-lang/rust/issues/53945 | |
run: cargo test --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() | |
run: cargo test --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@v4 | |
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: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.NIGHTLY }} | |
components: miri | |
- name: Install cargo-nextest | |
uses: baptiste0928/cargo-install@v1 | |
with: | |
crate: cargo-nextest | |
locked: true | |
- name: cargo miri test | |
timeout-minutes: 120 | |
run: cargo miri nextest run --no-default-features --features=image/default | |
env: | |
MIRIFLAGS: "" |