blob: e6f45ac58047c7f57e149302858660a452444822 [file] [log] [blame]
name: Python
on:
workflow_dispatch:
inputs:
build:
required: true
type: number
permissions:
contents: read
jobs:
wheel-linux:
name: Linux ${{ matrix.os }}, ${{ matrix.arch.name }}, Python ${{ matrix.ver }}
runs-on: ${{ matrix.arch.runs-on }}
container:
image: quay.io/pypa/${{ matrix.os }}_${{ matrix.arch.python-name }}
# Don't run as root within the container.
# Neither Git nor Bazel appreciates that.
# 1001 is the GitHub Actions runner user.
options: --init --user 1001
strategy:
fail-fast: false
matrix:
arch:
- { name: X64, python-name: x86_64, runs-on: [ubuntu-latest] }
- { name: ARM64, python-name: aarch64, runs-on: [self-hosted, linux, arm64] }
os: [manylinux_2_28]
ver: ['3.8', '3.9', '3.10', '3.11', '3.12']
env:
BAZELISK_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PYTHON: /usr/local/bin/python${{ matrix.ver }}
# Bazel fails if the username is unknown.
USER: runner
steps:
- uses: actions/checkout@v4
# Stash the timestamp for the commit SHA that triggered the workflow.
- run: echo "timestamp=$(git log -1 --pretty=%ct)" >> "${GITHUB_ENV}"
shell: bash
# TODO(junyer): Use `v2` whenever a new release is tagged.
- uses: bazelbuild/setup-bazelisk@6244971d4f7ba9aca943c2f3ede2bbd813fcca51
- name: Prepare Python ${{ matrix.ver }} environment
run: |
"${PYTHON}" -m pip install --upgrade pip
"${PYTHON}" -m pip install --upgrade build wheel auditwheel
"${PYTHON}" -m pip install --upgrade absl-py
shell: bash
- name: Build wheel
env:
SOURCE_DATE_EPOCH: ${{ env.timestamp }}
run: |
"${PYTHON}" -m build --wheel
"${PYTHON}" -m auditwheel repair --wheel-dir=. dist/*
shell: bash
working-directory: python
- name: Test wheel
run: |
"${PYTHON}" -m pip install google_re2-*.whl
"${PYTHON}" re2_test.py
shell: bash
working-directory: python
- uses: actions/upload-artifact@v4
with:
name: ${{ hashFiles('python/google_re2-*.whl') }}
path: python/google_re2-*.whl
retention-days: 1
wheel-macos:
name: macOS ${{ matrix.os }}, ${{ matrix.arch.name }}, Python ${{ matrix.ver }}
runs-on: macos-${{ matrix.os }}
strategy:
fail-fast: false
matrix:
arch:
- { name: X64, bazel-name: x86_64, python-name: x86_64 }
- { name: ARM64, bazel-name: arm64, python-name: arm64 }
# TODO(junyer): Stop cross-compiling after we drop support for macOS 12;
# instead, specify `-large` suffix on X64 and `-xlarge` suffix on ARM64.
os: [12, 13, 14]
ver: ['3.8', '3.9', '3.10', '3.11', '3.12']
env:
BAZELISK_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BAZEL_CPU: darwin_${{ matrix.arch.bazel-name }}
PLAT_NAME: macosx-${{ matrix.os }}.0-${{ matrix.arch.python-name }}
# Stop macOS from reporting the system version as 10.x.
# Otherwise, Python refuses to install the built wheel!
SYSTEM_VERSION_COMPAT: 0
steps:
- uses: actions/checkout@v4
# Stash the timestamp for the commit SHA that triggered the workflow.
- run: echo "timestamp=$(git log -1 --pretty=%ct)" >> "${GITHUB_ENV}"
shell: bash
# TODO(junyer): Use `v2` whenever a new release is tagged.
- uses: bazelbuild/setup-bazelisk@6244971d4f7ba9aca943c2f3ede2bbd813fcca51
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.ver }}
- name: Prepare Python ${{ matrix.ver }} environment
run: |
python -m pip install --upgrade pip
python -m pip install --upgrade build wheel delocate
python -m pip install --upgrade absl-py
shell: bash
- name: Build wheel
env:
SOURCE_DATE_EPOCH: ${{ env.timestamp }}
run: |
python -m build --wheel
python -m delocate.cmd.delocate_wheel --wheel-dir=. dist/*
shell: bash
working-directory: python
- if: matrix.arch.name == runner.arch
name: Test wheel
run: |
python -m pip install google_re2-*.whl
python re2_test.py
shell: bash
working-directory: python
- uses: actions/upload-artifact@v4
with:
name: ${{ hashFiles('python/google_re2-*.whl') }}
path: python/google_re2-*.whl
retention-days: 1
wheel-windows:
name: Windows, ${{ matrix.arch.name }}, Python ${{ matrix.ver }}
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
arch:
- { name: X86, bazel-name: x64_x86, python-name: win32 }
- { name: X64, bazel-name: x64, python-name: win_amd64 }
ver: ['3.8', '3.9', '3.10', '3.11', '3.12']
env:
BAZELISK_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BAZEL_CPU: ${{ matrix.arch.bazel-name }}_windows
PLAT_NAME: ${{ matrix.arch.python-name }}
steps:
- uses: actions/checkout@v4
# Stash the timestamp for the commit SHA that triggered the workflow.
- run: echo "timestamp=$(git log -1 --pretty=%ct)" >> "${GITHUB_ENV}"
shell: bash
# Avoid the Chocolatey install of Bazel getting in the way;
# `bazelbuild/setup-bazelisk` doesn't work for some reason.
- run: |
choco uninstall -y bazel
choco install -y bazelisk
shell: bash
# Lowercase the architecture name for `actions/setup-python`.
- run: |
ARCHITECTURE=${{ matrix.arch.name }}
echo "architecture=${ARCHITECTURE,,}" >> "${GITHUB_ENV}"
shell: bash
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.ver }}
architecture: ${{ env.architecture }}
- name: Prepare Python ${{ matrix.ver }} environment
run: |
python -m pip install --upgrade pip
python -m pip install --upgrade build wheel delvewheel
python -m pip install --upgrade absl-py
shell: bash
- name: Build wheel
env:
SOURCE_DATE_EPOCH: ${{ env.timestamp }}
run: |
python -m build --wheel
python -m delvewheel repair --wheel-dir=. dist/*
shell: bash
working-directory: python
- name: Test wheel
run: |
python -m pip install google_re2-*.whl
python re2_test.py
shell: bash
working-directory: python
- uses: actions/upload-artifact@v4
with:
name: ${{ hashFiles('python/google_re2-*.whl') }}
path: python/google_re2-*.whl
retention-days: 1
publish:
needs:
- wheel-linux
- wheel-macos
- wheel-windows
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Stash the timestamp for the commit SHA that triggered the workflow.
- run: echo "timestamp=$(git log -1 --pretty=%ct)" >> "${GITHUB_ENV}"
shell: bash
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Prepare Python 3.x environment
run: |
python -m pip install --upgrade pip
python -m pip install --upgrade build wheel
shell: bash
- if: inputs.build == 1
name: Build source
env:
SOURCE_DATE_EPOCH: ${{ env.timestamp }}
run: |
python -m build --sdist
shell: bash
working-directory: python
- uses: actions/download-artifact@v4
with:
path: python
- name: Set build number to ${{ inputs.build }}
env:
SOURCE_DATE_EPOCH: ${{ env.timestamp }}
run: |
mkdir -p dist
for WHL in */google_re2-*.whl; do
python -m wheel unpack "${WHL}"
python -m wheel pack --dest-dir=dist --build-number=${{ inputs.build }} google_re2-*
rm -rf google_re2-*
done
shell: bash
working-directory: python
- if: inputs.build >= 1
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}
packages_dir: python/dist