diff --git a/sweepai/api.py b/sweepai/api.py index f4cbbbc8b2..19fdf95da9 100644 --- a/sweepai/api.py +++ b/sweepai/api.py @@ -57,6 +57,7 @@ ) from sweepai.handlers.on_comment import on_comment from sweepai.handlers.on_jira_ticket import handle_jira_ticket +from sweepai.handlers.on_linear_ticket import handle_linear_ticket from sweepai.handlers.on_ticket import on_ticket from sweepai.handlers.stack_pr import stack_pr from sweepai.utils.buttons import ( @@ -330,14 +331,14 @@ def webhook( logger.info(f"Received event: {x_github_event}, {action}") return handle_request(request_dict, event=x_github_event) -@app.post("/jira") -def jira_webhook( +@app.post("/linear") +def linear_webhook( request_dict: dict = Body(...), ) -> None: - def call_jira_ticket(*args, **kwargs): - thread = threading.Thread(target=handle_jira_ticket, args=args, kwargs=kwargs) + def call_linear_ticket(*args, **kwargs): + thread = threading.Thread(target=handle_linear_ticket, args=args, kwargs=kwargs) thread.start() - call_jira_ticket(event=request_dict) + call_linear_ticket(event=request_dict) # Set up cronjob for this @app.get("/update_sweep_prs_v2") diff --git a/sweepai/config/server.py b/sweepai/config/server.py index 5141c20992..1064e8eb13 100644 --- a/sweepai/config/server.py +++ b/sweepai/config/server.py @@ -197,9 +197,12 @@ DEPLOYMENT_GHA_ENABLED = os.environ.get("DEPLOYMENT_GHA_ENABLED", "true").lower() == "true" JIRA_USER_NAME = os.environ.get("JIRA_USER_NAME", None) -JIRA_API_TOKEN = os.environ.get("JIRA_API_TOKEN", None) +JIRA_API_TOKEN = os.environ.get("JIRA_API_TOKEN", None) JIRA_URL = os.environ.get("JIRA_URL", None) +LINEAR_API_KEY = os.environ.get("LINEAR_API_KEY", None) +LINEAR_LABEL_NAME = os.environ.get("LINEAR_LABEL_NAME", "sweep") + SLACK_API_KEY = os.environ.get("SLACK_API_KEY", None) LICENSE_KEY = os.environ.get("LICENSE_KEY", None) diff --git a/sweepai/handlers/on_linear_ticket.py b/sweepai/handlers/on_linear_ticket.py new file mode 100644 index 0000000000..7cb31aa25d --- /dev/null +++ b/sweepai/handlers/on_linear_ticket.py @@ -0,0 +1,21 @@ +import os +from typing import Any, Dict + +from loguru import logger + +LINEAR_LABEL_NAME = os.environ.get("LINEAR_LABEL_NAME", "sweep") + +def handle_linear_ticket(event: Dict[str, Any]): + try: + ticket_data = event["data"] + ticket_labels = ticket_data.get("labels", []) + + if any(label["name"].lower() == LINEAR_LABEL_NAME.lower() for label in ticket_labels): + logger.info(f"Sweep label detected on Linear ticket {ticket_data['id']}") + # TODO: Implement Sweep workflow logic here + # Reference on_jira_ticket.py for how to process the ticket and kick off Sweep + else: + logger.info(f"Sweep label not found on Linear ticket {ticket_data['id']}") + + except Exception as e: + logger.exception(f"Error processing Linear webhook event: {e}") \ No newline at end of file