diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml new file mode 100644 index 0000000..efc166c --- /dev/null +++ b/.github/workflows/wheels.yml @@ -0,0 +1,85 @@ +name: Build Wheels & Publish to PyPI + +on: + pull_request: + workflow_dispatch: + release: + types: [published] + +env: + USE_BAZEL_VERSION: "7.6.1" + + +jobs: + build: + name: > + build ${{ matrix.python-version }} on ${{ matrix.platform || matrix.os }} + ${{ (matrix.arch) || '' }} + strategy: + # fail-fast: true + matrix: + os: [ubuntu] + python-version: ['3.9', '3.10', '3.11', '3.12'] + + + runs-on: ${{ format('{0}-latest', matrix.os) }} + steps: + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Set up python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install python build dependencies + run: | + python -m pip install --upgrade pip build + + - name: Build wheels + run: | + python -m build --wheel --sdist + mkdir wheelhouse + mv dist/* wheelhouse/ + + - name: List and check wheels + run: | + pip install twine pkginfo>=1.11.0 + ${{ matrix.ls || 'ls -lh' }} wheelhouse/ + twine check wheelhouse/* + + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: build-${{ matrix.python-version }}-${{ matrix.os }} + path: ./wheelhouse/* + + upload_to_pypi: + name: Upload to PyPI + runs-on: ubuntu-latest + if: (github.event_name == 'release' && startsWith(github.ref, 'refs/tags')) || (github.event_name == 'workflow_dispatch') + needs: [build] + environment: + name: pypi + url: https://pypi.org/p/tensorflow-metadata + permissions: + id-token: write + steps: + - name: Retrieve wheels and sdist + uses: actions/download-artifact@v4 + with: + merge-multiple: true + path: wheels/ + + - name: List the build artifacts + run: | + ls -lAs wheels/ + + - name: Upload to PyPI + uses: pypa/gh-action-pypi-publish@release/v1.12 + with: + packages-dir: wheels/ + repository-url: https://pypi.org/legacy/ + # already checked, and the pkginfo/twine versions on this runner causes check to fail + verify-metadata: false + verbose: true