mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-09 21:46:42 +08:00
Setup renovate for updating dependencies (#11565)
This commit is contained in:
@@ -8,13 +8,7 @@ from __future__ import annotations
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import urllib.parse
|
||||
from pathlib import Path
|
||||
from typing import TypedDict
|
||||
|
||||
import yaml
|
||||
from packaging.requirements import Requirement
|
||||
from packaging.specifiers import SpecifierSet
|
||||
|
||||
from parse_metadata import read_metadata
|
||||
from utils import (
|
||||
@@ -143,34 +137,6 @@ def check_metadata() -> None:
|
||||
read_metadata(distribution)
|
||||
|
||||
|
||||
class PreCommitConfigRepos(TypedDict):
|
||||
hooks: list[dict[str, str]]
|
||||
repo: str
|
||||
|
||||
|
||||
class PreCommitConfig(TypedDict):
|
||||
repos: list[PreCommitConfigRepos]
|
||||
|
||||
|
||||
def get_precommit_requirements() -> dict[str, SpecifierSet]:
|
||||
with open(".pre-commit-config.yaml", encoding="UTF-8") as precommit_file:
|
||||
precommit = precommit_file.read()
|
||||
yam: PreCommitConfig = yaml.load(precommit, Loader=yaml.Loader)
|
||||
precommit_requirements: dict[str, SpecifierSet] = {}
|
||||
for repo in yam["repos"]:
|
||||
package_rev = repo.get("rev")
|
||||
if not isinstance(package_rev, str):
|
||||
continue
|
||||
package_name = Path(urllib.parse.urlparse(repo["repo"]).path).name
|
||||
package_specifier = SpecifierSet(f"=={package_rev.removeprefix('v')}")
|
||||
precommit_requirements[package_name] = package_specifier
|
||||
for hook in repo["hooks"]:
|
||||
for additional_req in hook.get("additional_dependencies", ()):
|
||||
req = Requirement(additional_req)
|
||||
precommit_requirements[req.name] = req.specifier
|
||||
return precommit_requirements
|
||||
|
||||
|
||||
def check_requirement_pins() -> None:
|
||||
"""Check that type checkers and linters are pinned to an exact version."""
|
||||
requirements = parse_requirements()
|
||||
@@ -182,23 +148,6 @@ def check_requirement_pins() -> None:
|
||||
assert str(spec).startswith("=="), msg
|
||||
|
||||
|
||||
def check_precommit_requirements() -> None:
|
||||
"""Check that the requirements in the requirements file and .pre-commit-config.yaml match."""
|
||||
requirements_txt_requirements = parse_requirements()
|
||||
precommit_requirements = get_precommit_requirements()
|
||||
no_txt_entry_msg = f"All pre-commit requirements must also be listed in `{REQS_FILE}` (missing {{requirement!r}})"
|
||||
for requirement, specifier in precommit_requirements.items():
|
||||
# annoying: the Ruff and Black repos for pre-commit are different to the names in the requirements file
|
||||
if requirement in {"ruff-pre-commit", "black-pre-commit-mirror"}:
|
||||
requirement = requirement.split("-")[0]
|
||||
assert requirement in requirements_txt_requirements, no_txt_entry_msg.format(requirement=requirement)
|
||||
specifier_mismatch = (
|
||||
f'Specifier "{specifier}" for {requirement!r} in `.pre-commit-config.yaml` '
|
||||
f'does not match specifier "{requirements_txt_requirements[requirement].specifier}" in `{REQS_FILE}`'
|
||||
)
|
||||
assert specifier == requirements_txt_requirements[requirement].specifier, specifier_mismatch
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
assert sys.version_info >= (3, 9), "Python 3.9+ is required to run this test"
|
||||
check_stdlib()
|
||||
@@ -208,4 +157,3 @@ if __name__ == "__main__":
|
||||
check_no_symlinks()
|
||||
check_test_cases()
|
||||
check_requirement_pins()
|
||||
check_precommit_requirements()
|
||||
|
||||
Reference in New Issue
Block a user