-
Notifications
You must be signed in to change notification settings - Fork 85
149 lines (122 loc) · 4.79 KB
/
ci.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
name: CI/CD
on:
push:
pull_request:
branches:
- main
- release/v*
# Run daily at 0:01 UTC
schedule:
- cron: '1 0 * * *'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ${{ matrix.os }}
# On push events run the CI only on main by default, but run on any branch if the commit message contains '[ci all]'
if: >-
github.event_name != 'push'
|| (github.event_name == 'push' && github.ref == 'refs/heads/main')
|| (github.event_name == 'push' && github.ref != 'refs/heads/main' && contains(github.event.head_commit.message, '[ci all]'))
strategy:
matrix:
os: [ubuntu-latest]
python-version: ['3.8', '3.9', '3.10', '3.11']
include:
- os: macos-latest
python-version: '3.11'
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
python -m pip install --upgrade ".[all,test]"
- name: List installed Python packages
run: python -m pip list
- name: Test with pytest and coverage
run: |
coverage run --module pytest --ignore tests/contrib --ignore tests/benchmarks --ignore tests/test_notebooks.py
- name: Launch a tmate session if tests fail
if: failure() && github.event_name == 'workflow_dispatch'
uses: mxschmitt/action-tmate@v3
- name: Coverage report for core project
run: |
coverage report
coverage xml
# Report coverage for oldest and newest Python tested to deal with version differences
- name: Report core project coverage with Codecov
if: >-
github.event_name != 'schedule' &&
matrix.os == 'ubuntu-latest'
uses: codecov/codecov-action@v3
with:
files: ./coverage.xml
flags: unittests-${{ matrix.python-version }}
- name: Test Contrib module with pytest
run: |
coverage run --append --module pytest tests/contrib --mpl --mpl-baseline-path tests/contrib/baseline
- name: Coverage report with contrib
run: |
coverage report
coverage xml
- name: Report contrib coverage with Codecov
if: github.event_name != 'schedule' && matrix.python-version == '3.11' && matrix.os == 'ubuntu-latest'
uses: codecov/codecov-action@v3
with:
files: ./coverage.xml
flags: contrib
- name: Test docstring examples with doctest
if: matrix.python-version == '3.11'
run: coverage run --data-file=.coverage-doctest --module pytest src/ README.rst
- name: Coverage report for doctest only
if: matrix.python-version == '3.11'
run: |
coverage report --data-file=.coverage-doctest
coverage xml --data-file=.coverage-doctest -o doctest-coverage.xml
- name: Report doctest coverage with Codecov
if: github.event_name != 'schedule' && matrix.python-version == '3.11' && matrix.os == 'ubuntu-latest'
uses: codecov/codecov-action@v3
with:
files: doctest-coverage.xml
flags: doctest
- name: Run benchmarks
if: github.event_name == 'schedule' && matrix.python-version == '3.11'
run: |
pytest --benchmark-sort=mean tests/benchmarks/test_benchmark.py
test-new-cpython-support:
runs-on: ${{ matrix.os }}
# On push events run the CI only on main by default, but run on any branch if the commit message contains '[ci all]'
if: >-
github.event_name != 'push'
|| (github.event_name == 'push' && github.ref == 'refs/heads/main')
|| (github.event_name == 'push' && github.ref != 'refs/heads/main' && contains(github.event.head_commit.message, '[ci all]'))
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
python-version: ['3.12']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
# No PyTorch or TensorFlow for Python 3.12 yet
python -m pip install --upgrade ".[jax,minuit,xmlio,contrib,shellcomplete,test]"
- name: List installed Python packages
run: python -m pip list
- name: Test with pytest and coverage
run: |
coverage run --module pytest --disable-backend tensorflow --disable-backend pytorch --ignore tests/contrib --ignore tests/benchmarks --ignore tests/test_notebooks.py
- name: Coverage report for core project
run: |
coverage report
coverage xml