forked from biopython/biopython
-
Notifications
You must be signed in to change notification settings - Fork 0
377 lines (306 loc) · 9.54 KB
/
ci.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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
name: CI
# Avoid running multiple jobs for the same branch
# in case of updates.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Run on pull requests and push events to master only
on:
pull_request:
branches:
- master
push:
branches:
- master
jobs:
# Style Checking: Linux and Python version only.
style:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Check for changes only on files changed by the PR/push
- uses: trilom/[email protected]
with:
# Creates 'files.txt' by default
output: ' '
fileOutput: ' '
# Cache CI packages
- uses: actions/cache@v2
id: cache-precommit
with:
path: ~/.cache/pre-commit
key: ${{ runner.os }}-precommit-hooks-v2-${{ hashFiles('**/.pre-commit-config.yaml') }}
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Installing pre-commit
run: |
python -m pip install pre-commit
- name: Installing pre-commit hooks (cached)
if: steps.cache-precommit.outputs.cache-hit != 'true'
run: |
pre-commit install --install-hooks
- name: Run style checking via pre-commit
run: |
pre-commit run --files $( cat ${HOME}/files.txt )
# Cache pip & python dependencies for Linux runner
# since it is used in most actions.
# Adapted from: https://medium.com/ai2-blog/python-caching-in-github-actions-e9452698e98d
linux_prep:
needs: [style]
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11"]
steps:
- uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- uses: actions/cache@v2
id: cache-pip
with:
path: ${{ env.pythonLocation }}
key: ${{runner.os}}-${{ env.pythonLocation }}-${{ matrix.python-version }}-v2-${{ hashFiles('setup.py') }}-${{ hashFiles('**/ci-dependencies.txt') }}
- name: Install Python packaging tools
run: |
python -m pip install --upgrade pip setuptools wheel
- name: Install Python dependencies
if: steps.cache-pip.outputs.cache-hit != 'true'
run: |
python -m pip install --upgrade --upgrade-strategy eager -r ci-dependencies.txt
# Try building package:
# - tarball on Linux
# - wheels on all supported OSes and Linux, MacOS, and Windows
build:
needs: [style]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install Python packaging tools
run: |
python -m pip install --upgrade pip setuptools wheel
- name: Package tarball
run: |
python setup.py sdist --formats=gztar,zip
build_wheels:
needs: [style]
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-2019]
python-version: ["3.8", "3.9", "3.10", "3.11"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packaging tools
run: |
python -m pip install --upgrade pip setuptools wheel
- name: Build wheel
run: |
python setup.py bdist_wheel
# - name: Archive wheels
# uses: actions/upload-artifact@v2
# with:
# name: biopython_wheels
# path: |
# dist/*whl
#
# - name: Fetch archived wheels from previous jobs
# uses: actions/download-artifact@v2
# with:
# name: biopython_wheels
# path: dist
# Run tests in parallel across Linux, MacOS, and Windows
# hosts (thus the three steps and not the single matrix entry).
#
# Linux tests install all the dev dependencies, while MacOS and Windows
# tests install only numpy (lightweight version).
# NOTE: PyPy only runs on Linux with minimal dependencies because it's running slowly.
#
# Tests trigger only of the style and build steps succeed.
#
# Linux is where the thorough tests run. Install all dependencies and run all (offline) tests.
test_linux:
timeout-minutes: 15
needs: [style, build, build_wheels, linux_prep]
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11"]
steps:
# Start MySQL server: required for some tests.
- run: |
sudo /etc/init.d/mysql start
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
# Retrieve cache to speed things up
- uses: actions/cache@v2
id: cache-pip
with:
path: ${{ env.pythonLocation }}
key: ${{runner.os}}-${{ env.pythonLocation }}-${{ matrix.python-version }}-v2-${{ hashFiles('setup.py') }}-${{ hashFiles('**/ci-dependencies.txt') }}
- name: Install dependencies
if: steps.cache-pip.outputs.cache-hit != 'true'
run: |
python -m pip install --upgrade --upgrade-strategy eager -r ci-dependencies.txt
- name: Debug Info
run: |
python -m pip list
- name: Install from source
run: |
python -m pip install .
- name: Run test suite and get coverage
run: |
cd Tests
rm -rf coverage.xml
coverage run run_tests.py --offline
coverage xml
shell: bash
test_macos:
timeout-minutes: 15
needs: [style, build, build_wheels]
runs-on: macos-latest
strategy:
matrix:
python-version: ["3.8", "3.11"]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packaging tools
run: |
python -m pip install --upgrade pip setuptools wheel
- name: Install minimal Python dependencies
run: |
python -m pip install numpy
- name: Debug Info
run: |
python -m pip list
- name: Install from source
run: |
python -m pip install .
- name: Run test suite
run: |
cd Tests
python run_tests.py --offline
test_windows:
timeout-minutes: 15
needs: [style, build, build_wheels]
runs-on: windows-2019
strategy:
matrix:
# TODO - Try Python 3.11 again, was Python 3.11.0 was
# failing when trying to delete SQlite databases.
python-version: ["3.8", "3.10"]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packaging tools
run: |
python -m pip install --upgrade pip setuptools wheel
- name: Install minimal Python dependencies
run: |
python -m pip install numpy
- name: Debug Info
run: |
python -m pip list
- name: Install from source
run: |
python -m pip install .
- name: Run test suite
run: |
cd Tests
python run_tests.py --offline
test_pypy:
timeout-minutes: 20 # a little more time
needs: [style, build, build_wheels]
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [pypy-3.8]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packaging tools
run: |
python -m pip install --upgrade pip setuptools wheel
- name: Install minimal Python dependencies
run: |
python -m pip install numpy
- name: Debug Info
run: |
python -m pip list
- name: Install from source
run: |
python -m pip install .
- name: Run test suite
run: |
cd Tests
python run_tests.py --offline
# Flag step
check_tests:
needs: [test_linux, test_macos, test_windows]
runs-on: ubuntu-latest
steps:
- run: echo All tests passed.
# Check and build (API) documentation if everything passes.
docs:
needs: [check_tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.9
- uses: actions/cache@v2
id: cache-pip
with:
path: ${{ env.pythonLocation }}
key: ${{runner.os}}-${{ env.pythonLocation }}-${{ matrix.python-version }}-v2-${{ hashFiles('setup.py') }}-${{ hashFiles('**/ci-dependencies.txt') }}
- name: Install Python packaging tools
run: |
python -m pip install --upgrade pip setuptools wheel
- name: Install dependencies
if: steps.cache-pip.outputs.cache-hit != 'true'
run: |
python -m pip install --upgrade --upgrade-strategy eager -r ci-dependencies.txt
- name: Debug Info
run: |
python -m pip list
- name: Install from source
run: |
python -m pip install .
- name: Make documentation
run: |
make -C Doc/api html
shell: bash
cleanup_wheels:
if: always()
needs: [build_wheels]
runs-on: ubuntu-latest
steps:
- uses: geekyeggo/delete-artifact@v1
with:
name: biopython_wheels