diff --git a/.travis.yml b/.travis.yml index d11fa78..e382dea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,6 +48,8 @@ matrix: - { os: osx, rust: 1.34.0, env: TARGET=i386-apple-ios } - { os: osx, rust: 1.34.0, env: TARGET=x86_64-apple-ios } + - { os: linux, rust: nightly, env: RUN_MIRI=1 } + script: - pushd scripts - ./travis.sh diff --git a/scripts/travis.sh b/scripts/travis.sh index 4001be5..31201ce 100755 --- a/scripts/travis.sh +++ b/scripts/travis.sh @@ -2,54 +2,76 @@ set -e -rustup component add clippy -cargo clippy +if [[ "$RUN_MIRI" != "" ]]; then -if [[ "$TARGET" != "" ]]; then rustup target install $TARGET; fi + cargo clean -if [[ "$TARGET" == "wasm32-"* && "$TARGET" != "wasm32-wasi" ]]; then - cargo-web --version || cargo install cargo-web - cargo web test --no-default-features $FLAGS --target=$TARGET - cargo web test $FLAGS --target=$TARGET - #cargo web test --all-features $FLAGS --target=$TARGET + # Install and run the latest version of nightly where miri built successfully. + # Taken from: https://github.com/rust-lang/miri#running-miri-on-ci -elif [[ "$TARGET" == *"-linux-android"* ]]; then - export PATH=/usr/local/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH - pushd linux-android - cargo build --no-default-features --target=$TARGET $FLAGS - cargo build --target=$TARGET $FLAGS - #cargo build --all-features --target=$TARGET $FLAGS - # Don't test, can't run android emulators successfully on travis currently - popd + MIRI_NIGHTLY=nightly-$(curl -s https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/miri) + echo "Installing latest nightly with Miri: $MIRI_NIGHTLY" + rustup set profile minimal + rustup default "$MIRI_NIGHTLY" -elif [[ "$TARGET" == *"-apple-ios" || "$TARGET" == "wasm32-wasi" ]]; then - cargo build --no-default-features --target=$TARGET $FLAGS - cargo build --target=$TARGET $FLAGS - #cargo build --all-features --target=$TARGET $FLAGS - # Don't test - # iOS simulator setup/teardown is complicated - # cargo-web doesn't support wasm32-wasi yet, nor can wasm-pack test specify a target + rustup component add miri + cargo miri setup -elif [[ "$TARGET" == *"-unknown-linux-gnueabihf" ]]; then - #sudo apt-get update - #sudo apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf - pushd generic-cross + cargo miri test --verbose + cargo miri test --verbose --no-default-features + cargo miri test --verbose --all-features + +else + + rustup component add clippy + cargo clippy + + if [[ "$TARGET" != "" ]]; then rustup target install $TARGET; fi + + if [[ "$TARGET" == "wasm32-"* && "$TARGET" != "wasm32-wasi" ]]; then + cargo-web --version || cargo install cargo-web + cargo web test --no-default-features $FLAGS --target=$TARGET + cargo web test $FLAGS --target=$TARGET + #cargo web test --all-features $FLAGS --target=$TARGET + + elif [[ "$TARGET" == *"-linux-android"* ]]; then + export PATH=/usr/local/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH + pushd linux-android + cargo build --no-default-features --target=$TARGET $FLAGS + cargo build --target=$TARGET $FLAGS + #cargo build --all-features --target=$TARGET $FLAGS + # Don't test, can't run android emulators successfully on travis currently + popd + + elif [[ "$TARGET" == *"-apple-ios" || "$TARGET" == "wasm32-wasi" ]]; then cargo build --no-default-features --target=$TARGET $FLAGS cargo build --target=$TARGET $FLAGS #cargo build --all-features --target=$TARGET $FLAGS # Don't test - popd + # iOS simulator setup/teardown is complicated + # cargo-web doesn't support wasm32-wasi yet, nor can wasm-pack test specify a target -elif [[ "$TARGET" != "" ]]; then - pushd generic-cross - cargo test --no-default-features --target=$TARGET $FLAGS - cargo test --target=$TARGET $FLAGS - #cargo test --all-features --target=$TARGET $FLAGS - popd + elif [[ "$TARGET" == *"-unknown-linux-gnueabihf" ]]; then + #sudo apt-get update + #sudo apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf + pushd generic-cross + cargo build --no-default-features --target=$TARGET $FLAGS + cargo build --target=$TARGET $FLAGS + #cargo build --all-features --target=$TARGET $FLAGS + # Don't test + popd + + elif [[ "$TARGET" != "" ]]; then + pushd generic-cross + cargo test --no-default-features --target=$TARGET $FLAGS + cargo test --target=$TARGET $FLAGS + #cargo test --all-features --target=$TARGET $FLAGS + popd + + else + # Push nothing, target host CPU architecture + cargo test --no-default-features $FLAGS + cargo test $FLAGS + fi -else - # Push nothing, target host CPU architecture - cargo test --no-default-features $FLAGS - cargo test $FLAGS - #cargo test --all-features $FLAGS fi