-
Notifications
You must be signed in to change notification settings - Fork 0
321 lines (282 loc) · 9.42 KB
/
python.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
name: Python
on:
push:
branches-ignore: [gh-pages]
paths:
- ".github/workflows/python.yml"
- "python/**"
- "!python/README.md"
- 'c/Make*'
- 'c/*.mk'
- 'c/**/*.[ch]p?p?'
pull_request:
branches-ignore: [gh-pages]
paths:
- ".github/workflows/python.yml"
- "python/**"
- "!python/README.md"
- 'c/Make*'
- 'c/*.mk'
- 'c/**/*.[ch]p?p?'
# Manual run
workflow_dispatch:
release:
types:
- published
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint-ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Linter 🧹 for event_name = ${{ github.event_name }}, action = ${{ github.event.action }}, ref = ${{ github.ref }}
uses: chartboost/ruff-action@v1
with:
src: "./python"
version: 0.3.5
run-tests:
timeout-minutes: 15
needs: lint-ruff
if: "! contains(github.event.head_commit.message, '[skip ci]')"
name: Test ${{ matrix.os }} (${{ matrix.python-version }})
runs-on: ${{ matrix.os }}
strategy:
# When set to true, GitHub cancels all in-progress jobs if any matrix job fails.
fail-fast: false
matrix:
os: [ ubuntu-latest ]
# This must be kept in sync with pyproject.toml and mooplot
# macos-13 is an intel runner, macos-14 is apple silicon
python-version: ['3.10', '3.11', '3.12']
include:
- os: windows-latest
python-version: '3.10'
- os: macos-14
python-version: '3.10'
- os: macos-13
python-version: '3.10'
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install tox tox-gh-actions
- name: Run tox
run: tox
working-directory: python
build_sdist:
timeout-minutes: 10
needs: run-tests
if: "! contains(github.event.head_commit.message, '[skip ci]')"
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: ["3.10"]
os: [ubuntu-latest]
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build
- name: Build the packages
run: python3 -m build
working-directory: python
- name: Publish artifacts
uses: actions/upload-artifact@v4
with:
name: moocore-wheels-${{ matrix.os }}-${{ matrix.python-version }}
path: python/dist/*.tar.gz
build-doc:
name: Build documentation
timeout-minutes: 10
needs: build_sdist
permissions:
contents: write
concurrency: web # Recommended if you intend to make multiple deployments in quick succession.
if: "! contains(github.event.head_commit.message, '[skip ci]')"
runs-on: ubuntu-latest
steps:
- name: Checkout sources 🛎️
uses: actions/checkout@v4
- name: Setup Python 3.10
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Ensure Pip and Build
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build
- name: Build the package
run: python3 -m build
working-directory: python
- name: install the package
run: python3 -m pip install .
working-directory: python
- name: install the doc build requirements
run: |
python3 -m pip install -r requirements_dev.txt
working-directory: python
- name: Build the docs 🔧
run: |
make -C doc clean
tox -e docs
make -C doc html
working-directory: python
- name: Deploy 🚀
if: success() && runner.os == 'Linux' && github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: python/doc/_build/html/ # The folder the action should deploy.
target-folder: python
single-commit: true
clean: true
coverage:
timeout-minutes: 15
needs: build-doc
if: "! contains(github.event.head_commit.message, '[skip ci]')"
name: Coverage ${{ matrix.os }} (${{ matrix.python-version }})
runs-on: ${{ matrix.os }}
env:
CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}}
strategy:
# When set to true, GitHub cancels all in-progress jobs if any matrix job fails.
matrix:
os: [ubuntu-latest]
python-version: ['3.10']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install tox tox-gh-actions
working-directory: python
- name: Run coverage using tox
run: tox -e cov
working-directory: python
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
fail_ci_if_error: true
verbose: true
flags: python
token: ${{secrets.CODECOV_TOKEN}}
directory: python
wheels:
name: Build wheels on ${{ matrix.os }}
needs: coverage
runs-on: ${{ matrix.os }}
if: "! contains(github.event.head_commit.message, '[skip ci]')"
strategy:
fail-fast: false
matrix:
# macos-13 is an intel runner, macos-14 is apple silicon
os: [ubuntu-latest, windows-latest, macos-14]
python-version: ['3.10']
CIBW_ARCHS_MACOS: ['auto universal2']
include:
- os: macos-13
python-version: '3.10'
# Silence: While universal2 wheels can be built on x86_64, the
# arm64 part of the wheel cannot be tested on x86_64. Consider
# building universal2 wheels on an arm64 runner, if your CI
# provider offers this. Notably, an arm64 runner can also test the
# x86_64 part of the wheel, through Rosetta emulation.
CIBW_TEST_SKIP: '*-macosx_universal2:arm64'
CIBW_ARCHS_MACOS: 'auto'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
name: Install Python
with:
python-version: ${{ matrix.python-version }}
- name: Set up QEMU
if: runner.os == 'Linux'
uses: docker/setup-qemu-action@v3
with:
platforms: all
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_ARCHS_MACOS: ${{ matrix.CIBW_ARCHS_MACOS }}
CIBW_TEST_SKIP: ${{ matrix.CIBW_TEST_SKIP }}
with:
package-dir: python
output-dir: wheelhouse
- name: List wheels
run: ls wheelhouse/*.whl
- uses: actions/upload-artifact@v4
with:
name: moocore-wheels-${{ matrix.os }}-${{ matrix.python-version }}-${{ strategy.job-index }}
path: wheelhouse/*.whl
upload_pypi:
name: Publish Python 🐍 distribution 📦 to PyPI
needs: [wheels, build_sdist]
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/moocore
permissions:
id-token: write
if: github.event_name == 'release' && github.event.action == 'published' && startsWith(github.ref, 'refs/tags/v')
# or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this)
# if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/download-artifact@v4
with:
# unpacks all moocore artifacts into dist/
pattern: moocore-wheels-*
path: dist
merge-multiple: true
- name: Display structure of downloaded files
run: ls -R dist
- uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
# To test: repository-url: https://test.pypi.org/legacy/
upload:
name: Store wheels
needs: wheels
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: wheelhouse
pattern: moocore-wheels-*
merge-multiple: true
- name: List wheels
run: ls -l wheelhouse/*.whl
- name: Upload wheels
if: success() && runner.os == 'Linux' && github.event_name == 'push'
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Actions"
git checkout --orphan new-wheels
git rm -rf .
mv wheelhouse/*.whl .
git add *.whl
git commit --allow-empty -m "Store Python wheels from @ $GITHUB_SHA"
git branch -D wheels
git branch -m wheels
git push --force origin wheels
shell: bash {0}