Publish using trusted publishing; fix broken source archive #32
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
# Adapted from https://github.com/scikit-image/scikit-image/blob/main/.github/workflows/wheel_tests_and_release.yml | |
name: Build Wheels and Release | |
on: | |
push: | |
tags: | |
- 'v*' | |
branches: | |
- maintenance/** | |
- '!main' | |
env: | |
CIBW_BUILD_VERBOSITY: 2 | |
CIBW_BEFORE_BUILD: pip install numpy | |
CIBW_TEST_REQUIRES: "-r requirements.txt pytest" | |
CIBW_TEST_COMMAND: pytest --pyargs cesium | |
CIBW_ENVIRONMENT: PIP_PREFER_BINARY=1 | |
permissions: | |
contents: read | |
jobs: | |
build_linux_wheels: | |
name: Build python ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
cibw_python: ["cp310-*", "cp311-*", "cp312-*"] | |
cibw_manylinux: [manylinux2014] | |
cibw_arch: ["x86_64"] | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v3 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
- name: Build the wheel | |
run: | | |
python -m cibuildwheel --output-dir dist | |
env: | |
CIBW_BUILD: ${{ matrix.cibw_python }} | |
CIBW_ARCHS_LINUX: ${{ matrix.cibw_arch }} | |
CIBW_SKIP: "*-musllinux_*" | |
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.cibw_manylinux }} | |
CIBW_ENVIRONMENT_PASS_LINUX: CESIUM_LINK_FLAGS | |
CESIUM_LINK_FLAGS: "-Wl,--strip-debug" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: ./dist/*.whl | |
build_macos_wheels: | |
name: Build python ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest] | |
cibw_python: [ "cp38-*", "cp39-*", "cp310-*", "cp311-*"] | |
cibw_arch: [ "x86_64", "arm64"] #, "universal2"] | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v3 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
# See: | |
# https://cibuildwheel.readthedocs.io/en/stable/faq/#macos-building-cpython-38-wheels-on-arm64 | |
# https://github.com/pypa/cibuildwheel/issues/1414 | |
- name: Install experimental MacOSX Py38 | |
if: startsWith(matrix.cibw_python, 'cp38') && (matrix.cibw_arch == 'arm64') | |
run: | | |
curl -o /tmp/Python38.pkg https://www.python.org/ftp/python/3.8.10/python-3.8.10-macos11.pkg | |
sudo installer -pkg /tmp/Python38.pkg -target / | |
sh "/Applications/Python 3.8/Install Certificates.command" | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
- name: Build wheels for CPython Mac OS | |
run: | | |
if [[ "$CIBW_ARCHS_MACOS" == arm64 ]]; then | |
# SciPy requires 12.0 on arm to prevent kernel panics | |
# https://github.com/scipy/scipy/issues/14688 | |
# so being conservative, we just do the same here | |
export MACOSX_DEPLOYMENT_TARGET=12.0 | |
else | |
export MACOSX_DEPLOYMENT_TARGET=10.9 | |
fi | |
echo MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} | |
python -m cibuildwheel --output-dir dist | |
env: | |
CIBW_BUILD: ${{ matrix.cibw_python }} | |
CIBW_ARCHS_MACOS: ${{ matrix.cibw_arch }} | |
CIBW_MANYLINUX_X86_64_IMAGE: manylinux1 | |
CIBW_TEST_SKIP: "*-macosx_arm64" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: ./dist/*.whl | |
build_windows_wheels: | |
name: Build ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest] | |
cibw_arch: ["AMD64"] | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v3 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
- name: Build Windows wheels for CPython | |
run: | | |
python -m cibuildwheel --output-dir dist | |
env: | |
# Skip pypy | |
CIBW_BUILD: "cp3?-*" | |
CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_arch }} | |
# -Wl,-S equivalent to gcc's -Wl,--strip-debug | |
LDFLAGS: "-Wl,-S" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: ./dist/*.whl | |
deploy: | |
name: Release | |
needs: [build_linux_wheels, build_macos_wheels, build_windows_wheels] | |
if: github.repository_owner == 'cesium-ml' && startsWith(github.ref, 'refs/tags/v') && always() | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write # for softprops/action-gh-release to create GitHub release | |
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
- name: Install build tools | |
run: | | |
python -m pip install --upgrade pip | |
pip install build setuptools_scm | |
- name: Build the source distribution | |
run: | | |
pyproject-build . --sdist --no-isolation --skip-dependency-check | |
ls -la ${{ github.workspace }}/dist | |
- uses: actions/[email protected] | |
id: download | |
with: | |
name: wheels | |
path: ./dist | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 # v1.8.14 | |
- name: Github release | |
uses: softprops/action-gh-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GITHUB_REPOSITORY: ${{ github.repository }} |