mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-26 09:58:17 +00:00
67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
"""
|
|
Creates Profile-Guided-Optimized binaries for ruff.
|
|
Ensure `cargo-pgo` is installed and configured to run this code.
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
PROJECTS_JSON = "./scripts/pgo_profile.json"
|
|
CLONE_DIR = Path("clones")
|
|
TRIPLE = "x86_64-unknown-linux-gnu"
|
|
|
|
env = os.environ.copy()
|
|
env["LLVM_PROFILE_FILE"] = f"{os.getcwd()}/target/pgo-profiles/ruff_%m_%p.profraw"
|
|
|
|
|
|
def run_command(cmd, env, cwd=None, check=False):
|
|
print(f">>> {cmd}")
|
|
subprocess.run(
|
|
cmd,
|
|
shell=True,
|
|
check=check,
|
|
cwd=cwd,
|
|
env=env,
|
|
stdout=subprocess.DEVNULL,
|
|
stderr=subprocess.DEVNULL,
|
|
)
|
|
|
|
|
|
def main():
|
|
CLONE_DIR.mkdir(exist_ok=True)
|
|
|
|
with open(PROJECTS_JSON, "r") as f:
|
|
projects = json.load(f)
|
|
|
|
run_command("cargo pgo clean", env=env)
|
|
run_command("cargo pgo instrument build --keep-profiles -- -q", env=env)
|
|
|
|
for project in projects:
|
|
name = project["name"]
|
|
url = project["url"]
|
|
branch = project["branch"]
|
|
dest = CLONE_DIR / name
|
|
|
|
print(f">> collecting data on {name}.")
|
|
|
|
if not dest.exists():
|
|
run_command(
|
|
f"git clone --depth 1 --quiet --branch {branch} {url} {dest}", env=env
|
|
)
|
|
|
|
run_command(
|
|
f"../../target/{TRIPLE}/release/ruff check -n -e --diff .",
|
|
env=env,
|
|
cwd=dest,
|
|
)
|
|
run_command(
|
|
f"../../target/{TRIPLE}/release/ruff format -n --check .", env=env, cwd=dest
|
|
)
|
|
|
|
run_command("cargo pgo optimize", env=env)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|