Wheel creation #120
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Wheel creation | |
# Change this to whatever you want | |
on: | |
push: | |
tags: | |
- 'v*' | |
workflow_dispatch: | |
inputs: | |
release: | |
description: 'Release the wheels?' | |
type: boolean | |
required: false | |
default: false | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
# cibuildwheels already manages multiple python versions automatically | |
# by just detecting the os. However, it does everything in the same job | |
# and therefore in a serial manner. We build a matrix of operating systems | |
# and python versions so that builds are ran in parallel. | |
# The job matrix is basically copied from https://github.com/scikit-learn/scikit-learn/blob/main/.github/workflows/wheels.yml | |
build_wheels: | |
name: Wheel building for cp${{ matrix.python[0] }}-${{ matrix.platform_id }}-${{ matrix.manylinux_image }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# Ensure that a wheel builder finishes even if another fails | |
fail-fast: false | |
matrix: | |
include: | |
# Window 64 bit | |
#- os: windows-latest | |
# python: ["310", "3.10"] | |
# platform_id: win_amd64 | |
# Linux 64 bit manylinux2014 | |
- os: ubuntu-latest | |
python: ["39", "3.9"] | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: ["310", "3.10"] | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: ["311", "3.11"] | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: ["312", "3.12"] | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
# MacOS x86_64 | |
- os: macos-12 | |
python: ["39", "3.9"] | |
platform_id: macosx_x86_64 | |
- os: macos-12 | |
python: ["310", "3.10"] | |
platform_id: macosx_x86_64 | |
- os: macos-12 | |
python: ["311", "3.11"] | |
platform_id: macosx_x86_64 | |
- os: macos-12 | |
python: ["312", "3.12"] | |
platform_id: macosx_x86_64 | |
# MacOS arm64 | |
- os: macos-14 | |
python: ["39", "3.9"] | |
platform_id: macosx_arm64 | |
- os: macos-14 | |
python: ["310", "3.10"] | |
platform_id: macosx_arm64 | |
- os: macos-14 | |
python: ["311", "3.11"] | |
platform_id: macosx_arm64 | |
- os: macos-14 | |
python: ["312", "3.12"] | |
platform_id: macosx_arm64 | |
steps: | |
- name: Checkout sisl | |
uses: actions/checkout@v4 | |
- name: Ensure fortran | |
uses: fortran-lang/setup-fortran@v1 | |
with: | |
compiler: gcc | |
version: 11 | |
- name: Build and test wheels | |
env: | |
CIBW_BUILD: cp${{ matrix.python[0] }}-${{ matrix.platform_id }} | |
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} | |
CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_image }} | |
shell: bash -el {0} | |
run: | | |
bash -e tools/build_tools/build_wheels.sh | |
# Upload the wheel to the action's artifact. | |
- name: Store artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: artifact-cp${{ matrix.python[0] }}-${{ matrix.platform_id }} | |
path: ./wheelhouse/*.whl | |
# Build the source distribution as well | |
build_sdist: | |
name: Build source distribution | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build sdist | |
run: | | |
pipx run build --sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: dist/*.tar.gz | |
# Upload to testpypi | |
upload_testpypi: | |
needs: [build_sdist, build_wheels] | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
name: Publish package to TestPyPI | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
merge-multiple: True | |
path: dist | |
- uses: pypa/[email protected] | |
with: | |
user: __token__ | |
password: ${{ secrets.TESTPYPI_TOKEN }} | |
repository-url: https://test.pypi.org/legacy/ | |
# Check that the testpypi installation works | |
test_testpypi: | |
needs: [upload_testpypi] | |
name: Test installation from TestPyPi | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# If one of the jobs fails, continue with the others. | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-13, macos-14] | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: artifact | |
path: dist | |
- name: Python installation | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.9" | |
- name: Wait for testpypi to catch up | |
run: | | |
sleep 10 | |
- name: Install sisl + dependencies | |
run: | | |
version=${GITHUB_REF#refs/*/v} | |
version=${version#refs/*/} | |
# Note oldest numpy test | |
python -m pip install \ | |
--progress-bar=off \ | |
--find-links dist \ | |
--index-url https://test.pypi.org/simple/ \ | |
--extra-index-url https://pypi.org/simple/ \ | |
sisl[test,viz]==${version} "numpy<1.21" | |
- name: Test the installation | |
run: | | |
pytest --pyargs sisl | |
# Upload to PyPI on every tag | |
upload_pypi: | |
needs: [test_testpypi] | |
name: Publish package to Pypi | |
runs-on: ubuntu-latest | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
# alternatively, to publish when a GitHub Release is created, use the following rule: | |
# if: github.event_name == 'release' && github.event.action == 'published' | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: artifact | |
path: dist | |
- uses: pypa/[email protected] | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_TOKEN }} |