forked from pyinstaller/pyinstaller
-
Notifications
You must be signed in to change notification settings - Fork 0
/
appveyor.yml
250 lines (209 loc) · 8.72 KB
/
appveyor.yml
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
# As config was originally based on an example by Olivier Grisel. Thanks!
# https://github.com/ogrisel/python-appveyor-demo/blob/master/appveyor.yml
image: Visual Studio 2019
clone_depth: 50
branches:
except:
- /pyup\/.*/
environment:
PYTEST: pytest -n2 --maxfail 5 --durations=10 --junitxml=junit-results.xml
# See https://www.appveyor.com/docs/build-cache/#saving-cache-for-failed-build.
APPVEYOR_SAVE_CACHE_ON_ERROR: true
# Set this to one of "init", "pre-test", "post-test" or "end" to to enable
# Remote Desktop access to the build worker VM. This will pause the build
# until a special "lock" file on the VM desktop is deleted. 60 min time
# limit still applies, thus you might want to reduce the test cases to be
# processed. For details please refer to
# https://www.appveyor.com/docs/how-to/rdp-to-build-worker/.
ENABLE_RDP_ACCESS: false
matrix:
- PYTHON: C:\Python39-x64
PYTHON_VERSION: 3.9
PYTHON_ARCH: 64
TEST_PART: Libraries
- PYTHON: C:\Python39-x64
PYTHON_VERSION: 3.9
PYTHON_ARCH: 64
TEST_PART: Base
- PYTHON: C:\Python39
PYTHON_VERSION: 3.9
PYTHON_ARCH: 32
TEST_PART: Libraries
- PYTHON: C:\Python39
PYTHON_VERSION: 3.9
PYTHON_ARCH: 32
TEST_PART: Base
- PYTHON: C:\Python38-x64
PYTHON_VERSION: 3.8
PYTHON_ARCH: 64
TEST_PART: Libraries
- PYTHON: C:\Python38-x64
PYTHON_VERSION: 3.8
PYTHON_ARCH: 64
TEST_PART: Base
- PYTHON: C:\Python38
PYTHON_VERSION: 3.8
PYTHON_ARCH: 32
TEST_PART: Libraries
- PYTHON: C:\Python38
PYTHON_VERSION: 3.8
PYTHON_ARCH: 32
TEST_PART: Base
- PYTHON: C:\Python37-x64
PYTHON_VERSION: 3.7
PYTHON_ARCH: 64
TEST_PART: Libraries
- PYTHON: C:\Python37-x64
PYTHON_VERSION: 3.7
PYTHON_ARCH: 64
TEST_PART: Base
- PYTHON: C:\Python37
PYTHON_VERSION: 3.7
PYTHON_ARCH: 32
TEST_PART: Libraries
- PYTHON: C:\Python37
PYTHON_VERSION: 3.7
PYTHON_ARCH: 32
TEST_PART: Base
- PYTHON: C:\Python36
PYTHON_VERSION: 3.6
PYTHON_ARCH: 32
TEST_PART: Libraries
- PYTHON: C:\Python36
PYTHON_VERSION: 3.6
PYTHON_ARCH: 32
TEST_PART: Base
init:
- ECHO %PYTHON% %PYTHON_VERSION% %PYTHON_ARCH%
- ECHO \"%APPVEYOR_SCHEDULED_BUILD%\"
# If there is a newer build queued for the same PR, cancel this one.
# The AppVeyor 'rollout builds' option is supposed to serve the same
# purpose but it is problematic because it tends to cancel builds pushed
# directly to master instead of just PR builds (or the converse).
# credits: JuliaLang developers.
- ps: |
if ($env:ENABLE_RDP_ACCESS -eq "init" ) {
$blockRdp = $true;
iex ((new-object net.webclient).DownloadString(
'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) }
- ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
throw "There are newer queued builds for this pull request, failing early." }
# Free up some disk space; exceeding the limit of 90 GB results in a
# locked-out account. The Qt directory takes over 30 GB. Do this in the
# background.
- ps: Start-Process -FilePath "$env:comspec" -ArgumentList "/c rmdir C:\Qt /s /q"
cache:
# Cache downloaded pip packages and built wheels.
- '%LOCALAPPDATA%\pip\Cache\http'
- '%LOCALAPPDATA%\pip\Cache\wheels'
install:
# Enable long paths (needs reboot)
- ps: Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1
- ps: Start-Sleep -s 10
- ps: Restart-Computer -Force
- ps: Start-Sleep -s 10
- C:\cygwin\bin\du -hs "%LOCALAPPDATA%\pip\Cache"
# Prepend newly installed Python to the PATH of this build (this cannot be
# done from inside the powershell script as it would require to restart
# the parent CMD process).
- SET PATH=%PYTHON%;%PYTHON%\Scripts;%PATH%
# Check that we have the expected version and architecture for Python
- python --version
- python -c "import sys, platform, struct;
print(sys.platform, platform.machine(), struct.calcsize('P')*8)"
- tests\scripts\printShortLongCWD.cmd
# Compile bootloader.
- cd bootloader
- python waf all --target-arch=%PYTHON_ARCH%bit
# Verify the bootloaders have the expected arch
- python ../tests/scripts/check-pefile-arch.py %PYTHON_ARCH% build/*/*.exe
- cd ..
### Install the PyInstaller dependencies.
# Upgrade to the latest pip.
- python -m pip install -U pip setuptools wheel
# Install the PyInstaller test dependencies.
- pip install -U -r tests/requirements-tools.txt -r tests/requirements-libraries.txt
# Install PyInstaller Hook Sample, to ensure that tests declared in
# entry-points are discovered.
- pip install https://github.com/pyinstaller/hooksample/archive/v4.0rc1.zip
# Install PyInstaller
- pip install -e .
# Make sure the help options print.
- python -m pyinstaller -h
build: none
test_script:
# On Windows, the ``noarchive`` test re-compiles all ``.pyc`` or ``.pyo``
# files. If run in parallel, one test will be trying to read a compiled file
# while the other is writing it, producing a ``PermissionError: [Errno 13]
# Permission denied`` exception. To avoid this, run these two tests in
# separate ``pytest`` invokations.
#
# The ``run_tests`` script is invoked with the ``-c`` option to specify a
# ``pytest.ini``, rather than allowing pytest to find something unexpected
# in the filesystem (it searches from the root dir all the way to the top of
# the filesystem per https://docs.pytest.org/en/latest/customize.html).
#
# In the Appveyor environment, the ``&&`` must be quoted when inside a set
# statement.
- if "%TEST_PART%" == "Libraries" (
set PYTEST_CMD=%PYTEST% -k "test_noarchive[onefile]" ^&^&
%PYTEST% tests/functional/test_libraries.py
-k "not test_noarchive[onefile]" ^&^&
python -m PyInstaller.utils.run_tests -c PyInstaller\utils\pytest.ini
--include_only=pyi_hooksample.
) else (
set PYTEST_CMD=%PYTEST% tests/unit tests/functional
--ignore tests/functional/test_libraries.py
)
- ps: |
if ($env:ENABLE_RDP_ACCESS -eq "pre-test" ) {
$blockRdp = $true;
iex ((new-object net.webclient).DownloadString(
'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) }
# Run the tests appropriate for this entry in the test matrix. Skip tests
# if we're just updating the cache; see https://www.appveyor.com/docs/environment-variables/.
- if not "%APPVEYOR_SCHEDULED_BUILD%" == "True" %PYTEST_CMD%
- ps: |
if ($env:ENABLE_RDP_ACCESS -eq "post-test" ) {
$blockRdp = $true;
iex ((new-object net.webclient).DownloadString(
'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) }
# create a dummy to make artifacs happy
- C:\cygwin\bin\touch test-output.tar.gz
on_failure:
- C:\cygwin\bin\tar -czf test-output.tar.gz -C %TMP%\pytest-of-appveyor .
- echo You can find the tar-file at %APPVEYOR_BUILD_FOLDER%
- ps: |
if ($env:ENABLE_RDP_ACCESS -eq "end" ) {
$blockRdp = $true;
iex ((new-object net.webclient).DownloadString(
'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) }
artifacts:
- path: test-output.tar.gz
name: test-output.tar.gz
on_finish:
# Remove old or huge cache files to hopefully not exceed the 1GB cache limit.
#
# If the cache limit is reached, the cache will not be updated (of not even
# created in the first run). So this is a trade of between keeping the cache
# current and having a cache at all.
# NB: This is done only `on_success` since the cache in uploaded only on
# success anyway.
- C:\cygwin\bin\find "%LOCALAPPDATA%\pip" -type f -mtime +360 -delete
- C:\cygwin\bin\find "%LOCALAPPDATA%\pip" -type f -size +10M -delete
- C:\cygwin\bin\find "%LOCALAPPDATA%\pip" -empty -delete
# Show size of cache
- C:\cygwin\bin\du -hs "%LOCALAPPDATA%\pip\Cache"
- ps: |
(new-object net.webclient).UploadFile(
"https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)",
(Resolve-Path .\junit-results.xml)
)
$LastExitCode = 0
- ps: |
if ($env:ENABLE_RDP_ACCESS -eq "post-test" ) {
$blockRdp = $true;
iex ((new-object net.webclient).DownloadString(
'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) }