BREAKING CHANGE - Enhance Python bindings plus streaming decryption support, improve chunk handling, add comprehensive tests #1
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: Build and Publish self_encryption Python Package | ||
on: | ||
push: | ||
tags: | ||
- 'v*' | ||
env: | ||
PYTHON_VERSION: "3.10" | ||
PACKAGE_NAME: "self_encryption" | ||
# Add top-level permissions block | ||
permissions: | ||
id-token: write | ||
contents: read | ||
jobs: | ||
macos: | ||
runs-on: macos-latest | ||
# Add permissions to job | ||
permissions: | ||
id-token: write | ||
contents: read | ||
strategy: | ||
matrix: | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
target: [x86_64, aarch64] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
target: ${{ matrix.target }} | ||
args: --release --out dist -i python${{ matrix.python-version }} | ||
sccache: 'true' | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-macos-${{ matrix.target }}-py${{ matrix.python-version }} | ||
path: dist/*.whl | ||
if-no-files-found: error | ||
windows: | ||
runs-on: windows-latest | ||
# Add permissions to job | ||
permissions: | ||
id-token: write | ||
contents: read | ||
strategy: | ||
matrix: | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
target: [x64] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
architecture: ${{ matrix.target }} | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
args: --release --out dist -i python${{ matrix.python-version }} | ||
sccache: 'true' | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-windows-${{ matrix.target }}-py${{ matrix.python-version }} | ||
path: dist/*.whl | ||
if-no-files-found: error | ||
linux: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
target: [x86_64, i686] | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
architecture: x64 | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
env: | ||
PYTHON_VERSION: ${{ matrix.python-version }} | ||
with: | ||
target: ${{ matrix.target }} | ||
manylinux: auto | ||
args: --release --out dist -i python${{ matrix.python-version }} | ||
- name: Install built wheel | ||
if: matrix.target == 'x86_64' | ||
run: | | ||
# List all wheels to debug | ||
echo "Available wheels:" | ||
ls -la dist/ | ||
pip install -U pip pytest click>=8.0.0 | ||
pip install --find-links dist/ ${{ env.PACKAGE_NAME }} | ||
pytest -v | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-linux-${{ matrix.target }}-py${{ matrix.python-version }} | ||
path: dist | ||
# linux-cross: | ||
# runs-on: ubuntu-latest | ||
# strategy: | ||
# matrix: | ||
# target: [aarch64, armv7, s390x, ppc64le, ppc64] | ||
# python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
# steps: | ||
# - uses: actions/checkout@v3 | ||
# - name: Set up QEMU | ||
# uses: docker/setup-qemu-action@v3 | ||
# - name: Set up Docker Buildx | ||
# uses: docker/setup-buildx-action@v3 | ||
# - uses: actions/setup-python@v4 | ||
# with: | ||
# python-version: ${{ matrix.python-version }} | ||
# - name: Build wheels | ||
# uses: PyO3/maturin-action@v1 | ||
# env: | ||
# PYO3_CROSS_PYTHON_VERSION: ${{ matrix.python-version }} | ||
# PYO3_CROSS: "1" | ||
# PYTHON_VERSION: ${{ matrix.python-version }} | ||
# with: | ||
# target: ${{ matrix.target }} | ||
# manylinux: auto | ||
# args: --release --out dist -i python${{ matrix.python-version }} | ||
# sccache: 'true' | ||
# docker-options: >- | ||
# --platform ${{ matrix.target == 'armv7' && 'linux/arm/v7' || | ||
# matrix.target == 'aarch64' && 'linux/arm64' || | ||
# matrix.target == 's390x' && 'linux/s390x' || | ||
# matrix.target == 'ppc64le' && 'linux/ppc64le' || | ||
# 'linux/amd64' }} | ||
# - uses: uraimo/[email protected] | ||
# if: matrix.target != 'ppc64' | ||
# name: Install built wheel | ||
# with: | ||
# arch: ${{ matrix.target }} | ||
# distro: ubuntu_latest | ||
# githubToken: ${{ github.token }} | ||
# install: | | ||
# apt-get update | ||
# apt-get install -y --no-install-recommends python3 python3-pip python3-venv | ||
# pip3 install -U pip pytest click>=8.0.0 | ||
# run: | | ||
# # List all wheels to debug | ||
# echo "Available wheels:" | ||
# ls -la dist/ | ||
# # Install using find-links to handle platform tags correctly | ||
# pip3 install --find-links dist/ ${{ env.PACKAGE_NAME }} | ||
# pytest -v | ||
# - name: Upload wheels | ||
# uses: actions/upload-artifact@v4 | ||
# with: | ||
# name: wheels-linux-cross-${{ matrix.target }}-py${{ matrix.python-version }} | ||
# path: dist | ||
musllinux: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
target: | ||
- x86_64-unknown-linux-musl | ||
- i686-unknown-linux-musl | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
architecture: x64 | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
env: | ||
PYO3_CROSS_PYTHON_VERSION: ${{ matrix.python-version }} | ||
PYO3_CROSS: "1" | ||
with: | ||
target: ${{ matrix.target }} | ||
manylinux: musllinux_1_2 | ||
args: --release --out dist -i python${{ matrix.python-version }} | ||
- name: Install built wheel | ||
if: matrix.target == 'x86_64-unknown-linux-musl' | ||
uses: addnab/docker-run-action@v3 | ||
with: | ||
image: alpine:latest | ||
options: -v ${{ github.workspace }}:/io -w /io | ||
run: | | ||
# Install system dependencies | ||
apk add --no-cache \ | ||
python3 \ | ||
py3-pip \ | ||
gcc \ | ||
musl-dev \ | ||
python3-dev \ | ||
rust \ | ||
cargo \ | ||
openssl-dev \ | ||
pkgconfig | ||
# Create and activate virtual environment | ||
python3 -m venv /venv | ||
. /venv/bin/activate | ||
# Install Python dependencies | ||
pip install --upgrade pip wheel setuptools | ||
pip install pytest click>=8.0.0 | ||
# Install in development mode | ||
cd /io | ||
pip install -e . | ||
# Run tests | ||
python -m pytest -v | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-musllinux-${{ matrix.target }}-py${{ matrix.python-version }} | ||
path: dist | ||
# musllinux-cross: | ||
# runs-on: ubuntu-latest | ||
# strategy: | ||
# matrix: | ||
# platform: | ||
# - target: aarch64-unknown-linux-musl | ||
# arch: aarch64 | ||
# platform: linux/arm64 | ||
# - target: armv7-unknown-linux-musleabihf | ||
# arch: armv7 | ||
# platform: linux/arm/v7 | ||
# python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
# steps: | ||
# - uses: actions/checkout@v3 | ||
# - name: Set up QEMU | ||
# uses: docker/setup-qemu-action@v3 | ||
# - name: Set up Docker Buildx | ||
# uses: docker/setup-buildx-action@v3 | ||
# - uses: actions/setup-python@v4 | ||
# with: | ||
# python-version: ${{ matrix.python-version }} | ||
# - name: Build wheels | ||
# uses: PyO3/maturin-action@v1 | ||
# env: | ||
# PYO3_CROSS_PYTHON_VERSION: ${{ matrix.python-version }} | ||
# PYO3_CROSS: "1" | ||
# with: | ||
# target: ${{ matrix.platform.target }} | ||
# manylinux: musllinux_1_2 | ||
# args: --release --out dist -i python${{ matrix.python-version }} | ||
# sccache: 'true' | ||
# docker-options: "--platform ${{ matrix.platform.platform }}" | ||
# - uses: uraimo/run-on-arch-action@master | ||
# name: Install built wheel | ||
# with: | ||
# arch: ${{ matrix.platform.arch }} | ||
# distro: alpine_latest | ||
# githubToken: ${{ github.token }} | ||
# install: | | ||
# apk add --no-cache \ | ||
# python3 \ | ||
# py3-pip \ | ||
# gcc \ | ||
# musl-dev \ | ||
# python3-dev \ | ||
# rust \ | ||
# cargo \ | ||
# openssl-dev \ | ||
# pkgconfig | ||
# run: | | ||
# # Create and activate virtual environment | ||
# python3 -m venv /venv | ||
# . /venv/bin/activate | ||
# # Install Python dependencies | ||
# pip install --upgrade pip wheel setuptools | ||
# pip install pytest click>=8.0.0 | ||
# # Install in development mode | ||
# cd /io | ||
# pip install -e . | ||
# # Run tests | ||
# python -m pytest -v | ||
# - name: Upload wheels | ||
# uses: actions/upload-artifact@v4 | ||
# with: | ||
# name: wheels-musllinux-cross-${{ matrix.platform.target }}-py${{ matrix.python-version }} | ||
# path: dist | ||
sdist: | ||
runs-on: ubuntu-latest | ||
# Add permissions to job | ||
permissions: | ||
id-token: write | ||
contents: read | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Build sdist | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
command: sdist | ||
args: --out dist | ||
- name: Upload sdist | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-sdist-py${{ env.PYTHON_VERSION }} | ||
path: dist/*.tar.gz | ||
if-no-files-found: error | ||
release: | ||
name: Release | ||
runs-on: ubuntu-latest | ||
needs: [macos, windows, linux, sdist] | ||
# Keep existing permissions | ||
permissions: | ||
id-token: write | ||
contents: read | ||
steps: | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: wheels | ||
path: dist | ||
- name: Display structure of downloaded files | ||
run: ls -R dist | ||
- name: Publish to PyPI | ||
uses: pypa/gh-action-pypi-publish@release/v1 | ||
with: | ||
packages-dir: dist/ | ||
verbose: true | ||
print-hash: true |