diff options
author | Alan Somers <asomers@gmail.com> | 2020-12-02 17:47:35 -0700 |
---|---|---|
committer | Alan Somers <asomers@gmail.com> | 2020-12-06 22:35:30 -0700 |
commit | bf7a5fd606ba48c789bdaf95da2779e46e5f83c6 (patch) | |
tree | 5ff9c603b744eff0c5d1763df5220a661087bb5f /.cirrus.yml | |
parent | a1eb89568e50132339b5e8a1d5166fb5b5f9b0e8 (diff) | |
download | nix-bf7a5fd606ba48c789bdaf95da2779e46e5f83c6.zip |
Switch all builds from Travis to Cirrus
Travis has been super-slow lately (> 6 hours per build). Cirrus is much
faster: about 20 minutes. Cirrus also has slightly better test
coverage, mainly because it doesn't use SECCOMP.
Also,
* Fix the Redox CI build. The old Travis configuration didn't actually
build for Redox, so we never noticed that Redox can't be built with a
stable compiler. Thanks to @coolreader18 for finding this.
* Disable the udp_offload tests on cross-tested platforms. These tests
are failing with ENOPROTOOPT in Cirrus-CI. I suspect it's due to a
lack of support in QEMU. These tests were skipped on Travis because
its kernel was too old.
* Fix require_kernel_version on Cirrus-CI. Cirrus reports the Linux
kernel version as 4.19.112+, which the semver crate can't handle.
* Fix test_setfsuid on Cirrus. When run on Cirrus, it seems like the
file in /tmp gets deleted as soon as it's closed. Probably an
overzealous temporary file cleaner. Use /var/tmp, because no
temporary file cleaner should run in there.
* Skip mount tests on Cirrus. They fail for an unknown reason.
Issue #1351
* Skip the AF_ALG tests on Cirrus-CI
Issue #1352
Diffstat (limited to '.cirrus.yml')
-rw-r--r-- | .cirrus.yml | 198 |
1 files changed, 190 insertions, 8 deletions
diff --git a/.cirrus.yml b/.cirrus.yml index 3591c0e5..585dd24f 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,16 +1,15 @@ -freebsd_instance: - image: freebsd-11-4-release-amd64 +cargo_cache: + folder: $CARGO_HOME/registry + fingerprint_script: cat Cargo.lock || echo "" -# Test FreeBSD in a full VM on cirrus-ci.com. Test the i686 target too, in the +# Test FreeBSD in a full VM. Test the i686 target too, in the # same VM. The binary will be built in 32-bit mode, but will execute on a # 64-bit kernel and in a 64-bit environment. Our tests don't execute any of # the system's binaries, so the environment shouldn't matter. task: - name: FreeBSD 11.4 - cargo_cache: - folder: $CARGO_HOME/registry - fingerprint_script: cat Cargo.lock || echo "" - # Install Rust + name: FreeBSD amd64 & i686 + freebsd_instance: + image: freebsd-11-4-release-amd64 setup_script: - fetch https://sh.rustup.rs -o rustup.sh - sh rustup.sh -y --profile=minimal --default-toolchain 1.36.0 @@ -22,3 +21,186 @@ task: - . $HOME/.cargo/env - cargo test --target i686-unknown-freebsd before_cache_script: rm -rf $CARGO_HOME/registry/index + +task: + matrix: + - name: OSX x86_64 + env: + TARGET: x86_64-apple-darwin + - name: OSX i686 + env: + TARGET: i686-apple-darwin + DISABLE_TESTS: 1 + - name: iOS + env: + # To save VM startup time, test all iOS targets in a single task. + # The startup and scheduling time was very significant for Travis, but + # not known for Cirrus. + TARGET: "aarch64-apple-ios;armv7-apple-ios;armv7s-apple-ios;i386-apple-ios;x86_64-apple-ios" + DISABLE_TESTS: 1 + osx_instance: + image: catalina-xcode + setup_script: + - curl --proto '=https' --tlsv1.2 -sSf -o rustup.sh https://sh.rustup.rs + - sh rustup.sh -y --profile=minimal --default-toolchain 1.36.0 + - . $HOME/.cargo/env + - bash ci/install.sh + script: + - . $HOME/.cargo/env + - bash ci/script.sh + before_cache_script: rm -rf $CARGO_HOME/registry/index + +# Use cross for QEMU-based testing +# cross needs to execute Docker, so we must use Cirrus's Docker Builder task. +docker_builder: + env: + RUST_TEST_THREADS: 1 # QEMU works best with 1 thread + HOME: /tmp/home + PATH: $HOME/.cargo/bin:$PATH + #cpu: 1 docker_builder doesn't support "cpu"? + matrix: + - name: Linux aarch64 + env: + TARGET: aarch64-unknown-linux-gnu + - name: Linux arm gnueabi + env: + TARGET: arm-unknown-linux-gnueabi + - name: Linux armv7 gnueabihf + env: + TARGET: armv7-unknown-linux-gnueabihf + - name: Linux i686 + env: + TARGET: i686-unknown-linux-gnu + - name: Linux i686 musl + env: + TARGET: i686-unknown-linux-musl + - name: Linux MIPS + env: + TARGET: mips-unknown-linux-gnu + - name: Linux MIPS64 + env: + TARGET: mips64-unknown-linux-gnuabi64 + - name: Linux MIPS64 el + env: + TARGET: mips64el-unknown-linux-gnuabi64 + - name: Linux mipsel + env: + TARGET: mipsel-unknown-linux-gnu + - name: Linux powerpc64le + env: + TARGET: powerpc64le-unknown-linux-gnu + setup_script: + - mkdir /tmp/home + - curl --proto '=https' --tlsv1.2 -sSf -o rustup.sh https://sh.rustup.rs + - sh rustup.sh -y --profile=minimal --default-toolchain 1.36.0 + - . $HOME/.cargo/env + - bash ci/install.sh + script: + - . $HOME/.cargo/env || true + - bash ci/script.sh + before_cache_script: rm -rf $CARGO_HOME/registry/index + +# Tasks for Linux amd64 builds +task: + matrix: + - name: Rust Stable + env: + TARGET: x86_64-unknown-linux-gnu + TOOLCHAIN: stable + - name: Linux x86_64 + env: + TARGET: x86_64-unknown-linux-gnu + TOOLCHAIN: 1.36.0 + - name: Linux x86_64 musl + env: + TARGET: x86_64-unknown-linux-musl + TOOLCHAIN: 1.36.0 + container: + image: rust:1.36 + setup_script: + - rustup toolchain install $TOOLCHAIN + - rustup target add --toolchain $TOOLCHAIN $TARGET + script: + - cargo +$TOOLCHAIN build --target $TARGET --all-targets + - cargo +$TOOLCHAIN build --target $TARGET --all-targets --release + - cargo +$TOOLCHAIN test --target $TARGET + - cargo +$TOOLCHAIN test --target $TARGET --release + before_cache_script: rm -rf $CARGO_HOME/registry/index + +# Tasks for cross-compiling, but no testing +task: + matrix: + - name: Android aarch64 + env: + TARGET: aarch64-linux-android + - name: Android arm + env: + TARGET: arm-linux-androideabi + - name: Android armv7 + env: + TARGET: armv7-linux-androideabi + - name: Android i686 + env: + TARGET: i686-linux-android + - name: Android x86_64 + env: + TARGET: x86_64-linux-android + - name: Linux arm-musleabi + env: + TARGET: arm-unknown-linux-musleabi + - name: Linux powerpc + env: + TARGET: powerpc-unknown-linux-gnu + - name: Linux s390x + env: + TARGET: s390x-unknown-linux-gnu + - name: Linux s390x + env: + TARGET: s390x-unknown-linux-gnu + - name: NetBSD x86_64 + env: + TARGET: x86_64-unknown-netbsd + container: + image: rust:1.36 + setup_script: + - rustup target add $TARGET + script: + - cargo +$TOOLCHAIN check --target $TARGET + - cargo +$TOOLCHAIN check --target $TARGET --release + # TODO: check the tests, too. The old Travis CI setup didn't do that, so + # they don't build on all platforms. + before_cache_script: rm -rf $CARGO_HOME/registry/index + +# Redoxer is too unreliable, so we'll do a cross-build only +# See also: +# https://github.com/nix-rust/nix/issues/1258 +# https://github.com/rust-embedded/cross/issues/427 +task: + name: Redox x86_64 + env: + TARGET: x86_64-unknown-redox + # Redox requires a nightly compiler. + # If stuff breaks, change nightly to the date in the toolchain_* + # directory at https://static.redox-os.org + TOOLCHAIN: nightly-2020-08-04 + container: + image: rustlang/rust:nightly + setup_script: + - rustup toolchain install $TOOLCHAIN --profile minimal --target $TARGET + script: + - cargo +$TOOLCHAIN check --target $TARGET + - cargo +$TOOLCHAIN check --target $TARGET --release + before_cache_script: rm -rf $CARGO_HOME/registry/index + +# Test that we can build with the lowest version of all dependencies. +# "cargo test" doesn't work because some of our dev-dependencies, like +# rand, can't build with thier own minimal dependencies. +task: + name: Minver + container: + image: rustlang/rust:nightly + setup_script: + - cargo update -Zminimal-versions + script: + - cargo check + before_cache_script: rm -rf $CARGO_HOME/registry/index |