v2.0.0 #26
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 upload to PyPI | |
on: | |
workflow_dispatch: | |
pull_request: | |
push: | |
branches: | |
- master | |
release: | |
types: | |
- published | |
jobs: | |
build_wheels: | |
name: Build wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
# macos-13 is an intel runner, macos-14 is apple silicon | |
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all history, including tags | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
# skip pypy and musl builds | |
CIBW_SKIP: "pp* *-musllinux_*" | |
CIBW_BEFORE_TEST: pip install pytest hypothesis | |
CIBW_TEST_COMMAND: pytest {project} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} | |
path: ./wheelhouse/*.whl | |
build_sdist: | |
name: Build source distribution | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all history, including tags | |
- name: Build sdist | |
run: pipx run build --sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-sdist | |
path: dist/*.tar.gz | |
upload_pypi: | |
needs: [build_wheels, build_sdist] | |
runs-on: ubuntu-latest | |
environment: pypi | |
permissions: | |
id-token: write | |
# Trigger on published releases. This handles the tag logic correctly. | |
if: github.event_name == 'release' && github.event.action == 'published' | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
# unpacks all CIBW artifacts into dist/ | |
pattern: cibw-* | |
path: dist | |
merge-multiple: true | |
# Extract the tag name and check it. | |
- name: Get tag name | |
id: get_tag | |
run: | | |
TAG_NAME=$(echo ${{ github.ref }} | sed 's#refs/tags/##') | |
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT | |
- name: Check tag format. | |
if: ${{ steps.get_tag.outputs.tag_name != '' }} | |
run: | | |
if [[ ! ${{ steps.get_tag.outputs.tag_name }} =~ ^v?[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+|rc[0-9]+)?(\+[a-zA-Z0-9]+)?$ ]]; then | |
echo "Invalid tag format: ${{ steps.get_tag.outputs.tag_name }}" | |
exit 1 | |
fi | |
echo "Tag format is valid." | |
- name: Publish to PyPI | |
if: ${{ steps.get_tag.outputs.tag_name != '' }} # Ensure tag was extracted | |
uses: pypa/gh-action-pypi-publish@release/v1 |