mirror of
https://github.com/google/benchmark.git
synced 2025-04-03 08:01:10 +08:00
This commit adds a job running after the wheel building job responsible for uploading the built wheels to PyPI. The job only runs on successful completion of all build jobs, and uploads to PyPI using a secret added to the Google Benchmark repo (TBD). Also, the setup-python action has been bumped to the latest version v3.
150 lines
4.3 KiB
YAML
150 lines
4.3 KiB
YAML
name: Build and upload Python wheels
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
release:
|
|
types:
|
|
- published
|
|
|
|
jobs:
|
|
build_sdist:
|
|
name: Build source distribution
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Python 3.9
|
|
uses: actions/setup-python@v3
|
|
with:
|
|
python-version: 3.9
|
|
|
|
- name: Build and check sdist
|
|
run: |
|
|
python setup.py sdist
|
|
- name: Upload sdist
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: dist
|
|
path: dist/*.tar.gz
|
|
|
|
build_linux:
|
|
name: Build google-benchmark manylinux wheels
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Check out Google Benchmark
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Set up Python 3.9
|
|
uses: actions/setup-python@v3
|
|
with:
|
|
python-version: 3.9
|
|
|
|
# TODO: Bazel does not seem to work in an emulated Docker environment, see
|
|
# https://github.com/bazelbuild/bazel/issues/11379
|
|
# - name: Set up QEMU
|
|
# uses: docker/setup-qemu-action@v1
|
|
# with:
|
|
# platforms: all
|
|
|
|
- name: Build Python wheels on ubuntu-latest
|
|
env:
|
|
CIBW_BUILD: 'cp37-* cp38-* cp39-* cp310-*'
|
|
CIBW_SKIP: "*-musllinux_*"
|
|
# Bazel repo only exists on CentOS 7 for x86 and ppc, so no manylinux2010
|
|
# TODO: Build ppc64le, aarch64 using some other trick
|
|
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
|
|
CIBW_ARCHS_LINUX: x86_64
|
|
CIBW_BEFORE_ALL: >
|
|
curl -O --retry-delay 5 --retry 5 https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-7/vbatts-bazel-epel-7.repo &&
|
|
cp vbatts-bazel-epel-7.repo /etc/yum.repos.d/bazel.repo &&
|
|
yum install -y bazel4
|
|
CIBW_TEST_COMMAND: python {project}/bindings/python/google_benchmark/example.py
|
|
run: |
|
|
pip install cibuildwheel
|
|
python -m cibuildwheel --output-dir wheelhouse
|
|
|
|
- name: Upload Linux wheels
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: dist
|
|
path: wheelhouse/*.whl
|
|
|
|
build_macos:
|
|
name: Build google-benchmark macOS wheels
|
|
runs-on: macos-latest
|
|
|
|
steps:
|
|
- name: Check out Google Benchmark
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Set up Python 3.9
|
|
uses: actions/setup-python@v3
|
|
with:
|
|
python-version: 3.9
|
|
|
|
- name: Build Python wheels on macOS
|
|
env:
|
|
CIBW_ARCHS_MACOS: "x86_64 arm64"
|
|
CIBW_BUILD: 'cp37-* cp38-* cp39-* cp310-*'
|
|
# ARM64 requires Python 3.8 minimum
|
|
CIBW_SKIP: 'cp37-*-arm64'
|
|
CIBW_TEST_COMMAND: python {project}/bindings/python/google_benchmark/example.py
|
|
CIBW_TEST_SKIP: "*_arm64"
|
|
run: |
|
|
pip install cibuildwheel
|
|
python -m cibuildwheel --output-dir wheelhouse
|
|
|
|
- name: Upload macOS wheels
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: dist
|
|
path: wheelhouse/*.whl
|
|
|
|
build_windows:
|
|
name: Build google-benchmark wheels on Windows
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- name: Check out Google Benchmark
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Set up Python 3.9
|
|
uses: actions/setup-python@v3
|
|
with:
|
|
python-version: 3.9
|
|
|
|
- name: Build Python wheels on Windows
|
|
env:
|
|
CIBW_BUILD: 'cp37-* cp38-* cp39-* cp310-*'
|
|
CIBW_ARCHS_WINDOWS: AMD64
|
|
# otherwise, pip crashes the job by trying to remove an in-use bazel DLL
|
|
PIP_NO_CLEAN: true
|
|
CIBW_TEST_COMMAND: python {project}/bindings/python/google_benchmark/example.py
|
|
run: |
|
|
pip install cibuildwheel
|
|
python -m cibuildwheel --output-dir wheelhouse
|
|
|
|
- name: Upload wheels
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: dist
|
|
path: wheelhouse/*.whl
|
|
|
|
pypi_upload:
|
|
name: Publish google-benchmark wheels to PyPI
|
|
needs: [build_sdist, build_linux, build_macos, build_windows]
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'release' && github.event.action == 'published'
|
|
steps:
|
|
- uses: actions/download-artifact@v2
|
|
with:
|
|
name: artifact
|
|
path: dist
|
|
|
|
- uses: pypa/gh-action-pypi-publish@v1.5.0
|
|
with:
|
|
user: __token__
|
|
password: ${{ secrets.PYPI_PASSWORD }}
|