11language : rust
22sudo : false
33
4- # We aim to test all the following in any combination:
5- # - standard tests, benches, documentation, all available features
6- # - pinned stable, latest stable, beta and nightly Rust releases
7- # - Linux, OS X, Android, iOS, bare metal (i.e. no_std)
8- # - x86_64, ARMv7, a Big-Endian arch (MIPS)
4+ # We support too many combinations of Rust releases, crate features, operating
5+ # systems, and architectures to even remotely test all combinations.
6+ # Yet it turns out we can test most of these independent of each other, because
7+ # they serve different goals or test different pieces of code.
8+ #
9+ # RUST RELEASES
10+ # Goal: make sure we don't use language features unavailable on a certain
11+ # version, and build without warnings.
12+ # We have different builders use 4 Rust releases, a pinned stable release,
13+ # the latest stable, beta and nightly.
14+ #
15+ # ARCHITECTURES
16+ # Goal: test against issues caused by differences in endianness, pointer sizes,
17+ # etc.
18+ # We run tests on 4 different architectures.
19+ # - x64_84, default on Travis (Linux) and AppVeyor (Windows)
20+ # - i686, second AppVeyor (Windows) configuration
21+ # - MIPS, big-endian Linux emulated with QEMU (thanks to Trust)
22+ # - ARMv7, Android emulated with QEMU (thanks to Trust)
23+ #
24+ # OPERATING SYSTEMS
25+ # Goal: test on many operating systems, to verify the OsRng code, which is
26+ # mostly architecture-independent.
27+ # We run tests on Linux, OS X, Windows, Android (emulated), and Node.js (using
28+ # cargo-web).
29+ # One builder cross-compiles for many of the remaining OSes, which ensures we
30+ # keep building, but doesn't run tests.
31+ # OSes supported by Rand but which we can't cross-compile because there
32+ # is no pre-built standard library available: Dragonfly BSD, Haiku, OpenBSD.
33+ #
34+ # CRATE FEATURES, TESTS, AND SUB-CRATES
35+ # Goal: Run unit tests, doctests, examples, and test benchmarks for all crates,
36+ # in configurations that cover all interesting combinations of features.
37+ # (`--lib` only runs unit tests just like `--tests`, but the latter is not
38+ # available in Rust 1.22.0)
39+ # Tests run on rand:
40+ # - test no_std support, but only the unit tests:
41+ # `cargo test --lib --no-default-features`
42+ # - run unit tests and doctests with all features which are available on stable:
43+ # `cargo test --features=serde1,log`
44+ # - test examples:
45+ # `cargo test --examples`
46+ # Additional tests on nightly:
47+ # - run unit tests and doctests with all features which are available on nightly:
48+ # `cargo test --all-features`
49+ # - test no_std support, including the nightly alloc feature:
50+ # cargo test --lib --no-default-features --features=alloc
51+ # - run benchmarks as tests:
52+ # `cargo test --benches --features=nightly`
53+ # Tests on subcrates:
54+ # `cargo test --package rand_core`
55+ # `cargo test --package rand_core --features=alloc` (requires nightly)
56+ # `cargo test --package rand_core --no-default-features`
57+ # `cargo test --package rand_isaac --features=serde1`
58+ # `cargo test --package rand_xorshift --features=serde1`
959matrix :
1060 include :
1161 - rust : 1.22.0
62+ env : DESCRIPTION="pinned stable Rust release"
1263 install :
1364 script :
14- # TODO: use --tests instead of --lib on more recent compiler
1565 - cargo test --lib --no-default-features
66+ - cargo test --features=serde1,log
67+ - cargo test --examples
68+ - cargo test --package rand_core
1669 - cargo test --package rand_core --no-default-features
17- - cargo test --package rand_isaac --features serde1
18- - cargo test --package rand_xorshift --features serde1
19- - cargo test --features serde1,log
70+ - cargo test --package rand_isaac --features= serde1
71+ # - cargo test --package rand_xorshift --features= serde1
72+
2073 - rust : stable
74+ env : DESCRIPTION="stable Rust release, macOS, iOS (cross-compile only)"
2175 os : osx
2276 install :
77+ - rustup target add aarch64-apple-ios
2378 script :
24- - cargo test --tests --no-default-features
79+ - cargo test --lib --no-default-features
80+ - cargo test --features=serde1,log,i128_support
81+ - cargo test --examples
82+ - cargo test --package rand_core
2583 - cargo test --package rand_core --no-default-features
26- - cargo test --package rand_isaac --features serde1
27- - cargo test --package rand_xorshift --features serde1
28- - cargo test --features serde1,log
84+ - cargo test --package rand_isaac --features=serde1
85+ - cargo test --package rand_xorshift --features=serde1
86+ - cargo build --target=aarch64-apple-ios
87+
2988 - rust : beta
89+ env : DESCRIPTION="beta Rust release"
3090 install :
3191 script :
32- - cargo test --tests --no-default-features
92+ - cargo test --lib --no-default-features
93+ - cargo test --features=serde1,log,i128_support
94+ - cargo test --examples
95+ - cargo test --package rand_core
3396 - cargo test --package rand_core --no-default-features
34- - cargo test --package rand_isaac --features serde1
35- - cargo test --package rand_xorshift --features serde1
36- - cargo test --features serde1,log
97+ - cargo test --package rand_isaac --features= serde1
98+ - cargo test --package rand_xorshift --features= serde1
99+
37100 - rust : nightly
101+ env : DESCRIPTION="nightly features, benchmarks, documentation"
38102 install :
39103 - cargo --list | egrep "^\s*deadlinks$" -q || cargo install cargo-deadlinks
104+ - cargo deadlinks -V
40105 before_script :
41106 - pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH
42107 script :
43- - cargo test --tests --no-default-features --features=alloc
44- - cargo test --package rand_core --no-default-features --features=alloc,serde1
45- - cargo test --features serde1,log,nightly,alloc
46- - cargo test --all --benches
108+ - cargo test --lib --no-default-features --features=alloc
109+ - cargo test --all-features
110+ - cargo test --benches --features=nightly
111+ - cargo test --examples
112+ - cargo test --package rand_core
113+ - cargo test --package rand_core --no-default-features --features=alloc
114+ - cargo test --package rand_isaac --features=serde1
115+ # - cargo test --package rand_xorshift --features=serde1
47116 # remove cached documentation, otherwise files from previous PRs can get included
48117 - rm -rf target/doc
49118 - cargo doc --no-deps --all --all-features
@@ -52,52 +121,54 @@ matrix:
52121 - travis-cargo --only nightly doc-upload
53122
54123 - rust : nightly
124+ env : DESCRIPTION="WASM via emscripten, stdweb and wasm-bindgen"
55125 install :
56126 - rustup target add wasm32-unknown-unknown
57- # Use cargo-update since we need a real update-or-install command
58- # Only install if not already installed:
59- # - cargo --list | egrep "\binstall-update$" -q || cargo install cargo-update
60- # - cargo install-update -i cargo-web
61- # Cargo has errors with sub-commands so ignore updating for now:
127+ - rustup target add wasm32-unknown-emscripten
128+ # cargo-web takes ±10 min. to install, and cargo and cargo-update offer
129+ # no reliable update-or-install command. We ignore updating for now
130+ # (just drop the Travis' caches when necessary)
62131 - cargo --list | egrep "^\s*web$" -q || cargo install cargo-web
132+ - cargo web -V
133+ addons :
134+ chrome : stable
63135 script :
64- - cargo web test --target wasm32-unknown-unknown --nodejs --features=stdweb
65-
66- - rust : nightly
67- install :
68- - rustup target add wasm32-unknown-unknown
69- script :
70- - cargo build --target wasm32-unknown-unknown --features wasm-bindgen
136+ # testing wasm32-unknown-emscripten fails because of rust-lang/rust#49877
137+ - cargo build --target wasm32-unknown-emscripten
138+ # - cargo web test --target wasm32-unknown-emscripten
139+ # - cargo web test --nodejs --target wasm32-unknown-emscripten
140+ - cargo build -- target wasm32-unknown-unknown # without any features
141+ - cargo web test --nodejs --target wasm32-unknown-unknown --features=stdweb
142+ - cargo build --target wasm32-unknown-unknown --features= wasm-bindgen
71143
72144 - rust : nightly
145+ env : DESCRIPTION="cross-platform builder (doesn't run tests)"
73146 install :
74- - rustup target add thumbv6m-none-eabi
147+ - rustup target add x86_64-sun-solaris
148+ - rustup target add x86_64-unknown-cloudabi
149+ - rustup target add x86_64-unknown-freebsd
150+ - rustup target add x86_64-unknown-fuchsia
151+ - rustup target add x86_64-unknown-netbsd
152+ - rustup target add x86_64-unknown-redox
75153 script :
76- # Bare metal target; no std; only works on nightly
77- - cargo build --no-default-features --target thumbv6m-none-eabi --release
154+ - cargo build --target=x86_64-sun-solaris --all-features
155+ - cargo build --target=x86_64-unknown-cloudabi --all-features
156+ - cargo build --target=x86_64-unknown-freebsd --all-features
157+ - cargo build --target=x86_64-unknown-fuchsia --all-features
158+ - cargo build --target=x86_64-unknown-netbsd --all-features
159+ - cargo build --target=x86_64-unknown-redox --all-features
78160
79161 # Trust cross-built/emulated targets. We must repeat all non-default values.
80162 - rust : stable
81163 sudo : required
82164 dist : trusty
83165 services : docker
84- env : TARGET=x86_64 -unknown-freebsd DISABLE_TESTS=1
166+ env : DESCRIPTION="Linux (MIPS, big-endian)" TARGET=mips -unknown-linux-gnu
85167 - rust : stable
86168 sudo : required
87169 dist : trusty
88170 services : docker
89- env : TARGET=mips-unknown-linux-gnu
90- - rust : stable
91- sudo : required
92- dist : trusty
93- services : docker
94- env : TARGET=armv7-linux-androideabi DISABLE_TESTS=1
95- - rust : stable
96- os : osx
97- sudo : required
98- dist : trusty
99- services : docker
100- env : TARGET=armv7-apple-ios DISABLE_TESTS=1
171+ env : DESCRIPTION="Android (ARMv7)" TARGET=armv7-linux-androideabi
101172
102173before_install :
103174 - set -e
0 commit comments