From 43855b6b9b9abfbf7549c48fce4315ef9bc35299 Mon Sep 17 00:00:00 2001 From: Chayim Date: Sun, 17 Dec 2023 12:53:57 +0200 Subject: [PATCH] Builder for wheels (#179) * labeled builder for wheels * fix --- .github/workflows/REUSABLE-wheeler.yaml | 109 ++++++++++++++++++++++ .github/workflows/pypi-publish.yaml | 99 ++------------------ .github/workflows/wheelbuild-labeled.yaml | 18 ++++ 3 files changed, 133 insertions(+), 93 deletions(-) create mode 100644 .github/workflows/REUSABLE-wheeler.yaml create mode 100644 .github/workflows/wheelbuild-labeled.yaml diff --git a/.github/workflows/REUSABLE-wheeler.yaml b/.github/workflows/REUSABLE-wheeler.yaml new file mode 100644 index 0000000..4d51278 --- /dev/null +++ b/.github/workflows/REUSABLE-wheeler.yaml @@ -0,0 +1,109 @@ +name: Wheel builder + +on: + + workflow_call: + + inputs: + release: + required: false + type: boolean + default: false + + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-20.04, windows-2019, macos-latest] + env: + CIBW_ARCHS_MACOS: "x86_64 universal2 arm64" + MACOSX_DEPLOYMENT_TARGET: "10.15" + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - 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.2 + env: + # configure cibuildwheel to build native archs ('auto'), and some + # emulated ones + CIBW_ARCHS_LINUX: auto aarch64 ppc64le s390x + + - uses: actions/upload-artifact@v3 + with: + name: ${{matrix.os}}-wheels + path: ./wheelhouse/*.whl + + build_sdist: + name: Build source dist + runs-on: ubuntu-20.04 + steps: + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Build sdist + run: | + python3 setup.py sdist + - uses: actions/upload-artifact@v3 + with: + name: source-dist + path: ./dist/*.tar.gz + + publish: + name: Pypi publish + if: ${{inputs.release == true}} + # needs: ['build_wheels', 'build_sdist'] + needs: ['build_wheels', 'build_sdist'] + runs-on: ubuntu-latest + steps: + - uses: actions/setup-python@v4 + with: + python-version: 3.9 + - name: Install tools + run: | + pip install twine wheel + - uses: actions/download-artifact@v3 + with: + name: ubuntu-20.04-wheels + path: artifacts/linux + - uses: actions/download-artifact@v3 + with: + name: windows-2019-wheels + path: artifacts/windows + - uses: actions/download-artifact@v3 + with: + name: macos-10.15-wheels + path: artifacts/macos + - uses: actions/download-artifact@v3 + with: + name: source-dist + path: artifacts/sdist + - name: unify wheel structure + run: | + mkdir dist + cp -R artifacts/windows/* dist + cp -R artifacts/linux/* dist + cp -R artifacts/macos/* dist + cp -R artifacts/sdist/* dist + - name: Publish to Pypi + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/pypi-publish.yaml b/.github/workflows/pypi-publish.yaml index bc032de..d072021 100644 --- a/.github/workflows/pypi-publish.yaml +++ b/.github/workflows/pypi-publish.yaml @@ -1,104 +1,17 @@ name: Publish tag to Pypi - on: workflow_dispatch: - push: tags: - 'v[0-9]+.[0-9]+.[0-9]+' - permissions: contents: read # to fetch code (actions/checkout) -jobs: - - build_wheels: - name: Build wheels on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04, windows-2019, macos-10.15] - env: - CIBW_ARCHS_MACOS: "x86_64 universal2 arm64" - MACOSX_DEPLOYMENT_TARGET: "10.12" - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - 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.2 - env: - # configure cibuildwheel to build native archs ('auto'), and some - # emulated ones - CIBW_ARCHS_LINUX: auto aarch64 ppc64le s390x - - - uses: actions/upload-artifact@v3 - with: - name: ${{matrix.os}}-wheels - path: ./wheelhouse/*.whl - - build_sdist: - name: Build source dist - runs-on: ubuntu-20.04 - steps: - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - uses: actions/checkout@v3 - with: - submodules: recursive - - name: Build sdist - run: | - python3 setup.py sdist - - uses: actions/upload-artifact@v3 - with: - name: source-dist - path: ./dist/*.tar.gz - - publish: - name: Pypi publish - needs: ['build_wheels', 'build_sdist'] - runs-on: ubuntu-latest - steps: - - uses: actions/setup-python@v4 - with: - python-version: 3.9 - - name: Install tools - run: | - pip install twine wheel - - uses: actions/download-artifact@v3 - with: - name: ubuntu-20.04-wheels - path: artifacts/linux - - uses: actions/download-artifact@v3 - with: - name: windows-2019-wheels - path: artifacts/windows - - uses: actions/download-artifact@v3 - with: - name: macos-10.15-wheels - path: artifacts/macos - - uses: actions/download-artifact@v3 - with: - name: source-dist - path: artifacts/sdist - - name: unify wheel structure - run: | - mkdir dist - cp -R artifacts/windows/* dist - cp -R artifacts/linux/* dist - cp -R artifacts/macos/* dist - cp -R artifacts/sdist/* dist +jobs: - - name: Publish to Pypi - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} + release: + uses: ./.github/workflows/REUSABLE-wheeler.yaml + with: + release: true + secrets: inherit diff --git a/.github/workflows/wheelbuild-labeled.yaml b/.github/workflows/wheelbuild-labeled.yaml new file mode 100644 index 0000000..b22748e --- /dev/null +++ b/.github/workflows/wheelbuild-labeled.yaml @@ -0,0 +1,18 @@ +name: Wheel builder + +on: + pull_request: + types: + - labeled + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + + wheelbuilder: + uses: ./.github/workflows/REUSABLE-wheeler.yaml + if: github.event.label.name == 'test-wheels' + with: + release: false + secrets: inherit