11import asyncio
22import logging
33import os
4- from shutil import rmtree
54import subprocess
65import sys
76import traceback
8-
97from pathlib import Path
108
119from pydantic import BaseModel , Field
@@ -50,7 +48,6 @@ class InputSchema(BaseModel):
5048class OutputSchema (BaseModel ):
5149 success : bool = Field (description = "Whether the backport was successfully completed" )
5250 status : str = Field (description = "Backport status" )
53- mr_url : str | None = Field (description = "URL to the opened merge request" )
5451 error : str | None = Field (description = "Specific details about an error" )
5552
5653
@@ -78,7 +75,6 @@ async def main() -> None:
7875 logging .basicConfig (level = logging .INFO )
7976
8077 setup_observability (os .environ ["COLLECTOR_ENDPOINT" ])
81- cve_id = os .getenv ("CVE_ID" , "" )
8278
8379 async with mcp_tools (os .environ ["MCP_GATEWAY_URL" ]) as gateway_tools :
8480 backport_agent = RequirementAgent (
@@ -117,6 +113,8 @@ async def main() -> None:
117113 ],
118114 )
119115
116+ dry_run = os .getenv ("DRY_RUN" , "False" ).lower () == "true"
117+
120118 class State (BaseModel ):
121119 jira_issue : str
122120 package : str
@@ -173,7 +171,7 @@ async def run_backport_agent(state):
173171 if state .backport_result .success :
174172 return "commit_push_and_open_mr"
175173 else :
176- return Workflow . END
174+ return "comment_in_jira"
177175
178176 async def commit_push_and_open_mr (state ):
179177 state .merge_request_url = await tasks .commit_push_and_open_mr (
@@ -186,13 +184,29 @@ async def commit_push_and_open_mr(state):
186184 mr_title = "{COMMIT_PREFIX} backport {state.jira_issue}" ,
187185 mr_description = "TODO" ,
188186 available_tools = gateway_tools ,
189- commit_only = os .getenv ("DRY_RUN" , "False" ).lower () == "true" ,
187+ commit_only = dry_run ,
188+ )
189+ return "comment_in_jira"
190+
191+ async def comment_in_jira (state ):
192+ if dry_run :
193+ return Workflow .END
194+ await tasks .comment_in_jira (
195+ jira_issue = state .jira_issue ,
196+ agent_type = "Backport" ,
197+ comment_text = (
198+ state .merge_request_url
199+ if state .backport_result .success
200+ else f"Agent failed to perform a backport: { state .backport_result .error } "
201+ ),
202+ available_tools = gateway_tools ,
190203 )
191204 return Workflow .END
192205
193206 workflow .add_step ("fork_and_prepare_dist_git" , fork_and_prepare_dist_git )
194207 workflow .add_step ("run_backport_agent" , run_backport_agent )
195208 workflow .add_step ("commit_push_and_open_mr" , commit_push_and_open_mr )
209+ workflow .add_step ("comment_in_jira" , comment_in_jira )
196210
197211 async def run_workflow (package , dist_git_branch , upstream_fix , jira_issue , cve_id ):
198212 response = await workflow .run (
@@ -280,31 +294,17 @@ async def retry(task, error):
280294 f"Backport processing completed for { backport_data .jira_issue } , " f"success: { state .backport_result .success } "
281295 )
282296
283- agent_type = "Backport"
284- if state .backport_result .success :
285- logger .info (f"Updating JIRA { backport_data .jira_issue } with { state .backport_result .mr_url } " )
286-
287- await post_private_jira_comment (gateway_tools , backport_data .jira_issue , agent_type , state .backport_result .mr_url )
288- else :
289- logger .info (f"Agent failed to perform a backport for { backport_data .jira_issue } ." )
290- await post_private_jira_comment (gateway_tools , backport_data .jira_issue , agent_type ,
291- "Agent failed to perform a backport: {state.backport_result.error}" )
292-
293-
294-
295297 except Exception as e :
296298 error = "" .join (traceback .format_exception (e ))
297299 logger .error (f"Exception during backport processing for { backport_data .jira_issue } : { error } " )
298300 await retry (task , ErrorData (details = error , jira_issue = backport_data .jira_issue ).model_dump_json ())
299- rmtree (local_clone )
300301 else :
301- rmtree (local_clone )
302- if state .backport_data .success :
302+ if state .backport_result .success :
303303 logger .info (f"Backport successful for { backport_data .jira_issue } , " f"adding to completed list" )
304- await redis .lpush ("completed_backport_list" , output .model_dump_json ())
304+ await redis .lpush ("completed_backport_list" , state . backport_result .model_dump_json ())
305305 else :
306- logger .warning (f"Backport failed for { backport_data .jira_issue } : { state .backport_data .error } " )
307- await retry (task , state .backport_data .error )
306+ logger .warning (f"Backport failed for { backport_data .jira_issue } : { state .backport_result .error } " )
307+ await retry (task , state .backport_result .error )
308308
309309
310310if __name__ == "__main__" :
0 commit comments