Skip to content

Build wheels and deploy #218

Build wheels and deploy

Build wheels and deploy #218

name: Build wheels and deploy
on:
# this workflow can only be manually triggered for now.
workflow_dispatch:
inputs:
deploy:
description: 'Where to deploy the artifacts? Only build (build), deploy to test PyPI (test), or deploy to PyPI (prod).'
required: true
type: choice
default: 'build'
options:
- build
- test
- prod
jobs:
build-stubs:
name: Build Python stubs
runs-on: ubuntu-22.04
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Upgrade pip and python packages
run: |
python3 -m pip install --upgrade pip
python3 -m pip install cibuildwheel==2.17.0 pybind11-stubgen==1.1
- name: Install dependencies
shell: bash
run: |
# Update & upgrade package lists
sudo apt-get update -y
sudo apt-get upgrade
# Deal with Github CI limitation
# https://github.com/actions/runner-images/issues/6399#issuecomment-1285011525
sudo apt install -y libunwind-dev
# Generic dependencies
sudo apt-get install cmake libopenblas-dev
# Install VRS dependencies
sudo apt-get install -o Acquire::Retries=5 \
libgtest-dev libgmock-dev \
libfmt-dev \
libturbojpeg-dev libpng-dev \
liblz4-dev libzstd-dev libxxhash-dev \
libboost-date-time-dev \
libboost-filesystem-dev \
libboost-iostreams-dev \
libboost-system-dev
# Clean APT cache
sudo apt-get clean
- name: Install projectaria_tools
run: |
# Build and install Python bindings (required to run the stubs on the pybind artifacts)
CMAKE_BUILD_PARALLEL_LEVEL=4 pip3 install .
rm -rf build
- name: Generate stubs & Include stubs in python package
run: |
python3 generate_stubs.py
cp -r projectaria_tools-stubs/projectaria_tools .
- uses: actions/upload-artifact@v4
with:
name: projectaria_tools_stubs
path: projectaria_tools
build-wheels:
name: Build wheels ${{ matrix.os }} | ${{ matrix.python-version }}
needs:
- build-stubs
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-13, ubuntu-22.04, macos-latest-xlarge, windows-2022]
python-version: ["3.10", "3.11", "3.12"]
# Default consider only Python >=3.10 since actions/setup-python supports only python<3.10 and mac-silicon
# Other Python versions are added below as matrix entries
include: # Customize cibuildwheel python version to build
- python-version: "3.10"
cibw_build: "cp310-*"
- python-version: "3.11"
cibw_build: "cp311-*"
- python-version: "3.12"
cibw_build: "cp312-*"
# Add matrix entries: Python ["3.8", "3.9"] to [macos-13, ubuntu-latest]
- os: ubuntu-22.04
python-version: "3.8"
cibw_build: "cp38-*"
- os: ubuntu-22.04
python-version: "3.9"
cibw_build: "cp39-*"
- os: macos-13
python-version: "3.8"
cibw_build: "cp38-*"
- os: macos-13
python-version: "3.9"
cibw_build: "cp39-*"
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Download the pre-computed python stubs
uses: actions/download-artifact@v4
with:
name: projectaria_tools_stubs
path: projectaria_tools
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Upgrade pip and python packages
run: |
python3 -m pip install --upgrade pip
python3 -m pip install cibuildwheel==2.17.0
- name: Build wheels for CPython
if: matrix.os == 'macos-latest-xlarge'
shell: bash
run: |
CMAKE_BUILD_PARALLEL_LEVEL=4 python3 -m cibuildwheel --output-dir dist
env:
CIBW_BUILD_VERBOSITY: 3
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_SKIP: "*-manylinux_i686 *-musllinux_* *x86_64*"
CIBW_ARCHS: "arm64"
- name: Build wheels for CPython
if: ${{ (matrix.os == 'macos-13') || (matrix.os == 'ubuntu-22.04') }}
shell: bash
run: |
CMAKE_BUILD_PARALLEL_LEVEL=4 python3 -m cibuildwheel --output-dir dist
env:
CIBW_BUILD_VERBOSITY: 3
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_SKIP: "*-manylinux_i686 *-musllinux_*"
CIBW_ARCHS: "x86_64"
- name: Build wheels for CPython
if: matrix.os == 'windows-2022'
shell: bash
run: |
python3 -m cibuildwheel --output-dir dist
env:
CIBW_BUILD_VERBOSITY: 3
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_SKIP: "*-manylinux_i686 *-musllinux_* *-win32"
CIBW_ARCHS: "AMD64"
CIBW_PLATFORM: "windows"
- uses: actions/upload-artifact@v4
with:
name: python-package-distributions-${{ matrix.os }}-${{ matrix.python-version }}
path: dist
- name: Test wheel
shell: bash
run: |
# Install wheel
python3 -m pip install dist/*.whl
# Run Python unit tests
export TEST_FOLDER="./data/"
python3 -m unittest core/python/test/corePyBindTest.py
python3 -m unittest core/python/test/mpsPyBindTest.py
publish-to-pypi:
name: Publish to Pypi
runs-on: ubuntu-latest
needs:
- build-wheels
steps:
- name: Download wheels from previous jobs
# by default this will download all artifacts
uses: actions/download-artifact@v4
with:
pattern: python-package-distributions-*
merge-multiple: true
# PyPI publish action uploads everything under dist/* by default
path: dist
- name: Display the list of artifacts
run: ls -R dist
- name: Publish to Test PyPI
if: github.event.inputs.deploy == 'test'
uses: pypa/gh-action-pypi-publish@v1.4.2
with:
user: __token__
password: ${{ secrets.TEST_PYPI_TOKEN_PROJECTARIA_TOOLS }}
repository_url: https://test.pypi.org/legacy/
skip_existing: true
verbose: true
- name: Publish to PyPI
if: github.event.inputs.deploy == 'prod'
uses: pypa/gh-action-pypi-publish@v1.4.2
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN_PROJECTARIA_TOOLS_DEV }}
skip_existing: true
verbose: true