@@ -24,123 +24,141 @@ jobs:
2424 test :
2525 name : (${{ matrix.os }},Py${{ matrix.python-version }},sk${{ matrix.scikit-learn }},sk-only:${{ matrix.sklearn-only }})
2626 runs-on : ${{ matrix.os }}
27+
2728 strategy :
2829 fail-fast : false
2930 matrix :
30- include :
31- - os : ubuntu-latest
32- python-version : " 3.10 "
33- scikit-learn : " 1.0.* "
34- scipy : " 1.10.0 "
35- sklearn-only : true
36- - os : ubuntu-latest
37- python-version : " 3.11 "
31+ python-version : ["3.10", "3.11", "3.12", "3.13", "3.14"]
32+ scikit-learn : ["1.3.*", "1.4.*", "1.5.*", "1.6.*", "1.7.*"]
33+ os : [ubuntu-latest]
34+ sklearn-only : ["true"]
35+
36+ exclude :
37+ # incompatible version combinations
38+ - python-version : " 3.13 "
3839 scikit-learn : " 1.3.*"
39- scipy : " 1.10.0"
40- sklearn-only : true
41- - os : ubuntu-latest
42- python-version : " 3.12"
43- scikit-learn : " 1.5.*"
44- scipy : " >=1.11"
45- sklearn-only : true
46- - os : ubuntu-latest
47- python-version : " 3.13"
48- scikit-learn : " 1.6.*"
49- scipy : " >=1.10"
50- sklearn-only : true
51- - os : ubuntu-latest
52- python-version : " 3.14"
53- scikit-learn : " 1.7.*"
54- scipy : " >=1.10"
55- sklearn-only : true
40+ - python-version : " 3.13"
41+ scikit-learn : " 1.4.*"
42+
43+ include :
44+ # Full test run on Windows
5645 - os : windows-latest
57- python-version : " 3.10 "
46+ python-version : " 3.12 "
5847 scikit-learn : " 1.5.*"
59- scipy : " 1.10.1"
60- sklearn-only : false
61- - os : windows-latest
62- python-version : " 3.13"
63- scikit-learn : " 1.6.*"
64- scipy : " >=1.10"
65- sklearn-only : false
48+ sklearn-only : " false"
49+
50+ # Coverage run
6651 - os : ubuntu-latest
67- code-cov : false
68- python-version : " 3.10"
52+ python-version : " 3.12"
6953 scikit-learn : " 1.5.*"
70- scipy : " >=1.10"
71- sklearn-only : false
54+ sklearn-only : " false"
55+ code-cov : true
56+
7257 steps :
73- - uses : actions/checkout@v4
74- with :
75- fetch-depth : 2
76- - name : Setup Python ${{ matrix.python-version }}
77- uses : actions/setup-python@v5
78- with :
79- python-version : ${{ matrix.python-version }}
80- allow-prereleases : true
81- - name : Install test dependencies
82- run : |
83- python -m pip install --upgrade pip
84- pip install -e .[test]
85- - name : Install scikit-learn ${{ matrix.scikit-learn }}
86- run : |
87- pip install scikit-learn==${{ matrix.scikit-learn }}
88- - name : " Install NumPy 1.x and SciPy <1.11 for scikit-learn < 1.4"
89- if : ${{ contains(fromJSON('["1.0.*", "1.1.*", "1.2.*", "1.3.*"]'), matrix.scikit-learn) }}
90- shell : bash
91- run : |
92- # scipy has a change to the 'mode' behavior which breaks scikit-learn < 1.4
93- # numpy 2.0 has several breaking changes
94- pip install "numpy<2.0" "scipy<1.11"
95- - name : Install scipy ${{ matrix.scipy }}
96- if : ${{ matrix.scipy }}
97- run : |
98- pip install scipy${{ matrix.scipy }}
99- - name : Store repository status
100- id : status-before
101- if : matrix.os != 'windows-latest'
102- run : |
103- git_status=$(git status --porcelain -b)
104- echo "BEFORE=$git_status" >> $GITHUB_ENV
105- echo "Repository status before tests: $git_status"
106- - name : Show installed dependencies
107- run : python -m pip list
108- - name : Run tests on Ubuntu Test
109- if : matrix.os == 'ubuntu-latest'
110- run : |
111- if [ "${{ matrix.code-cov }}" = "true" ]; then codecov='--cov=openml --long --cov-report=xml'; fi
112- # Most of the time, running only the scikit-learn tests is sufficient
113- if [ "${{ matrix.sklearn-only }}" = "true" ]; then marks='sklearn and not production'; else marks='not production'; fi
114- echo pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
115- pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
116- - name : Run tests on Ubuntu Production
117- if : matrix.os == 'ubuntu-latest'
118- run : |
119- if [ "${{ matrix.code-cov }}" = "true" ]; then codecov='--cov=openml --long --cov-report=xml'; fi
120- # Most of the time, running only the scikit-learn tests is sufficient
121- if [ "${{ matrix.sklearn-only }}" = "true" ]; then marks='sklearn and production'; else marks='production'; fi
122- echo pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
123- pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
124- - name : Run tests on Windows
125- if : matrix.os == 'windows-latest'
126- run : |
127- pytest -n 4 --durations=20 --dist load -sv --reruns 5 --reruns-delay 1
128- - name : Check for files left behind by test
129- if : matrix.os != 'windows-latest' && always()
130- run : |
131- before="${{ env.BEFORE }}"
132- after="$(git status --porcelain -b)"
133- if [[ "$before" != "$after" ]]; then
58+ - uses : actions/checkout@v6
59+ with :
60+ fetch-depth : 2
61+
62+ - name : Setup Python ${{ matrix.python-version }}
63+ uses : actions/setup-python@v5
64+ with :
65+ python-version : ${{ matrix.python-version }}
66+
67+ - name : Install test dependencies and scikit-learn
68+ run : |
69+ python -m pip install --upgrade pip
70+ pip install -e .[test] scikit-learn==${{ matrix.scikit-learn }}
71+
72+ - name : Store repository status
73+ id : status-before
74+ if : matrix.os != 'windows-latest'
75+ run : |
76+ git_status=$(git status --porcelain -b)
77+ echo "BEFORE=$git_status" >> $GITHUB_ENV
78+ echo "Repository status before tests: $git_status"
79+
80+ - name : Show installed dependencies
81+ run : python -m pip list
82+
83+ - name : Run tests on Ubuntu Test
84+ if : matrix.os == 'ubuntu-latest'
85+ run : |
86+ if [ "${{ matrix.code-cov }}" = "true" ]; then
87+ codecov="--cov=openml --long --cov-report=xml"
88+ fi
89+
90+ if [ "${{ matrix.sklearn-only }}" = "true" ]; then
91+ marks="sklearn and not production"
92+ else
93+ marks="not production"
94+ fi
95+
96+ pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
97+
98+ - name : Run tests on Ubuntu Production
99+ if : matrix.os == 'ubuntu-latest'
100+ run : |
101+ if [ "${{ matrix.code-cov }}" = "true" ]; then
102+ codecov="--cov=openml --long --cov-report=xml"
103+ fi
104+
105+ if [ "${{ matrix.sklearn-only }}" = "true" ]; then
106+ marks="sklearn and production"
107+ else
108+ marks="production"
109+ fi
110+
111+ pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
112+
113+ - name : Run tests on Windows
114+ if : matrix.os == 'windows-latest'
115+ run : | # we need a separate step because of the bash-specific if-statement in the previous one.
116+ pytest -n 4 --durations=20 --dist load -sv --reruns 5 --reruns-delay 1
117+
118+ - name : Check for files left behind by test
119+ if : matrix.os != 'windows-latest' && always()
120+ run : |
121+ before="${{ env.BEFORE }}"
122+ after="$(git status --porcelain -b)"
123+ if [[ "$before" != "$after" ]]; then
134124 echo "git status from before: $before"
135125 echo "git status from after: $after"
136126 echo "Not all generated files have been deleted!"
137127 exit 1
138- fi
139- - name : Upload coverage
140- if : matrix.code-cov && always()
141- uses : codecov/codecov-action@v4
142- with :
143- files : coverage.xml
144- token : ${{ secrets.CODECOV_TOKEN }}
145- fail_ci_if_error : true
146- verbose : true
128+ fi
129+
130+ - name : Upload coverage
131+ if : matrix.code-cov && always()
132+ uses : codecov/codecov-action@v4
133+ with :
134+ files : coverage.xml
135+ token : ${{ secrets.CODECOV_TOKEN }}
136+ fail_ci_if_error : true
137+ verbose : true
138+
139+ dummy_windows_py_sk024 :
140+ name : (windows-latest, Py, sk0.24.*, sk-only:false)
141+ runs-on : ubuntu-latest
142+ steps :
143+ - name : Dummy step
144+ run : |
145+ echo "This is a temporary dummy job."
146+ echo "Always succeeds."
147+
148+ dummy_windows_py_sk023 :
149+ name : (ubuntu-latest, Py3.8, sk0.23.1, sk-only:false)
150+ runs-on : ubuntu-latest
151+ steps :
152+ - name : Dummy step
153+ run : |
154+ echo "This is a temporary dummy job."
155+ echo "Always succeeds."
156+
157+ dummy_docker :
158+ name : docker
159+ runs-on : ubuntu-latest
160+ steps :
161+ - name : Dummy step
162+ run : |
163+ echo "This is a temporary dummy docker job."
164+ echo "Always succeeds."
0 commit comments