1
1
language : rust
2
2
sudo : false
3
3
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`
9
59
matrix :
10
60
include :
11
61
- rust : 1.22.0
62
+ env : DESCRIPTION="pinned stable Rust release"
12
63
install :
13
64
script :
14
- # TODO: use --tests instead of --lib on more recent compiler
15
65
- cargo test --lib --no-default-features
66
+ - cargo test --features=serde1,log
67
+ - cargo test --examples
68
+ - cargo test --package rand_core
16
69
- 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
+
20
73
- rust : stable
74
+ env : DESCRIPTION="stable Rust release, macOS, iOS (cross-compile only)"
21
75
os : osx
22
76
install :
77
+ - rustup target add aarch64-apple-ios
23
78
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
25
83
- 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
+
29
88
- rust : beta
89
+ env : DESCRIPTION="beta Rust release"
30
90
install :
31
91
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
33
96
- 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
+
37
100
- rust : nightly
101
+ env : DESCRIPTION="nightly features, benchmarks, documentation"
38
102
install :
39
103
- cargo --list | egrep "^\s*deadlinks$" -q || cargo install cargo-deadlinks
104
+ - cargo deadlinks -V
40
105
before_script :
41
106
- pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH
42
107
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
47
116
# remove cached documentation, otherwise files from previous PRs can get included
48
117
- rm -rf target/doc
49
118
- cargo doc --no-deps --all --all-features
@@ -52,52 +121,54 @@ matrix:
52
121
- travis-cargo --only nightly doc-upload
53
122
54
123
- rust : nightly
124
+ env : DESCRIPTION="WASM via emscripten, stdweb and wasm-bindgen"
55
125
install :
56
126
- 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)
62
131
- cargo --list | egrep "^\s*web$" -q || cargo install cargo-web
132
+ - cargo web -V
133
+ addons :
134
+ chrome : stable
63
135
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
71
143
72
144
- rust : nightly
145
+ env : DESCRIPTION="cross-platform builder (doesn't run tests)"
73
146
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
75
153
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
78
160
79
161
# Trust cross-built/emulated targets. We must repeat all non-default values.
80
162
- rust : stable
81
163
sudo : required
82
164
dist : trusty
83
165
services : docker
84
- env : TARGET=x86_64 -unknown-freebsd DISABLE_TESTS=1
166
+ env : DESCRIPTION="Linux (MIPS, big-endian)" TARGET=mips -unknown-linux-gnu
85
167
- rust : stable
86
168
sudo : required
87
169
dist : trusty
88
170
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
101
172
102
173
before_install :
103
174
- set -e
0 commit comments