| name: build and publish |
| |
| on: |
| release: |
| types: published |
| pull_request: |
| push: |
| branches: main |
| |
| permissions: {} |
| |
| env: |
| PROJECT: https://pypi.org/p/black |
| |
| jobs: |
| configure: |
| name: generate wheels matrix |
| runs-on: ubuntu-latest |
| outputs: |
| include: ${{ steps.set-matrix.outputs.include }} |
| steps: |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 |
| with: |
| persist-credentials: false |
| |
| - name: Set up Python |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 |
| with: |
| python-version: "3.14" |
| pip-version: "25.3" |
| pip-install: --group cibw |
| |
| - name: generate matrix |
| if: | |
| github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'ci: build all wheels') |
| 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"})' \ |
| && cibuildwheel --print-build-identifiers --platform windows --archs ARM64 \ |
| | pyp 'json.dumps({"only": x, "os": "windows-11-arm"})' |
| } | 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' && !contains(github.event.pull_request.labels.*.name, 'ci: build all wheels') |
| run: | |
| { |
| CIBW_BUILD="cp310-*" cibuildwheel --print-build-identifiers --platform linux | pyp 'json.dumps({"only": x, "os": "ubuntu-latest"})' |
| CIBW_BUILD="cp314-*" 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 |
| |
| - id: set-matrix |
| run: echo "include=$(cat /tmp/matrix)" | tee -a $GITHUB_OUTPUT |
| |
| mypyc: |
| name: mypyc wheels ${{ matrix.only }} |
| needs: configure |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| include: ${{ fromJson(needs.configure.outputs.include) }} |
| |
| steps: |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 |
| with: |
| persist-credentials: false |
| |
| - name: Set up Python |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 |
| with: |
| python-version: "3.14" |
| pip-version: "25.3" |
| pip-install: --group cibw |
| |
| - name: Run cibuildwheel |
| run: cibuildwheel . --only ${{ matrix.only }} |
| |
| - name: Upload wheels as workflow artifacts |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 |
| with: |
| name: ${{ matrix.only }}-mypyc-wheels |
| path: wheelhouse/ |
| |
| hatch: |
| name: sdist + pure wheel |
| runs-on: ubuntu-latest |
| |
| steps: |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 |
| with: |
| persist-credentials: false |
| |
| - name: Set up Python |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 |
| with: |
| python-version: "3.14" |
| pip-version: "25.3" |
| pip-install: --group hatch |
| |
| - name: Build wheel and source distributions |
| run: python -m hatch build |
| |
| - name: Store the distribution packages |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 |
| with: |
| name: sdist-and-pure-wheel |
| path: dist/ |
| |
| publish-mypyc: |
| if: github.event_name == 'release' |
| needs: mypyc |
| runs-on: ubuntu-latest |
| environment: |
| name: release |
| url: ${{ env.PROJECT }} |
| permissions: |
| id-token: write # Required for PyPI trusted publishing |
| steps: |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 |
| with: |
| pattern: "*-mypyc-wheels" |
| path: wheelhouse/ |
| merge-multiple: true |
| |
| - name: Publish package distributions to PyPI |
| uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 |
| with: |
| packages-dir: wheelhouse/ |
| verbose: true |
| |
| publish-hatch: |
| if: github.event_name == 'release' |
| needs: hatch |
| runs-on: ubuntu-latest |
| environment: |
| name: release |
| url: ${{ env.PROJECT }} |
| permissions: |
| id-token: write # Required for PyPI trusted publishing |
| steps: |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 |
| with: |
| name: sdist-and-pure-wheel |
| path: dist/ |
| |
| - name: Publish package distributions to PyPI |
| uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 |
| with: |
| verbose: true |