Update github-deploy.yml #19
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] | |
os: [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. This is MUCH more robust. | |
- 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 (Example - adjust regex as needed) | |
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]+)?(\+[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 TestPyPI | |
if: ${{ steps.get_tag.outputs.tag_name != '' }} # Ensure tag was extracted | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
repository-url: https://test.pypi.org/legacy/ |