From 707a4a1d26d9edbeeea00dfe377dae8453519d5b Mon Sep 17 00:00:00 2001 From: Philipp Kraft Date: Wed, 31 Jan 2024 16:20:27 +0100 Subject: [PATCH] Create wheel.yml First try on a github workflow --- .github/workflows/wheel.yml | 150 ++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 .github/workflows/wheel.yml diff --git a/.github/workflows/wheel.yml b/.github/workflows/wheel.yml new file mode 100644 index 00000000..8bb398c0 --- /dev/null +++ b/.github/workflows/wheel.yml @@ -0,0 +1,150 @@ +# This workflow is in a test stage. +# simplified version from the scikit-learn's wheel.yml +# original version: https://github.com/scikit-learn/scikit-learn/blob/main/.github/workflows/wheels.yml +# Workflow to build and test wheels +name: Wheel builder + +on: + push: + branches: + - master + pull_request: + branches: + - master + # Manual run + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + # Build the wheels for Linux, Windows and macOS for Python 3.9 and newer + build_wheels: + name: Build wheel for cp${{ matrix.python }}-${{ 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 + # Note: windows-2019 is needed for older Python versions: + # https://github.com/scikit-learn/scikit-learn/issues/22530 + - os: windows-latest + python: 39 + platform_id: win_amd64 + - os: windows-latest + python: 310 + platform_id: win_amd64 + - os: windows-latest + python: 311 + platform_id: win_amd64 + - os: windows-latest + python: 312 + platform_id: win_amd64 + + # Linux 64 bit manylinux2014 + - os: ubuntu-latest + python: 39 + platform_id: manylinux_x86_64 + manylinux_image: manylinux2014 + + # NumPy on Python 3.10 only supports 64bit and is only available with manylinux2014 + - os: ubuntu-latest + python: 310 + platform_id: manylinux_x86_64 + manylinux_image: manylinux2014 + + - os: ubuntu-latest + python: 311 + platform_id: manylinux_x86_64 + manylinux_image: manylinux2014 + - os: ubuntu-latest + python: 312 + platform_id: manylinux_x86_64 + manylinux_image: manylinux2014 + + # MacOS x86_64 + - os: macos-latest + python: 39 + platform_id: macosx_x86_64 + - os: macos-latest + python: 310 + platform_id: macosx_x86_64 + - os: macos-latest + python: 311 + platform_id: macosx_x86_64 + - os: macos-latest + python: 312 + platform_id: macosx_x86_64 + + # MacOS arm64 + # The wheel for the latest Python version is built and tested on + # Cirrus CI but due to limited build time for free accounts on Cirrus + # CI, we build the macOS arm64 wheels for the other Python versions on + # Github Actions via cross-compilation (without running the tests). + - os: macos-latest + python: 39 + platform_id: macosx_arm64 + - os: macos-latest + python: 310 + platform_id: macosx_arm64 + - os: macos-latest + python: 311 + platform_id: macosx_arm64 + + steps: + - name: Checkout cmf + uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' # update once build dependencies are available + + - name: Install cibuildwheel + run: python -m pip install cibuildwheel + + - name: Build wheels + env: + CIBW_PRERELEASE_PYTHONS: ${{ matrix.prerelease }} + CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }} + CIBW_ARCHS: all + CIBW_BEFORE_BUILD: python -m pip install numpy cmake setuptools + CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} + CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_image }} + CIBW_BUILD_VERBOSITY: 1 + + run: python -m cibuildwheel --output-dir wheelhouse + + - name: Store artifacts + uses: actions/upload-artifact@v3 + with: + path: wheelhouse/*.whl + + # Build the source distribution under Linux + build_sdist: + name: Source distribution + runs-on: ubuntu-latest + steps: + - name: Checkout cmf + uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' # update once build dependencies are available + + - name: Build source distribution + run: python setup.py sdist + + - name: Test source distribution + run: bash build_tools/github/test_source.sh + + - name: Store artifacts + uses: actions/upload-artifact@v3 + with: + path: dist/*.tar.gz +