release-deploy #54
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 | |
- name: Install Rust (stable) | |
run: | |
curl https://sh.rustup.rs -sSf | sh -s -- -y | |
- 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 -U maturin build | |
python -m build --sdist -o dist | |
- 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: 38 | |
platform_id: win32 | |
- 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 | |
# Windows 64 bit | |
- os: windows-latest | |
python: 38 | |
platform_id: win_amd64 | |
- 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 | |
# Linux 64 bit manylinux2014 | |
- os: ubuntu-latest | |
python: 38 | |
platform_id: manylinux_x86_64 | |
manylinux_image: 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 | |
# Linux aarch64 | |
- os: ubuntu-latest | |
python: 38 | |
platform_id: manylinux_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 | |
# MacOS x86_64 | |
- os: macos-latest | |
python: 38 | |
platform_id: macosx_x86_64 | |
- os: macos-latest | |
python: 39 | |
platform_id: macosx_x86_64 | |
- os: macos-latest | |
python: 310 | |
platform_id: macosx_x86_64 | |
- os: macos-latest | |
python: 311 | |
platform_id: macosx_x86_64 | |
- os: macos-latest | |
python: 312 | |
platform_id: macosx_x86_64 | |
# MacOS arm64 | |
- os: macos-latest | |
python: 38 | |
platform_id: macosx_arm64 | |
- os: macos-latest | |
python: 39 | |
platform_id: macosx_arm64 | |
- os: macos-latest | |
python: 310 | |
platform_id: macosx_arm64 | |
- os: macos-latest | |
python: 311 | |
platform_id: macosx_arm64 | |
- os: macos-latest | |
python: 312 | |
platform_id: macosx_arm64 | |
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 | |
- name: Install Rust (stable) | |
run: | |
curl https://sh.rustup.rs -sSf | sh -s -- -y | |
- 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 -U setuptools-rust | |
python -m pip install cibuildwheel==2.16.2 | |
- name: Build wheels | |
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_BUILD_VERBOSITY: 1 | |
CIBW_BEFORE_ALL: | | |
curl -sSf https://sh.rustup.rs | sh -s -- --default-toolchain stable -y && rustup target add i686-pc-windows-msvc && rustup target add aarch64-apple-darwin | |
CIBW_ENVIRONMENT: 'PATH="$PATH:$HOME/.cargo/bin"' | |
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 | |
test-package: | |
name: Test built package | |
needs: [ build-wheels, build-sdist ] | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
steps: | |
- name: Install Rust (stable) | |
run: | |
curl https://sh.rustup.rs -sSf | sh -s -- -y | |
- 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 -U pytest pydicom pylibjpeg | |
python -m pip uninstall -y pylibjpeg-rle | |
python -m pip install git+https://github.com/pydicom/pylibjpeg-data | |
python -m pip install -U --pre --find-links dist/ pylibjpeg-rle | |
python -m pytest --pyargs rle.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 -U pytest pydicom pylibjpeg | |
python -m pip uninstall -y pylibjpeg-rle | |
python -m pip install git+https://github.com/pydicom/pylibjpeg-data | |
export PATH="$PATH:$HOME/.cargo/bin" | |
python -m pip install -U dist/pylibjpeg*rle-*.tar.gz | |
python -m pytest --pyargs rle.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 | |
steps: | |
- name: Download the wheels | |
uses: actions/download-artifact@v3 | |
with: | |
path: dist/ | |
merge-multiple: true | |
- name: Publish package to PyPi | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_PASSWORD }} |