forked from fortaia/test_core_github
-
Notifications
You must be signed in to change notification settings - Fork 0
264 lines (254 loc) · 8.91 KB
/
ci.yaml
File metadata and controls
264 lines (254 loc) · 8.91 KB
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
name: CI
on:
pull_request:
push:
branches: [main]
tags: ['v*']
jobs:
mypy:
if: ${{ !github.event.pull_request.draft }}
strategy:
matrix:
os: [ "ubuntu-latest" ]
python-version: [ "3.9" ]
runs-on: "${{ matrix.os }}"
steps:
- name: Check out repository
uses: actions/checkout@v4
- uses: ./.github/actions/setup
with:
python-version: ${{ matrix.python-version }}
uv-dependency-install-flags: "--all-extras --group dev"
- name: mypy
run: |
MYPYPATH=stubs uv run mypy src
docs:
if: ${{ !github.event.pull_request.draft }}
strategy:
matrix:
os: [ "ubuntu-latest" ]
python-version: [ "3.11" ]
runs-on: "${{ matrix.os }}"
steps:
- name: Check out repository
uses: actions/checkout@v4
- uses: ./.github/actions/setup
with:
python-version: ${{ matrix.python-version }}
uv-dependency-install-flags: "--all-extras --group docs"
- name: docs
run: |
uv run mkdocs build --strict
- uses: ./.github/actions/setup
with:
python-version: "3.11"
uv-dependency-install-flags: "--all-extras --group docs --group dev"
- name: docs-with-changelog
run: |
# Check CHANGELOG will build too
uv run towncrier build --yes
uv run mkdocs build --strict
# Just in case, undo the staged changes
git restore --staged . && git restore .
urls:
if: ${{ !github.event.pull_request.draft }}
runs-on: "ubuntu-latest"
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: check-urls-are-valid
uses: lycheeverse/lychee-action@v2
with:
# Exclude local links
# and the template link in pyproject.toml
args: "--exclude 'file://' --exclude '^https://github\\.com/mzecc/test_core_github\\.git/pull/\\{issue\\}$' ."
tests:
strategy:
fail-fast: false
matrix:
os: [ "ubuntu-latest" ]
# Test against all security and bugfix versions: https://devguide.python.org/versions/
python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13" ]
runs-on: "${{ matrix.os }}"
defaults:
run:
# This might be needed for Windows
# and doesn't seem to affect unix-based systems so we include it.
# If you have better proof of whether this is needed or not,
# feel free to update.
shell: bash
steps:
- name: Check out repository
uses: actions/checkout@v4
- uses: ./.github/actions/setup
with:
python-version: ${{ matrix.python-version }}
# When running the tests, install with all optional dependencies
# to get maximum test coverage.
# If we find that we're getting failures
# when people try to run without installing optional dependencies,
# we should add a CI step that runs the tests without optional dependencies too.
# We don't have that right now, because we're not sure this pain point exists.
uv-dependency-install-flags: "--all-extras --group tests"
- name: Run tests
run: |
uv run pytest -r a -v src tests --doctest-modules --cov=src --cov-report=term-missing --cov-report=xml
uv run coverage report
- name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v4.2.0
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
tests-resolution-strategies:
strategy:
fail-fast: false
matrix:
# Only test on ubuntu here for now.
# We could consider doing this on different platforms too,
# although that probably belongs better with the PyPI tests.
os: [ "ubuntu-latest" ]
# Tests with lowest direct resolution.
# We don't do lowest because that is essentially testing
# whether downstream dependencies
# have set their minimum support dependencies correctly,
# which isn't our problem to solve.
resolution-strategy: [ "lowest-direct" ]
# Only test against the oldest supported python version
# because python is itself a direct dependency
# (so we're testing against the lowest direct python too).
python-version: [ "3.9" ]
runs-on: "${{ matrix.os }}"
defaults:
run:
# This might be needed for Windows
# and doesn't seem to affect unix-based systems so we include it.
# If you have better proof of whether this is needed or not,
# feel free to update.
shell: bash
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Setup uv
id: setup-uv
uses: astral-sh/setup-uv@v4
with:
version: "0.5.21"
python-version: ${{ matrix.python-version }}
- name: Create venv
run: |
uv venv --seed
- name: Install dependencies
run: |
uv pip install --requirements requirements-only-tests-locked.txt
uv pip compile --python ${{ matrix.python-version }} --resolution ${{ matrix.resolution-strategy }} --all-extras pyproject.toml -o requirements-tmp.txt
uv pip install --requirements requirements-tmp.txt .
- name: Run tests
run: |
uv run --no-sync pytest tests -r a -v
tests-without-extras:
# Run the tests without installing extras.
# This is just a test to make sure to avoid
# breaking our test PyPI install workflow.
strategy:
fail-fast: false
matrix:
os: [ "ubuntu-latest" ]
# Just test against one Python version, this is just a helper.
# The real work happens in the test PyPI install
python-version: [ "3.11" ]
runs-on: "${{ matrix.os }}"
defaults:
run:
# This might be needed for Windows
# and doesn't seem to affect unix-based systems so we include it.
# If you have better proof of whether this is needed or not,
# feel free to update.
shell: bash
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Python "${{ matrix.python-version }}"
id: setup-python
uses: actions/setup-python@v4
with:
python-version: "${{ matrix.python-version }}"
- name: Install
run: |
pip install --upgrade pip wheel
pip install .
pip install -r requirements-only-tests-min-locked.txt
- name: Run tests
run: |
pytest tests -r a -vv tests
imports-without-extras:
strategy:
fail-fast: false
matrix:
os: [ "ubuntu-latest" ]
# Test against all security and bugfix versions: https://devguide.python.org/versions/
python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13" ]
runs-on: "${{ matrix.os }}"
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Python "${{ matrix.python-version }}"
id: setup-python
uses: actions/setup-python@v4
with:
python-version: "${{ matrix.python-version }}"
- name: Install
run: |
pip install --upgrade pip wheel
pip install .
- name: Check importable without extras
run: python scripts/test-install.py
check-build:
strategy:
matrix:
os: [ "ubuntu-latest" ]
python-version: [ "3.11" ]
runs-on: "${{ matrix.os }}"
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Setup uv
id: setup-uv
uses: astral-sh/setup-uv@v4
with:
version: "0.5.21"
python-version: ${{ matrix.python-version }}
- name: Setup PDM
uses: pdm-project/setup-pdm@v4.1
with:
python-version: ${{ matrix.python-version }}
- name: Generate pdm.lock
# Required for building the locked version of the package
# with pdm-build-locked (see pyproject.toml)
run: |
pdm lock --group :all --strategy inherit_metadata
- name: Build package
run: |
uv build
- name: Check build
run: |
tar -tvf dist/test_fork-*.tar.gz --wildcards '*test_fork/py.typed'
tar -tvf dist/test_fork-*.tar.gz --wildcards 'test_fork-*/LICENCE'
check-dependency-licences:
strategy:
matrix:
os: [ "ubuntu-latest" ]
python-version: [ "3.11" ]
runs-on: "${{ matrix.os }}"
steps:
- name: Check out repository
uses: actions/checkout@v4
- uses: ./.github/actions/setup
with:
python-version: ${{ matrix.python-version }}
uv-dependency-install-flags: "--group dev"
- name: Check licences of dependencies
shell: bash
run: |
TEMP_FILE=$(mktemp)
uv export --no-dev > $TEMP_FILE
uv run liccheck -r $TEMP_FILE -R licence-check.txt
cat licence-check.txt