-
Notifications
You must be signed in to change notification settings - Fork 471
129 lines (113 loc) · 4.61 KB
/
CI-python.yml
File metadata and controls
129 lines (113 loc) · 4.61 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
name: CI Python
on:
push:
branches: [main]
pull_request:
branches: [main]
paths:
- "erroranalysis/**"
- "rai_test_utils/**"
- "raiutils/**"
- "responsibleai/**"
- ".github/workflows/CI-python.yml"
jobs:
ci-python:
strategy:
# Prevent one failed job from cancelling all others
# Helps identify if failures are specific to certain matrix combinations
fail-fast: false
matrix:
packageDirectory:
["responsibleai", "erroranalysis", "raiutils", "rai_test_utils"]
# Temporary: Removed windows-latest due to persistent GitHub Actions runner infrastructure issue
# Error: "Could not find a part of the path 'D:\a'" - runner workspace initialization failure
# TODO: Re-enable Windows tests once GitHub resolves runner issue
operatingSystem: [ubuntu-latest, macos-latest]
pythonVersion: ["3.9", "3.10", "3.11"]
exclude:
- packageDirectory: "responsibleai"
pythonVersion: "3.11"
- packageDirectory: "responsibleai"
operatingSystem: "macos-latest"
pythonVersion: "3.9"
runs-on: ${{ matrix.operatingSystem }}
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.pythonVersion }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.pythonVersion }}
- name: Setup tools
run: |
python -m pip install --upgrade pip
pip install --upgrade setuptools
pip install --upgrade "pip-tools<=7.1.0"
- if: ${{ matrix.operatingSystem == 'macos-latest' }}
name: Use Homebrew to install libomp on MacOS
run: |
brew install libomp
- name: Install package dependencies
run: |
pip install -r requirements-dev.txt
working-directory: ${{ matrix.packageDirectory }}
- name: Install package
run: |
pip install -v -e .
working-directory: ${{ matrix.packageDirectory }}
- name: Pip freeze
run: |
pip freeze > installed-requirements-dev.txt
cat installed-requirements-dev.txt
working-directory: ${{ matrix.packageDirectory }}
- if: ${{ (matrix.operatingSystem == 'windows-latest') && (matrix.pythonVersion == '3.9') && (matrix.packageDirectory == 'responsibleai') }}
name: Upload requirements
uses: actions/upload-artifact@v4
with:
name: requirements-dev.txt
path: ${{ matrix.packageDirectory }}/installed-requirements-dev.txt
- name: Run tests
run: |
pytest -s -v --durations=10 --doctest-modules --junitxml=junit/test-results.xml --cov=${{ matrix.packageDirectory }} --cov-report=xml --cov-report=html
working-directory: ${{ matrix.packageDirectory }}
- name: Upload code coverage results
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.packageDirectory }}-${{ matrix.operatingSystem }}-${{ matrix.pythonVersion}}-code-coverage-results
path: ${{ matrix.packageDirectory }}/htmlcov
# Use always() to always run this step to publish test results when there are test failures
if: ${{ always() }}
- if: ${{ (matrix.operatingSystem == 'windows-latest') && (matrix.pythonVersion == '3.9') }}
name: Upload to codecov
id: codecovupload1
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ${{ matrix.packageDirectory }}
env_vars: OS,PYTHON
fail_ci_if_error: false
files: ./${{ matrix.packageDirectory }}/coverage.xml
flags: unittests
name: codecov-umbrella
verbose: true
- if: ${{ (steps.codecovupload1.outcome == 'failure') && (matrix.pythonVersion == '3.9') && (matrix.operatingSystem == 'windows-latest') }}
name: Retry upload to codecov
id: codecovupload2
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ${{ matrix.packageDirectory }}
env_vars: OS,PYTHON
fail_ci_if_error: false
files: ./${{ matrix.packageDirectory }}/coverage.xml
flags: unittests
name: codecov-umbrella
verbose: true
- name: Set codecov status
if: ${{ (matrix.pythonVersion == '3.9') && (matrix.operatingSystem == 'windows-latest') }}
shell: bash
run: |
if ${{ (steps.codecovupload1.outcome == 'success') || (steps.codecovupload2.outcome == 'success') }} ; then
echo fine
else
exit 1
fi