Install pyright from PyPI (#11575)

This commit is contained in:
Sebastian Rittau
2024-03-16 14:14:31 +01:00
committed by GitHub
parent 0ad1501a99
commit a8997209fb
8 changed files with 32 additions and 30 deletions

13
.github/renovate.json vendored
View File

@@ -7,17 +7,6 @@
"pre-commit": {
"enabled": true
},
"customManagers": [
{
"customType": "regex",
"fileMatch": ["^pyproject.toml$"],
"matchStrings": [
"\\n\\[tool\\.typeshed\\]\\npyright_version\\s*=\\s*(\"|')(?<currentValue>[\\d.]*?)(\"|')\\s*?\\n"
],
"depNameTemplate": "pyright",
"datasourceTemplate": "npm"
}
],
"packageRules": [
{
"groupName": "GitHub Actions",
@@ -36,7 +25,7 @@
},
{
"groupName": "pytype and pyright",
"matchManagers": ["pip_requirements", "regex"],
"matchManagers": ["pip_requirements"],
"matchPackageNames": ["pytype", "pyright"],
"description": "Daily update of pyright and pytype",
"separateMajorMinor": "false",

View File

@@ -57,15 +57,15 @@ jobs:
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
- run: uv pip install -r requirements-tests.txt --system
- name: Get pyright version
uses: SebRollen/toml-action@v1.0.2
id: pyright_version
with:
file: "pyproject.toml"
field: "tool.typeshed.pyright_version"
run: |
PYRIGHT_VERSION=$(grep pyright== requirements-tests.txt | cut -d "#" -f 1 | cut -d \; -f 1 | cut -d = -f 3)
echo pyright version: "${PYRIGHT_VERSION}"
echo PYRIGHT_VERSION="${PYRIGHT_VERSION}" >> "${GITHUB_OUTPUT}"
- name: Run pyright on typeshed
uses: jakebailey/pyright-action@v2
with:
version: ${{ steps.pyright_version.outputs.value }}
version: ${{ steps.pyright_version.outputs.PYRIGHT_VERSION }}
python-platform: ${{ matrix.python-platform }}
python-version: "3.9" # The Python version to test against.
project: ./pyrightconfig.scripts_and_tests.json

View File

@@ -130,22 +130,22 @@ jobs:
- name: List 3rd-party stub dependencies installed
run: uv pip freeze
- name: Get pyright version
uses: SebRollen/toml-action@v1.0.2
id: pyright_version
with:
file: "pyproject.toml"
field: "tool.typeshed.pyright_version"
run: |
PYRIGHT_VERSION=$(grep pyright== requirements-tests.txt | cut -d "#" -f 1 | cut -d \; -f 1 | cut -d = -f 3)
echo pyright version: "${PYRIGHT_VERSION}"
echo PYRIGHT_VERSION="${PYRIGHT_VERSION}" >> "${GITHUB_OUTPUT}"
- name: Run pyright with basic settings on all the stubs
uses: jakebailey/pyright-action@v2
with:
version: ${{ steps.pyright_version.outputs.value }}
version: ${{ steps.pyright_version.outputs.PYRIGHT_VERSION }}
python-platform: ${{ matrix.python-platform }}
python-version: ${{ matrix.python-version }}
annotate: ${{ matrix.python-version == '3.11' && matrix.python-platform == 'Linux' }} # Having each job create the same comment is too noisy.
- name: Run pyright with stricter settings on some of the stubs
uses: jakebailey/pyright-action@v2
with:
version: ${{ steps.pyright_version.outputs.value }}
version: ${{ steps.pyright_version.outputs.PYRIGHT_VERSION }}
python-platform: ${{ matrix.python-platform }}
python-version: ${{ matrix.python-version }}
annotate: ${{ matrix.python-version == '3.11' && matrix.python-platform == 'Linux' }} # Having each job create the same comment is too noisy.
@@ -153,7 +153,7 @@ jobs:
- name: Run pyright on the test cases
uses: jakebailey/pyright-action@v2
with:
version: ${{ steps.pyright_version.outputs.value }}
version: ${{ steps.pyright_version.outputs.PYRIGHT_VERSION }}
python-platform: ${{ matrix.python-platform }}
python-version: ${{ matrix.python-version }}
annotate: ${{ matrix.python-version == '3.11' && matrix.python-platform == 'Linux' }} # Having each job create the same comment is too noisy.

View File

@@ -149,5 +149,7 @@ extra-standard-library = [
known-first-party = ["parse_metadata", "utils"]
[tool.typeshed]
# TODO: Remove once stub_uploader uses requirements.txt to determine
# the version of pyright.
pyright_version = "1.1.354"
oldest_supported_python = "3.8"

View File

@@ -7,6 +7,7 @@ flake8-noqa==1.4.0 # must match .pre-commit-config.yaml
flake8-pyi==24.3.0 # must match .pre-commit-config.yaml
mypy==1.9.0
pre-commit-hooks==4.5.0 # must match .pre-commit-config.yaml
pyright==1.1.354
pytype==2024.3.11; platform_system != "Windows" and python_version < "3.12"
ruff==0.3.0 # must match .pre-commit-config.yaml

View File

@@ -25,7 +25,7 @@ extension_descriptions = {".pyi": "stub", ".py": ".py"}
# These type checkers and linters must have exact versions in the requirements file to ensure
# consistent CI runs.
linters = {"black", "flake8", "flake8-noqa", "flake8-pyi", "ruff", "mypy", "pytype"}
linters = {"black", "flake8", "flake8-noqa", "flake8-pyi", "mypy", "pyright", "pytype", "ruff"}
def assert_consistent_filetypes(

View File

@@ -6,7 +6,7 @@ import subprocess
import sys
from pathlib import Path
import tomli
from utils import parse_requirements, print_command
_WELL_KNOWN_FILE = Path("tests", "pyright_test.py")
@@ -29,12 +29,16 @@ def main() -> None:
print("error running npx; is Node.js installed?", file=sys.stderr)
sys.exit(1)
with open("pyproject.toml", "rb") as config:
pyright_version: str = tomli.load(config)["tool"]["typeshed"]["pyright_version"]
req = parse_requirements()["pyright"]
spec = str(req.specifier)
pyright_version = spec[2:]
# TODO: We're currently using npx to run pyright, instead of calling the
# version installed into the virtual environment, due to failures on some
# platforms. https://github.com/python/typeshed/issues/11614
os.environ["PYRIGHT_PYTHON_FORCE_VERSION"] = pyright_version
command = [npx, f"pyright@{pyright_version}"] + sys.argv[1:]
print("Running:", " ".join(command))
print_command(command)
ret = subprocess.run(command).returncode
sys.exit(ret)

View File

@@ -5,7 +5,7 @@ from __future__ import annotations
import os
import re
import sys
from collections.abc import Mapping
from collections.abc import Iterable, Mapping
from functools import lru_cache
from pathlib import Path
from typing import Any, Final, NamedTuple
@@ -38,6 +38,12 @@ def strip_comments(text: str) -> str:
# ====================================================================
def print_command(cmd: str | Iterable[str]) -> None:
if not isinstance(cmd, str):
cmd = " ".join(cmd)
print(colored(f"Running: {cmd}", "blue"))
def print_error(error: str, end: str = "\n", fix_path: tuple[str, str] = ("", "")) -> None:
error_split = error.split("\n")
old, new = fix_path