+++ /dev/null
-name: Build and publish
-
-on:
- release:
- types: [published]
- pull_request:
- push:
- branches:
- - main
-
-permissions:
- contents: read
-
-jobs:
- main:
- name: sdist + pure wheel
- runs-on: ubuntu-latest
- if: github.event_name == 'release'
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Set up latest Python
- uses: actions/setup-python@v4
- with:
- python-version: "*"
-
- - name: Install latest pip, build, twine
- run: |
- python -m pip install --upgrade --disable-pip-version-check pip
- python -m pip install --upgrade build twine
-
- - 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/*
-
- generate_wheels_matrix:
- name: generate wheels matrix
- runs-on: ubuntu-latest
- outputs:
- include: ${{ steps.set-matrix.outputs.include }}
- steps:
- - uses: actions/checkout@v4
- - name: Install cibuildwheel and pypyp
- run: |
- pipx install cibuildwheel==2.15.0
- pipx install pypyp==1
- - name: generate matrix
- if: github.event_name != 'pull_request'
- run: |
- {
- cibuildwheel --print-build-identifiers --platform linux \
- | pyp 'json.dumps({"only": x, "os": "ubuntu-latest"})' \
- && cibuildwheel --print-build-identifiers --platform macos \
- | pyp 'json.dumps({"only": x, "os": "macos-latest"})' \
- && cibuildwheel --print-build-identifiers --platform windows \
- | pyp 'json.dumps({"only": x, "os": "windows-latest"})'
- } | pyp 'json.dumps(list(map(json.loads, lines)))' > /tmp/matrix
- env:
- CIBW_ARCHS_LINUX: x86_64
- CIBW_ARCHS_MACOS: x86_64 arm64
- CIBW_ARCHS_WINDOWS: AMD64
- - name: generate matrix (PR)
- if: github.event_name == 'pull_request'
- run: |
- cibuildwheel --print-build-identifiers --platform linux \
- | pyp 'json.dumps({"only": x, "os": "ubuntu-latest"})' \
- | pyp 'json.dumps(list(map(json.loads, lines)))' > /tmp/matrix
- env:
- CIBW_BUILD: "cp38-* cp311-*"
- CIBW_ARCHS_LINUX: x86_64
- - id: set-matrix
- run: echo "include=$(cat /tmp/matrix)" | tee -a $GITHUB_OUTPUT
-
- mypyc:
- name: mypyc wheels ${{ matrix.only }}
- needs: generate_wheels_matrix
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- include: ${{ fromJson(needs.generate_wheels_matrix.outputs.include) }}
-
- steps:
- - uses: actions/checkout@v4
- - uses: pypa/cibuildwheel@v2.16.2
- with:
- only: ${{ matrix.only }}
-
- - 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
- if: github.event_name == 'release'
- 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: |
- git reset --hard ${{ github.event.release.tag_name }}
- git push