···16Args = Iterator[str]
1718000019def curl_github_args(token: str | None, url: str) -> Args:
20 """Query the github API via curl"""
21 yield bins["curl"]
···58def run_cmd(args: Args) -> bytes:
59 all = list(args)
60 if debug:
61- print(all, file=sys.stderr)
62 return sub.check_output(all)
6364···91 match curl_result(out):
92 case "not found":
93 # github sometimes returns an empty list even tough there are releases
94- print(f"uh-oh, latest for {orga}/{repo} is not there, using HEAD", file=sys.stderr)
95 release = "HEAD"
96 case {"tag_name": tag_name}:
97 release = tag_name
98 case _:
99 sys.exit(f"git result for {orga}/{repo} did not have a `tag_name` field")
100101- print(f"Fetching latest release ({release}) of {orga}/{repo} …", file=sys.stderr)
102 res = run_cmd(
103 atomically_write_args(
104 os.path.join(
···144 sys.exit("input json must have `orga` key")
145146000000000000147match mode:
148 case "fetch-repo":
149 fetchRepo()
150 case "fetch-orga-latest-repos":
151 fetchOrgaLatestRepos()
00152 case _:
153 sys.exit(f"mode {mode} unknown")
···16Args = Iterator[str]
171819+def log(msg: str) -> None:
20+ print(msg, file=sys.stderr)
21+22+23def curl_github_args(token: str | None, url: str) -> Args:
24 """Query the github API via curl"""
25 yield bins["curl"]
···62def run_cmd(args: Args) -> bytes:
63 all = list(args)
64 if debug:
65+ log(str(all))
66 return sub.check_output(all)
6768···95 match curl_result(out):
96 case "not found":
97 # github sometimes returns an empty list even tough there are releases
98+ log(f"uh-oh, latest for {orga}/{repo} is not there, using HEAD")
99 release = "HEAD"
100 case {"tag_name": tag_name}:
101 release = tag_name
102 case _:
103 sys.exit(f"git result for {orga}/{repo} did not have a `tag_name` field")
104105+ log(f"Fetching latest release ({release}) of {orga}/{repo} …")
106 res = run_cmd(
107 atomically_write_args(
108 os.path.join(
···148 sys.exit("input json must have `orga` key")
149150151+def checkTreeSitterRepos() -> None:
152+ """Make sure we know about all tree sitter repos on the tree sitter orga."""
153+ github_tree_sitter_repos: set[str] = set(json.load(sys.stdin))
154+ known: set[str] = set(args["knownTreeSitterOrgGrammarRepos"])
155+ ignored: set[str] = set(args["ignoredTreeSitterOrgRepos"])
156+157+ unknown = github_tree_sitter_repos - (known | ignored)
158+159+ if unknown:
160+ sys.exit(f"These repositories are neither known nor ignored:\n{unknown}")
161+162+163match mode:
164 case "fetch-repo":
165 fetchRepo()
166 case "fetch-orga-latest-repos":
167 fetchOrgaLatestRepos()
168+ case "check-tree-sitter-repos":
169+ checkTreeSitterRepos()
170 case _:
171 sys.exit(f"mode {mode} unknown")