Skip to content

fix: bootstrap build #1209

fix: bootstrap build

fix: bootstrap build #1209

Workflow file for this run

name: CI
on:
workflow_dispatch:
inputs:
use_qemu:
description: 'Use qemu to build linux aarch64, ppc64le & s390x'
required: true
default: true
schedule:
- cron: '0 18 * * 5' # "At 18:00 on Friday."
pull_request:
push:
branches:
- main
- py2-legacy
tags:
- "*.*.*"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
USE_QEMU: ${{ fromJSON(github.event.inputs.use_qemu || 'false') || (github.event_name == 'schedule') || startsWith(github.ref, 'refs/tags/') }}
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- uses: pre-commit/action@v3.0.1
build_wheels:
name: Build ${{ matrix.build }}${{ matrix.arch }} wheels on ${{ matrix.os }}
needs: [lint]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
arch: "x86_64"
build: "manylinux_"
use_qemu: false
- os: ubuntu-latest
arch: "x86_64"
build: "musllinux_"
use_qemu: false
- os: ubuntu-latest
arch: "i686"
build: "manylinux_"
use_qemu: false
- os: ubuntu-latest
arch: "i686"
build: "musllinux_"
use_qemu: false
- os: ubuntu-latest
arch: "aarch64"
build: "manylinux_"
use_qemu: true
- os: ubuntu-latest
arch: "aarch64"
build: "musllinux_"
use_qemu: true
- os: ubuntu-latest
arch: "ppc64le"
build: "manylinux_"
use_qemu: true
- os: ubuntu-latest
arch: "ppc64le"
build: "musllinux_"
use_qemu: true
- os: ubuntu-latest
arch: "s390x"
build: "manylinux_"
use_qemu: true
- os: ubuntu-latest
arch: "s390x"
build: "musllinux_"
use_qemu: true
- os: ubuntu-latest
arch: "armv7l"
build: "manylinux_"
use_qemu: true
- os: ubuntu-latest
arch: "armv7l"
build: "musllinux_"
use_qemu: true
- os: windows-2019
arch: "AMD64"
build: ""
use_qemu: false
- os: windows-2022
arch: "ARM64"
build: ""
use_qemu: false
- os: windows-2019
arch: "x86"
build: ""
use_qemu: false
- os: macos-14
arch: "universal2"
build: ""
use_qemu: false
steps:
- uses: actions/checkout@v4
if: (!matrix.use_qemu) || fromJSON(env.USE_QEMU)
with:
fetch-depth: 0 # required for versioneer to find tags
- uses: yezz123/setup-uv@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.2.0
if: matrix.use_qemu && fromJSON(env.USE_QEMU)
- name: Build wheels
uses: pypa/cibuildwheel@v2.22
if: (!matrix.use_qemu) || fromJSON(env.USE_QEMU)
env:
CIBW_ARCHS: "${{ matrix.arch }}"
CIBW_BUILD: "cp39-${{ matrix.build }}*"
- uses: actions/upload-artifact@v4
if: (!matrix.use_qemu) || fromJSON(env.USE_QEMU)
with:
name: cibw-${{ runner.os }}-${{ matrix.build }}${{ matrix.arch }}
path: ./wheelhouse/*.whl
build_manylinux2010_wheels:
name: Build ${{ matrix.arch }} manylinux2010 wheels
needs: [lint]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- arch: "x86_64"
- arch: "i686"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # required for versioneer to find tags
- name: Build wheels
uses: pypa/cibuildwheel@v2.22
env:
CIBW_ARCHS: "${{ matrix.arch }}"
CIBW_BUILD: "cp39-manylinux_*"
CIBW_MANYLINUX_X86_64_IMAGE: "manylinux2010"
CIBW_MANYLINUX_I686_IMAGE: "manylinux2010"
CIBW_BUILD_FRONTEND: "build"
- uses: actions/upload-artifact@v4
with:
name: cibw-manylinux2010-${{ matrix.arch }}
path: ./wheelhouse/*.whl
build_sdist:
name: Build source distribution
needs: [lint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # required for versioneer to find tags
- name: Build SDist
run: pipx run build --sdist
- uses: actions/upload-artifact@v4
with:
name: cibw-sdist
path: dist/*.tar.gz
test_sdist:
name: Test SDist with python ${{ matrix.python }}
needs: [build_sdist]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: ["3.8", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v4
- name: Setup environment
run: |
uv venv --python ${{ matrix.python }}
uv pip install pytest pytest-cov
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends libssl-dev
- uses: actions/download-artifact@v4
with:
name: cibw-sdist
path: dist
- name: Install SDist
env:
CMAKE_ARGS: "-DBUILD_CMAKE_FROM_SOURCE:BOOL=OFF"
run: |
uv pip install dist/*.tar.gz
rm -rf dist
- name: Test installed SDist
run: .venv/bin/pytest ./tests
bootstrap_build:
name: Bootstrap build
needs: [lint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
id: python
with:
python-version: "3.x"
- name: Remove cmake and ninja
run: |
for TOOL in cmake ninja; do
while which -s ${TOOL}; do
sudo rm -f $(which -a ${TOOL})
done
done
- name: Build SDist
run: pipx run --python '${{ steps.python.outputs.python-path }}' build --sdist
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends libssl-dev
- name: Install SDist
env:
CMAKE_ARGS: "-DBUILD_CMAKE_FROM_SOURCE:BOOL=OFF"
run: |
python -m pip install --no-binary='cmake,ninja' dist/*.tar.gz
rm -rf dist
- name: Test installed SDist
run: |
python -m pip install pytest pytest-cov
pytest ./tests
check_dist:
name: Check dist
needs: [build_wheels, build_manylinux2010_wheels, build_sdist, test_sdist, bootstrap_build]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
pattern: cibw-*
merge-multiple: true
path: dist
- run: pipx run twine check --strict dist/*
upload_pypi:
name: Upload to PyPI
needs: [check_dist]
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.repository == 'scikit-build/cmake-python-distributions' && startsWith(github.ref, 'refs/tags/')
environment:
name: pypi
url: https://pypi.org/p/cmake
permissions:
id-token: write
attestations: write
steps:
- uses: actions/download-artifact@v4
with:
pattern: cibw-*
merge-multiple: true
path: dist
- name: Generate artifact attestation for sdist and wheel
uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 # v1.4.4
with:
subject-path: "dist/cmake-*"
- uses: pypa/gh-action-pypi-publish@release/v1
with:
attestations: true