Skip to content

Use github actions to build wheels #7

Use github actions to build wheels

Use github actions to build wheels #7

Workflow file for this run

name: Build Wheels
on:
workflow_dispatch:
pull_request:
push:
tags:
- "v*.*.*"
jobs:
build_sdist:
name: "sdist"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
steps:
- name: Check out repository
uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: "recursive"
- name: Set up python 3.12
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Build sdist
run: |
pipx run build --sdist
- uses: actions/upload-artifact@v3
with:
path: dist/*.tar.gz
build_wheels_windows:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["AMD64", "x86", "ARM64"]
exclude:
- os: windows-latest
cibw_build: "cp38-*"
cibw_archs: "ARM64"
steps:
- name: "Set environment variables (Windows)"
shell: pwsh
run: |
(Get-ItemProperty "HKLM:System\CurrentControlSet\Control\FileSystem").LongPathsEnabled
- name: Check out repository
uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: "recursive"
- name: Install dependencies
uses: msys2/setup-msys2@v2
with:
update: true
install: zlib
- name: Set up python 3.12
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_BEFORE_ALL: mkdir openexr\build && cd openexr\build && cmake .. -DCMAKE_INSTALL_PREFIX=..\..\openexr-install && make && make install
CIBW_ENVIRONMENT: LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/openexr-install/lib64:${GITHUB_WORKSPACE}/openexr-install/lib
- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl
build_wheels_linux:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["x86_64", "aarch64"]
steps:
- name: Check out repository
uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: "recursive"
- name: Set up QEMU
if: matrix.cibw_archs != 'x86_64'
uses: docker/setup-qemu-action@v2
with:
platforms: all
- name: Set up python 3.12
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_BEFORE_ALL: mkdir openexr/build && cd openexr/build && cmake .. -DCMAKE_INSTALL_PREFIX=../../openexr-install && make all install
CIBW_ENVIRONMENT: LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/openexr-install/lib64:${GITHUB_WORKSPACE}/openexr-install/lib
- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl
build_wheels_macos:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["x86_64"]
env:
SYSTEM_VERSION_COMPAT: 0 # https://github.com/actions/setup-python/issues/469#issuecomment-1192522949
steps:
- name: Check out repository
uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: "recursive"
- name: Set up python 3.12
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_BEFORE_ALL: mkdir openexr/build && cd openexr/build && cmake .. -DCMAKE_INSTALL_PREFIX=../../openexr-install && make all install
CIBW_ENVIRONMENT: REPAIR_LIBRARY_PATH=${GITHUB_WORKSPACE}/openexr-install/lib64:${GITHUB_WORKSPACE}/openexr-install/lib
CIBW_REPAIR_WHEEL_COMMAND_MACOS: >
# https://cibuildwheel.readthedocs.io/en/stable/faq/#macos-passing-dyld_library_path-to-delocate
DYLD_LIBRARY_PATH=$REPAIR_LIBRARY_PATH delocate-listdeps --all {wheel}
DYLD_LIBRARY_PATH=$REPAIR_LIBRARY_PATH delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}
- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl
build_wheels_macos_arm64:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["arm64"]
steps:
- name: Check out repository
uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: "recursive"
- uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BEFORE_ALL: mkdir openexr/build && cd openexr/build && cmake .. -DCMAKE_INSTALL_PREFIX=../../openexr-install && make all install
CIBW_ENVIRONMENT: LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/openexr-install/lib64:${GITHUB_WORKSPACE}/openexr-install/lib
CIBW_REPAIR_WHEEL_COMMAND: |
echo "Target delocate archs: {delocate_archs}"
ORIGINAL_WHEEL={wheel}
echo "Running delocate-listdeps to list linked original wheel dependencies"
delocate-listdeps --all $ORIGINAL_WHEEL
echo "Renaming .whl file when architecture is 'macosx_arm64'"
RENAMED_WHEEL=${ORIGINAL_WHEEL//x86_64/arm64}
echo "Wheel will be renamed to $RENAMED_WHEEL"
mv $ORIGINAL_WHEEL $RENAMED_WHEEL
echo "Running delocate-wheel command on $RENAMED_WHEEL"
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v $RENAMED_WHEEL
echo "Running delocate-listdeps to list linked wheel dependencies"
WHEEL_SIMPLE_FILENAME="${RENAMED_WHEEL##*/}"
delocate-listdeps --all {dest_dir}/$WHEEL_SIMPLE_FILENAME
echo "DONE."
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
upload_to_pypi:
# TODO: enable for private python repo
if: false && github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v')
needs:
[
"build_sdist",
"build_wheels_windows",
"build_wheels_linux",
"build_wheels_macos",
"build_wheels_macos_arm64",
]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
- name: Authenticate to Google Cloud
id: auth
uses: "google-github-actions/auth@v1"
with:
credentials_json: "${{ secrets.GOOGLE_CREDENTIALS }}"
- name: Upload to Artifact Registry
run: |
# TODO: figure this out later with Rich
gcloud config set artifacts/repository OpenEXR
# gcloud config set artifacts/location <location>
gcloud auth activate-service-account --key-file=$GOOGLE_GHA_CREDS_PATH
gcloud artifacts print-settings python > ~/.pypirc
python -m twine upload --repository OpenEXR artifact/*