]> git.lizzy.rs Git - rust.git/blob - appveyor.yml
743e615c3f3cadfbdc4634c7ebae70c40e121bd6
[rust.git] / appveyor.yml
1 environment:
2   SCCACHE_DIGEST: f808afabb4a4eb1d7112bcb3fa6be03b61e93412890c88e177c667eb37f46353d7ec294e559b16f9f4b5e894f2185fe7670a0df15fd064889ecbd80f0c34166c
3
4   # By default schannel checks revocation of certificates unlike some other SSL
5   # backends, but we've historically had problems on CI where a revocation
6   # server goes down presumably. See #43333 for more info
7   CARGO_HTTP_CHECK_REVOKE: false
8
9   matrix:
10   # 32/64 bit MSVC tests
11   - MSYS_BITS: 64
12     RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-profiler
13     SCRIPT: python x.py test
14     CI_JOB_NAME: x86_64-msvc
15   - MSYS_BITS: 32
16     RUST_CONFIGURE_ARGS: --build=i686-pc-windows-msvc
17     SCRIPT: make appveyor-subset-1
18     CI_JOB_NAME: i686-msvc-1
19   - MSYS_BITS: 32
20     RUST_CONFIGURE_ARGS: --build=i686-pc-windows-msvc
21     SCRIPT: make appveyor-subset-2
22     CI_JOB_NAME: i686-msvc-2
23
24   # MSVC aux tests
25   - MSYS_BITS: 64
26     RUST_CHECK_TARGET: check-aux EXCLUDE_CARGO=1
27     RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc
28     CI_JOB_NAME: x86_64-msvc-aux
29   - MSYS_BITS: 64
30     SCRIPT: python x.py test src/tools/cargotest src/tools/cargo
31     RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc
32     CI_JOB_NAME: x86_64-msvc-cargo
33
34   # MSVC tools tests
35   - MSYS_BITS: 64
36     SCRIPT: src/ci/docker/x86_64-gnu-tools/checktools.sh x.py /tmp/toolstates.json windows
37     RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --save-toolstates=/tmp/toolstates.json --enable-test-miri
38     CI_JOB_NAME: x86_64-msvc-tools
39
40   # 32/64-bit MinGW builds.
41   #
42   # We are using MinGW with posix threads since LLVM does not compile with
43   # the win32 threads version due to missing support for C++'s std::thread.
44   #
45   # Instead of relying on the MinGW version installed on appveryor we download
46   # and install one ourselves so we won't be surprised by changes to appveyor's
47   # build image.
48   #
49   # Finally, note that the downloads below are all in the `rust-lang-ci` S3
50   # bucket, but they cleraly didn't originate there! The downloads originally
51   # came from the mingw-w64 SourceForge download site. Unfortunately
52   # SourceForge is notoriously flaky, so we mirror it on our own infrastructure.
53   - MSYS_BITS: 32
54     RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu
55     SCRIPT: make appveyor-subset-1
56     MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
57     MINGW_ARCHIVE: i686-6.3.0-release-posix-dwarf-rt_v5-rev2.7z
58     MINGW_DIR: mingw32
59     CI_JOB_NAME: i686-mingw-1
60   - MSYS_BITS: 32
61     RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu
62     SCRIPT: make appveyor-subset-2
63     MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
64     MINGW_ARCHIVE: i686-6.3.0-release-posix-dwarf-rt_v5-rev2.7z
65     MINGW_DIR: mingw32
66     CI_JOB_NAME: i686-mingw-2
67   - MSYS_BITS: 64
68     SCRIPT: python x.py test
69     RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-gnu
70     MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
71     MINGW_ARCHIVE: x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z
72     MINGW_DIR: mingw64
73     CI_JOB_NAME: x86_64-mingw
74
75   # 32/64 bit MSVC and GNU deployment
76   - RUST_CONFIGURE_ARGS: >
77       --build=x86_64-pc-windows-msvc
78       --target=x86_64-pc-windows-msvc,aarch64-pc-windows-msvc
79       --enable-full-tools
80       --enable-profiler
81     SCRIPT: python x.py dist
82     DIST_REQUIRE_ALL_TOOLS: 1
83     DEPLOY: 1
84     CI_JOB_NAME: dist-x86_64-msvc
85     APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 Preview
86   - RUST_CONFIGURE_ARGS: >
87       --build=i686-pc-windows-msvc
88       --target=i586-pc-windows-msvc
89       --enable-full-tools
90       --enable-profiler
91     SCRIPT: python x.py dist
92     DIST_REQUIRE_ALL_TOOLS: 1
93     DEPLOY: 1
94     CI_JOB_NAME: dist-i686-msvc
95   - MSYS_BITS: 32
96     RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu --enable-full-tools
97     SCRIPT: python x.py dist
98     MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
99     MINGW_ARCHIVE: i686-6.3.0-release-posix-dwarf-rt_v5-rev2.7z
100     MINGW_DIR: mingw32
101     DIST_REQUIRE_ALL_TOOLS: 1
102     DEPLOY: 1
103     CI_JOB_NAME: dist-i686-mingw
104   - MSYS_BITS: 64
105     SCRIPT: python x.py dist
106     RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-gnu --enable-full-tools
107     MINGW_URL: https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
108     MINGW_ARCHIVE: x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z
109     MINGW_DIR: mingw64
110     DIST_REQUIRE_ALL_TOOLS: 1
111     DEPLOY: 1
112     CI_JOB_NAME: dist-x86_64-mingw
113
114   # "alternate" deployment, see .travis.yml for more info
115   - MSYS_BITS: 64
116     RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
117     SCRIPT: python x.py dist
118     DEPLOY_ALT: 1
119     CI_JOB_NAME: dist-x86_64-msvc-alt
120
121 matrix:
122   fast_finish: true
123
124 clone_depth: 2
125 build: false
126
127 install:
128   # If we need to download a custom MinGW, do so here and set the path
129   # appropriately.
130   #
131   # Note that this *also* means that we're not using what is typically
132   # /mingw32/bin/python2.7.exe, which is a "correct" python interpreter where
133   # /usr/bin/python2.7.exe is not. To ensure we use the right interpreter we
134   # move `C:\Python27` ahead in PATH and then also make sure the `python2.7.exe`
135   # file exists in there (which it doesn't by default).
136   - if defined MINGW_URL appveyor-retry appveyor DownloadFile %MINGW_URL%/%MINGW_ARCHIVE%
137   - if defined MINGW_URL 7z x -y %MINGW_ARCHIVE% > nul
138   - if defined MINGW_URL set PATH=%CD%\%MINGW_DIR%\bin;C:\msys64\usr\bin;%PATH%
139
140   # If we're compiling for MSVC then we, like most other distribution builders,
141   # switch to clang as the compiler. This'll allow us eventually to enable LTO
142   # amongst LLVM and rustc. Note that we only do this on MSVC as I don't think
143   # clang has an output mode compatible with MinGW that we need. If it does we
144   # should switch to clang for MinGW as well!
145   #
146   # Note that the LLVM installer is an NSIS installer
147   #
148   # Original downloaded here came from
149   # http://releases.llvm.org/7.0.0/LLVM-7.0.0-win64.exe
150   - 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
151   - if NOT defined MINGW_URL .\LLVM-7.0.0-win64.exe /S /NCRC /D=C:\clang-rust
152   - if NOT defined MINGW_URL set RUST_CONFIGURE_ARGS=%RUST_CONFIGURE_ARGS% --set llvm.clang-cl=C:\clang-rust\bin\clang-cl.exe
153
154   # Here we do a pretty heinous thing which is to mangle the MinGW installation
155   # we just had above. Currently, as of this writing, we're using MinGW-w64
156   # builds of gcc, and that's currently at 6.3.0. We use 6.3.0 as it appears to
157   # be the first version which contains a fix for #40546, builds randomly
158   # failing during LLVM due to ar.exe/ranlib.exe failures.
159   #
160   # Unfortunately, though, 6.3.0 *also* is the first version of MinGW-w64 builds
161   # to contain a regression in gdb (#40184). As a result if we were to use the
162   # gdb provided (7.11.1) then we would fail all debuginfo tests.
163   #
164   # In order to fix spurious failures (pretty high priority) we use 6.3.0. To
165   # avoid disabling gdb tests we download an *old* version of gdb, specifically
166   # that found inside the 6.2.0 distribution. We then overwrite the 6.3.0 gdb
167   # with the 6.2.0 gdb to get tests passing.
168   #
169   # Note that we don't literally overwrite the gdb.exe binary because it appears
170   # to just use gdborig.exe, so that's the binary we deal with instead.
171   - if defined MINGW_URL appveyor-retry appveyor DownloadFile %MINGW_URL%/2017-04-20-%MSYS_BITS%bit-gdborig.exe
172   - if defined MINGW_URL mv 2017-04-20-%MSYS_BITS%bit-gdborig.exe %MINGW_DIR%\bin\gdborig.exe
173
174   # Otherwise pull in the MinGW installed on appveyor
175   - if NOT defined MINGW_URL set PATH=C:\msys64\mingw%MSYS_BITS%\bin;C:\msys64\usr\bin;%PATH%
176
177   # Prefer the "native" Python as LLVM has trouble building with MSYS sometimes
178   - copy C:\Python27\python.exe C:\Python27\python2.7.exe
179   - set PATH=C:\Python27;%PATH%
180
181   # Download and install sccache
182   - 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
183   - mv 2018-04-26-sccache-x86_64-pc-windows-msvc sccache.exe
184   - set PATH=%PATH%;%CD%
185
186   # Download and install ninja
187   #
188   # Note that this is originally from the github releases patch of Ninja
189   - appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-03-15-ninja-win.zip
190   - 7z x 2017-03-15-ninja-win.zip
191   - set RUST_CONFIGURE_ARGS=%RUST_CONFIGURE_ARGS% --enable-ninja
192   # - set PATH=%PATH%;%CD% -- this already happens above for sccache
193
194   # Install InnoSetup to get `iscc` used to produce installers
195   - appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-08-22-is.exe
196   - 2017-08-22-is.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-
197   - set PATH="C:\Program Files (x86)\Inno Setup 5";%PATH%
198
199   # Help debug some handle issues on AppVeyor
200   - appveyor-retry appveyor DownloadFile https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-05-15-Handle.zip
201   - mkdir handle
202   - 7z x -ohandle 2017-05-15-Handle.zip
203   - set PATH=%PATH%;%CD%\handle
204   - handle.exe -accepteula -help
205
206 test_script:
207   - if not exist C:\cache\rustsrc\NUL mkdir C:\cache\rustsrc
208   - sh src/ci/init_repo.sh . /c/cache/rustsrc
209   - set SRC=.
210   - set NO_CCACHE=1
211   - sh src/ci/run.sh
212
213 on_failure:
214   # Dump crash log
215   - set PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\Debuggers\X64"
216   - if exist %LOCALAPPDATA%\CrashDumps for %%f in (%LOCALAPPDATA%\CrashDumps\*) do cdb -c "k;q" -G -z "%%f"
217
218 branches:
219   only:
220     - auto
221
222 before_deploy:
223   - ps: |
224         New-Item -Path deploy -ItemType directory
225         Remove-Item -Recurse -Force build\dist\doc
226         Get-ChildItem -Path build\dist | Move-Item -Destination deploy
227         Get-ChildItem -Path deploy | Foreach-Object {
228           Push-AppveyorArtifact $_.FullName -FileName ${env:APPVEYOR_REPO_COMMIT}/$_
229         }
230
231 deploy:
232   - provider: S3
233     access_key_id: $(AWS_ACCESS_KEY_ID)
234     secret_access_key: $(AWS_SECRET_ACCESS_KEY)
235     bucket: rust-lang-ci2
236     set_public: true
237     region: us-west-1
238     artifact: /.*/
239     folder: rustc-builds
240     on:
241       branch: auto
242       DEPLOY: 1
243     max_error_retry: 5
244
245   # This provider is the same as the one above except that it has a slightly
246   # different upload directory and a slightly different trigger
247   - provider: S3
248     access_key_id: $(AWS_ACCESS_KEY_ID)
249     secret_access_key: $(AWS_SECRET_ACCESS_KEY)
250     bucket: rust-lang-ci2
251     set_public: true
252     region: us-west-1
253     artifact: /.*/
254     folder: rustc-builds-alt
255     on:
256       branch: auto
257       DEPLOY_ALT: 1
258     max_error_retry: 5
259
260 # init:
261 #   - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
262 # on_finish:
263 #   - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))