Make ecosystem all check more generic (#4629)

* Don't assume unique repo names in ecosystem checks

This fixes a bug where previously repositories with the same name would have been overwritten.

I tested with `scripts/check_ecosystem.py -v --checkouts target/checkouts_main .venv/bin/ruff target/release/ruff` and ruff 0.0.267 that changes are shown. I confirmed with `scripts/ecosystem_all_check.sh check --select RUF008` (next PR) that the checkouts are now complete.

* Make ecosystem all check more generic

This allows passing arguments to the ecosystem all check script, e.g. you can now do `scripts/ecosystem_all_check.sh check --select RUF008`.

Tested with
```
$ cat target/ecosystem_all_results/*.stdout.txt | head
src/fi_parliament_tools/parsing/data_structures.py:33:17: RUF008 Do not use mutable default values for dataclass attributes
src/fi_parliament_tools/parsing/data_structures.py:76:17: RUF008 Do not use mutable default values for dataclass attributes
src/fi_parliament_tools/parsing/data_structures.py:178:17: RUF008 Do not use mutable default values for dataclass attributes
Found 3 errors.
braid_triggers/tasks.py:46:17: RUF008 Do not use mutable default values for dataclass attributes
Found 1 error.
src/boards/RaspberryPi3.py:15:22: RUF008 Do not use mutable default values for dataclass attributes
src/boards/board.py:21:26: RUF008 Do not use mutable default values for dataclass attributes
src/boards/board.py:22:32: RUF008 Do not use mutable default values for dataclass attributes
src/boards/board.py:23:37: RUF008 Do not use mutable default values for dataclass attributes
$ cat target/ecosystem_all_results/*.stdout.txt | wc -l
115
```
This commit is contained in:
konstin 2023-05-24 16:26:23 +02:00 committed by GitHub
parent 30e90838d0
commit 38297c08b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 18 deletions

View file

@ -6,6 +6,7 @@ It's a less elaborate, more hacky version of check_ecosystem.py
import json import json
import subprocess import subprocess
import sys
from pathlib import Path from pathlib import Path
from subprocess import CalledProcessError from subprocess import CalledProcessError
from typing import NamedTuple, Optional from typing import NamedTuple, Optional
@ -22,8 +23,9 @@ class Repository(NamedTuple):
def main() -> None: def main() -> None:
ruff_args = sys.argv[1:]
checkouts = Path("checkouts") checkouts = Path("checkouts")
out_dir = Path("ecosystem_fix_all_results") out_dir = Path("ecosystem_all_results")
github_search_json = Path("github_search.jsonl") github_search_json = Path("github_search.jsonl")
# Somehow it doesn't like plain ruff # Somehow it doesn't like plain ruff
ruff = Path.cwd().joinpath("ruff") ruff = Path.cwd().joinpath("ruff")
@ -54,14 +56,6 @@ def main() -> None:
continue continue
try: try:
ruff_args = [
"check",
"--no-cache",
"--exit-zero",
"--select",
"ALL",
"--fix",
]
output = subprocess.run( output = subprocess.run(
[ruff, *ruff_args, "."], [ruff, *ruff_args, "."],
cwd=project_dir, cwd=project_dir,

View file

@ -1,9 +1,14 @@
#!/bin/bash #!/bin/bash
# This is @konstin's setup for checking an entire checkout of ~2.1k packages for # This is @konstin's setup for checking an entire checkout of ~3k packages for
# panics, autofix errors and similar problems. # panics, autofix errors and similar problems.
# #
# We put this in a docker container because processing random scraped code from GitHub is # We put this in a docker container because processing random scraped code from GitHub is
# [kinda dangerous](https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subnormals.html) # [kinda dangerous](https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subnormals.html)
#
# Usage:
# ```
# scripts/ecosystem_all_check.sh check --select RUF200
# ```
# https://stackoverflow.com/a/246128/3549270 # https://stackoverflow.com/a/246128/3549270
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
@ -11,16 +16,16 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
time docker run --rm -it \ time docker run --rm -it \
-w /app \ -w /app \
-v "${SCRIPT_DIR}/../target/checkouts:/app/checkouts" \ -v "${SCRIPT_DIR}/../target/checkouts:/app/checkouts" \
-v "${SCRIPT_DIR}/../target/ecosystem_fix_all_results:/app/ecosystem_fix_all_results" \ -v "${SCRIPT_DIR}/../target/ecosystem_all_results:/app/ecosystem_all_results" \
-v "${SCRIPT_DIR}/../target/release/ruff:/app/ruff" \ -v "${SCRIPT_DIR}/../target/x86_64-unknown-linux-musl/release/ruff:/app/ruff" \
-v "${SCRIPT_DIR}/../ecosystem_all.py:/app/ecosystem_all.py" \ -v "${SCRIPT_DIR}/../ecosystem_all.py:/app/ecosystem_all.py" \
-v "${SCRIPT_DIR}/../github_search.jsonl:/app/github_search.jsonl" \ -v "${SCRIPT_DIR}/../github_search.jsonl:/app/github_search.jsonl" \
-v "${SCRIPT_DIR}/../.venv-3.11:/app/.venv" \ -v "${SCRIPT_DIR}/../.venv-3.11:/app/.venv" \
-v "${SCRIPT_DIR}/ecosystem_fix_all_check_entrypoint.sh:/app/ecosystem_fix_all_check_entrypoint.sh" \ -v "${SCRIPT_DIR}/ecosystem_all_check_entrypoint.sh:/app/ecosystem_all_check_entrypoint.sh" \
-v "${SCRIPT_DIR}/ecosystem_fix_all_check.py:/app/ecosystem_fix_all_check.py" \ -v "${SCRIPT_DIR}/ecosystem_all_check.py:/app/ecosystem_all_check.py" \
python:3.11 ./ecosystem_fix_all_check_entrypoint.sh python:3.11 ./ecosystem_all_check_entrypoint.sh "$@"
# grep the autofix errors # grep the autofix errors
grep -R "the rule codes" "${SCRIPT_DIR}/../target/ecosystem_fix_all_results" | sort > "${SCRIPT_DIR}/../target/autofix-errors.txt" grep -R "the rule codes" "${SCRIPT_DIR}/../target/ecosystem_all_results" | sort > "${SCRIPT_DIR}/../target/autofix-errors.txt"
# Make sure we didn't have an early exit # Make sure we didn't have an early exit
echo "Done" echo "Done"

View file

@ -1,9 +1,9 @@
#!/bin/bash #!/bin/bash
# Wrapper for ecosystem_fix_all_check.py # Wrapper for ecosystem_all_check.py
if [ ! -d ".venv/bin" ]; then if [ ! -d ".venv/bin" ]; then
python -m venv .venv python -m venv .venv
.venv/bin/pip install tqdm .venv/bin/pip install tqdm
fi fi
.venv/bin/python ecosystem_fix_all_check.py .venv/bin/python ecosystem_all_check.py "$@"