232 lines
7.1 KiB
YAML
232 lines
7.1 KiB
YAML
# Workflow to build and test wheels
|
|
name: Wheel builder
|
|
|
|
on:
|
|
schedule:
|
|
# Nightly build at 3:42 A.M.
|
|
- cron: "42 3 */1 * *"
|
|
push:
|
|
branches:
|
|
- main
|
|
# Release branches
|
|
- "[0-9]+.[0-9]+.X"
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- "[0-9]+.[0-9]+.X"
|
|
# Manual run
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
# Check whether to build the wheels and the source tarball
|
|
check_build_trigger:
|
|
name: Check build trigger
|
|
runs-on: ubuntu-latest
|
|
if: github.repository == 'scikit-learn/scikit-learn'
|
|
outputs:
|
|
build: ${{ steps.check_build_trigger.outputs.build }}
|
|
|
|
steps:
|
|
- name: Checkout scikit-learn
|
|
uses: actions/checkout@v2
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
- id: check_build_trigger
|
|
name: Check build trigger
|
|
run: bash build_tools/github/check_build_trigger.sh
|
|
|
|
# Build the wheels for Linux, Windows and macOS for Python 3.8 and newer
|
|
build_wheels:
|
|
name: Build wheel for cp${{ matrix.python }}-${{ matrix.platform_id }}-${{ matrix.manylinux_image }}
|
|
runs-on: ${{ matrix.os }}
|
|
needs: check_build_trigger
|
|
if: needs.check_build_trigger.outputs.build
|
|
|
|
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-2019
|
|
python: 38
|
|
bitness: 64
|
|
platform_id: win_amd64
|
|
- os: windows-latest
|
|
python: 39
|
|
bitness: 64
|
|
platform_id: win_amd64
|
|
- os: windows-latest
|
|
python: 310
|
|
bitness: 64
|
|
platform_id: win_amd64
|
|
|
|
# Window 32 bit
|
|
- os: windows-latest
|
|
python: 38
|
|
bitness: 32
|
|
platform_id: win32
|
|
- os: windows-latest
|
|
python: 39
|
|
bitness: 32
|
|
platform_id: win32
|
|
|
|
# Linux 64 bit manylinux2014
|
|
- os: ubuntu-latest
|
|
python: 38
|
|
bitness: 64
|
|
platform_id: manylinux_x86_64
|
|
manylinux_image: manylinux2014
|
|
- os: ubuntu-latest
|
|
python: 39
|
|
bitness: 64
|
|
platform_id: manylinux_x86_64
|
|
manylinux_image: manylinux2014
|
|
|
|
# Linux 64 bit manylinux2010
|
|
- os: ubuntu-latest
|
|
python: 38
|
|
bitness: 64
|
|
platform_id: manylinux_x86_64
|
|
manylinux_image: manylinux2010
|
|
- os: ubuntu-latest
|
|
python: 39
|
|
bitness: 64
|
|
platform_id: manylinux_x86_64
|
|
manylinux_image: manylinux2010
|
|
|
|
# NumPy on Python 3.10 only supports 64bit and is only available with manylinux2014
|
|
- os: ubuntu-latest
|
|
python: 310
|
|
bitness: 64
|
|
platform_id: manylinux_x86_64
|
|
manylinux_image: manylinux2014
|
|
|
|
# MacOS x86_64
|
|
- os: macos-latest
|
|
bitness: 64
|
|
python: 38
|
|
platform_id: macosx_x86_64
|
|
- os: macos-latest
|
|
bitness: 64
|
|
python: 39
|
|
platform_id: macosx_x86_64
|
|
- os: macos-latest
|
|
bitness: 64
|
|
python: 310
|
|
platform_id: macosx_x86_64
|
|
|
|
# MacOS arm64
|
|
- os: macos-latest
|
|
bitness: 64
|
|
python: 38
|
|
platform_id: macosx_arm64
|
|
- os: macos-latest
|
|
bitness: 64
|
|
python: 39
|
|
platform_id: macosx_arm64
|
|
- os: macos-latest
|
|
bitness: 64
|
|
python: 310
|
|
platform_id: macosx_arm64
|
|
|
|
steps:
|
|
- name: Checkout scikit-learn
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: '3.9' # update once build dependencies are available
|
|
|
|
- name: Build and test wheels
|
|
env:
|
|
CONFTEST_PATH: ${{ github.workspace }}/conftest.py
|
|
CONFTEST_NAME: conftest.py
|
|
CIBW_ENVIRONMENT: OMP_NUM_THREADS=2
|
|
OPENBLAS_NUM_THREADS=2
|
|
SKLEARN_SKIP_NETWORK_TESTS=1
|
|
SKLEARN_BUILD_PARALLEL=3
|
|
CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }}
|
|
CIBW_ARCHS: all
|
|
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }}
|
|
CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_image }}
|
|
CIBW_TEST_SKIP: "*-macosx_arm64"
|
|
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: bash build_tools/github/repair_windows_wheels.sh {wheel} {dest_dir} ${{ matrix.bitness }}
|
|
CIBW_BEFORE_TEST_WINDOWS: bash build_tools/github/build_minimal_windows_image.sh ${{ matrix.python }} ${{ matrix.bitness }}
|
|
CIBW_TEST_REQUIRES: pytest pandas threadpoolctl
|
|
CIBW_TEST_COMMAND: bash {project}/build_tools/github/test_wheels.sh
|
|
CIBW_TEST_COMMAND_WINDOWS: bash {project}/build_tools/github/test_windows_wheels.sh ${{ matrix.python }} ${{ matrix.bitness }}
|
|
CIBW_BUILD_VERBOSITY: 1
|
|
|
|
run: bash build_tools/github/build_wheels.sh
|
|
|
|
- name: Store artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
path: wheelhouse/*.whl
|
|
|
|
# Build the source distribution under Linux
|
|
build_sdist:
|
|
name: Source distribution
|
|
runs-on: ubuntu-latest
|
|
needs: check_build_trigger
|
|
if: needs.check_build_trigger.outputs.build
|
|
|
|
steps:
|
|
- name: Checkout scikit-learn
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: '3.9' # update once build dependencies are available
|
|
|
|
- name: Build source distribution
|
|
run: bash build_tools/github/build_source.sh
|
|
env:
|
|
SKLEARN_BUILD_PARALLEL: 3
|
|
|
|
- name: Test source distribution
|
|
run: bash build_tools/github/test_source.sh
|
|
env:
|
|
OMP_NUM_THREADS: 2
|
|
OPENBLAS_NUM_THREADS: 2
|
|
SKLEARN_SKIP_NETWORK_TESTS: 1
|
|
|
|
- name: Store artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
path: dist/*.tar.gz
|
|
|
|
# Upload the wheels and the source distribution
|
|
upload_anaconda:
|
|
name: Upload to Anaconda
|
|
runs-on: ubuntu-latest
|
|
needs: [build_wheels, build_sdist]
|
|
# The artifacts cannot be uploaded on PRs
|
|
if: github.event_name != 'pull_request'
|
|
|
|
steps:
|
|
- name: Checkout scikit-learn
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
path: dist
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v2
|
|
|
|
- name: Upload artifacts
|
|
env:
|
|
# Secret variables need to be mapped to environment variables explicitly
|
|
SCIKIT_LEARN_NIGHTLY_UPLOAD_TOKEN: ${{ secrets.SCIKIT_LEARN_NIGHTLY_UPLOAD_TOKEN }}
|
|
SCIKIT_LEARN_STAGING_UPLOAD_TOKEN: ${{ secrets.SCIKIT_LEARN_STAGING_UPLOAD_TOKEN }}
|
|
# Force a replacement if the remote file already exists
|
|
run: bash build_tools/github/upload_anaconda.sh
|