@@ -34,15 +34,27 @@ jobs:
3434 sklearn-only : ["true"]
3535
3636 exclude :
37- # incompatible version combinations
37+ # (python, sklearn) combinations for which there is no PyPI release
38+ # scikit-learn 1.3
3839 - python-version : " 3.13"
3940 scikit-learn : " 1.3.*"
40- - python-version : " 3.13"
41- scikit-learn : " 1.4.*"
4241 - python-version : " 3.14"
4342 scikit-learn : " 1.3.*"
43+ # scikit-learn 1.4
44+ - python-version : " 3.13"
45+ scikit-learn : " 1.4.*"
4446 - python-version : " 3.14"
4547 scikit-learn : " 1.4.*"
48+ # scikit-learn 1.5
49+ - python-version : " 3.14"
50+ scikit-learn : " 1.5.*"
51+ # scikit-learn 1.6
52+ - python-version : " 3.14"
53+ scikit-learn : " 1.6.*"
54+ # scikit-learn 1.7 is installed with pandas 3
55+ - python-version : " 3.10"
56+ scikit-learn : " 1.7.*"
57+
4658
4759 include :
4860 # Full test run on ubuntu, 3.14
6476 sklearn-only : " false"
6577 code-cov : true
6678
67- # Pandas 2 run
68- - os : ubuntu-latest
69- python-version : " 3.12"
70- scikit-learn : " 1.5.*"
71- sklearn-only : " false"
72- pandas-version : " 2.*"
73- code-cov : false
74-
7579 steps :
7680 - uses : actions/checkout@v6
7781 with :
@@ -82,15 +86,21 @@ jobs:
8286 with :
8387 python-version : ${{ matrix.python-version }}
8488
85- - name : Install test dependencies, scikit-learn, and optional pandas
89+ - name : Install test dependencies, scikit-learn, and pandas
8690 shell : bash
8791 run : |
8892 python -m pip install --upgrade pip
8993 pip install -e .[test] scikit-learn==${{ matrix.scikit-learn }}
90-
91- if [ "${{ matrix.pandas-version }}" != "" ]; then
92- echo "Installing specific pandas version: ${{ matrix.pandas-version }}"
93- pip install "pandas==${{ matrix.pandas-version }}"
94+
95+ # scikit-learn 1.7+ requires pandas 3.x, earlier versions use pandas 2.x
96+ version="${{ matrix.scikit-learn }}"
97+ major=$(echo "$version" | cut -d. -f1)
98+ minor=$(echo "$version" | cut -d. -f2)
99+
100+ if [[ "$major" -gt 1 ]] || { [[ "$major" -eq 1 ]] && [[ "$minor" -ge 7 ]]; }; then
101+ pip install "pandas==3.*"
102+ else
103+ pip install "pandas==2.*"
94104 fi
95105
96106 - name : Store repository status
@@ -103,21 +113,27 @@ jobs:
103113
104114 - name : Clone Services
105115 if : matrix.os == 'ubuntu-latest'
116+ id : clone-services
106117 run : |
107118 git clone --depth 1 https://github.com/openml/services.git
108119
109120 - name : Start Docker Services
121+ id : start-services
110122 if : matrix.os == 'ubuntu-latest'
111123 working-directory : ./services
112124 run : |
113- docker compose --profile rest-api --profile minio up -d
125+ chmod -R a+rw ./data
126+ chmod -R a+rw ./logs
127+ docker compose --profile rest-api --profile minio --profile evaluation-engine up -d
114128
115129 echo "Waiting for PHP API to boot..."
116130 timeout 60s bash -c 'until [ "$(docker inspect -f {{.State.Health.Status}} openml-php-rest-api)" == "healthy" ]; do sleep 5; done'
117131
118132 echo "Final Verification: Gateway Connectivity..."
119133 curl -sSfL http://localhost:8000/api/v1/xml/data/1 | head -n 15
120134
135+ docker container ls
136+
121137 - name : Show installed dependencies
122138 run : python -m pip list
123139
@@ -173,8 +189,13 @@ jobs:
173189 fail_ci_if_error : true
174190 verbose : true
175191
192+ - name : Dump server logs
193+ if : always() && steps.start-services.outcome == 'success'
194+ run : |
195+ docker logs openml-php-rest-api -t
196+
176197 - name : Cleanup Docker setup
177- if : matrix.os == 'ubuntu-latest' && always()
198+ if : always() && steps.clone-services.outcome == 'success'
178199 run : |
179200 sudo rm -rf services
180201
0 commit comments