|
3 | 3 | RED="\033[0;31m" |
4 | 4 | NC='\033[0m' |
5 | 5 |
|
6 | | -PY_VER_MYPY_PROTOBUF=${PY_VER_MYPY_PROTOBUF:=3.11.4} |
| 6 | +PY_VER_MYPY_PROTOBUF=${PY_VER_MYPY_PROTOBUF:=3.14.0} |
7 | 7 | PY_VER_MYPY_PROTOBUF_SHORT=$(echo "$PY_VER_MYPY_PROTOBUF" | cut -d. -f1-2) |
8 | | -PY_VER_MYPY=${PY_VER_MYPY:=3.8.17} |
9 | | -PY_VER_UNIT_TESTS="${PY_VER_UNIT_TESTS:=3.8.17 3.13.9 3.14.0}" |
| 8 | +PY_VER_MYPY=${PY_VER_MYPY:=3.14.0} |
| 9 | +PY_VER_UNIT_TESTS="${PY_VER_UNIT_TESTS:=3.9.17 3.10.12 3.11.4 3.12.12 3.13.9 3.14.0}" |
| 10 | +PYTHON_PROTOBUF_VERSION=${PYTHON_PROTOBUF_VERSION:=5.28.3} |
10 | 11 |
|
| 12 | +# Confirm UV installed |
| 13 | +if ! command -v uv &> /dev/null; then |
| 14 | + echo -e "${RED}uv could not be found, please install uv (https://docs.astral.sh/uv/getting-started/installation/)${NC}" |
| 15 | + exit 1 |
| 16 | +fi |
11 | 17 |
|
12 | 18 |
|
13 | 19 | if [ -e "$CUSTOM_TYPESHED_DIR" ]; then |
|
19 | 25 | fi |
20 | 26 |
|
21 | 27 | # Install protoc |
22 | | -PYTHON_PROTOBUF_VERSION=$(grep "^protobuf==" test_requirements.txt | cut -f3 -d=) |
23 | 28 | PROTOBUF_VERSION=$(echo "$PYTHON_PROTOBUF_VERSION" | cut -f2-3 -d.) |
24 | 29 | PROTOC_DIR="protoc_$PROTOBUF_VERSION" |
25 | 30 | if [[ -z $SKIP_CLEAN ]] || [[ ! -e $PROTOC_DIR ]]; then |
@@ -49,32 +54,25 @@ PROTOC_ARGS=( --proto_path=proto/ --proto_path="$PROTOC_DIR/protoc_install/inclu |
49 | 54 | # Create mypy venv |
50 | 55 | MYPY_VENV=venv_$PY_VER_MYPY |
51 | 56 | ( |
52 | | - eval "$(pyenv init --path)" |
53 | | - eval "$(pyenv init -)" |
54 | | - pyenv shell "$PY_VER_MYPY" |
55 | | - |
56 | 57 | if [[ -z $SKIP_CLEAN ]] || [[ ! -e $MYPY_VENV ]]; then |
57 | | - python3 --version |
58 | | - python3 -m pip --version |
59 | | - python -m pip install virtualenv |
60 | | - python3 -m virtualenv "$MYPY_VENV" |
61 | | - "$MYPY_VENV"/bin/python3 -m pip install -r mypy_requirements.txt |
| 58 | + echo "Creating mypy venv for Python $PY_VER_MYPY" |
| 59 | + uv venv -p "$PY_VER_MYPY" "$MYPY_VENV" --allow-existing |
| 60 | + uv pip install -p "$MYPY_VENV" -r mypy_requirements.txt |
62 | 61 | fi |
| 62 | + echo "Running mypy version:" |
63 | 63 | "$MYPY_VENV"/bin/mypy --version |
64 | 64 | ) |
65 | 65 |
|
66 | 66 | # Create unit tests venvs |
67 | 67 | for PY_VER in $PY_VER_UNIT_TESTS; do |
68 | 68 | ( |
69 | 69 | UNIT_TESTS_VENV=venv_$PY_VER |
70 | | - eval "$(pyenv init --path)" |
71 | | - eval "$(pyenv init -)" |
72 | | - pyenv shell "$PY_VER" |
73 | 70 |
|
74 | 71 | if [[ -z $SKIP_CLEAN ]] || [[ ! -e $UNIT_TESTS_VENV ]]; then |
75 | | - python -m pip install virtualenv |
76 | | - python -m virtualenv "$UNIT_TESTS_VENV" |
77 | | - "$UNIT_TESTS_VENV"/bin/python -m pip install -r test_requirements.txt |
| 72 | + uv venv -p "$PY_VER" "$UNIT_TESTS_VENV" --allow-existing |
| 73 | + uv pip install -p "$UNIT_TESTS_VENV" -r test_requirements.txt |
| 74 | + # Install protobuf version override |
| 75 | + uv pip install -p "$UNIT_TESTS_VENV" "protobuf==$PYTHON_PROTOBUF_VERSION" |
78 | 76 | fi |
79 | 77 | "$UNIT_TESTS_VENV"/bin/py.test --version |
80 | 78 | ) |
|
83 | 81 | # Create mypy-protobuf venv |
84 | 82 | MYPY_PROTOBUF_VENV=venv_$PY_VER_MYPY_PROTOBUF |
85 | 83 | ( |
86 | | - eval "$(pyenv init --path)" |
87 | | - eval "$(pyenv init -)" |
88 | | - pyenv shell "$PY_VER_MYPY_PROTOBUF" |
89 | | - |
90 | 84 | # Create virtualenv + Install requirements for mypy-protobuf |
91 | 85 | if [[ -z $SKIP_CLEAN ]] || [[ ! -e $MYPY_PROTOBUF_VENV ]]; then |
92 | | - python -m pip install virtualenv |
93 | | - python -m virtualenv "$MYPY_PROTOBUF_VENV" |
94 | | - "$MYPY_PROTOBUF_VENV"/bin/python -m pip install -e . |
| 86 | + uv venv -p "$PY_VER_MYPY_PROTOBUF" "$MYPY_PROTOBUF_VENV" --allow-existing |
| 87 | + uv pip install -p "$MYPY_PROTOBUF_VENV" -e . |
95 | 88 | fi |
96 | 89 | ) |
97 | 90 |
|
@@ -163,10 +156,17 @@ for PY_VER in $PY_VER_UNIT_TESTS; do |
163 | 156 | mypy ${CUSTOM_TYPESHED_DIR_ARG:+"$CUSTOM_TYPESHED_DIR_ARG"} --python-executable="$UNIT_TESTS_VENV"/bin/python --python-version="$PY_VER_MYPY_TARGET" "${MODULES[@]}" |
164 | 157 |
|
165 | 158 | # Run stubtest. Stubtest does not work with python impl - only cpp impl |
166 | | - pip install -r test_requirements.txt |
| 159 | + uv pip install -p "$MYPY_VENV" -r test_requirements.txt |
| 160 | + # Override python protobuf version |
| 161 | + uv pip install -p "$MYPY_VENV" "protobuf==$PYTHON_PROTOBUF_VERSION" |
167 | 162 | API_IMPL="$(python3 -c "import google.protobuf.internal.api_implementation as a ; print(a.Type())")" |
168 | 163 | if [[ $API_IMPL != "python" ]]; then |
169 | | - PYTHONPATH=test/generated python3 -m mypy.stubtest ${CUSTOM_TYPESHED_DIR_ARG:+"$CUSTOM_TYPESHED_DIR_ARG"} --allowlist stubtest_allowlist.txt testproto |
| 164 | + # Skip stubtest for python version 3.13+ until positional argument decision is made |
| 165 | + if [[ "$PY_VER_MYPY" == "3.13.9" ]] || [[ "$PY_VER_MYPY" == "3.14.0" ]]; then |
| 166 | + echo "Skipping stubtest for Python $PY_VER_MYPY until positional argument decision is made" |
| 167 | + else |
| 168 | + PYTHONPATH=test/generated python3 -m mypy.stubtest ${CUSTOM_TYPESHED_DIR_ARG:+"$CUSTOM_TYPESHED_DIR_ARG"} --allowlist stubtest_allowlist.txt testproto |
| 169 | + fi |
170 | 170 | fi |
171 | 171 |
|
172 | 172 | # run mypy on negative-tests (expected mypy failures) |
|
0 commit comments