diff --git a/.github/workflows/python-publish-release.yml b/.github/workflows/python-publish-release.yml new file mode 100644 index 0000000000..0007bd5b2d --- /dev/null +++ b/.github/workflows/python-publish-release.yml @@ -0,0 +1,82 @@ +name: RELEASE BUILD - PyPI 📦 Distribution + +on: [release, workflow_dispatch] + +jobs: + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + steps: + - uses: actions/checkout@v4 + + - name: Set up MSVC x64 + if: matrix.os == 'windows-latest' + uses: ilammy/msvc-dev-cmd@v1 + + - name: Set up QEMU + if: runner.os == 'Linux' + uses: docker/setup-qemu-action@v2 + with: + platforms: all + + - name: Build wheels + uses: pypa/cibuildwheel@v2.16.5 + env: + CIBW_ARCHS_MACOS: "x86_64 universal2 arm64" + CIBW_ARCHS_LINUX: "x86_64 i686 aarch64" # ppc64le s390x really slow + CIBW_ARCHS_WINDOWS: "AMD64 x86" # ARM64 Seems ARM64 will rebuild amd64 wheel for unknow reason. + CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-* cp312-*" + CIBW_SKIP: "" + with: + package-dir: bindings/python + + - uses: actions/upload-artifact@v4 + with: + path: ./wheelhouse/*.whl + + make_sdist: + name: Make SDist + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # Optional, use if you use setuptools_scm + submodules: true # Optional, use if you have submodules + + - name: Build SDist + run: | + cd bindings/python + pipx run build --sdist + + - uses: actions/upload-artifact@v4 + with: + path: bindings/python/dist/*.tar.gz + + publish: + needs: [build_wheels] + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags') + permissions: + id-token: write + steps: + - uses: actions/download-artifact@v4 + with: + name: artifact + path: dist + + # - name: Publish distribution 📦 to test PyPI + # uses: pypa/gh-action-pypi-publish@release/v1 + # with: + # user: __token__ + # password: ${{ secrets.test_pypi_pass }} + # repository_url: https://test.pypi.org/legacy/ + + - name: Publish distribution 📦 to PyPI + if: ${{ success() }} + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.pypi_pass }}