-
Notifications
You must be signed in to change notification settings - Fork 103
238 lines (212 loc) · 7 KB
/
test_and_deploy.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
---
name: "CI & CD"
on:
workflow_dispatch:
pull_request:
release:
types:
- published
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
CIBW_BUILD: cp39-* cp310-* cp311-*
CIBW_TEST_EXTRAS: test
CIBW_TEST_COMMAND: >
pytest {project}
--durations=50
--ignore={project}//tests//structure//test_trajectory.py
--ignore={project}//tests//sequence//align//test_statistics.py
--ignore={project}//tests//application
--ignore={project}//tests//database
--ignore={project}//tests//test_doctest.py
--ignore={project}//tests//test_modname.py
CIBW_DEPENDENCY_VERSIONS: "pinned"
# Once GHA and cibuildwheel are updated this can be removed
# mussllinux takes 6+ hrs to build and test so ignore it
CIBW_TEST_SKIP: "*musllinux* *-macosx_arm64"
jobs:
generate-wheels-matrix:
name: "Generate wheels matrix"
runs-on: "ubuntu-latest"
outputs:
include: ${{ steps.set-matrix.outputs.include }}
steps:
- uses: actions/checkout@v3
- name: Install cibuildwheel
# MAKE SURE THIS STAYS IN SYNC WITH THE LOWER GHA cibuildwheel
run: pipx install cibuildwheel==2.11.4
- id: set-matrix
run: |
MATRIX=$(
{
cibuildwheel --print-build-identifiers --platform linux \
| jq -nRc '{"only": inputs, "os": "ubuntu-20.04"}' \
&& cibuildwheel --print-build-identifiers --platform macos \
| jq -nRc '{"only": inputs, "os": "macos-11"}' \
&& cibuildwheel --print-build-identifiers --platform windows \
| jq -nRc '{"only": inputs, "os": "windows-2019"}'
} | jq -sc
)
echo "include=$MATRIX" | tee -a $GITHUB_OUTPUT
env:
CIBW_ARCHS_LINUX: "x86_64"
CIBW_ARCHS_MACOS: "x86_64 arm64"
CIBW_ARCHS_WINDOWS: "x86 AMD64"
# Skip musllinux because it takes too long to compile on GHA
# since it is emulated. (6+ hours)
# *note* most of the build time is actually numpy for musllinux
CIBW_SKIP: "*musllinux* *-manylinux_i686 *-musllinux_i686 *-win32 pp*"
test-and-build:
name: "Build & Test"
needs: "generate-wheels-matrix"
strategy:
matrix:
include: ${{ fromJson(needs.generate-wheels-matrix.outputs.include) }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
# QEMU enables building/testing for non-native architectures (ie arm64)
# at the cost of speed
- name: Set up QEMU
if: runner.os == 'Linux'
uses: docker/setup-qemu-action@v2
with:
platforms: all
- name: Build & (optionally) test wheels
# MAKE SURE THIS STAYS IN SYNC WITH THE UPPER pipx call to cibuildwheel
uses: pypa/[email protected]
with:
only: ${{ matrix.only }}
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
test-interfaces:
name: Test interfaces to databases and applications
runs-on: ubuntu-20.04
defaults:
run:
shell: bash -l {0}
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v2
with:
environment-file: environment.yml
# Use Mambaforge to circumvent conflict issue:
# https://github.com/conda-incubator/setup-miniconda/issues/274
miniforge-variant: Mambaforge
- name: Build distribution
run: pip wheel --no-deps -w dist .
- name: Install distribution
run: pip install .//dist//*.whl
- name: Run tests
# Running NCBI BLAST and SRA takes too long
# The tests on the NCBI Entrez database are not reliable enough
run: >
pytest
--durations=50
--ignore="tests//application//test_blast.py"
--ignore="tests//application//test_sra.py"
--ignore="tests//database//test_entrez.py"
tests//test_doctest.py
tests//test_modname.py
tests//database
tests//application
test-muscle5:
name: Test interface to Muscle 5
runs-on: ubuntu-20.04
defaults:
run:
shell: bash -l {0}
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v2
with:
activate-environment: biotite-dev
miniforge-variant: Mambaforge
python-version: "3.10"
channels: conda-forge,defaults
- name: Install Muscle 5
run: conda install -c bioconda "muscle=5"
- name: Build distribution
run: pip wheel -w dist .
- name: Install distribution
run: pip install .//dist//*.whl pytest
- name: Test Muscle 5 interface
run: pytest --durations=50 tests//application//test_msa.py
make-sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: true
- name: Build source distribution
run: pipx run build --sdist
- uses: actions/upload-artifact@v3
with:
path: dist//*.tar.gz
make-docs:
name: Build documentation
runs-on: ubuntu-20.04
defaults:
run:
shell: bash -l {0}
env:
BUILD_GALLERY: >
(github.event_name == 'release' && github.event.action == 'published')
|| github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v2
with:
environment-file: environment.yml
miniforge-variant: Mambaforge
- name: Build distribution
run: pip wheel --no-deps -w dist .
- name: Install distribution
run: pip install .//dist//*.whl
- run: echo ${{ env.BUILD_GALLERY }}
- name: Build documentation
if: ${{ env.BUILD_GALLERY }}
run: sphinx-build -D plot_gallery=0 doc build//doc
- name: Build documentation
if: ${{ env.BUILD_GALLERY }}
run: sphinx-build doc build//doc
- name: Zip documentation
run: |
cd build
zip -r ..//dist//doc.zip doc
cd ..
- uses: actions/upload-artifact@v3
with:
path: dist//doc.zip
upload:
name: Upload to GitHub Releases & PyPI
permissions:
contents: write
needs:
- test-and-build
- make-sdist
- make-docs
- test-interfaces
- test-muscle5
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: List distributions to be uploaded
run: ls dist
- name: Upload to GitHub Releases
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844
if: github.event_name == 'release' && github.event.action == 'published'
with:
files: dist//*
- name: Upload to PyPI
uses: pypa/gh-action-pypi-publish@c7f29f7adef1a245bd91520e94867e5c6eedddcc
if: github.event_name == 'release' && github.event.action == 'published'
with:
password: ${{ secrets.PYPI_TOKEN }}