X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/c940f75d5b646777427aef1beb18a0d2c391f5e2..1b08cbc63400a8b8e0fbb620b6b2a4dab35e1e7b:/.github/workflows/pypi_upload.yml?ds=sidebyside diff --git a/.github/workflows/pypi_upload.yml b/.github/workflows/pypi_upload.yml index ef524a8..41ab646 100644 --- a/.github/workflows/pypi_upload.yml +++ b/.github/workflows/pypi_upload.yml @@ -1,22 +1,29 @@ -name: pypi_upload +name: Build and publish on: release: types: [published] + pull_request: + push: + branches: + - main permissions: contents: read jobs: - build: - name: PyPI Upload + main: + name: sdist + pure wheel runs-on: ubuntu-latest + if: github.event_name == 'release' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v3 + - name: Set up latest Python + uses: actions/setup-python@v4 + with: + python-version: "*" - name: Install latest pip, build, twine run: | @@ -24,11 +31,96 @@ jobs: 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: | - python -m build + { + 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 - - name: Upload to PyPI via Twine + 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.1 + 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: | - twine upload --verbose -u '__token__' dist/* + git reset --hard ${{ github.event.release.tag_name }} + git push