Skip to content

Fixes #259: Finish Feature Request by Adding Support for musllinux Wheels and Testing Script for Alpine Compatibility #243

Fixes #259: Finish Feature Request by Adding Support for musllinux Wheels and Testing Script for Alpine Compatibility

Fixes #259: Finish Feature Request by Adding Support for musllinux Wheels and Testing Script for Alpine Compatibility #243

Workflow file for this run

name: build
on:
pull_request:
push:
branches:
- master
workflow_dispatch:
env:
# Define supported Python versions globally
CIBW_BUILD_VERSIONS: "cp38-* cp39-* cp310-* cp311-* cp312-* cp313-*"
jobs:
pre-commit-hooks:
name: run pre-commit hooks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run pre-commit hook
uses: pre-commit/[email protected]
test:
runs-on: ubuntu-latest
strategy:
# By default, GitHub will maximize the number of jobs run in parallel
# depending on the available runners on GitHub-hosted virtual machines.
# max-parallel: 8
fail-fast: false
matrix:
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
env:
TOXENV: ${{ matrix.tox-env }}
TOX_SKIP_MISSING_INTERPRETERS: False
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Upgrade pip version
run: pip install -U pip
- name: Install test dependencies
run: pip install tox tox-gh-actions poetry==1.4.0
- name: Run tox
run: tox
make-wheels:
name: Make ${{ matrix.os }} ${{ matrix.cibw_arch }} wheels
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ["ubuntu-latest"]
cibw_arch: ["native"]
fail-fast: false
steps:
- name: "Checkout repo"
uses: actions/checkout@v4
- name: Install poetry
run: pip install poetry
- name: "Build wheels"
uses: pypa/[email protected]
with:
output-dir: dist
env:
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
CIBW_MUSLLINUX_X86_64_IMAGE: musllinux_1_1
CIBW_BUILD: ${{ env.CIBW_BUILD_VERSIONS }}
CIBW_SKIP: "cp36-* cp37-*"
CIBW_ARCHS: ${{ matrix.cibw_arch }}
CIBW_BUILD_FRONTEND: pip
CIBW_BEFORE_ALL_LINUX: yum install -y libffi-devel clang make
CIBW_BUILD_VERBOSITY: 1
- name: "Upload wheel as artifact"
uses: actions/upload-artifact@v4
with:
name: artifact-${{ matrix.os }}-${{ matrix.cibw_arch }}-wheel
path: "./**/dist/*.whl"
make-sdist:
name: Make source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install poetry
run: pip install poetry
- run: poetry build -f sdist
- uses: actions/upload-artifact@v4
with:
name: artifact-source-dist
path: "./**/dist/*.tar.gz"
publish:
runs-on: ubuntu-latest
# Note: only run, when test publishing worked
needs: [test, make-wheels, make-sdist]
if: endsWith(github.ref, '/master')
permissions:
id-token: write
contents: write
steps:
- name: "Checkout repo"
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
- name: Upgrade pip version
run: pip install --upgrade pip
- name: Install poetry
run: pip install poetry
- name: Fetch version
id: fetch_version
run: echo "version_nr=$(poetry version -s)" >> $GITHUB_OUTPUT
- name: Download all artifacts
uses: actions/download-artifact@v4
- name: Copy artifacts to dist/ folder
run: |
find . -name 'artifact-*' -exec unzip '{}' \;
mkdir -p dist/
find . -name '*.tar.gz' -exec mv '{}' dist/ \;
find . -name '*.whl' -exec mv '{}' dist/ \;
ls -lR dist/
- name: Test PyPI Publishing
# TODO separate step to test publishing before merging to main
# NOTE: PRs from forks fail due to: "missing or insufficient OIDC token permissions,
# the ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variable was unset"
# -> test publishing cannot be triggered in PRs?!
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.TEST_PYPI_DEPLOYMENT_API_KEY }}
repository-url: https://test.pypi.org/legacy/
skip-existing: true
- name: Create GitHub Release
id: create_gh_release
uses: ncipollo/release-action@v1
env:
VERSION: ${{ steps.fetch_version.outputs.version_nr }}
with:
tag: ${{env.VERSION}}
name: Release ${{env.VERSION}}
draft: false
prerelease: false
skipIfReleaseExists: true
- name: PyPI Publishing
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_DEPLOYMENT_API_KEY }}
skip-existing: true