Skip to content

Packaging QuadDType

Packaging QuadDType #1

Workflow file for this run

name: Build Wheels
on:
push:
branches:
- main
tags:
- "quaddtype-v*"
paths:
- "quaddtype/**"
pull_request:
paths:
- "quaddtype/**"
workflow_dispatch:
jobs:
build_wheels_linux:
name: Build wheels on Linux
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ">=3.10.0"
- name: Install cibuildwheel
run: pip install cibuildwheel==2.20.0
- name: Build wheels
env:
CIBW_BUILD: "cp310-manylinux_x86_64 cp311-manylinux_x86_64 cp312-manylinux_x86_64"
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
CIBW_BUILD_VERBOSITY: "3"
CIBW_BEFORE_ALL: |
git clone https://github.com/shibatch/sleef.git
cd sleef
cmake -S . -B build -DSLEEF_BUILD_QUAD:BOOL=ON -DSLEEF_BUILD_SHARED_LIBS:BOOL=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON
cmake --build build/ --clean-first -j
cmake --install build --prefix /usr/local
CIBW_ENVIRONMENT: >
CFLAGS="-I/usr/local/include $CFLAGS"
CXXFLAGS="-I/usr/local/include $CXXFLAGS"
LDFLAGS="-L/usr/local/lib64 $LDFLAGS"
LD_LIBRARY_PATH="/usr/local/lib64:$LD_LIBRARY_PATH"
CIBW_REPAIR_WHEEL_COMMAND: |
auditwheel repair -w {dest_dir} --plat manylinux_2_28_x86_64 {wheel}
CIBW_TEST_COMMAND: |
pip install {package}[test]
pytest {project}/tests
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-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.10"
- name: Install SLEEF
env:
MACOSX_DEPLOYMENT_TARGET: "11.0"
run: |
git clone https://github.com/shibatch/sleef.git
cd sleef
cmake -S . -B build \
-DSLEEF_BUILD_QUAD:BOOL=ON \
-DSLEEF_BUILD_SHARED_LIBS:BOOL=ON \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
-DCMAKE_INSTALL_RPATH="@loader_path/../lib" \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
cmake --build build/ --clean-first -j
sudo cmake --install build --prefix /usr/local
- name: Install cibuildwheel
run: pip install cibuildwheel==2.20.0
- name: Build wheels
env:
CIBW_BUILD: "cp310-* cp311-* cp312-*"
CIBW_ARCHS_MACOS: ${{ matrix.os == 'macos-13' && 'x86_64' || 'arm64' }}
CIBW_BUILD_VERBOSITY: "1"
CIBW_ENVIRONMENT: >
MACOSX_DEPLOYMENT_TARGET="11.0"
DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH"
CFLAGS="-I/usr/local/include $CFLAGS"
CXXFLAGS="-I/usr/local/include $CXXFLAGS"
LDFLAGS="-L/usr/local/lib $LDFLAGS"
CIBW_REPAIR_WHEEL_COMMAND: >
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}
CIBW_TEST_COMMAND: |
pip install {package}[test]
pytest {project}/tests
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 }}
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 3.10
uses: actions/setup-python@v4
with:
python-version: "3.10"
architecture: ${{ matrix.architecture }}
- name: Install Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
python-version: "3.10"
architecture: ${{ matrix.architecture }}
- name: Install SLEEF and other dependencies
shell: bash -l {0}
run: |
conda config --add channels conda-forge
conda config --set channel_priority strict
conda install -y sleef numpy
- name: Setup build environment
shell: pwsh
run: |
$env:INCLUDE += ";$env:CONDA_PREFIX\Library\include"
$env:LIB += ";$env:CONDA_PREFIX\Library\lib"
$env:PATH = "$env:CONDA_PREFIX\Library\bin;$env:PATH"
echo "INCLUDE=$env:INCLUDE" >> $env:GITHUB_ENV
echo "LIB=$env:LIB" >> $env:GITHUB_ENV
echo "PATH=$env:PATH" >> $env:GITHUB_ENV
- name: Install build dependencies
shell: bash -l {0}
run: |
pip install -U pip
pip install cibuildwheel==2.20.0 ninja meson meson-python numpy delvewheel pytest
- name: Build wheels
env:
CIBW_BUILD: "cp310-* cp311-* cp312-*"
CIBW_SKIP: "pp* cp36-* cp37-* cp38-* cp39-* cp313-*"
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_REPAIR_WHEEL_COMMAND: "delvewheel repair -w {dest_dir} {wheel}"
CIBW_TEST_COMMAND: |
pip install {package}[test]
python -m pytest -v {project}/test
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 }}
publish_to_testpypi:
name: Publish to TestPyPI
needs: [build_wheels_linux, build_wheels_macos, build_wheels_windows]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/quaddtype-v')
steps:
- name: Download all workflow run artifacts
uses: actions/download-artifact@v4
with:
path: dist
- name: Publish to TestPyPI
uses: pypa/[email protected]
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
repository-url: https://test.pypi.org/legacy/
packages-dir: dist/*
create_release:
name: Create Release
needs: [build_wheels_linux, build_wheels_macos, build_wheels_windows]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/quaddtype-v')
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Download all workflow run artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
- name: Upload Release Assets
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: ./artifacts/**/*.whl
env:
GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}