mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-07 21:25:08 +00:00
![renovate[bot]](/assets/img/avatar_default.png)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Zanie Blue <contact@zanie.dev> Co-authored-by: Alex Waygood <alex.waygood@gmail.com>
80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
"""This is @konstin's scripts for checking an entire checkout of ~2.1k packages for
|
|
panics, fix errors and similar problems.
|
|
|
|
It's a less elaborate, more hacky version of check_ecosystem.py
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
from subprocess import CalledProcessError
|
|
from typing import NamedTuple
|
|
|
|
from tqdm import tqdm
|
|
|
|
|
|
class Repository(NamedTuple):
|
|
"""A GitHub repository at a specific ref."""
|
|
|
|
org: str
|
|
repo: str
|
|
ref: str | None
|
|
|
|
|
|
def main() -> None:
|
|
ruff_args = sys.argv[1:]
|
|
checkouts = Path("checkouts")
|
|
out_dir = Path("ecosystem_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(f"{repository.org}:{repository.repo}")
|
|
if not project_dir.is_dir():
|
|
tqdm.write(f"Missing {project_dir}")
|
|
errors += 1
|
|
continue
|
|
|
|
try:
|
|
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()
|