Skip to content

Commit

Permalink
Merge pull request #52 from henriquegemignani/feature/cibuildwheel
Browse files Browse the repository at this point in the history
Use cibuildwheel
  • Loading branch information
henriquegemignani authored Mar 5, 2024
2 parents 0fee27c + 228867e commit 034f87e
Showing 1 changed file with 63 additions and 118 deletions.
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

0 comments on commit 034f87e

Please sign in to comment.