1- """Identity-only Java dispatch and cross-repository adapter for the pinned IssueLens client."""
1+ """Java coordinator provenance adapter for the pinned IssueLens client."""
22
33import argparse
44import importlib .util
1515COORDINATOR_WORKFLOW = ".github/workflows/team-memory-coordinator.yml"
1616SOURCE_INPUTS = ("SOURCE_RUN_ID" , "SOURCE_RUN_ATTEMPT" , "SOURCE_ARTIFACT_ID" )
1717MAX_SOURCE_BYTES = 64 * 1024
18- MAX_PUSH_COMMITS = 1000
1918# Reviewed public sources with an existing policy targeting the Java Pack wiki.
2019SOURCES = {
2120 COORDINATOR : (104967329 , "main" ),
@@ -72,18 +71,14 @@ def redirect_request(self, *args, **kwargs):
7271 return None
7372
7473
75- def github_request (path , token , payload = None ):
74+ def github_read (path , token ):
7675 require (isinstance (token , str ) and token .strip (), "Required GitHub token is empty" )
77- return urllib .request .Request (
76+ request = urllib .request .Request (
7877 "https://api.github.com" + path ,
79- data = None if payload is None else json .dumps (payload ).encode ("utf-8" ),
8078 headers = {"Authorization" : "Bearer " + token , "Accept" : "application/vnd.github+json" ,
8179 "Content-Type" : "application/json" , "X-GitHub-Api-Version" : "2022-11-28" },
8280 )
83-
84-
85- def github_read (path , token ):
86- with urllib .request .build_opener (NoRedirect ()).open (github_request (path , token ), timeout = 30 ) as response :
81+ with urllib .request .build_opener (NoRedirect ()).open (request , timeout = 30 ) as response :
8782 content = response .read (4 * 1024 * 1024 + 1 )
8883 require (len (content ) <= 4 * 1024 * 1024 , "GitHub response exceeds its size limit" )
8984 result = json .loads (content , object_pairs_hook = unique_object )
@@ -118,22 +113,6 @@ def workflow_context(repository, workflow, event_name, token):
118113 return current , event
119114
120115
121- def validate_push (event , reference , head ):
122- require (all (event .get (flag ) is False for flag in ("created" , "deleted" , "forced" )),
123- "Created, deleted, or forced refs require manual PR reconciliation" )
124- before , after = full_sha (event .get ("before" )), full_sha (event .get ("after" ))
125- require (before != after and event .get ("ref" ) == reference and head == after
126- and isinstance (event .get ("head_commit" ), dict ) and event ["head_commit" ].get ("id" ) == after ,
127- "Push source identity mismatch" )
128- commits = event .get ("commits" )
129- require (isinstance (commits , list ) and 0 < len (commits ) <= MAX_PUSH_COMMITS
130- and all (isinstance (item , dict ) for item in commits ), "Missing or oversized push inventory" )
131- shas = [full_sha (item .get ("id" )) for item in commits ]
132- require (len (set (shas )) == len (shas ) and after in shas and before not in shas ,
133- "Push inventory has duplicate or mismatched identities" )
134- return before , after , shas
135-
136-
137116def source_event_path ():
138117 return Path (os .environ ["RUNNER_TEMP" ]) / "issuelens-team-memory-source" / "source-event.json"
139118
@@ -144,62 +123,6 @@ def outputs(values):
144123 output .write (f"{ name } ={ value } \n " )
145124
146125
147- def push_snapshot ():
148- repository = os .environ ["GITHUB_REPOSITORY" ]
149- current , event = workflow_context (repository , SOURCE_WORKFLOW , "push" , os .environ ["GH_TOKEN" ])
150- before , after , shas = validate_push (event , os .environ ["GITHUB_REF" ], os .environ ["GITHUB_SHA" ])
151- require (os .environ ["GITHUB_WORKFLOW_SHA" ] == after , "Source workflow revision does not match the push" )
152- actors = [os .environ [name ] for name in ("GITHUB_ACTOR" , "GITHUB_TRIGGERING_ACTOR" )]
153- require (all (re .fullmatch (r"[A-Za-z0-9-]+(?:\[bot\])?" , actor ) for actor in actors ), "Invalid source actors" )
154- return {
155- "metadata" : {
156- "repository" : repository , "repository_id" : current ["id" ], "base_ref" : current ["default_branch" ],
157- "event_name" : "push" , "event_action" : "push" ,
158- "actor_login" : actors [0 ], "triggering_actor" : actors [1 ],
159- "workflow_ref" : os .environ ["GITHUB_WORKFLOW_REF" ], "workflow_sha" : after ,
160- "run_id" : positive (os .environ ["GITHUB_RUN_ID" ]), "run_attempt" : positive (os .environ ["GITHUB_RUN_ATTEMPT" ]),
161- },
162- "event" : {
163- "repository" : {"id" : current ["id" ], "full_name" : repository }, "ref" : event ["ref" ],
164- "before" : before , "after" : after , "created" : False , "deleted" : False , "forced" : False ,
165- "commits" : [{"id" : sha } for sha in shas ], "head_commit" : {"id" : after },
166- },
167- }
168-
169-
170- def prepare_dispatch ():
171- snapshot = push_snapshot ()
172- content = json .dumps (snapshot , separators = ("," , ":" )).encode ("utf-8" )
173- require (len (content ) <= MAX_SOURCE_BYTES , "Source event exceeds 64 KiB" )
174- path = source_event_path ()
175- path .parent .mkdir (exist_ok = True )
176- path .write_bytes (content )
177- outputs ({"source-event-path" : path })
178- print ("Prepared identity-only team-memory source event" )
179-
180-
181- def dispatch ():
182- token = os .environ ["DISPATCH_TOKEN" ]
183- require (token .strip (), "dispatch-token must be non-empty" )
184- snapshot = read_json (source_event_path (), MAX_SOURCE_BYTES )
185- expected = push_snapshot ()
186- require (snapshot == expected and matching_metadata (snapshot ["metadata" ], expected ["metadata" ]),
187- "Source event changed before dispatch" )
188- central = project (COORDINATOR , token )
189- metadata = snapshot ["metadata" ]
190- request = github_request (
191- f"/repos/{ COORDINATOR } /actions/workflows/team-memory-coordinator.yml/dispatches" , token ,
192- {"ref" : central ["default_branch" ], "inputs" : {
193- "source_repository" : metadata ["repository" ], "source_run_id" : str (metadata ["run_id" ]),
194- "source_run_attempt" : str (metadata ["run_attempt" ]),
195- "source_artifact_id" : str (positive (os .environ ["SOURCE_ARTIFACT_ID" ])),
196- }},
197- )
198- with urllib .request .build_opener (NoRedirect ()).open (request , timeout = 30 ) as response :
199- require (response .status in {200 , 204 }, "Dispatch was not acknowledged; do not retry blindly" )
200- print ("Coordinator dispatch accepted; maintenance completion is reported by the coordinator run" )
201-
202-
203126def selection ():
204127 repository = os .environ .get ("SOURCE_REPOSITORY" , "" )
205128 require (repository in SOURCES , "Supply an allowlisted source_repository" )
@@ -310,7 +233,6 @@ def preflight():
310233 and all (isinstance (item , dict ) and set (item ) == {"id" } for item in push ["commits" ])
311234 and push ["head_commit" ] == {"id" : metadata ["workflow_sha" ]},
312235 "Invalid identity-only push artifact" )
313- validate_push (push , "refs/heads/" + current ["default_branch" ], metadata ["workflow_sha" ])
314236 try :
315237 envelope = client .prepare_push_memory (repository , current , push , {** metadata , ** central })
316238 except client .SkippedRequest as skipped :
@@ -332,17 +254,14 @@ def preflight():
332254
333255def run (command ):
334256 try :
335- {"prepare-dispatch" : prepare_dispatch , "dispatch" : dispatch , "select-source" : select_source ,
336- "validate-dispatch" : validate_dispatch , "preflight" : preflight }[command ]()
257+ {"select-source" : select_source , "validate-dispatch" : validate_dispatch , "preflight" : preflight }[command ]()
337258 except ValueError as error :
338259 raise SystemExit (f"::error::{ error } " ) from None
339260 except Exception :
340- message = ("Coordinator dispatch failed or its outcome is unknown; inspect coordinator runs before retrying"
341- if command == "dispatch" else "Java team-memory validation failed; no agent request was sent" )
342- raise SystemExit (f"::error::{ message } " ) from None
261+ raise SystemExit ("::error::Java team-memory validation failed; no agent request was sent" ) from None
343262
344263
345264if __name__ == "__main__" :
346265 parser = argparse .ArgumentParser (description = __doc__ )
347- parser .add_argument ("command" , choices = ("prepare-dispatch" , "dispatch" , " select-source" , "validate-dispatch" , "preflight" ))
266+ parser .add_argument ("command" , choices = ("select-source" , "validate-dispatch" , "preflight" ))
348267 run (parser .parse_args ().command )
0 commit comments