mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-07 13:15:06 +00:00
Update the schemastore script to match changes in ty (#17952)
See https://github.com/astral-sh/ty/pull/273
This commit is contained in:
parent
57bf7dfbd9
commit
91aa853b9c
1 changed files with 25 additions and 17 deletions
|
@ -1,8 +1,12 @@
|
|||
"""Update ruff.json in schemastore.
|
||||
|
||||
This script will clone astral-sh/schemastore, update the schema and push the changes
|
||||
This script will clone `astral-sh/schemastore`, update the schema and push the changes
|
||||
to a new branch tagged with the ruff git hash. You should see a URL to create the PR
|
||||
to schemastore in the CLI.
|
||||
|
||||
Usage:
|
||||
|
||||
uv run --only-dev scripts/update_schemastore.py
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
@ -14,11 +18,17 @@ from subprocess import check_call, check_output
|
|||
from tempfile import TemporaryDirectory
|
||||
from typing import NamedTuple, assert_never
|
||||
|
||||
ruff_repo = "https://github.com/astral-sh/ruff"
|
||||
root = Path(
|
||||
check_output(["git", "rev-parse", "--show-toplevel"], text=True).strip(),
|
||||
)
|
||||
ruff_json = Path("schemas/json/ruff.json")
|
||||
# The remote URL for the `ruff` repository.
|
||||
RUFF_REPO = "https://github.com/astral-sh/ruff"
|
||||
|
||||
# The path to the root of the `ruff` repository.
|
||||
RUFF_ROOT = Path(__file__).parent.parent
|
||||
|
||||
# The path to the JSON schema in the `ruff` repository.
|
||||
RUFF_SCHEMA = RUFF_ROOT / "ruff.schema.json"
|
||||
|
||||
# The path to the JSON schema in the `schemastore` repository.
|
||||
RUFF_JSON = Path("schemas/json/ruff.json")
|
||||
|
||||
|
||||
class SchemastoreRepos(NamedTuple):
|
||||
|
@ -49,7 +59,7 @@ class GitProtocol(enum.Enum):
|
|||
def update_schemastore(
|
||||
schemastore_path: Path, schemastore_repos: SchemastoreRepos
|
||||
) -> None:
|
||||
if not schemastore_path.is_dir():
|
||||
if not (schemastore_path / ".git").is_dir():
|
||||
check_call(
|
||||
["git", "clone", schemastore_repos.fork, schemastore_path, "--depth=1"]
|
||||
)
|
||||
|
@ -78,13 +88,13 @@ def update_schemastore(
|
|||
)
|
||||
|
||||
# Run npm install
|
||||
src = schemastore_path.joinpath("src")
|
||||
src = schemastore_path / "src"
|
||||
check_call(["npm", "install"], cwd=schemastore_path)
|
||||
|
||||
# Update the schema and format appropriately
|
||||
schema = json.loads(root.joinpath("ruff.schema.json").read_text())
|
||||
schema = json.loads(RUFF_SCHEMA.read_text())
|
||||
schema["$id"] = "https://json.schemastore.org/ruff.json"
|
||||
src.joinpath(ruff_json).write_text(
|
||||
(src / RUFF_JSON).write_text(
|
||||
json.dumps(dict(schema.items()), indent=2, ensure_ascii=False),
|
||||
)
|
||||
check_call(
|
||||
|
@ -93,7 +103,7 @@ def update_schemastore(
|
|||
"--plugin",
|
||||
"prettier-plugin-sort-json",
|
||||
"--write",
|
||||
ruff_json,
|
||||
RUFF_JSON,
|
||||
],
|
||||
cwd=src,
|
||||
)
|
||||
|
@ -102,7 +112,7 @@ def update_schemastore(
|
|||
# https://stackoverflow.com/a/9393642/3549270
|
||||
if check_output(["git", "status", "-s"], cwd=schemastore_path).strip():
|
||||
# Schema has changed, commit and push
|
||||
commit_url = f"{ruff_repo}/commit/{current_sha}"
|
||||
commit_url = f"{RUFF_REPO}/commit/{current_sha}"
|
||||
commit_body = (
|
||||
f"This updates ruff's JSON schema to [{current_sha}]({commit_url})"
|
||||
)
|
||||
|
@ -146,14 +156,12 @@ def determine_git_protocol(argv: list[str] | None = None) -> GitProtocol:
|
|||
|
||||
def main() -> None:
|
||||
schemastore_repos = determine_git_protocol().schemastore_repos()
|
||||
schemastore_existing = root.joinpath("schemastore")
|
||||
schemastore_existing = RUFF_ROOT / "schemastore"
|
||||
if schemastore_existing.is_dir():
|
||||
update_schemastore(schemastore_existing, schemastore_repos)
|
||||
else:
|
||||
with TemporaryDirectory() as temp_dir:
|
||||
update_schemastore(
|
||||
Path(temp_dir).joinpath("schemastore"), schemastore_repos
|
||||
)
|
||||
with TemporaryDirectory(prefix="ruff-schemastore-") as temp_dir:
|
||||
update_schemastore(Path(temp_dir), schemastore_repos)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue