summaryrefslogtreecommitdiff
path: root/.cirrus.yml
diff options
context:
space:
mode:
authorAlan Somers <asomers@gmail.com>2020-12-02 17:47:35 -0700
committerAlan Somers <asomers@gmail.com>2020-12-06 22:35:30 -0700
commitbf7a5fd606ba48c789bdaf95da2779e46e5f83c6 (patch)
tree5ff9c603b744eff0c5d1763df5220a661087bb5f /.cirrus.yml
parenta1eb89568e50132339b5e8a1d5166fb5b5f9b0e8 (diff)
downloadnix-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.yml198
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