-
Notifications
You must be signed in to change notification settings - Fork 1
142 lines (112 loc) · 4.13 KB
/
static-analysis-and-test.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
name: Static Analysis & Test
on: [push, pull_request]
jobs:
static-analysis:
# We want to run on external PRs, but not on our own internal PRs as they'll
# be run by the push to the branch. Without this if check, checks are
# duplicated since internal PRs match both the push and pull_request events.
# https://github.com/psf/black/blob/f51e53726b39a177355a7917c91c56f390dda7ef/.github/workflows/lint.yml#L7-L12
if:
github.event_name == 'push' ||
github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install tox coverage[toml]
- name: Lint with flake8
run: tox -e flake8
- name: Format with black
run: tox -e black
test:
# We want to run on external PRs, but not on our own internal PRs as they'll
# be run by the push to the branch. Without this if check, checks are
# duplicated since internal PRs match both the push and pull_request events.
if:
github.event_name == 'push' ||
github.event.pull_request.head.repo.full_name != github.repository
strategy:
matrix:
os: ['ubuntu-latest', 'windows-latest']
python: ['3.7', '3.8', '3.9', '3.10']
# Works around the depreciation of python 3.6 for ubuntu
# https://github.com/actions/setup-python/issues/544
include:
- os: 'ubuntu-20.04'
python: '3.6'
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install tox
- name: Run Tox
run: |
tox -e begin,py
- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-${{ matrix.os }}-${{ matrix.python }}
path: .coverage.*
retention-days: 1
coverage:
# We want to run on external PRs, but not on our own internal PRs as they'll
# be run by the push to the branch. Without this if check, checks are
# duplicated since internal PRs match both the push and pull_request events.
if:
github.event_name == 'push' ||
github.event.pull_request.head.repo.full_name != github.repository
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install tox coverage
# Ensure version.py is created so coverage can read it's source
- name: Run begin
run: |
tox -e begin
- name: Download coverage artifacts
uses: actions/download-artifact@v4
with:
pattern: coverage-*
merge-multiple: true
# Tox runs `coverage combine` and `coverage xml`
- name: Combine coverage and report
run: |
tox -e end
# Report and write to summary.
python -m coverage report --format=markdown >> $GITHUB_STEP_SUMMARY
# Write html coverage report to upload as an artifact
python -m coverage html
# # Report again and fail if under 100%.
# python -m coverage report --fail-under=100
- name: Upload HTML report if check failed.
uses: actions/upload-artifact@v4
with:
name: html-report
path: htmlcov
# # TODO: If we get 100% coverage we can re-enable this and the
# # `--fail-under` check so pull requests fail if the dev doesn't
# # add tests for new code.
# if: ${{ failure() }}