Merge pull request #2048 from borglab/fan/fix_inline #8
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
# This workflow builds the Python wheels using cibuildwheel and uploads them to TestPyPI. | |
# It can be triggered on push to the develop branch or manually via Github Actions. | |
name: Build Wheels (cibuildwheel) | |
on: | |
push: | |
branches: | |
- develop | |
workflow_dispatch: | |
jobs: | |
# Get the system time and store it in an output. This is used to tag the wheels. | |
# This needs to be done in a separate job so that each matrix job in build_wheels can | |
# access the same timestamp. | |
get_system_time: | |
name: Get System Time | |
runs-on: ubuntu-latest | |
outputs: | |
timestamp: ${{ steps.get_time.outputs.timestamp }} | |
steps: | |
- name: Get system time | |
id: get_time | |
run: echo "timestamp=$(date +'%Y%m%d%H%M')" >> "$GITHUB_OUTPUT" | |
build_wheels: | |
name: Build Wheels | |
needs: get_system_time | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Linux x86_64 | |
- os: ubuntu-latest | |
python_version: "3.10" | |
cibw_python_version: 310 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python_version: "3.11" | |
cibw_python_version: 311 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python_version: "3.12" | |
cibw_python_version: 312 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python_version: "3.13" | |
cibw_python_version: 313 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
# Linux aarch64 | |
- os: ubuntu-24.04-arm | |
python_version: "3.10" | |
cibw_python_version: 310 | |
platform_id: manylinux_aarch64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-24.04-arm | |
python_version: "3.11" | |
cibw_python_version: 311 | |
platform_id: manylinux_aarch64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-24.04-arm | |
python_version: "3.12" | |
cibw_python_version: 312 | |
platform_id: manylinux_aarch64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-24.04-arm | |
python_version: "3.13" | |
cibw_python_version: 313 | |
platform_id: manylinux_aarch64 | |
manylinux_image: manylinux2014 | |
# MacOS x86_64 | |
# - os: macos-13 | |
# python_version: "3.10" | |
# cibw_python_version: 310 | |
# platform_id: macosx_x86_64 | |
# - os: macos-13 | |
# python_version: "3.11" | |
# cibw_python_version: 311 | |
# platform_id: macosx_x86_64 | |
# - os: macos-13 | |
# python_version: "3.12" | |
# cibw_python_version: 312 | |
# platform_id: macosx_x86_64 | |
# - os: macos-13 | |
# python_version: "3.13" | |
# cibw_python_version: 313 | |
# platform_id: macosx_x86_64 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python_version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python_version }} | |
# Set the DEVELOP flag and the TIMESTAMP environment variables. This is used in the | |
# top-level CMakeLists.txt to generate the GTSAM_VERSION_STRING. | |
- name: Set Develop Flag | |
run: | | |
echo "DEVELOP=1" >> $GITHUB_ENV | |
echo "TIMESTAMP=${{ needs.get_system_time.outputs.timestamp }}" >> $GITHUB_ENV | |
- name: Install Dependencies | |
run: | | |
python3 -m pip install -r python/dev_requirements.txt | |
if [ "$RUNNER_OS" == "Linux" ]; then | |
sudo apt-get install -y wget libicu-dev python3-pip python3-setuptools libboost-all-dev ninja-build | |
elif [ "$RUNNER_OS" == "macOS" ]; then | |
brew install wget icu4c boost ninja python-setuptools | |
else | |
echo "$RUNNER_OS not supported" | |
exit 1 | |
fi | |
# We first build the Python wrapper module on the host machine. This is done because cibuildwheel | |
# expects a setup.py file to be present in the project directory. | |
# | |
# The Python wrapper module is then rebuilt within the cibuildwheel container before building | |
# the wheels to ensure platform compatibility. | |
- name: Run CMake | |
run: | | |
cmake . -B build -DGTSAM_BUILD_PYTHON=1 -DGTSAM_PYTHON_VERSION=${{ matrix.python_version }} | |
- name: Build and test wheels | |
env: | |
# Generate the platform identifier. See https://cibuildwheel.pypa.io/en/stable/options/#build-skip. | |
CIBW_BUILD: cp${{ matrix.cibw_python_version }}-${{ matrix.platform_id }} | |
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} | |
CIBW_MANYLINUX_AARCH64_IMAGE: ${{ matrix.manylinux_image }} | |
CIBW_ARCHS: all | |
CIBW_ENVIRONMENT_PASS_LINUX: DEVELOP TIMESTAMP | |
# Use build instead of pip wheel to build the wheels. This is recommended by PyPA. | |
# See https://cibuildwheel.pypa.io/en/stable/options/#build-frontend. | |
CIBW_BUILD_FRONTEND: "build" | |
CIBW_BEFORE_ALL: bash .github/scripts/python_wheels/cibw_before_all.sh ${{ matrix.python_version }} {project} | |
CIBW_BUILD_VERBOSITY: 1 | |
run: bash .github/scripts/python_wheels/build_wheels.sh | |
- name: Store artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-cp${{ matrix.cibw_python_version }}-${{ matrix.platform_id }} | |
path: wheelhouse/*.whl | |
upload_all: | |
name: Upload All | |
needs: build_wheels | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
steps: | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: dist/ | |
merge-multiple: true | |
- name: Publish to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
verbose: true | |
packages-dir: dist/ | |
# repository-url: https://test.pypi.org/legacy/ |