164 lines (154 loc) · 4.9 KB
/
main.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
name: tests
on: [push, pull_request, workflow_dispatch]
concurrency:
group: >-
${{ github.workflow }}-
${{ github.ref_type }}-
${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
jobs:
test:
strategy:
matrix:
distutils:
- local
python:
- "3.7"
- "3.10"
# disabled due to #3365
# - "3.11"
# Workaround for actions/setup-python#508
dev:
- -dev
platform:
- ubuntu-latest
- macos-latest
- windows-latest
include:
- python: pypy3.9
platform: ubuntu-latest
- platform: ubuntu-latest
python: "3.10"
distutils: stdlib
runs-on: ${{ matrix.platform }}
env:
SETUPTOOLS_USE_DISTUTILS: ${{ matrix.distutils }}
timeout-minutes: 75
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}${{ matrix.dev }}
- uses: actions/cache@v3
id: cache
with:
path: setuptools/tests/config/downloads/*.cfg
key: >-
${{ hashFiles('setuptools/tests/config/setupcfg_examples.txt') }}-
${{ hashFiles('setuptools/tests/config/downloads/*.py') }}
- name: Populate download cache
if: steps.cache.outputs.cache-hit != 'true'
working-directory: setuptools/tests/config
run: python -m downloads.preload setupcfg_examples.txt
- name: Install tox
run: |
python -m pip install tox
- name: Run tests
run: tox
- name: Create coverage report
if: hashFiles('.coverage') != '' # Rudimentary `file.exists()`
run: pipx run coverage xml --ignore-errors
- name: Publish coverage
if: hashFiles('coverage.xml') != '' # Rudimentary `file.exists()`
uses: codecov/codecov-action@v1
with:
flags: >- # Mark which lines are covered by which envs
${{ runner.os }},
${{ matrix.python }}
check: # This job does nothing and is only used for the branch protection
if: always()
needs:
- test
runs-on: ubuntu-latest
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
test_cygwin:
strategy:
matrix:
python:
- 39
platform:
- windows-latest
runs-on: ${{ matrix.platform }}
timeout-minutes: 75
steps:
- uses: actions/checkout@v2
- name: Install Cygwin with Python
uses: cygwin/cygwin-install-action@v1
with:
platform: x86_64
packages: >-
python${{ matrix.python }},
python${{ matrix.python }}-devel,
python${{ matrix.python }}-tox,
gcc-core,
git,
- name: Run tests
shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0}
run: |
git config --global --add safe.directory "$(cygpath -u "$GITHUB_WORKSPACE")" # workaround for #3408
tox
integration-test:
needs: test
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && contains(github.ref, 'refs/tags/'))
# To avoid long times and high resource usage, we assume that:
# 1. The setuptools APIs used by packages don't vary too much with OS or
# Python implementation
# 2. Any circumstance for which the previous assumption is not valid is
# already tested via unit tests (or other tests not classified here as
# "integration")
# With that in mind, the integration tests can run for a single setup
runs-on: ubuntu-latest
timeout-minutes: 75
steps:
- uses: actions/checkout@v2
- name: Install OS-level dependencies
run: |
sudo apt-get update
sudo apt-get install build-essential gfortran libopenblas-dev
- name: Setup Python
uses: actions/setup-python@v2
with:
# Use a release that is not very new but still have a long life:
python-version: "3.8"
- name: Install tox
run: |
python -m pip install tox
- name: Run integration tests
run: tox -e integration
release:
needs:
- check
- test_cygwin
- integration-test
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
timeout-minutes: 75
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11-dev
- name: Install tox
run: |
python -m pip install tox
- name: Release
run: tox -e release
env:
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}