From f77a1d838eefb5673e01bbd5b22d2fac854af0cd Mon Sep 17 00:00:00 2001 From: Brian Pugh Date: Mon, 26 Feb 2024 13:18:47 -0800 Subject: [PATCH] Use github actions to build wheels --- .buildkite/pipeline.yml | 41 ----- .github/workflows/build_wheels.yaml | 238 ++++++++++++++++++++++++++++ .gitignore | 1 + setup.py | 2 +- 4 files changed, 240 insertions(+), 42 deletions(-) delete mode 100644 .buildkite/pipeline.yml create mode 100644 .github/workflows/build_wheels.yaml diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml deleted file mode 100644 index cb8ce7d..0000000 --- a/.buildkite/pipeline.yml +++ /dev/null @@ -1,41 +0,0 @@ -steps: -- label: ":package: Build" - key: build - env: - CIBW_BEFORE_ALL: mkdir openexr/build && cd openexr/build && cmake .. -DCMAKE_INSTALL_PREFIX=../../openexr-install && make all install - CIBW_ENVIRONMENT: LD_LIBRARY_PATH=/project/openexr-install/lib64:/project/openexr-install/lib - CIBW_BUILD: cp37-*_x86_64 cp38-*_x86_64 cp39-*_x86_64 cp310-*_x86_64 - command: | - echo "--- Install tools" - python -m pip install cibuildwheel - curl -o /docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz - tar --strip-components 1 -C /usr/local/bin -xzvf /docker.tgz docker/docker - chmod +x /usr/local/bin/docker - echo "+++ Build sdist" - python setup.py sdist - echo "+++ Build wheels" - python -m cibuildwheel --platform linux - mv wheelhouse/*.whl dist/ - artifact_paths: - - dist/**/* - plugins: - - coderanger/k8s#next: - image: python:3.10 - mount-hostpath: /var/run/docker-dind/docker.sock:/var/run/docker.sock:Socket - mount-secret: - - buildkite:/secrets - resources-request-cpu: 2000m - patch: | - function(job) job { - spec+: { - template+: { - spec+:{ - serviceAccountName: "docker-push", - tolerations: [{ key: "docker-build", value: "true", operator: "Equal", effect: "NoSchedule" }], - nodeSelector: {"cloud.google.com/gke-nodepool": "docker-build"}, - }, - }, - }, - } -- wait -- gm_snippet: py-upload diff --git a/.github/workflows/build_wheels.yaml b/.github/workflows/build_wheels.yaml new file mode 100644 index 0000000..c5b3b64 --- /dev/null +++ b/.github/workflows/build_wheels.yaml @@ -0,0 +1,238 @@ +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: Set up python 3.12 + uses: actions/setup-python@v4 + with: + python-version: "3.12" + + - name: Build wheels + uses: pypa/cibuildwheel@v2.16.2 + env: + CIBW_ARCHS: ${{ matrix.cibw_archs }} + CIBW_BUILD: ${{ matrix.cibw_build }} + CIBW_TEST_SKIP: "*-win_arm64" + 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_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: pytest {package}/tests + + - 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/cibuildwheel@v2.16.2 + 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_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: pytest {package}/tests + + - 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/cibuildwheel@v2.16.2 + 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_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: pytest {package}/tests + + - 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/cibuildwheel@v2.16.2 + env: + CIBW_BUILD: ${{ matrix.cibw_build }} + CIBW_ARCHS: ${{ matrix.cibw_archs }} + CIBW_TEST_SKIP: "*-macosx_arm64" + CIBW_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: pytest {package}/tests + 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 + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_TOKEN }} + packages_dir: artifact/ + skip_existing: true diff --git a/.gitignore b/.gitignore index 096e7a0..f76b8f7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build/ wheelhouse/ dist/ MANIFEST +/*.whl diff --git a/setup.py b/setup.py index ec7f965..e729c89 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ from distutils.sysconfig import get_config_var from distutils.version import LooseVersion -version = "1.3.2+geomagical.3" +version = "1.4.0" compiler_args = ["-g", '-DVERSION="%s"' % version] openexr_lib = "openexr-install/lib64"