Wheels #2689
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
name: Wheels | |
on: | |
push: | |
pull_request: | |
release: | |
types: | |
- published | |
schedule: | |
# At 12:00 on every day-of-month | |
- cron: "0 12 */1 * *" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
build_sdist: | |
name: Build source distribution | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build sdist | |
run: pipx run build --sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: sdist | |
path: dist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: tests | |
path: tests | |
choose_linux_wheel_types: | |
name: Decide which wheel types to build | |
runs-on: ubuntu-latest | |
steps: | |
- id: manylinux_x86_64 | |
run: echo "wheel_types=manylinux_x86_64" >> $GITHUB_OUTPUT | |
- id: musllinux_x86_64 | |
run: echo "wheel_types=musllinux_x86_64" >> $GITHUB_OUTPUT | |
- id: manylinux_i686 | |
run: echo "wheel_types=manylinux_i686" >> $GITHUB_OUTPUT | |
- id: manylinux_aarch64 | |
if: github.event_name == 'release' && github.event.action == 'published' | |
run: echo "wheel_types=manylinux_aarch64" >> $GITHUB_OUTPUT | |
outputs: | |
wheel_types: ${{ toJSON(steps.*.outputs.wheel_types) }} | |
build_linux_wheels: | |
needs: [build_sdist, choose_linux_wheel_types] | |
name: ${{ matrix.wheel_type }} wheels | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
wheel_type: ${{ fromJSON(needs.choose_linux_wheel_types.outputs.wheel_types) }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: sdist | |
path: dist | |
- uses: actions/download-artifact@v4 | |
with: | |
name: tests | |
path: tests | |
- uses: docker/setup-qemu-action@v3 | |
if: runner.os == 'Linux' | |
name: Set up QEMU | |
- name: Extract sdist | |
run: | | |
tar zxvf dist/*.tar.gz --strip-components=1 | |
- name: Disable ptrace security restrictions | |
run: | | |
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_BUILD: "cp3{7..12}-${{ matrix.wheel_type }}" | |
CIBW_ARCHS_LINUX: auto aarch64 | |
CIBW_PRERELEASE_PYTHONS: True | |
CIBW_TEST_EXTRAS: test | |
CIBW_TEST_COMMAND: python -m pytest {package}/tests | |
CIBW_TEST_SKIP: "*aarch64*" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.wheel_type }}-wheels | |
path: ./wheelhouse/*.whl | |
build_macosx_wheels: | |
needs: [build_sdist] | |
name: macosx_${{ matrix.arch }} wheels | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
include: | |
- os: macos-11 | |
arch: x86_64 | |
- os: macos-14 | |
arch: arm64 | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: sdist | |
path: dist | |
- uses: actions/download-artifact@v4 | |
with: | |
name: tests | |
path: tests | |
- name: Extract sdist | |
run: | | |
tar zxvf dist/*.tar.gz --strip-components=1 | |
- name: Sets env vars for compilation | |
run: | | |
echo "LZ4_INSTALL_DIR=/tmp/lz4_install/usr/local/" >> $GITHUB_ENV | |
echo "CFLAGS=-arch ${{matrix.arch}}" >> $GITHUB_ENV | |
- name: Set x86_64-specific environment variables | |
if: matrix.arch == 'x86_64' | |
run: | | |
echo "MACOSX_DEPLOYMENT_TARGET=10.14" >> $GITHUB_ENV | |
- name: Set arm64-specific environment variables | |
if: matrix.arch == 'arm64' | |
run: | | |
echo "MACOSX_DEPLOYMENT_TARGET=11.0" >> $GITHUB_ENV | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_BUILD: "cp3{8..12}-*" | |
CIBW_PRERELEASE_PYTHONS: True | |
CIBW_TEST_EXTRAS: test | |
CIBW_TEST_COMMAND: pytest {package}/tests | |
CIBW_BUILD_VERBOSITY: 1 | |
MACOSX_DEPLOYMENT_TARGET: "10.14" | |
CFLAGS: "${{env.CFLAGS}} -I${{env.LZ4_INSTALL_DIR}}/include" | |
LDFLAGS: "-L${{env.LZ4_INSTALL_DIR}}/lib -Wl,-rpath,${{env.LZ4_INSTALL_DIR}}/lib" | |
DYLD_LIBRARY_PATH: "${{env.LZ4_INSTALL_DIR}}/lib" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: macosx_${{ matrix.arch }}-wheels | |
path: ./wheelhouse/*.whl | |
build_and_test_wheels: | |
name: Build and test wheels | |
needs: [build_linux_wheels, build_macosx_wheels] | |
runs-on: ubuntu-latest | |
steps: | |
# We can't make a matrix job itself a required check in GitHub, | |
# so we instead add a job that depends on the two matrix jobs, | |
# and we mark this job as required instead. This job doesn't do | |
# any work, it just lets us better manage our required checks. | |
- run: echo "Done!" | |
upload_pypi: | |
needs: [build_and_test_wheels, build_sdist] | |
runs-on: ubuntu-latest | |
if: github.event_name == 'release' && github.event.action == 'published' | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
# with no name set, it downloads all of the artifacts | |
path: dist | |
- run: | | |
mv dist/sdist/*.tar.gz dist/ | |
mv dist/*-wheels/*.whl dist/ | |
rmdir dist/{sdist,*-wheels} | |
rm -r dist/tests | |
ls -R dist | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
skip_existing: true | |
password: ${{ secrets.PYPI_PASSWORD }} | |
publish_docs: | |
name: Publish docs | |
runs-on: ubuntu-latest | |
if: github.event_name == 'release' && github.event.action == 'published' | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.10" | |
- name: Set up dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -qy clang-format npm libunwind-dev liblz4-dev pkg-config | |
- name: Install Python dependencies | |
run: | | |
python3 -m pip install -r requirements-extra.txt | |
- name: Install Package | |
run: | | |
python3 -m pip install -e . | |
- name: Build docs | |
run: | | |
make docs | |
- name: Publish docs to GitHub Pages | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
folder: docs/_build/html | |
single-commit: true |