Skip to content

Commit 3d7f5e9

Browse files
committed
Fix CI: macOS-13 deprecated, Windows MinGW, drop Python 3.8
- Replace macos-13 with macos-15-intel (x86_64) - Fix Windows cibuildwheel: inject distutils.cfg to force mingw32 compiler - Add MinGW to PATH via GITHUB_PATH for cibuildwheel env - Drop Python 3.8 (EOL), build 3.9-3.12 - Remove invalid pp* skip selector warning - Update MACOSX_DEPLOYMENT_TARGET to 15.0 - Fix inspect steps (runner.so → runner.os typo)
1 parent 8b4ea9d commit 3d7f5e9

2 files changed

Lines changed: 30 additions & 38 deletions

File tree

.github/workflows/build_wheels.yml

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,8 @@ jobs:
5252
strategy:
5353
fail-fast: false
5454
matrix:
55-
os: [ubuntu-latest, macos-13, windows-latest]
56-
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
57-
# python-version: ['3.11']
55+
os: [ubuntu-latest, macos-15-intel, windows-latest]
56+
python-version: ['3.9', '3.10', '3.11', '3.12']
5857

5958
steps:
6059
- uses: actions/checkout@v4
@@ -96,10 +95,13 @@ jobs:
9695
if: runner.os == 'Windows'
9796
shell: bash
9897
run: |
99-
# Install MinGW-w64 via Chocolatey (provides gcc for Cython compilation)
100-
choco install mingw -y --no-progress
101-
echo "MinGW installed"
102-
gcc --version
98+
# MinGW-w64 is pre-installed on windows-latest runner
99+
echo "Checking MinGW..."
100+
gcc --version || (echo "MinGW not found, installing..." && choco install mingw -y --no-progress)
101+
# Find MinGW bin directory and add to PATH
102+
MINGW_BIN=$(dirname "$(which gcc)")
103+
echo "MinGW bin: $MINGW_BIN"
104+
echo "$MINGW_BIN" >> $GITHUB_PATH
103105
# Verify vendor libraries exist (these are checked into the repo)
104106
echo "Checking vendor libraries..."
105107
ls -la vendor/superlu/lib/ || echo "WARNING: SuperLU libs not found"
@@ -127,9 +129,8 @@ jobs:
127129
# Build wheels using cibuildwheel
128130
- name: Build wheels
129131
env:
130-
CIBW_BUILD: 'cp38-* cp39-* cp310-* cp311-* cp312-*'
131-
# CIBW_BUILD: 'cp311-*'
132-
CIBW_SKIP: '*-musllinux* pp*'
132+
CIBW_BUILD: 'cp39-* cp310-* cp311-* cp312-*'
133+
CIBW_SKIP: '*-musllinux*'
133134
# Add this to ensure extensions are built
134135
CIBW_BEFORE_BUILD: >
135136
pip install numpy cython
@@ -149,18 +150,18 @@ jobs:
149150
GITHUB_ACTIONS=true
150151
CFLAGS='-O3'
151152
CXXFLAGS='-O3'
152-
MACOSX_DEPLOYMENT_TARGET=13.0
153+
MACOSX_DEPLOYMENT_TARGET=15.0
153154
# manylinux configuration - install required packages
154155
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
155156
CIBW_BEFORE_ALL_LINUX: |
156157
yum install -y epel-release || true
157158
yum install -y openblas-devel SuperLU-devel suitesparse-devel ||
158159
yum install -y openblas-devel superlu-devel suitesparse-devel ||
159160
(apt-get update && apt-get install -y libsuitesparse-dev libsuperlu-dev libopenblas-dev)
160-
161+
161162
# Check SuperLU header location
162163
find /usr -name "slu_ddefs.h" || echo "SuperLU headers not found"
163-
164+
164165
# If header is found, create a symlink in a standard location
165166
HEADER_PATH=$(find /usr -name "slu_ddefs.h" | head -1)
166167
if [ -n "$HEADER_PATH" ]; then
@@ -179,15 +180,16 @@ jobs:
179180
mkdir -p $HOME/homebrew_libs/openblas/lib;
180181
ln -sf $OPENBLAS_PREFIX/lib/libopenblas.dylib $HOME/homebrew_libs/openblas/lib/;
181182
echo "Created symlink in $HOME/homebrew_libs/openblas/lib/"
182-
# Windows configuration - use vendor libraries from the repo
183+
# Windows configuration - use vendor libraries from the repo with MinGW
183184
CIBW_ARCHS_WINDOWS: 'AMD64'
184185
CIBW_ENVIRONMENT_WINDOWS: >
185186
CI=true
186187
GITHUB_ACTIONS=true
187188
SPARSE_NUMBA_SKIP_UMFPACK=1
188189
DISTUTILS_USE_SDK=0
189190
CIBW_BEFORE_BUILD_WINDOWS: >
190-
pip install numpy cython &&
191+
pip install numpy cython setuptools &&
192+
python -c "import distutils, os; f=os.path.join(os.path.dirname(distutils.__file__),'distutils.cfg'); open(f,'w').write('[build]\ncompiler=mingw32\n[build_ext]\ncompiler=mingw32\n')" &&
191193
gcc --version
192194
193195
run: |
@@ -211,9 +213,6 @@ jobs:
211213
matrix:
212214
include:
213215
# Linux x86_64
214-
- os: ubuntu-latest
215-
python-version: '3.8'
216-
wheel-suffix: 'manylinux_2_17_x86_64.manylinux2014_x86_64'
217216
- os: ubuntu-latest
218217
python-version: '3.9'
219218
wheel-suffix: 'manylinux_2_17_x86_64.manylinux2014_x86_64'
@@ -226,26 +225,20 @@ jobs:
226225
- os: ubuntu-latest
227226
python-version: '3.12'
228227
wheel-suffix: 'manylinux_2_17_x86_64.manylinux2014_x86_64'
229-
# macOS x86_64
230-
- os: macos-13 # This is x86_64
231-
python-version: '3.8'
232-
wheel-suffix: 'macosx_13_0_x86_64' # Changed to match deployment target
233-
- os: macos-13
228+
# macOS x86_64 (Intel)
229+
- os: macos-15-intel
234230
python-version: '3.9'
235-
wheel-suffix: 'macosx_13_0_x86_64'
236-
- os: macos-13
231+
wheel-suffix: 'macosx_15_0_x86_64'
232+
- os: macos-15-intel
237233
python-version: '3.10'
238-
wheel-suffix: 'macosx_13_0_x86_64'
239-
- os: macos-13
234+
wheel-suffix: 'macosx_15_0_x86_64'
235+
- os: macos-15-intel
240236
python-version: '3.11'
241-
wheel-suffix: 'macosx_13_0_x86_64'
242-
- os: macos-13
237+
wheel-suffix: 'macosx_15_0_x86_64'
238+
- os: macos-15-intel
243239
python-version: '3.12'
244-
wheel-suffix: 'macosx_13_0_x86_64'
240+
wheel-suffix: 'macosx_15_0_x86_64'
245241
# Windows x86_64
246-
- os: windows-latest
247-
python-version: '3.8'
248-
wheel-suffix: 'win_amd64'
249242
- os: windows-latest
250243
python-version: '3.9'
251244
wheel-suffix: 'win_amd64'
@@ -285,7 +278,7 @@ jobs:
285278
brew install suite-sparse superlu openblas
286279
287280
- name: Inspect linux wheel contents
288-
if: runner.so == 'Linux'
281+
if: runner.os == 'Linux'
289282
run: |
290283
python -m pip install wheel-inspect
291284
PYTHON_VERSION_NO_DOT=$(echo ${{ matrix.python-version }} | tr -d '.')
@@ -294,7 +287,7 @@ jobs:
294287
unzip -l $WHEEL_FILE | grep "cy_.*wrapper"
295288
296289
- name: Inspect macOS wheel contents
297-
if: runner.so == 'macOS'
290+
if: runner.os == 'macOS'
298291
run: |
299292
python -m pip install wheel-inspect
300293
PYTHON_VERSION_NO_DOT=$(echo ${{ matrix.python-version }} | tr -d '.')
@@ -406,7 +399,6 @@ jobs:
406399
upload_pypi:
407400
needs: [check_duplicate, build_wheels, build_sdist, test_installation]
408401
if: ${{ needs.check_duplicate.outputs.should_run == 'true' && needs.check_duplicate.outputs.is_tag == 'true' }}
409-
# if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
410402
runs-on: ubuntu-latest
411403
environment: pypi
412404
permissions:
@@ -447,4 +439,4 @@ jobs:
447439
- name: Publish to PyPI
448440
uses: pypa/gh-action-pypi-publish@release/v1
449441
with:
450-
packages-dir: final_dist/
442+
packages-dir: final_dist/

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ def run(self):
478478
'build_ext': CustomBuildExt,
479479
},
480480
package_data=package_data,
481-
python_requires=">=3.8",
481+
python_requires=">=3.9",
482482
install_requires=[
483483
"numpy>=1.13.3",
484484
"numba>=0.58.0",

0 commit comments

Comments
 (0)