1
1
import asyncio
2
2
import logging
3
3
import os
4
+ from shutil import rmtree
4
5
import subprocess
5
6
import sys
6
7
import time
@@ -172,7 +173,8 @@ async def run_with_schema(self, input: TInputSchema) -> TOutputSchema:
172
173
requirement ._source_tool = None
173
174
174
175
175
- def prepare_package (package : str , jira_issue : str , dist_git_branch : str , input_schema : InputSchema ) -> str :
176
+ def prepare_package (package : str , jira_issue : str , dist_git_branch : str ,
177
+ input_schema : InputSchema ) -> tuple [str , str ]:
176
178
"""
177
179
Prepare the package for backporting by cloning the dist-git repository, switching to the appropriate branch,
178
180
and downloading the sources.
@@ -210,15 +212,14 @@ def prepare_package(package: str, jira_issue: str, dist_git_branch: str, input_s
210
212
raise ValueError (
211
213
f"Expected exactly one unpacked source, got { unpacked_sources } "
212
214
)
213
- unpacked_source = unpacked_sources [0 ]
214
- return unpacked_source
215
-
215
+ return unpacked_sources [0 ], local_clone
216
216
217
217
async def main () -> None :
218
218
logging .basicConfig (level = logging .INFO )
219
219
220
220
setup_observability (os .getenv ("COLLECTOR_ENDPOINT" ))
221
221
agent = BackportAgent ()
222
+ dry_run = os .getenv ("DRY_RUN" , "False" ).lower () == "true"
222
223
223
224
if (
224
225
(package := os .getenv ("PACKAGE" , None ))
@@ -233,13 +234,15 @@ async def main() -> None:
233
234
jira_issue = jira_issue ,
234
235
dist_git_branch = branch ,
235
236
)
236
- unpacked_source = prepare_package (package , jira_issue , branch , input )
237
- input .unpacked_sources = unpacked_source
237
+ input .unpacked_sources , local_clone = prepare_package (package , jira_issue , branch , input )
238
238
try :
239
239
output = await agent .run_with_schema (input )
240
- except Exception :
241
- logger .info (f"Sleeping, you can now debug" )
242
- time .sleep (999999 )
240
+ finally :
241
+ if not dry_run :
242
+ logger .info (f"Removing { local_clone } " )
243
+ rmtree (local_clone )
244
+ else :
245
+ logger .info (f"DRY RUN: Not removing { local_clone } " )
243
246
logger .info (f"Direct run completed: { output .model_dump_json (indent = 4 )} " )
244
247
return
245
248
@@ -273,6 +276,8 @@ class Task(BaseModel):
273
276
jira_issue = backport_data .jira_issue ,
274
277
dist_git_branch = backport_data .branch ,
275
278
)
279
+ input .unpacked_sources , local_clone = prepare_package (backport_data .package ,
280
+ backport_data .jira_issue , backport_data .branch , input )
276
281
277
282
async def retry (task , error ):
278
283
task .attempts += 1
@@ -296,7 +301,9 @@ async def retry(task, error):
296
301
await retry (
297
302
task , ErrorData (details = error , jira_issue = input .jira_issue ).model_dump_json ()
298
303
)
304
+ rmtree (local_clone )
299
305
else :
306
+ rmtree (local_clone )
300
307
if output .success :
301
308
logger .info (f"Backport successful for { backport_data .jira_issue } , "
302
309
f"adding to completed list" )
0 commit comments