lol

tree-sitter/update: fetch orgas and directly check in python

+31 -34
+1 -4
pkgs/development/tools/parsing/tree-sitter/update.nix
··· 429 429 430 430 update-all-grammars = writeShellScript "update-all-grammars.sh" '' 431 431 set -euo pipefail 432 - echo "fetching list of grammars" 1>&2 433 - treeSitterRepos=$(${updateImpl} fetch-orga-latest-repos '{"orga": "tree-sitter"}') 434 - echo "checking the tree-sitter repo list against the grammars we know" 1>&2 435 - printf '%s' "$treeSitterRepos" | ${updateImpl} check-tree-sitter-repos '{}' 432 + ${updateImpl} fetch-and-check-tree-sitter-repos '{}' 436 433 echo "writing files to ${outputDir}" 1>&2 437 434 mkdir -p "${outputDir}" 438 435 ${forEachParallel
+30 -30
pkgs/development/tools/parsing/tree-sitter/update_impl.py
··· 132 132 sys.exit("input json must have `orga` and `repo` keys") 133 133 134 134 135 - def fetchOrgaLatestRepos() -> None: 135 + def fetchOrgaLatestRepos(orga: str) -> set[str]: 136 136 """fetch the latest (100) repos from the given github organization""" 137 - match jsonArg: 138 - case {"orga": orga}: 139 - token: str | None = os.environ.get("GITHUB_TOKEN", None) 140 - out = run_cmd( 141 - curl_github_args( 142 - token, 143 - url=f"https://api.github.com/orgs/{quote(orga)}/repos?per_page=100" 144 - ) 145 - ) 146 - match curl_result(out): 147 - case "not found": 148 - sys.exit(f"github organization {orga} not found") 149 - case list(repos): 150 - res: list[str] = [] 151 - for repo in repos: 152 - name = repo.get("name") 153 - if name: 154 - res.append(name) 155 - json.dump(res, sys.stdout) 156 - case other: 157 - sys.exit(f"github result was not a list of repos, but {other}") 137 + token: str | None = os.environ.get("GITHUB_TOKEN", None) 138 + out = run_cmd( 139 + curl_github_args( 140 + token, 141 + url=f"https://api.github.com/orgs/{quote(orga)}/repos?per_page=100" 142 + ) 143 + ) 144 + match curl_result(out): 145 + case "not found": 146 + sys.exit(f"github organization {orga} not found") 147 + case list(repos): 148 + res: list[str] = [] 149 + for repo in repos: 150 + name = repo.get("name") 151 + if name: 152 + res.append(name) 153 + return set(res) 158 154 case _: 159 - sys.exit("input json must have `orga` key") 155 + sys.exit("github result was not a list of repos, but {other}") 160 156 161 157 162 - def checkTreeSitterRepos() -> None: 158 + def checkTreeSitterRepos(latest_github_repos: set[str]) -> None: 163 159 """Make sure we know about all tree sitter repos on the tree sitter orga.""" 164 - github_tree_sitter_repos: set[str] = set(json.load(sys.stdin)) 165 160 known: set[str] = set(args["knownTreeSitterOrgGrammarRepos"]) 166 161 ignored: set[str] = set(args["ignoredTreeSitterOrgRepos"]) 167 162 168 - unknown = github_tree_sitter_repos - (known | ignored) 163 + unknown = latest_github_repos - (known | ignored) 169 164 170 165 if unknown: 171 166 sys.exit(f"These repositories are neither known nor ignored:\n{unknown}") ··· 204 199 ) 205 200 206 201 202 + def fetchAndCheckTreeSitterRepos() -> None: 203 + log("fetching list of grammars") 204 + latest_repos = fetchOrgaLatestRepos(orga="tree-sitter") 205 + log("checking the tree-sitter repo list against the grammars we know") 206 + checkTreeSitterRepos(latest_repos) 207 + 208 + 207 209 match mode: 208 210 case "fetch-repo": 209 211 fetchRepo() 210 - case "fetch-orga-latest-repos": 211 - fetchOrgaLatestRepos() 212 - case "check-tree-sitter-repos": 213 - checkTreeSitterRepos() 212 + case "fetch-and-check-tree-sitter-repos": 213 + fetchAndCheckTreeSitterRepos() 214 214 case "print-all-grammars-nix-file": 215 215 printAllGrammarsNixFile() 216 216 case _: