CI Simplify Windows cibuildwheel setup #26
Workflow file for this run
This file contains hidden or 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: Publish sdist and wheels | |
| on: | |
| schedule: | |
| # 01:01 UTC every Monday and Thursday. | |
| - cron: "1 1 * * 1,4" | |
| pull_request: | |
| branches: | |
| - main | |
| - "[0-9]+.[0-9]+.X" | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| inputs: | |
| ref: | |
| description: The scikit-learn branch, tag, or commit to build | |
| required: false | |
| default: main | |
| type: string | |
| environment: | |
| description: Which PyPI environment to upload to, if any | |
| required: true | |
| type: choice | |
| options: ["none", "chain", "testpypi", "pypi"] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| build_wheels: | |
| name: Build wheel for cp${{ matrix.python }}-${{ matrix.platform_id }} | |
| if: github.repository == 'scikit-learn/scikit-learn-release' | |
| runs-on: ${{ matrix.os }} | |
| defaults: | |
| run: | |
| shell: bash -el {0} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Window 64 bit | |
| - os: windows-latest | |
| python: 311 | |
| platform_id: win_amd64 | |
| - os: windows-latest | |
| python: 312 | |
| platform_id: win_amd64 | |
| - os: windows-latest | |
| python: 313 | |
| platform_id: win_amd64 | |
| - os: windows-latest | |
| python: 314 | |
| platform_id: win_amd64 | |
| - os: windows-latest | |
| python: 314t | |
| platform_id: win_amd64 | |
| # Windows on ARM64 (WoA) | |
| - os: windows-11-arm | |
| python: 311 | |
| platform_id: win_arm64 | |
| - os: windows-11-arm | |
| python: 312 | |
| platform_id: win_arm64 | |
| - os: windows-11-arm | |
| python: 313 | |
| platform_id: win_arm64 | |
| - os: windows-11-arm | |
| python: 314 | |
| platform_id: win_arm64 | |
| - os: windows-11-arm | |
| python: 314t | |
| platform_id: win_arm64 | |
| # Linux | |
| - os: ubuntu-latest | |
| python: 311 | |
| platform_id: manylinux_x86_64 | |
| - os: ubuntu-latest | |
| python: 312 | |
| platform_id: manylinux_x86_64 | |
| - os: ubuntu-latest | |
| python: 313 | |
| platform_id: manylinux_x86_64 | |
| - os: ubuntu-latest | |
| python: 314 | |
| platform_id: manylinux_x86_64 | |
| - os: ubuntu-latest | |
| python: 314t | |
| platform_id: manylinux_x86_64 | |
| # Linux arm | |
| - os: ubuntu-24.04-arm | |
| python: 311 | |
| platform_id: manylinux_aarch64 | |
| - os: ubuntu-24.04-arm | |
| python: 312 | |
| platform_id: manylinux_aarch64 | |
| - os: ubuntu-24.04-arm | |
| python: 313 | |
| platform_id: manylinux_aarch64 | |
| - os: ubuntu-24.04-arm | |
| python: 314 | |
| platform_id: manylinux_aarch64 | |
| - os: ubuntu-24.04-arm | |
| python: 314t | |
| platform_id: manylinux_aarch64 | |
| # MacOS x86_64 | |
| - os: macos-15-intel | |
| python: 311 | |
| platform_id: macosx_x86_64 | |
| - os: macos-15-intel | |
| python: 312 | |
| platform_id: macosx_x86_64 | |
| - os: macos-15-intel | |
| python: 313 | |
| platform_id: macosx_x86_64 | |
| - os: macos-15-intel | |
| python: 314 | |
| platform_id: macosx_x86_64 | |
| - os: macos-15-intel | |
| python: 314t | |
| platform_id: macosx_x86_64 | |
| # MacOS arm64 | |
| - os: macos-14 | |
| python: 311 | |
| platform_id: macosx_arm64 | |
| - os: macos-14 | |
| python: 312 | |
| platform_id: macosx_arm64 | |
| - os: macos-14 | |
| python: 313 | |
| platform_id: macosx_arm64 | |
| - os: macos-14 | |
| python: 314 | |
| platform_id: macosx_arm64 | |
| - os: macos-14 | |
| python: 314t | |
| platform_id: macosx_arm64 | |
| steps: | |
| - name: Checkout scikit-learn-release | |
| uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| with: | |
| persist-credentials: false | |
| - name: Checkout scikit-learn | |
| uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| with: | |
| repository: scikit-learn/scikit-learn | |
| ref: ${{ github.event.inputs.ref || 'main' }} | |
| path: scikit-learn-src | |
| persist-credentials: false | |
| - uses: mamba-org/setup-micromamba@d7c9bd84e824b79d2af72a2d4196c7f4300d3476 # v3.0.0 | |
| if: ${{ startsWith(matrix.platform_id, 'macosx') }} | |
| with: | |
| micromamba-version: '2.8.1-0' | |
| - name: Set-up macOS | |
| if: ${{ startsWith(matrix.platform_id, 'macosx') }} | |
| run: bash tools/configure_macos_env.sh | |
| - name: Set SOURCE_DATE_EPOCH from source commit | |
| run: | | |
| echo "SOURCE_DATE_EPOCH=$(git -C scikit-learn-src log -1 --pretty=%ct)" >> "$GITHUB_ENV" | |
| - name: Build and test wheels | |
| uses: pypa/cibuildwheel@f03ac7617d6cff873ccf24cc0d567ef5ba5a9e6d # v4.0.0 | |
| env: | |
| CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }} | |
| SOURCE_DATE_EPOCH: ${{ env.SOURCE_DATE_EPOCH }} | |
| PYTHONHASHSEED: "0" | |
| CIBW_ENVIRONMENT_PASS_LINUX: SOURCE_DATE_EPOCH PYTHONHASHSEED RUNNER_OS | |
| with: | |
| package-dir: scikit-learn-src | |
| output-dir: dist | |
| config-file: cibuildwheel.toml | |
| # Running in a minimal Docker image makes sure that we are vendoring | |
| # correctly the shared libraries for MSVC C++ runtime and OpenMP in the | |
| # Windows wheel | |
| - name: Test Windows wheel in a minimal Docker image | |
| # Currently Windows ARM64 runners do not have Docker support and there | |
| # is no Docker image with free-threaded | |
| if: ${{ matrix.platform_id == 'win_amd64' && !contains(matrix.python, 't') }} | |
| run: bash build_tools/github/test_windows_wheels_in_docker.sh ${{ matrix.python }} | |
| - name: Store artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: cibw-wheels-cp${{ matrix.python }}-${{ matrix.platform_id }} | |
| path: ./dist/*.whl | |
| build_sdist: | |
| name: Source distribution | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout scikit-learn-release | |
| uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| with: | |
| persist-credentials: false | |
| - name: Checkout scikit-learn | |
| uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| with: | |
| repository: scikit-learn/scikit-learn | |
| ref: ${{ github.event.inputs.ref || 'main' }} | |
| path: scikit-learn-src | |
| persist-credentials: false | |
| - name: Setup Python | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 6.2.0 | |
| with: | |
| python-version: "3.12" | |
| - name: Build source distribution | |
| run: bash tools/build_source.sh | |
| - name: Test source distribution | |
| run: bash tools/test_source.sh | |
| - name: Store artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: cibw-sdist | |
| path: dist/*.tar.gz | |
| testpypi-publish: | |
| name: Publish release to TestPyPI | |
| if: github.event_name == 'workflow_dispatch' && (github.event.inputs.environment == 'testpypi' || github.event.inputs.environment == 'chain') | |
| runs-on: ubuntu-latest | |
| needs: [build_wheels, build_sdist] | |
| environment: | |
| name: testpypi | |
| url: https://test.pypi.org/p/scikit-learn | |
| permissions: | |
| id-token: write # mandatory for trusted publishing | |
| steps: | |
| - name: Download sdist and wheels | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| path: dist | |
| merge-multiple: true | |
| - name: View artifacts | |
| run: ls dist | |
| # - name: Publish | |
| # uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 | |
| # with: | |
| # repository-url: https://test.pypi.org/legacy/ | |
| # skip-existing: true | |
| # print-hash: true | |
| # attestations: true | |
| nightly_upload: | |
| name: Nightly upload | |
| if: github.repository == 'scikit-learn/scikit-learn-release' && (github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'none')) | |
| runs-on: ubuntu-latest | |
| needs: [build_wheels, build_sdist] | |
| steps: | |
| - name: Download sdist and wheels | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| path: dist | |
| merge-multiple: true | |
| - name: Install micromamba | |
| uses: mamba-org/setup-micromamba@d7c9bd84e824b79d2af72a2d4196c7f4300d3476 # v3.0.0 | |
| with: | |
| # For installation of anaconda-client, required for upload to anaconda.org | |
| init-shell: bash | |
| environment-name: upload-env | |
| create-args: >- | |
| anaconda-client | |
| # - name: Upload to anaconda.org | |
| # shell: bash -el {0} # required for micromamba | |
| # env: | |
| # TOKEN: ${{ secrets.SCIKIT_LEARN_NIGHTLY_UPLOAD_TOKEN }} | |
| # run: | | |
| # anaconda -q -t ${TOKEN} upload --force -u scientific-python-nightly-wheels ./dist/*.whl | |
| pypi-publish: | |
| name: Publish release to PyPI | |
| if: >- | |
| github.event_name == 'workflow_dispatch' | |
| && ( | |
| github.event.inputs.environment == 'pypi' | |
| || ( | |
| github.event.inputs.environment == 'chain' | |
| && (needs.testpypi-publish.result == 'success' || needs.testpypi-publish.result == 'skipped') | |
| ) | |
| ) | |
| runs-on: ubuntu-latest | |
| # environment: | |
| # name: pypi | |
| # url: https://pypi.org/p/scikit-learn | |
| # permissions: | |
| # id-token: write # mandatory for trusted publishing | |
| needs: [build_wheels, build_sdist, testpypi-publish] | |
| environment: | |
| name: pypi | |
| url: https://pypi.org/p/scikit-learn | |
| permissions: | |
| id-token: write # mandatory for trusted publishing | |
| steps: | |
| - name: Download sdist and wheels | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| path: dist | |
| merge-multiple: true | |
| - name: View artifacts | |
| run: ls dist | |
| # - name: Publish | |
| # uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 | |
| # with: | |
| # print-hash: true | |
| # attestations: true | |