···132132 sys.exit("input json must have `orga` and `repo` keys")
133133134134135135-def fetchOrgaLatestRepos() -> None:
135135+def fetchOrgaLatestRepos(orga: str) -> set[str]:
136136 """fetch the latest (100) repos from the given github organization"""
137137- match jsonArg:
138138- case {"orga": orga}:
139139- token: str | None = os.environ.get("GITHUB_TOKEN", None)
140140- out = run_cmd(
141141- curl_github_args(
142142- token,
143143- url=f"https://api.github.com/orgs/{quote(orga)}/repos?per_page=100"
144144- )
145145- )
146146- match curl_result(out):
147147- case "not found":
148148- sys.exit(f"github organization {orga} not found")
149149- case list(repos):
150150- res: list[str] = []
151151- for repo in repos:
152152- name = repo.get("name")
153153- if name:
154154- res.append(name)
155155- json.dump(res, sys.stdout)
156156- case other:
157157- sys.exit(f"github result was not a list of repos, but {other}")
137137+ token: str | None = os.environ.get("GITHUB_TOKEN", None)
138138+ out = run_cmd(
139139+ curl_github_args(
140140+ token,
141141+ url=f"https://api.github.com/orgs/{quote(orga)}/repos?per_page=100"
142142+ )
143143+ )
144144+ match curl_result(out):
145145+ case "not found":
146146+ sys.exit(f"github organization {orga} not found")
147147+ case list(repos):
148148+ res: list[str] = []
149149+ for repo in repos:
150150+ name = repo.get("name")
151151+ if name:
152152+ res.append(name)
153153+ return set(res)
158154 case _:
159159- sys.exit("input json must have `orga` key")
155155+ sys.exit("github result was not a list of repos, but {other}")
160156161157162162-def checkTreeSitterRepos() -> None:
158158+def checkTreeSitterRepos(latest_github_repos: set[str]) -> None:
163159 """Make sure we know about all tree sitter repos on the tree sitter orga."""
164164- github_tree_sitter_repos: set[str] = set(json.load(sys.stdin))
165160 known: set[str] = set(args["knownTreeSitterOrgGrammarRepos"])
166161 ignored: set[str] = set(args["ignoredTreeSitterOrgRepos"])
167162168168- unknown = github_tree_sitter_repos - (known | ignored)
163163+ unknown = latest_github_repos - (known | ignored)
169164170165 if unknown:
171166 sys.exit(f"These repositories are neither known nor ignored:\n{unknown}")
···204199 )
205200206201202202+def fetchAndCheckTreeSitterRepos() -> None:
203203+ log("fetching list of grammars")
204204+ latest_repos = fetchOrgaLatestRepos(orga="tree-sitter")
205205+ log("checking the tree-sitter repo list against the grammars we know")
206206+ checkTreeSitterRepos(latest_repos)
207207+208208+207209match mode:
208210 case "fetch-repo":
209211 fetchRepo()
210210- case "fetch-orga-latest-repos":
211211- fetchOrgaLatestRepos()
212212- case "check-tree-sitter-repos":
213213- checkTreeSitterRepos()
212212+ case "fetch-and-check-tree-sitter-repos":
213213+ fetchAndCheckTreeSitterRepos()
214214 case "print-all-grammars-nix-file":
215215 printAllGrammarsNixFile()
216216 case _: