release-deploy #67
Workflow file for this run
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
name: release-deploy | |
on: | |
release: | |
types: [ published ] | |
# push: | |
# branches: [ main ] | |
# pull_request: | |
jobs: | |
build-sdist: | |
name: Build source distribution | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
- name: Build sdist | |
run: | | |
python -m pip install -U pip | |
python -m pip install poetry | |
poetry build -f sdist | |
- name: Store artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sdist | |
path: ./dist | |
build-wheels: | |
name: Build wheel for cp${{ matrix.python }}-${{ matrix.platform_id }}-${{ matrix.manylinux_image }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Windows 32 bit | |
- os: windows-latest | |
python: 39 | |
platform_id: win32 | |
- os: windows-latest | |
python: 310 | |
platform_id: win32 | |
- os: windows-latest | |
python: 311 | |
platform_id: win32 | |
- os: windows-latest | |
python: 312 | |
platform_id: win32 | |
- os: windows-latest | |
python: 313 | |
platform_id: win32 | |
# Windows 64 bit | |
- os: windows-latest | |
python: 39 | |
platform_id: win_amd64 | |
- os: windows-latest | |
python: 310 | |
platform_id: win_amd64 | |
- os: windows-latest | |
python: 311 | |
platform_id: win_amd64 | |
- os: windows-latest | |
python: 312 | |
platform_id: win_amd64 | |
- os: windows-latest | |
python: 313 | |
platform_id: win_amd64 | |
# Linux 64 bit manylinux2014 | |
- os: ubuntu-latest | |
python: 39 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: 310 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: 311 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: 312 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: 313 | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
# Linux aarch64 | |
- os: ubuntu-latest | |
python: 39 | |
platform_id: manylinux_aarch64 | |
- os: ubuntu-latest | |
python: 310 | |
platform_id: manylinux_aarch64 | |
- os: ubuntu-latest | |
python: 311 | |
platform_id: manylinux_aarch64 | |
- os: ubuntu-latest | |
python: 312 | |
platform_id: manylinux_aarch64 | |
- os: ubuntu-latest | |
python: 313 | |
platform_id: manylinux_aarch64 | |
# MacOS 12 x86_64 | |
- os: macos-12 | |
python: 39 | |
platform_id: macosx_x86_64 | |
- os: macos-12 | |
python: 310 | |
platform_id: macosx_x86_64 | |
- os: macos-12 | |
python: 311 | |
platform_id: macosx_x86_64 | |
- os: macos-12 | |
python: 312 | |
platform_id: macosx_x86_64 | |
- os: macos-12 | |
python: 313 | |
platform_id: macosx_x86_64 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Set up QEMU | |
if: ${{ matrix.platform_id == 'manylinux_aarch64' }} | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: arm64 | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install -U pip | |
python -m pip install cibuildwheel>=2.21 | |
- name: Build wheels (non-MacOS arm64) | |
env: | |
CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }} | |
CIBW_ARCHS: all | |
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} | |
CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_image }} | |
CIBW_MANYLINUX_AARCH64_IMAGE: ${{ matrix.manylinux_image }} | |
CIBW_ARCHS_MACOS: x86_64 | |
CIBW_BUILD_VERBOSITY: 1 | |
run: | | |
python --version | |
python -m cibuildwheel --output-dir dist | |
- name: Store artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheel-${{ matrix.python }}-${{ matrix.platform_id }} | |
path: ./dist | |
build-wheels-macos-arm64: | |
name: Build wheel for cp${{ matrix.python }}-${{ matrix.platform_id }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# MacOS 14 arm64 | |
- os: macos-14 | |
python: 39 | |
platform_id: macosx_arm64 | |
- os: macos-14 | |
python: 310 | |
platform_id: macosx_arm64 | |
- os: macos-14 | |
python: 311 | |
platform_id: macosx_arm64 | |
- os: macos-14 | |
python: 312 | |
platform_id: macosx_arm64 | |
- os: macos-14 | |
python: 313 | |
platform_id: macosx_arm64 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Install cibuildwheel | |
run: python -m pip install cibuildwheel>=2.21 wheel>=0.42 | |
- name: Build wheels | |
env: | |
CIBW_BUILD: cp${{ matrix.python }}-* | |
CIBW_ARCHS_MACOS: arm64 | |
CIBW_BUILD_VERBOSITY: 1 | |
run: | | |
python -m cibuildwheel --output-dir dist | |
- name: Store artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheel-${{ matrix.python }}-${{ matrix.platform_id }} | |
path: ./dist/*.whl | |
test-package: | |
name: Test built package | |
needs: [ build-wheels, build-sdist, build-wheels-macos-arm64 ] | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] | |
steps: | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Download the wheels | |
uses: actions/download-artifact@v4 | |
with: | |
path: dist/ | |
merge-multiple: true | |
- name: Install from package wheels and test | |
run: | | |
python -m venv testwhl | |
source testwhl/bin/activate | |
python -m pip install -U pip | |
python -m pip install pytest pydicom pylibjpeg | |
python -m pip uninstall -y pylibjpeg-openjpeg | |
python -m pip install git+https://github.com/pydicom/pylibjpeg-data | |
python -m pip install -U --pre --find-links dist/ pylibjpeg-openjpeg | |
python -m pytest --pyargs openjpeg.tests | |
deactivate | |
- name: Install from package tarball and test | |
run: | | |
python -m venv testsrc | |
source testsrc/bin/activate | |
python -m pip install -U pip | |
python -m pip install pytest pydicom pylibjpeg | |
python -m pip uninstall -y pylibjpeg-openjpeg | |
python -m pip install git+https://github.com/pydicom/pylibjpeg-data | |
python -m pip install -U dist/pylibjpeg*openjpeg-*.tar.gz | |
python -m pytest --pyargs openjpeg.tests | |
deactivate | |
# The pypi upload fails with non-linux containers, so grab the uploaded | |
# artifacts and run using those | |
# See: https://github.com/pypa/gh-action-pypi-publish/discussions/15 | |
deploy: | |
name: Upload wheels to PyPI | |
needs: [ test-package ] | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
url: https://pypi.org/project/pylibjpeg-openjpeg/ | |
permissions: | |
id-token: write | |
steps: | |
- name: Download the wheels | |
uses: actions/download-artifact@v4 | |
with: | |
path: dist/ | |
merge-multiple: true | |
- name: Publish package to PyPi | |
uses: pypa/gh-action-pypi-publish@release/v1 |