chore: finalize repo audit hygiene (#257)
This commit is contained in:
90
scripts/check_deprecated_names.py
Normal file
90
scripts/check_deprecated_names.py
Normal file
@ -0,0 +1,90 @@
|
||||
"""Block deprecated product names in tracked repository text."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
import subprocess
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Iterable
|
||||
|
||||
DEPRECATED_NAME_RE = re.compile(r"\bever[\s_-]*core\b", flags=re.IGNORECASE)
|
||||
SKIP_SUFFIXES = frozenset(
|
||||
{
|
||||
".avif",
|
||||
".bmp",
|
||||
".gif",
|
||||
".heic",
|
||||
".heif",
|
||||
".icns",
|
||||
".ico",
|
||||
".jpeg",
|
||||
".jpg",
|
||||
".mov",
|
||||
".mp4",
|
||||
".png",
|
||||
".webp",
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Violation:
|
||||
path: str
|
||||
line_number: int
|
||||
line: str
|
||||
|
||||
|
||||
def find_violations(files: Iterable[tuple[str, str]]) -> list[Violation]:
|
||||
violations: list[Violation] = []
|
||||
for path, text in files:
|
||||
for line_number, line in enumerate(text.splitlines(), start=1):
|
||||
if DEPRECATED_NAME_RE.search(line):
|
||||
violations.append(
|
||||
Violation(path=path, line_number=line_number, line=line.strip())
|
||||
)
|
||||
return violations
|
||||
|
||||
|
||||
def _tracked_paths() -> list[Path]:
|
||||
result = subprocess.run(
|
||||
["git", "ls-files", "-z"],
|
||||
check=True,
|
||||
stdout=subprocess.PIPE,
|
||||
text=False,
|
||||
)
|
||||
return [
|
||||
Path(raw.decode("utf-8"))
|
||||
for raw in result.stdout.split(b"\0")
|
||||
if raw
|
||||
]
|
||||
|
||||
|
||||
def _tracked_text_files() -> Iterable[tuple[str, str]]:
|
||||
for path in _tracked_paths():
|
||||
if path.suffix.lower() in SKIP_SUFFIXES:
|
||||
continue
|
||||
try:
|
||||
text = path.read_text(encoding="utf-8")
|
||||
except UnicodeDecodeError:
|
||||
continue
|
||||
yield path.as_posix(), text
|
||||
|
||||
|
||||
def main() -> int:
|
||||
violations = find_violations(_tracked_text_files())
|
||||
if not violations:
|
||||
print("Deprecated-name check passed.")
|
||||
return 0
|
||||
|
||||
print(
|
||||
"Deprecated-name check failed.\n"
|
||||
"Use EverOS or EverMind Cloud. Do not use deprecated product naming.\n"
|
||||
)
|
||||
for violation in violations:
|
||||
print(f"- {violation.path}:{violation.line_number}: {violation.line}")
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user