summaryrefslogtreecommitdiff
path: root/.cirrus.yml
blob: a07bc03b1c765902ca7fa9273bd3f43b640494fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
cargo_cache:
  folder: $CARGO_HOME/registry
  fingerprint_script: cat Cargo.lock || echo ""

# 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 amd64 & i686
  env:
    # Temporary workaround for https://github.com/rust-lang/rustup/issues/2774
    RUSTUP_IO_THREADS: 1
  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.40.0
    - $HOME/.cargo/bin/rustup target add i686-unknown-freebsd
  amd64_test_script:
    - . $HOME/.cargo/env
    - cargo test
  i386_test_script:
    - . $HOME/.cargo/env
    - cargo test --target i686-unknown-freebsd
  before_cache_script: rm -rf $CARGO_HOME/registry/index

# Test OSX and iOS in a full VM
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.40.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.
task:
  env:
    RUST_TEST_THREADS: 1            # QEMU works best with 1 thread
    HOME: /tmp/home
    PATH: $HOME/.cargo/bin:$PATH
  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
  compute_engine_instance:
    image_project: cirrus-images
    image: family/docker-builder
    platform: linux
    cpu: 1                          # Since QEMU will only use 1 thread
    memory: 4G
  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.40.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.40.0
    - name: Linux x86_64 musl
      env:
        TARGET: x86_64-unknown-linux-musl
        TOOLCHAIN: 1.40.0
  container:
    image: rust:1.40
  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 x32
      env:
        TARGET: x86_64-unknown-linux-gnux32
    - name: NetBSD x86_64
      env:
        TARGET: x86_64-unknown-netbsd
    - name: Fuchsia x86_64
      env:
        TARGET: x86_64-fuchsia
  container:
    image: rust:1.40
  setup_script:
    - rustup target add $TARGET
  script:
    - cargo +$TOOLCHAIN check --target $TARGET
    - cargo +$TOOLCHAIN check --target $TARGET --release
    - cargo +$TOOLCHAIN check --all-targets --target $TARGET
  before_cache_script: rm -rf $CARGO_HOME/registry/index

# illumos toolchain isn't available via rustup until 1.50
task:
  name: illumos
  env:
    TARGET: x86_64-unknown-illumos
  container:
    image: rust:1.50
  setup_script:
    - rustup target add $TARGET
  script:
    - cargo +$TOOLCHAIN check --target $TARGET
    - cargo +$TOOLCHAIN check --target $TARGET --release
  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