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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - name: Set up Python uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - name: Set up Python uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - name: Set up Python uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.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