On demand create message meta class for upb python #3422
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Python Tests | |
on: | |
push: | |
branches: | |
- main | |
- '[0-9]+.x' | |
pull_request: | |
branches: | |
- main | |
- '[0-9]+.x' | |
workflow_dispatch: | |
jobs: | |
build_wheels: | |
name: Build Wheels | |
runs-on: ubuntu-large | |
if: ${{ github.event.pull_request.head.repo.full_name == 'protocolbuffers/upb' }} | |
env: | |
DOCKER_IMAGE: us-docker.pkg.dev/protobuf-build/release-containers/linux@sha256:51eed1ced211cdcb3cae7733dbc7f2b28e195dfe0bbfb596794e52de4402fe1b | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set up Cloud SDK | |
uses: google-github-actions/auth@v0 | |
with: | |
credentials_json: ${{ secrets.GOOGLE_CREDENTIALS }} | |
export_environment_variables: true | |
- name: Use gcloud CLI | |
run: gcloud info | |
- name: Configure Docker | |
run: gcloud auth configure-docker -q us-docker.pkg.dev | |
- name: Pull Docker Image | |
run: docker pull $DOCKER_IMAGE | |
- id: bazel-cache | |
name: Set up Bazel caching | |
uses: ./.github/actions/setup-bazel-cache | |
- name: Build Wheels | |
run: cd ${{ github.workspace }} && docker run -e GOOGLE_APPLICATION_CREDENTIALS=/workspace/$(basename $GOOGLE_APPLICATION_CREDENTIALS) -v$PWD:/workspace $DOCKER_IMAGE build $BAZEL_CACHE --crosstool_top=@com_google_protobuf//toolchain:clang_suite --symlink_prefix=/ -c dbg python/dist ${{ steps.bazel-cache.outputs.cache_args }} python/dist:test_wheel python/dist:source_wheel | |
- name: Move Wheels | |
run: mkdir wheels && find _build/out \( -name 'protobuf*.whl' -o -name 'protobuf*.tar.gz' \) -exec mv '{}' wheels ';' | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: python-wheels | |
path: wheels/ | |
test_wheels: | |
name: Test Wheels | |
needs: build_wheels | |
strategy: | |
fail-fast: false # Don't cancel all jobs if one fails. | |
matrix: | |
include: | |
# Linux and Mac use the limited API, so all Python versions will use a single wheel. | |
# As a result we can just test the oldest and newest supported Python versions and assume | |
# this gives us sufficient test coverage. | |
- { os: ubuntu-18-large, python-version: "3.7", architecture: x64, type: 'binary' } | |
- { os: macos-11, python-version: "3.7", architecture: x64, type: 'binary' } | |
- { os: ubuntu-20-large, python-version: "3.10", architecture: x64, type: 'binary' } | |
- { os: macos-12, python-version: "3.10", architecture: x64, type: 'binary' } | |
- { os: ubuntu-18-large, python-version: "3.7", architecture: x64, type: 'source' } | |
- { os: macos-11, python-version: "3.7", architecture: x64, type: 'source' } | |
- { os: ubuntu-20-large, python-version: "3.10", architecture: x64, type: 'source' } | |
- { os: macos-12, python-version: "3.10", architecture: x64, type: 'source' } | |
# Windows uses the full API up until Python 3.10, so each of these | |
# jobs tests a distinct binary wheel. | |
- { os: windows-2019-large, python-version: "3.7", architecture: x86, type: 'binary' } | |
- { os: windows-2019-large, python-version: "3.8", architecture: x86, type: 'binary' } | |
- { os: windows-2019-large, python-version: "3.9", architecture: x86, type: 'binary' } | |
- { os: windows-2019-large, python-version: "3.10", architecture: x86, type: 'binary' } | |
- { os: windows-2019-large, python-version: "3.7", architecture: x64, type: 'binary' } | |
- { os: windows-2019-large, python-version: "3.8", architecture: x64, type: 'binary' } | |
- { os: windows-2019-large, python-version: "3.9", architecture: x64, type: 'binary' } | |
- { os: windows-2019-large, python-version: "3.10", architecture: x64, type: 'binary' } | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Download Wheels | |
uses: actions/download-artifact@v3 | |
with: | |
name: python-wheels | |
path: wheels | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: ${{ matrix.architecture }} | |
- name: Setup Python venv | |
run: | | |
python -m pip install --upgrade pip | |
python -m venv env | |
# Windows uses 'Scripts' instead of 'bin' | |
source env/bin/activate || source env/Scripts/activate | |
echo "VIRTUAL ENV:" $VIRTUAL_ENV | |
- name: Install tzdata | |
run: pip install tzdata | |
# Only needed on Windows, Linux ships with tzdata. | |
if: ${{ contains(matrix.os, 'windows') }} | |
- name: Install numpy | |
run: pip install numpy | |
- name: Install Protobuf Binary Wheel | |
run: pip install -vvv --no-index --find-links wheels protobuf | |
if: ${{ matrix.type == 'binary' }} | |
- name: Install Protobuf Source Wheel | |
run: | | |
cd wheels | |
tar -xzvf *.tar.gz | |
cd protobuf-*/ | |
pip install . | |
if: ${{ matrix.type == 'source' }} | |
- name: Test that module is importable | |
run: python -v -c 'from google._upb import _message; assert "google._upb._message.MessageMeta" in str(_message.MessageMeta)' | |
if: ${{ !matrix.pure_python }} | |
- name: Install Protobuf Test Wheel | |
run: pip install -vvv --no-index --find-links wheels protobuftests | |
- name: Run the unit tests | |
run: | | |
TESTS=$(pip show -f protobuftests | grep pb_unit_tests.*py$ | sed 's,/,.,g' | sed 's,\\,.,g' | sed -E 's,.py$,,g') | |
for test in $TESTS; do | |
python -m unittest -v $test | |
done | |
test_pure_python_wheels: | |
name: Test Pure Python Wheels | |
needs: build_wheels | |
strategy: | |
fail-fast: false # Don't cancel all jobs if one fails. | |
matrix: | |
python-version: ["3.7", "3.10"] | |
runs-on: ubuntu-large | |
steps: | |
- name: Download Wheels | |
uses: actions/download-artifact@v3 | |
with: | |
name: python-wheels | |
path: wheels | |
- name: Delete Binary Wheels | |
run: find wheels -type f | grep -v none-any | xargs rm | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Setup Python venv | |
run: | | |
python -m pip install --upgrade pip | |
python -m venv env | |
source env/bin/activate | |
echo "VIRTUAL ENV:" $VIRTUAL_ENV | |
- name: Install numpy | |
run: pip install numpy | |
- name: Install Protobuf Wheels | |
run: pip install -vvv --no-index --find-links wheels protobuf protobuftests | |
- name: Run the unit tests | |
run: | | |
TESTS=$(pip show -f protobuftests | grep _test.py | sed 's,/,.,g' | sed -E 's,.py$,,g') | |
for test in $TESTS; do | |
python -m unittest -v $test | |
done |