summaryrefslogtreecommitdiff
path: root/appveyor.yml
blob: f043b8bfefca7aa639454ecb610254ef31c4cb7c (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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
environment:

  # By default schannel checks revocation of certificates unlike some other SSL
  # backends, but we've historically had problems on CI where a revocation
  # server goes down presumably. See #43333 for more info
  CARGO_HTTP_CHECK_REVOKE: false

  # Recommended by AppVeyor this moves our builds to GCE which incurs a 3-4
  # minute startup overhead, but that's paltry compared to our overall build
  # times so we're will to eat the cost. This is intended to give us better
  # performance I believe!
  appveyor_build_worker_cloud: gce

  matrix:
  # 32/64 bit MSVC tests
  - MSYS_BITS: 64
    RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-profiler
    SCRIPT: python x.py test
    CI_JOB_NAME: x86_64-msvc
  - MSYS_BITS: 32
    RUST_CONFIGURE_ARGS: --build=i686-pc-windows-msvc
    SCRIPT: make appveyor-subset-1
    CI_JOB_NAME: i686-msvc-1
  - MSYS_BITS: 32
    RUST_CONFIGURE_ARGS: --build=i686-pc-windows-msvc
    SCRIPT: make appveyor-subset-2
    CI_JOB_NAME: i686-msvc-2

  # MSVC aux tests
  - MSYS_BITS: 64
    RUST_CHECK_TARGET: check-aux EXCLUDE_CARGO=1
    RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc
    CI_JOB_NAME: x86_64-msvc-aux
  - MSYS_BITS: 64
    SCRIPT: python x.py test src/tools/cargotest src/tools/cargo
    RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc
    CI_JOB_NAME: x86_64-msvc-cargo

  # MSVC tools tests
  - MSYS_BITS: 64
    SCRIPT: src/ci/docker/x86_64-gnu-tools/checktools.sh x.py /tmp/toolstates.json windows
    RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --save-toolstates=/tmp/toolstates.json --enable-test-miri
    CI_JOB_NAME: x86_64-msvc-tools

  # 32/64-bit MinGW builds.
  #
  # We are using MinGW with posix threads since LLVM does not compile with
  # the win32 threads version due to missing support for C++'s std::thread.
  #
  # Instead of relying on the MinGW version installed on appveryor we download
  # and install one ourselves so we won't be surprised by changes to appveyor's
  # build image.
  #
  # Finally, note that the downloads below are all in the `rust-lang-ci` S3
  # bucket, but they cleraly didn't originate there! The downloads originally
  # came from the mingw-w64 SourceForge download site. Unfortunately
  # SourceForge is notoriously flaky, so we mirror it on our own infrastructure.
  - MSYS_BITS: 32
    RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu
    SCRIPT: make appveyor-subset-1
    MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
    MINGW_ARCHIVE: i686-6.3.0-release-posix-dwarf-rt_v5-rev2.7z
    MINGW_DIR: mingw32
    CI_JOB_NAME: i686-mingw-1
  - MSYS_BITS: 32
    RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu
    SCRIPT: make appveyor-subset-2
    MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
    MINGW_ARCHIVE: i686-6.3.0-release-posix-dwarf-rt_v5-rev2.7z
    MINGW_DIR: mingw32
    CI_JOB_NAME: i686-mingw-2
  - MSYS_BITS: 64
    SCRIPT: python x.py test
    RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-gnu
    MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
    MINGW_ARCHIVE: x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z
    MINGW_DIR: mingw64
    CI_JOB_NAME: x86_64-mingw

  # 32/64 bit MSVC and GNU deployment
  - RUST_CONFIGURE_ARGS: >
      --build=x86_64-pc-windows-msvc
      --target=x86_64-pc-windows-msvc,aarch64-pc-windows-msvc
      --enable-full-tools
      --enable-profiler
    SCRIPT: python x.py dist
    DIST_REQUIRE_ALL_TOOLS: 1
    DEPLOY: 1
    CI_JOB_NAME: dist-x86_64-msvc
    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 Preview
  - RUST_CONFIGURE_ARGS: >
      --build=i686-pc-windows-msvc
      --target=i586-pc-windows-msvc
      --enable-full-tools
      --enable-profiler
    SCRIPT: python x.py dist
    DIST_REQUIRE_ALL_TOOLS: 1
    DEPLOY: 1
    CI_JOB_NAME: dist-i686-msvc
  - MSYS_BITS: 32
    RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu --enable-full-tools
    SCRIPT: python x.py dist
    MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
    MINGW_ARCHIVE: i686-6.3.0-release-posix-dwarf-rt_v5-rev2.7z
    MINGW_DIR: mingw32
    DIST_REQUIRE_ALL_TOOLS: 1
    DEPLOY: 1
    CI_JOB_NAME: dist-i686-mingw
  - MSYS_BITS: 64
    SCRIPT: python x.py dist
    RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-gnu --enable-full-tools
    MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
    MINGW_ARCHIVE: x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z
    MINGW_DIR: mingw64
    DIST_REQUIRE_ALL_TOOLS: 1
    DEPLOY: 1
    CI_JOB_NAME: dist-x86_64-mingw

  # "alternate" deployment, see .travis.yml for more info
  - MSYS_BITS: 64
    RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
    SCRIPT: python x.py dist
    DEPLOY_ALT: 1
    CI_JOB_NAME: dist-x86_64-msvc-alt

matrix:
  fast_finish: true

clone_depth: 2
build: false

install:
  # If we need to download a custom MinGW, do so here and set the path
  # appropriately.
  #
  # Note that this *also* means that we're not using what is typically
  # /mingw32/bin/python2.7.exe, which is a "correct" python interpreter where
  # /usr/bin/python2.7.exe is not. To ensure we use the right interpreter we
  # move `C:\Python27` ahead in PATH and then also make sure the `python2.7.exe`
  # file exists in there (which it doesn't by default).
  - if defined MINGW_URL appveyor-retry appveyor DownloadFile %MINGW_URL%/%MINGW_ARCHIVE%
  - if defined MINGW_URL 7z x -y %MINGW_ARCHIVE% > nul
  - if defined MINGW_URL set PATH=%CD%\%MINGW_DIR%\bin;C:\msys64\usr\bin;%PATH%

  # If we're compiling for MSVC then we, like most other distribution builders,
  # switch to clang as the compiler. This'll allow us eventually to enable LTO
  # amongst LLVM and rustc. Note that we only do this on MSVC as I don't think
  # clang has an output mode compatible with MinGW that we need. If it does we
  # should switch to clang for MinGW as well!
  #
  # Note that the LLVM installer is an NSIS installer
  #
  # Original downloaded here came from
  # http://releases.llvm.org/7.0.0/LLVM-7.0.0-win64.exe
  - if NOT defined MINGW_URL appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/LLVM-7.0.0-win64.exe
  - if NOT defined MINGW_URL .\LLVM-7.0.0-win64.exe /S /NCRC /D=C:\clang-rust
  - if NOT defined MINGW_URL set RUST_CONFIGURE_ARGS=%RUST_CONFIGURE_ARGS% --set llvm.clang-cl=C:\clang-rust\bin\clang-cl.exe

  # Here we do a pretty heinous thing which is to mangle the MinGW installation
  # we just had above. Currently, as of this writing, we're using MinGW-w64
  # builds of gcc, and that's currently at 6.3.0. We use 6.3.0 as it appears to
  # be the first version which contains a fix for #40546, builds randomly
  # failing during LLVM due to ar.exe/ranlib.exe failures.
  #
  # Unfortunately, though, 6.3.0 *also* is the first version of MinGW-w64 builds
  # to contain a regression in gdb (#40184). As a result if we were to use the
  # gdb provided (7.11.1) then we would fail all debuginfo tests.
  #
  # In order to fix spurious failures (pretty high priority) we use 6.3.0. To
  # avoid disabling gdb tests we download an *old* version of gdb, specifically
  # that found inside the 6.2.0 distribution. We then overwrite the 6.3.0 gdb
  # with the 6.2.0 gdb to get tests passing.
  #
  # Note that we don't literally overwrite the gdb.exe binary because it appears
  # to just use gdborig.exe, so that's the binary we deal with instead.
  - if defined MINGW_URL appveyor-retry appveyor DownloadFile %MINGW_URL%/2017-04-20-%MSYS_BITS%bit-gdborig.exe
  - if defined MINGW_URL mv 2017-04-20-%MSYS_BITS%bit-gdborig.exe %MINGW_DIR%\bin\gdborig.exe

  # Otherwise pull in the MinGW installed on appveyor
  - if NOT defined MINGW_URL set PATH=C:\msys64\mingw%MSYS_BITS%\bin;C:\msys64\usr\bin;%PATH%

  # Prefer the "native" Python as LLVM has trouble building with MSYS sometimes
  - copy C:\Python27\python.exe C:\Python27\python2.7.exe
  - set PATH=C:\Python27;%PATH%

  # Download and install sccache
  - appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2018-04-26-sccache-x86_64-pc-windows-msvc
  - mv 2018-04-26-sccache-x86_64-pc-windows-msvc sccache.exe
  - set PATH=%PATH%;%CD%

  # Download and install ninja
  #
  # Note that this is originally from the github releases patch of Ninja
  - appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-03-15-ninja-win.zip
  - 7z x 2017-03-15-ninja-win.zip
  - set RUST_CONFIGURE_ARGS=%RUST_CONFIGURE_ARGS% --enable-ninja
  # - set PATH=%PATH%;%CD% -- this already happens above for sccache

  # Install InnoSetup to get `iscc` used to produce installers
  - appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-08-22-is.exe
  - 2017-08-22-is.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-
  - set PATH="C:\Program Files (x86)\Inno Setup 5";%PATH%

  # Help debug some handle issues on AppVeyor
  - appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-05-15-Handle.zip
  - mkdir handle
  - 7z x -ohandle 2017-05-15-Handle.zip
  - set PATH=%PATH%;%CD%\handle
  - handle.exe -accepteula -help

test_script:
  - if not exist C:\cache\rustsrc\NUL mkdir C:\cache\rustsrc
  - sh src/ci/init_repo.sh . /c/cache/rustsrc
  - set SRC=.
  - set NO_CCACHE=1
  - sh src/ci/run.sh

on_failure:
  # Dump crash log
  - set PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\Debuggers\X64"
  - if exist %LOCALAPPDATA%\CrashDumps for %%f in (%LOCALAPPDATA%\CrashDumps\*) do cdb -c "k;q" -G -z "%%f"

branches:
  only:
    - auto

before_deploy:
  - ps: |
        New-Item -Path deploy -ItemType directory
        Remove-Item -Recurse -Force build\dist\doc
        Get-ChildItem -Path build\dist | Move-Item -Destination deploy
        Get-ChildItem -Path deploy | Foreach-Object {
          Push-AppveyorArtifact $_.FullName -FileName ${env:APPVEYOR_REPO_COMMIT}/$_
        }

deploy:
  - provider: S3
    access_key_id: $(AWS_ACCESS_KEY_ID)
    secret_access_key: $(AWS_SECRET_ACCESS_KEY)
    bucket: rust-lang-ci2
    set_public: true
    region: us-west-1
    artifact: /.*/
    folder: rustc-builds
    on:
      branch: auto
      DEPLOY: 1
    max_error_retry: 5

  # This provider is the same as the one above except that it has a slightly
  # different upload directory and a slightly different trigger
  - provider: S3
    access_key_id: $(AWS_ACCESS_KEY_ID)
    secret_access_key: $(AWS_SECRET_ACCESS_KEY)
    bucket: rust-lang-ci2
    set_public: true
    region: us-west-1
    artifact: /.*/
    folder: rustc-builds-alt
    on:
      branch: auto
      DEPLOY_ALT: 1
    max_error_retry: 5

# init:
#   - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# on_finish:
#   - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))