Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
385 changes: 196 additions & 189 deletions .github/workflows/build_wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ jobs:
steps:
- uses: actions/checkout@v3

- name: ccaches
uses: hendrikmuhs/[email protected]
with:
create-symlink: true
key: ${{ github.job }}-ubuntu-latest
verbose: 2

- name: Set up Python
uses: actions/setup-python@v4
with:
Expand Down Expand Up @@ -60,192 +67,192 @@ jobs:
path: ./quaddtype/wheelhouse/*.whl
name: wheels-linux

build_wheels_macos:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-13, macos-14]

steps:
- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ">=3.11.0"

- name: Install dependencies
run: |
packages="cmake libomp git"
echo "Remove preinstalled dependencies"
for pkg in $packages; do
brew uninstall --ignore-dependencies $pkg 2>/dev/null || true
done
brew cleanup
brew install $packages

- name: Installing Python dependencies
run: |
pip install -U pip
pip install cibuildwheel==3.1.4
pip install pytest-run-parallel

- name: Build wheels
env:
CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-* cp313t-* cp314t-*"
CIBW_ENABLE: cpython-prerelease cpython-freethreading
CIBW_ARCHS_MACOS: ${{ matrix.os == 'macos-13' && 'x86_64' || 'arm64' }}
CIBW_BUILD_VERBOSITY: "3"
CIBW_ENVIRONMENT: >
MACOSX_DEPLOYMENT_TARGET="${{ matrix.os == 'macos-13' && '13.0' || '14.0' }}"
CIBW_REPAIR_WHEEL_COMMAND: >
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}
CIBW_TEST_COMMAND: |
pip install {package}[test]
if python -c "import sys; exit(0 if hasattr(sys, '_is_gil_enabled') and not sys._is_gil_enabled() else 1)"; then
pytest --parallel-threads=10 --iterations=10 {project}/tests
else
pytest -s {project}/tests
fi
CIBW_TEST_EXTRAS: "test"
run: |
python -m cibuildwheel --output-dir wheelhouse
working-directory: ./quaddtype

- uses: actions/upload-artifact@v4
with:
path: ./quaddtype/wheelhouse/*.whl
name: wheels-${{ matrix.os }}

# disabling QBLAS optimization for windows due to incompatibility with MSVC
build_wheels_windows:
name: Build wheels on Windows
runs-on: windows-latest
strategy:
matrix:
architecture: [x64]

steps:
- uses: actions/checkout@v3

- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.architecture }}

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ">=3.11.0"
architecture: ${{ matrix.architecture }}

- name: Install CMake
uses: lukka/get-cmake@latest

- name: Install build dependencies
shell: bash -l {0}
run: |
pip install -U pip
pip install cibuildwheel==3.1.4 ninja meson meson-python numpy delvewheel pytest

- name: Build wheels
env:
CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-* cp313t-* cp314t-*"
CIBW_ENABLE: cpython-prerelease cpython-freethreading
CIBW_SKIP: "pp* cp36-* cp37-* cp38-* cp39-*"
CIBW_ARCHS_WINDOWS: ${{ matrix.architecture == 'x86' && 'x86' || 'AMD64' }}
CIBW_BUILD_VERBOSITY: "3"
DISTUTILS_USE_SDK: "1"
MSSdk: "1"
CIBW_BEFORE_BUILD: |
pip install meson meson-python ninja numpy
CIBW_ENVIRONMENT: >
CFLAGS="/DDISABLE_QUADBLAS $CFLAGS"
CXXFLAGS="/DDISABLE_QUADBLAS $CXXFLAGS"
CIBW_REPAIR_WHEEL_COMMAND: 'delvewheel repair -w {dest_dir} {wheel} --add-path C:\sleef\bin'
CIBW_TEST_COMMAND: |
pip install {package}[test]
if python -c "import sys; exit(0 if hasattr(sys, '_is_gil_enabled') and not sys._is_gil_enabled() else 1)"; then
pytest --parallel-threads=10 --iterations=10 {project}/tests
else
pytest -s {project}/tests
fi
CIBW_TEST_EXTRAS: test
CIBW_TEST_FAIL_FAST: 1
shell: pwsh
run: |
python -m cibuildwheel --output-dir wheelhouse
if (-not (Test-Path wheelhouse/*.whl)) { throw "Wheel was not created" }
working-directory: ./quaddtype

- uses: actions/upload-artifact@v4
with:
path: ./quaddtype/wheelhouse/*.whl
name: wheels-windows-${{ matrix.architecture }}

build_sdist:
name: Build SDist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ">=3.11.0"

- name: Install system dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y cmake gcc g++ make git pkg-config

- name: Install build dependencies
run: |
python -m pip install --upgrade pip
python -m pip install build pytest

- name: Build SDist & test sdist
env:
LDFLAGS: "-fopenmp"
run: |
python -m build --sdist --outdir dist/
pip install dist/*.tar.gz -v
pytest -s tests
working-directory: ./quaddtype

- name: Upload SDist artifact
uses: actions/upload-artifact@v4
with:
name: sdist
path: ./quaddtype/dist/*.tar.gz

publish_to_pypi:
name: Publish to PyPI
needs:
[
build_wheels_linux,
build_wheels_macos,
build_wheels_windows,
build_sdist,
]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/quaddtype-v')

environment:
name: quadtype_release
url: https://pypi.org/p/numpy-quaddtype

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all workflow run artifacts
uses: actions/download-artifact@v4
with:
pattern: "*"
path: dist
merge-multiple: true

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
# build_wheels_macos:
# name: Build wheels on ${{ matrix.os }}
# runs-on: ${{ matrix.os }}
# strategy:
# matrix:
# os: [macos-13, macos-14]

# steps:
# - uses: actions/checkout@v3

# - name: Set up Python
# uses: actions/setup-python@v4
# with:
# python-version: ">=3.11.0"

# - name: Install dependencies
# run: |
# packages="cmake libomp git"
# echo "Remove preinstalled dependencies"
# for pkg in $packages; do
# brew uninstall --ignore-dependencies $pkg 2>/dev/null || true
# done
# brew cleanup
# brew install $packages

# - name: Installing Python dependencies
# run: |
# pip install -U pip
# pip install cibuildwheel==3.1.4
# pip install pytest-run-parallel

# - name: Build wheels
# env:
# CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-* cp313t-* cp314t-*"
# CIBW_ENABLE: cpython-prerelease cpython-freethreading
# CIBW_ARCHS_MACOS: ${{ matrix.os == 'macos-13' && 'x86_64' || 'arm64' }}
# CIBW_BUILD_VERBOSITY: "3"
# CIBW_ENVIRONMENT: >
# MACOSX_DEPLOYMENT_TARGET="${{ matrix.os == 'macos-13' && '13.0' || '14.0' }}"
# CIBW_REPAIR_WHEEL_COMMAND: >
# delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}
# CIBW_TEST_COMMAND: |
# pip install {package}[test]
# if python -c "import sys; exit(0 if hasattr(sys, '_is_gil_enabled') and not sys._is_gil_enabled() else 1)"; then
# pytest --parallel-threads=10 --iterations=10 {project}/tests
# else
# pytest -s {project}/tests
# fi
# CIBW_TEST_EXTRAS: "test"
# run: |
# python -m cibuildwheel --output-dir wheelhouse
# working-directory: ./quaddtype

# - uses: actions/upload-artifact@v4
# with:
# path: ./quaddtype/wheelhouse/*.whl
# name: wheels-${{ matrix.os }}

# # disabling QBLAS optimization for windows due to incompatibility with MSVC
# build_wheels_windows:
# name: Build wheels on Windows
# runs-on: windows-latest
# strategy:
# matrix:
# architecture: [x64]

# steps:
# - uses: actions/checkout@v3

# - name: Setup MSVC
# uses: ilammy/msvc-dev-cmd@v1
# with:
# arch: ${{ matrix.architecture }}

# - name: Set up Python
# uses: actions/setup-python@v4
# with:
# python-version: ">=3.11.0"
# architecture: ${{ matrix.architecture }}

# - name: Install CMake
# uses: lukka/get-cmake@latest

# - name: Install build dependencies
# shell: bash -l {0}
# run: |
# pip install -U pip
# pip install cibuildwheel==3.1.4 ninja meson meson-python numpy delvewheel pytest

# - name: Build wheels
# env:
# CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-* cp313t-* cp314t-*"
# CIBW_ENABLE: cpython-prerelease cpython-freethreading
# CIBW_SKIP: "pp* cp36-* cp37-* cp38-* cp39-*"
# CIBW_ARCHS_WINDOWS: ${{ matrix.architecture == 'x86' && 'x86' || 'AMD64' }}
# CIBW_BUILD_VERBOSITY: "3"
# DISTUTILS_USE_SDK: "1"
# MSSdk: "1"
# CIBW_BEFORE_BUILD: |
# pip install meson meson-python ninja numpy
# CIBW_ENVIRONMENT: >
# CFLAGS="/DDISABLE_QUADBLAS $CFLAGS"
# CXXFLAGS="/DDISABLE_QUADBLAS $CXXFLAGS"
# CIBW_REPAIR_WHEEL_COMMAND: 'delvewheel repair -w {dest_dir} {wheel} --add-path C:\sleef\bin'
# CIBW_TEST_COMMAND: |
# pip install {package}[test]
# if python -c "import sys; exit(0 if hasattr(sys, '_is_gil_enabled') and not sys._is_gil_enabled() else 1)"; then
# pytest --parallel-threads=10 --iterations=10 {project}/tests
# else
# pytest -s {project}/tests
# fi
# CIBW_TEST_EXTRAS: test
# CIBW_TEST_FAIL_FAST: 1
# shell: pwsh
# run: |
# python -m cibuildwheel --output-dir wheelhouse
# if (-not (Test-Path wheelhouse/*.whl)) { throw "Wheel was not created" }
# working-directory: ./quaddtype

# - uses: actions/upload-artifact@v4
# with:
# path: ./quaddtype/wheelhouse/*.whl
# name: wheels-windows-${{ matrix.architecture }}

# build_sdist:
# name: Build SDist
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3

# - name: Set up Python
# uses: actions/setup-python@v4
# with:
# python-version: ">=3.11.0"

# - name: Install system dependencies
# run: |
# sudo apt-get update -y
# sudo apt-get install -y cmake gcc g++ make git pkg-config

# - name: Install build dependencies
# run: |
# python -m pip install --upgrade pip
# python -m pip install build pytest

# - name: Build SDist & test sdist
# env:
# LDFLAGS: "-fopenmp"
# run: |
# python -m build --sdist --outdir dist/
# pip install dist/*.tar.gz -v
# pytest -s tests
# working-directory: ./quaddtype

# - name: Upload SDist artifact
# uses: actions/upload-artifact@v4
# with:
# name: sdist
# path: ./quaddtype/dist/*.tar.gz

# publish_to_pypi:
# name: Publish to PyPI
# needs:
# [
# build_wheels_linux,
# build_wheels_macos,
# build_wheels_windows,
# build_sdist,
# ]
# runs-on: ubuntu-latest
# if: startsWith(github.ref, 'refs/tags/quaddtype-v')

# environment:
# name: quadtype_release
# url: https://pypi.org/p/numpy-quaddtype

# permissions:
# id-token: write # IMPORTANT: mandatory for trusted publishing

# steps:
# - name: Download all workflow run artifacts
# uses: actions/download-artifact@v4
# with:
# pattern: "*"
# path: dist
# merge-multiple: true

# - name: Publish to PyPI
# uses: pypa/gh-action-pypi-publish@release/v1
Loading
Loading