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: 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 }} | |
# Add debug step to verify wheel location | |
- name: Debug wheel location | |
run: | | |
echo "Contents of current directory:" | |
ls -la | |
echo "\nContents of dist directory:" | |
ls -la dist/ | |
echo "\nFinding all wheel files:" | |
find . -name "*.whl" | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheels-linux-${{ matrix.target }}-py${{ matrix.python-version }} | |
path: dist/*.whl | |
if-no-files-found: error | |
# 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, musllinux, sdist] | |
permissions: | |
id-token: write | |
contents: read | |
steps: | |
- name: Create dist directory | |
run: mkdir -p dist | |
# List artifacts using GitHub API | |
- name: List artifacts | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
echo "Available artifacts:" | |
gh api \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts \ | |
--jq '.artifacts[].name' | |
# Download artifacts using multiple attempts | |
- name: Download Linux x86_64 artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: wheels-linux-x86_64-py3.8 | |
path: dist | |
continue-on-error: true | |
- name: Download Linux i686 artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: wheels-linux-i686-py3.8 | |
path: dist | |
continue-on-error: true | |
- name: Download sdist | |
uses: actions/download-artifact@v3 | |
with: | |
name: wheels-sdist-py3.10 | |
path: dist | |
continue-on-error: true | |
# Add debugging information | |
- name: Debug artifact contents | |
run: | | |
echo "Current working directory:" | |
pwd | |
echo "\nAll files in current directory:" | |
find . -type f | |
echo "\nDist directory contents:" | |
ls -la dist/ | |
echo "\nAll wheel files:" | |
find dist -name "*.whl" || echo "No wheel files found" | |
echo "\nAll source distributions:" | |
find dist -name "*.tar.gz" || echo "No source distributions found" | |
# Count files | |
wheel_count=$(find dist -name "*.whl" | wc -l) | |
sdist_count=$(find dist -name "*.tar.gz" | wc -l) | |
echo "\nFound $wheel_count wheel files and $sdist_count source distributions" | |
if [ $wheel_count -eq 0 ] && [ $sdist_count -eq 0 ]; then | |
echo "Error: No distribution files found!" | |
exit 1 | |
fi | |
- name: Publish to PyPI | |
if: success() | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages-dir: dist/ | |
verbose: true | |
print-hash: true |