From 228867ec95184954da1972872b9e803ef1fa8ab3 Mon Sep 17 00:00:00 2001 From: Henrique Gemignani Passos Lima Date: Tue, 5 Mar 2024 15:06:58 +0200 Subject: [PATCH] Use cibuildwheel --- .github/workflows/python.yml | 181 ++++++++++++----------------------- 1 file changed, 63 insertions(+), 118 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index bd24395..106530f 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -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/cibuildwheel@v2.16.5 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