-
Notifications
You must be signed in to change notification settings - Fork 1
147 lines (117 loc) · 3.87 KB
/
test-package.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
name: Test Package
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
env:
PIP_DISABLE_PIP_VERSION_CHECK: "1"
PIP_NO_PYTHON_VERSION_WARNING: "1"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
build-package:
name: Build package
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- uses: hynek/build-and-inspect-python-package@v2
id: baipp
outputs:
# Used to define the matrix for tests below. The value is based on
# packaging metadata (trove classifiers).
python-versions: ${{ steps.baipp.outputs.supported_python_classifiers_json_array }}
tests:
name: Test on ${{ matrix.os }} using Python ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}-latest
needs: build-package
strategy:
fail-fast: false
matrix:
# TODO: add tests for 'Windows' and 'macOS'. Need to install Tesseract.
os:
- ubuntu
# - windows
# Created by the build-and-inspect-python-package action above.
python-version: ${{ fromJson(needs.build-package.outputs.python-versions) }}
env:
PYTHON: ${{ matrix.python-version }}
steps:
- name: Download pre-built packages
uses: actions/download-artifact@v4
with:
name: Packages
path: dist
- name: Extract pre-built package
run: |
tar xf dist/*.tar.gz --strip-components=1
rm -rf src
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
allow-prereleases: true
- name: Install Ubuntu dependencies
if: matrix.os == 'ubuntu'
run: sudo apt-get install tesseract-ocr
- name: Install Windows dependencies
if: matrix.os == 'windows'
run: choco install tesseract
- name: Run tests
run: pipx run tox run --installpkg dist/*.whl -f py${PYTHON//./}-tests
- name: Upload coverage data
uses: actions/upload-artifact@v4
with:
name: coverage-data-${{ matrix.os }}-${{ matrix.python-version }}
path: .coverage.*
include-hidden-files: true
if-no-files-found: ignore
- name: Run mypy typing check
run: pipx run tox run --installpkg dist/*.whl -f py${PYTHON//./}-mypy
coverage:
name: Check test coverage
runs-on: ubuntu-latest
needs: tests
if: always()
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python 3.13
uses: actions/setup-python@v5
with:
python-version: 3.13
- name: Download coverage data
uses: actions/download-artifact@v4
with:
pattern: coverage-data-*
merge-multiple: true
- name: Combine coverage and fail if under expected percentage
run: |
# Install coverage packages
pip install coverage
# Combine the coverage from each Python version
coverage combine
# Generate the html coverage report
coverage html --skip-covered --skip-empty
# Generate the markdown coverage report to the GitHub step summary
coverage report --format=markdown >> $GITHUB_STEP_SUMMARY
# Generate the coverage report and fail if under expected percentage
coverage report --fail-under=65
- name: Upload HTML report if coverage under expected percentage
uses: actions/upload-artifact@v4
with:
name: html-report
path: htmlcov
if: ${{ failure() }}