trigger:
- master
variables:
testKind: 'default'
strategy:
matrix:
windows-stable:
imageName: 'vs2017-win2016'
rustup_toolchain: stable
mac-stable:
imageName: 'macos-10.13'
rustup_toolchain: stable
linux-stable:
imageName: 'ubuntu-16.04'
rustup_toolchain: stable
examples:
imageName: 'ubuntu-16.04'
rustup_toolchain: stable
testKind: 'examples'
sanitizers:
imageName: 'ubuntu-16.04'
rustup_toolchain: nightly
testKind: 'sanitizers'
cross-compile:
imageName: 'macos-10.13'
rustup_toolchain: nightly
testKind: 'cross-compile'
pool:
vmImage: $(imageName)
steps:
- script: |
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $RUSTUP_TOOLCHAIN
echo "##vso[task.setvariable variable=PATH;]$PATH:$HOME/.cargo/bin"
displayName: Install rust
condition: ne( variables['Agent.OS'], 'Windows_NT' )
- script: |
curl -sSf -o rustup-init.exe https://win.rustup.rs
rustup-init.exe -y --default-toolchain %RUSTUP_TOOLCHAIN%
echo "##vso[task.setvariable variable=PATH;]%PATH%;%USERPROFILE%\.cargo\bin"
displayName: Windows install rust
condition: eq( variables['Agent.OS'], 'Windows_NT' )
- task: CacheBeta@1
inputs:
path: target
key: Cargo.toml | $(testKind) | $(Agent.OS)
displayName: 'Cache Build'
condition: ne( variables['testKind'], 'sanitizers' )
- script: |
find target -exec chmod +x {} \; || true
displayName: chmod cache workaround
condition: ne( variables['Agent.OS'], 'Windows_NT' )
- script: cargo build --release --tests --features=testing
displayName: Cargo build
condition: eq( variables['testKind'], 'default' )
- script: cargo test --release --tests --features=testing -- --nocapture
displayName: Cargo test
condition: eq( variables['testKind'], 'default' )
- script: |
cargo run --example playground &&
cargo run --example crdt_merge_store
displayName: examples
condition: eq( variables['testKind'], 'examples' )
- script: |
set -eo pipefail
echo "cross build"
echo "https://github.com/rust-lang/cargo/issues/4753"
scripts/cross_compile.sh
displayName: cross-build
condition: eq( variables['testKind'], 'cross-compile' )
- script: |
pushd benchmarks/stress2 &&
echo "lsan" &&
cargo clean &&
export RUSTFLAGS="-Z sanitizer=leak" &&
cargo build --features=lock_free_delays,no_jemalloc --target x86_64-unknown-linux-gnu &&
sudo rm -rf default.sled &&
sudo target/x86_64-unknown-linux-gnu/debug/stress2 --duration=30 &&
sudo target/x86_64-unknown-linux-gnu/debug/stress2 --duration=6 &&
echo "asan" &&
cargo clean &&
export RUSTFLAGS="-Z sanitizer=address" &&
export ASAN_OPTIONS="detect_odr_violation=0" &&
cargo build --features=lock_free_delays,no_jemalloc --target x86_64-unknown-linux-gnu &&
sudo rm -rf default.sled &&
sudo target/x86_64-unknown-linux-gnu/debug/stress2 --duration=30 &&
sudo target/x86_64-unknown-linux-gnu/debug/stress2 --duration=6 &&
unset ASAN_OPTIONS &&
echo "tsan" &&
cargo clean &&
export RUSTFLAGS="-Z sanitizer=thread" &&
export TSAN_OPTIONS=suppressions=$(Agent.BuildDirectory)/s/tsan_suppressions.txt &&
sudo rm -rf default.sled &&
cargo run --features=lock_free_delays,no_jemalloc --target x86_64-unknown-linux-gnu -- --duration=30 &&
cargo run --features=lock_free_delays,no_jemalloc --target x86_64-unknown-linux-gnu -- --duration=6 &&
unset RUSTFLAGS &&
unset TSAN_OPTIONS
displayName: sanitizers
condition: eq( variables['testKind'], 'sanitizers' )