Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use cibuildwheel #52

Merged
merged 1 commit into from
Mar 5, 2024
Merged
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
181 changes: 63 additions & 118 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,151 +12,96 @@ on:
- main

jobs:
build:
strategy:
fail-fast: false
matrix:
os:
- 'macos-latest'
- 'windows-latest'
python:
- '3.8'
- '3.9'
- '3.10'
- '3.11'
- '3.12.0-beta - 3.12.0'

runs-on: ${{ matrix.os }}
name: Wheel for ${{ matrix.os }} (${{ matrix.python }})

generate-wheels-matrix:
name: Generate wheels matrix
runs-on: ubuntu-latest
outputs:
include: ${{ steps.set-matrix.outputs.include }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: 'recursive'

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "${{ matrix.python }}"

- name: Install Python packages
run: python -m pip install --upgrade build pip

- name: build wheel
run: python -m build

- name: Store the packages
uses: actions/upload-artifact@v3
with:
name: python-package-distributions
path: dist

linux-build:
strategy:
fail-fast: false
matrix:
python:
- 'cp38-cp38'
- 'cp39-cp39'
- 'cp310-cp310'
- 'cp311-cp311'
- 'cp312-cp312'

- uses: actions/checkout@v4
- name: Install cibuildwheel
run: pipx install cibuildwheel==2.16.5
- id: set-matrix
run: |
MATRIX=$(
{
cibuildwheel --print-build-identifiers --platform linux \
| jq -nRc '{"only": inputs, "os": "ubuntu-latest"}' \
&& cibuildwheel --print-build-identifiers --platform macos --archs x86_64 \
| jq -nRc '{"only": inputs, "os": "macos-latest"}' \
&& cibuildwheel --print-build-identifiers --platform macos --archs arm64 \
| jq -nRc '{"only": inputs, "os": "macos-14"}' \
&& cibuildwheel --print-build-identifiers --platform windows \
| jq -nRc '{"only": inputs, "os": "windows-latest"}'
} | jq -sc
)
echo "include=$MATRIX" >> $GITHUB_OUTPUT
env:
CIBW_ARCHS_LINUX: x86_64
CIBW_ARCHS_MACOS: arm64 x86_64
CIBW_ARCHS_WINDOWS: AMD64
CIBW_SKIP: pp* *musllinux*

build-sdist:
name: sdist
runs-on: ubuntu-latest
container: quay.io/pypa/manylinux2014_x86_64
name: Wheel for Linux (${{ matrix.python }})

steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: 'recursive'

- name: Avoid issues with Git's solution for CVE-2022-24765 breaking setuptools-scm
run: git config --global --add safe.directory $(pwd)
- name: Build sdist
run: pipx run build --sdist

- run: /opt/python/${{ matrix.python }}/bin/python -m venv .venv

- name: Install Python packages
# setuptools upgrade needed to fix a bug with Python 3.12
run: .venv/bin/python -m pip install --upgrade build pip auditwheel setuptools

- name: build
run: .venv/bin/python -m build

- name: multilinux stuff
run: |
.venv/bin/python -m auditwheel repair --plat manylinux2014_x86_64 dist/*-linux_x86_64.whl -w dist
rm dist/*-linux_x86_64.whl
- name: Store the packages
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
name: python-package-source
path: dist

test:
needs:
- build
- linux-build

runs-on: ${{ matrix.os.image }}
name: ${{ matrix.os.name }} - Test Python ${{ matrix.python.version }}
build-wheels:
name: Build ${{ matrix.only }}
needs: generate-wheels-matrix
strategy:
fail-fast: false
matrix:
os:
- {name: 'macOS', image: 'macos-latest', wheel: 'macosx_*'}
- {name: 'Windows', image: 'windows-latest', wheel: 'win_amd64'}
- {name: 'Linux', image: 'ubuntu-latest', wheel: 'manylinux2014_x86_64'}
python:
- {version: '3.8', wheel: 'cp38-cp38'}
- {version: '3.9', wheel: 'cp39-cp39'}
- {version: '3.10', wheel: 'cp310-cp310'}
- {version: '3.11', wheel: 'cp311-cp311'}
- {version: '3.12.0-beta - 3.12.0', wheel: 'cp312-cp312'}

include: ${{ fromJson(needs.generate-wheels-matrix.outputs.include) }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v5
- uses: actions/checkout@v4
with:
python-version: ${{ matrix.python.version }}

- name: Download all the dists
uses: actions/download-artifact@v3
fetch-depth: 0
submodules: 'recursive'

- uses: pypa/[email protected]
with:
name: python-package-distributions
path: dist/

- name: Install Python packages
run: python -m pip install --upgrade pip

- name: install built wheel
run: python -m pip install "$(ls dist/*-${{ matrix.python.wheel }}-*${{ matrix.os.wheel }}.whl)[test]"
shell: bash

- name: run pytest
run: python -m pytest --cov

only: ${{ matrix.only }}
output-dir: dist
env:
CIBW_TEST_EXTRAS: test
CIBW_TEST_COMMAND: pytest {project}/tests

- name: codecov
uses: codecov/codecov-action@v4

- name: Store the packages
uses: actions/upload-artifact@v4
with:
name: python-package-${{ matrix.only }}
path: dist

pypi:
runs-on: 'ubuntu-latest'
needs:
- test
- build-sdist
- build-wheels

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
name: python-package-distributions
pattern: python-package-*
merge-multiple: true
path: dist/

- name: Publish 📦 to TestPyPI
Expand Down
Loading