Skip to content

Commit

Permalink
ci: Add python wheel workflow
Browse files Browse the repository at this point in the history
Signed-off-by: mevrin <[email protected]>
  • Loading branch information
lekaf974 committed Sep 17, 2024
1 parent a2ef565 commit 9b7a303
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 0 deletions.
74 changes: 74 additions & 0 deletions .github/workflows/python-wheels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) Contributors to the OpenEXR Project.

name: Python Wheels

on:

# Run on all changes (PR and push) to the python binding
# source/configuration files, except on the release branches, which
# have their own workflow, which also publish to pypi/test.pypi.
# Note that changes to the core libraries will *not*
# trigger building the wheels. However, the main ci workflow does
# build and test the bindings (for a single python version on a
# single arch)

push:
branches-ignore:
- RB-*
paths:
- 'src/**'
- '.github/workflows/python-wheels.yml'
pull_request:
branches-ignore:
- RB-*
paths:
- 'src/**'
- 'pyproject.toml'
- '.github/workflows/python-wheels.yml'

permissions:
contents: read

jobs:
build_wheels:
name: Python Wheels - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]

steps:

- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Install Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.x'

- name: Create sdist
# Only create it once.
if: ${{ matrix.os == 'ubuntu-latest' }}
run: pipx run build --sdist . --outdir wheelhouse

- name: Build wheel
uses: pypa/cibuildwheel@79b0dd328794e1180a7268444d46cdf12e1abd01 # v2.21.0
env:
CIBW_ARCHS_MACOS: x86_64 arm64 universal2
# Build Python 3.7 through 3.11.
# Skip python 3.6 since scikit-build-core requires 3.7+
# Skip 32-bit wheels builds on Windows
# Also skip the PyPy builds, since they fail the unit tests
CIBW_BUILD: "cp37-* cp38-* cp39-* cp310-* cp311-*"
CIBW_SKIP: "*-win32 *_i686"
CIBW_TEST_SKIP: "*-macosx*arm64"

- name: Upload artifact
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: wheels-${{ matrix.os }}
path: |
./wheelhouse/*.whl
./wheelhouse/*.tar.gz
84 changes: 84 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) Contributors to the OpenEXR Project.

[build-system]
requires = ["scikit-build-core==0.8.1", "pybind11"]
build-backend = "scikit_build_core.build"

[project]
name = "Imath"
dynamic = ["version"]

description="Python bindings for the Imath a basic, light-weight, and efficient C++ representation of 2D and 3D vectors and matrices and other simple but useful mathematical objects, functions, and data types common in computer graphics applications, including the “half” 16-bit floating-point type."
readme = "README.md"
authors = [
{ name="Contributors to the OpenEXR project", email="[email protected]" },
]
requires-python = ">=3.7"

[project.urls]
"Homepage" = "https://imath.readthedocs.io/"
"Source" = "https://github.com/AcademySoftwareFoundation/Imath"
"Bug Tracker" = "https://github.com/AcademySoftwareFoundation/Imath/issues"

[project.optional-dependencies]
test = ["pytest"]

[tool.pytest.ini_options]
minversion = "6.0"
addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"]
xfail_strict = true
log_cli_level = "INFO"
filterwarnings = [
"error",
]
testpaths = ["tests"]

[tool.scikit-build]
wheel.expand-macos-universal-tags = true
sdist.exclude = [".github", "src/**Test", "website", "share"]

# Only build the PyOpenEXR (cmake --build --target PyOpenEXR).
cmake.targets = ["Imath"]
# Only install the "python" component (cmake --install --component python).
# This makes sure that only files marked as "python" component are installed.
install.components = ["python"]
# strip debug symbols
install.strip = true

# Enable experimental features if any are available
# In this case we need custom local plugin to get
# the project version from cmake.
experimental = true
metadata.version.provider = "IMATH_skbuild_plugin"
metadata.version.provider-path = "./src/python"


[tool.scikit-build.cmake.define]
IMATH_INSTALL = 'OFF'
IMATH_BUILD_PYTHON = 'ON'
IMATH_BUILD_EXAMPLES = 'OFF'
IMATH_BUILD_TOOLS = 'OFF'
IMATH_INSTALL_TOOLS = 'OFF'
IMATH_INSTALL_PKG_CONFIG = 'OFF'
IMATH_FORCE_INTERNAL_DEFLATE = 'ON'
IMATH_FORCE_INTERNAL_IMATH = 'ON'
IMATH_TEST_LIBRARIES = 'OFF'
BUILD_SHARED_LIBS = 'OFF'
CMAKE_OSX_DEPLOYMENT_TARGET = '10.15'
CMAKE_POSITION_INDEPENDENT_CODE = 'ON'

[tool.cibuildwheel]
test-command = "pytest -s {project}/src/python/tests"
test-requires = ["numpy"]
test-extras = ["test"]
test-skip = ["*universal2:arm64"]
build-verbosity = 1

manylinux-x86_64-image = "manylinux2014"
manylinux-i686-image = "manylinux2014"
manylinux-aarch64-image = "manylinux2014"

# Needed for full C++17 support
[tool.cibuildwheel.macos.environment]
MACOSX_DEPLOYMENT_TARGET = "10.15"

0 comments on commit 9b7a303

Please sign in to comment.