mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-27 20:42:10 +00:00

* Add script for ecosystem wide checks of all rules and fixes This adds my personal script for checking an entire checkout of ~2.1k packages for panics, autofix errors and similar problems. It's not really meant to be used by anybody else but i thought it's better if it lives in the repo than if it doesn't. For reference, this is the current output of failing autofixes: https://gist.github.com/konstin/c3fada0135af6cacec74f166adf87a00. Trimmed down to the useful information: https://gist.github.com/konstin/c864f4c300c7903a24fdda49635c5da9 * Keep github template intact * Remove the need for ripgrep * sort output
84 lines
2.3 KiB
Python
84 lines
2.3 KiB
Python
"""This is @konstin's scripts for checking an entire checkout of ~2.1k packages for
|
|
panics, autofix errors and similar problems.
|
|
|
|
It's a less elaborate, more hacky version of check_ecosystem.py
|
|
"""
|
|
|
|
import json
|
|
import subprocess
|
|
from pathlib import Path
|
|
from subprocess import CalledProcessError
|
|
from typing import NamedTuple, Optional
|
|
|
|
from tqdm import tqdm
|
|
|
|
|
|
class Repository(NamedTuple):
|
|
"""A GitHub repository at a specific ref."""
|
|
|
|
org: str
|
|
repo: str
|
|
ref: Optional[str]
|
|
|
|
|
|
def main() -> None:
|
|
checkouts = Path("checkouts")
|
|
out_dir = Path("ecosystem_fix_all_results")
|
|
github_search_json = Path("github_search.jsonl")
|
|
# Somehow it doesn't like plain ruff
|
|
ruff = Path.cwd().joinpath("ruff")
|
|
|
|
out_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
repositories = []
|
|
for line in github_search_json.read_text().splitlines():
|
|
item = json.loads(line)
|
|
# Pick only the easier case for now.
|
|
if item["path"] != "pyproject.toml":
|
|
continue
|
|
repositories.append(
|
|
Repository(
|
|
item["owner"],
|
|
item["repo"],
|
|
item.get("ref"),
|
|
),
|
|
)
|
|
|
|
successes = 0
|
|
errors = 0
|
|
for repository in tqdm(repositories):
|
|
project_dir = checkouts.joinpath(repository.org).joinpath(repository.repo)
|
|
if not project_dir.is_dir():
|
|
tqdm.write(f"Missing {project_dir}")
|
|
errors += 1
|
|
continue
|
|
|
|
try:
|
|
ruff_args = [
|
|
"check",
|
|
"--no-cache",
|
|
"--exit-zero",
|
|
"--select",
|
|
"ALL",
|
|
"--fix",
|
|
]
|
|
output = subprocess.run(
|
|
[ruff, *ruff_args, "."],
|
|
cwd=project_dir,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
except CalledProcessError as e:
|
|
tqdm.write(f"Ruff failed on {project_dir}: {e}")
|
|
errors += 1
|
|
continue
|
|
|
|
org_repo = f"{repository.org}:{repository.repo}"
|
|
out_dir.joinpath(f"{org_repo}.stdout.txt").write_text(output.stdout)
|
|
out_dir.joinpath(f"{org_repo}.stderr.txt").write_text(output.stderr)
|
|
successes += 1
|
|
print(f"Success: {successes} Error {errors}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|