-name: pypi_upload
+name: Build wheels and publish to PyPI
on:
release:
- types: created
+ types: [published]
+ pull_request:
+
+permissions:
+ contents: read
jobs:
- build:
- name: PyPI Upload
+ main:
+ name: sdist + pure wheel
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v4
- - name: Set up Python
- uses: actions/setup-python@v2
+ - name: Set up latest Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "*"
- - name: Install latest pip, setuptools, twine + wheel
+ - name: Install latest pip, build, twine
run: |
- python -m pip install --upgrade pip setuptools twine wheel
+ python -m pip install --upgrade --disable-pip-version-check pip
+ python -m pip install --upgrade build twine
- - name: Build wheels
- run: |
- python setup.py bdist_wheel
- python setup.py sdist
+ - name: Build wheel and source distributions
+ run: python -m build
+
+ - if: github.event_name == 'release'
+ name: Upload to PyPI via Twine
+ env:
+ TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
+ run: twine upload --verbose -u '__token__' dist/*
+
+ mypyc:
+ name: mypyc wheels (${{ matrix.name }})
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - os: ubuntu-latest
+ name: linux-x86_64
+ - os: windows-2019
+ name: windows-amd64
+ - os: macos-11
+ name: macos-x86_64
+ macos_arch: "x86_64"
+ - os: macos-11
+ name: macos-arm64
+ macos_arch: "arm64"
+ - os: macos-11
+ name: macos-universal2
+ macos_arch: "universal2"
+
+ steps:
+ - uses: actions/checkout@v4
- - name: Upload to PyPI via Twine
+ - name: Build wheels via cibuildwheel
+ uses: pypa/cibuildwheel@v2.15.0
+ env:
+ CIBW_ARCHS_MACOS: "${{ matrix.macos_arch }}"
+
+ - name: Upload wheels as workflow artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ matrix.name }}-mypyc-wheels
+ path: ./wheelhouse/*.whl
+
+ - if: github.event_name == 'release'
+ name: Upload wheels to PyPI via Twine
env:
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
+ run: pipx run twine upload --verbose -u '__token__' wheelhouse/*.whl
+
+ update-stable-branch:
+ name: Update stable branch
+ needs: [main, mypyc]
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+
+ steps:
+ - name: Checkout stable branch
+ uses: actions/checkout@v4
+ with:
+ ref: stable
+ fetch-depth: 0
+
+ - if: github.event_name == 'release'
+ name: Update stable branch to release tag & push
run: |
- twine upload --verbose -u '__token__' dist/*
+ git reset --hard ${{ github.event.release.tag_name }}
+ git push