Skip to content

Use github actions to build wheels #15

Use github actions to build wheels

Use github actions to build wheels #15

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@v4
with:
fetch-depth: 0
submodules: "recursive"
- name: Set up python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Build sdist
run: |
pipx run build --sdist
- uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist/*.tar.gz
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@v4
with:
fetch-depth: 0
submodules: "recursive"
- name: Sanitize matrix.cibw_build
id: sanitize_build
run: echo "CIBW_BUILD_SANITIZED=$(echo '${{ matrix.cibw_build }}' | sed 's/\*/_/g')" >> $GITHUB_ENV
shell: bash
- 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@v5
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@v4
with:
name: wheels-${{ matrix.os }}-${{ env.CIBW_BUILD_SANITIZED }}-${{ matrix.cibw_archs }}
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@v4
with:
fetch-depth: 0
submodules: "recursive"
- name: Sanitize matrix.cibw_build
id: sanitize_build
run: echo "CIBW_BUILD_SANITIZED=$(echo '${{ matrix.cibw_build }}' | sed 's/\*/_/g')" >> $GITHUB_ENV
shell: bash
- name: Set up python 3.12
uses: actions/setup-python@v5
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
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 "Running delocate-wheel command on $ORIGINAL_WHEEL"
DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v $ORIGINAL_WHEEL
echo "Running delocate-listdeps to list linked wheel dependencies"
WHEEL_SIMPLE_FILENAME="${ORIGINAL_WHEEL##*/}"
DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH delocate-listdeps --all {dest_dir}/$WHEEL_SIMPLE_FILENAME
echo "DONE."
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}-${{ env.CIBW_BUILD_SANITIZED }}-${{ matrix.cibw_archs }}
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@v4
with:
fetch-depth: 0
submodules: "recursive"
- name: Sanitize matrix.cibw_build
id: sanitize_build
run: echo "CIBW_BUILD_SANITIZED=$(echo '${{ matrix.cibw_build }}' | sed 's/\*/_/g')" >> $GITHUB_ENV
shell: bash
- uses: actions/setup-python@v5
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@v4
with:
name: wheels-${{ matrix.os }}-${{ env.CIBW_BUILD_SANITIZED }}-${{ matrix.cibw_archs }}
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_linux",
"build_wheels_macos",
"build_wheels_macos_arm64",
]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
path: wheels
pattern: wheels-*
merge-multiple: true
- name: Set up python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install Twine
run: pip install twine
- 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: |
gcloud config set artifacts/repository OpenEXR
gcloud config set artifacts/location us-west1
gcloud auth activate-service-account --key-file=$GOOGLE_GHA_CREDS_PATH
gcloud artifacts print-settings python > ~/.pypirc
python -m twine upload --repository OpenEXR wheels/*