From d2ef91ea9518a55029c165c6d4e73857f54961a9 Mon Sep 17 00:00:00 2001 From: "sweep-nightly[bot]" <131841235+sweep-nightly[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 07:37:42 +0000 Subject: [PATCH 1/3] feat: Updated 3 files --- sweepai/api.py | 14 ++++++++++++-- sweepai/config/server.py | 6 ++++-- sweepai/handlers/on_linear_ticket.py | 22 ++++++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 sweepai/handlers/on_linear_ticket.py diff --git a/sweepai/api.py b/sweepai/api.py index e30f68765b..1d84529796 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.utils.buttons import ( check_button_activated, @@ -333,13 +334,22 @@ def call_jira_ticket(*args, **kwargs): thread.start() call_jira_ticket(event=request_dict) -# Set up cronjob for this +@app.post("/linear") +def linear_webhook( + request_dict: dict = Body(...), +) -> None: + def call_linear_ticket(*args, **kwargs): + thread = threading.Thread(target=handle_linear_ticket, args=args, kwargs=kwargs) + thread.start() + call_linear_ticket(event=request_dict) + +# Set up cronjob for this @app.get("/update_sweep_prs_v2") def update_sweep_prs_v2(repo_full_name: str, installation_id: int): # Get a Github client _, g = get_github_client(installation_id) - # Get the repository + # Get the repository repo = g.get_repo(repo_full_name) config = SweepConfig.get_config(repo) diff --git a/sweepai/config/server.py b/sweepai/config/server.py index 5141c20992..31030fd2f7 100644 --- a/sweepai/config/server.py +++ b/sweepai/config/server.py @@ -160,7 +160,7 @@ ENV = "prod" if GITHUB_BOT_USERNAME != TEST_BOT_NAME else "dev" PROGRESS_BASE_URL = os.environ.get( - "PROGRESS_BASE_URL", "https://progress.sweep.dev" + "PROGRESS_BASE_URL", "https://progress.sweep.dev" ).rstrip("/") DISABLED_REPOS = os.environ.get("DISABLED_REPOS", "").split(",") @@ -200,7 +200,9 @@ 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) + SLACK_API_KEY = os.environ.get("SLACK_API_KEY", None) -LICENSE_KEY = os.environ.get("LICENSE_KEY", None) +LICENSE_KEY = os.environ.get("LICENSE_KEY", None) ALTERNATE_AWS = os.environ.get("ALTERNATE_AWS", "none").lower() == "true" \ No newline at end of file diff --git a/sweepai/handlers/on_linear_ticket.py b/sweepai/handlers/on_linear_ticket.py new file mode 100644 index 0000000000..df181f2d47 --- /dev/null +++ b/sweepai/handlers/on_linear_ticket.py @@ -0,0 +1,22 @@ +from typing import Dict + +from sweepai.utils.event_logger import logger + +def handle_linear_ticket(event: Dict): + """Handle a Linear ticket event.""" + logger.info(f"Received Linear ticket event: {event}") + + # Extract relevant information from the event payload + ticket_id = event["data"]["id"] + ticket_title = event["data"]["title"] + ticket_description = event["data"]["description"] + + # Check if the ticket has the "Sweep" label + has_sweep_label = any(label["name"] == "Sweep" for label in event["data"]["labels"]["nodes"]) + + if has_sweep_label: + # Invoke the Sweep workflow for the Linear ticket + logger.info(f"Linear ticket {ticket_id} has the Sweep label, invoking Sweep workflow") + # TODO: Implement Sweep workflow for Linear tickets + else: + logger.info(f"Linear ticket {ticket_id} does not have the Sweep label, ignoring") \ No newline at end of file From db0068342b5b3ca709b103a4b9e59d87898d830d Mon Sep 17 00:00:00 2001 From: "sweep-nightly[bot]" <131841235+sweep-nightly[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 07:46:08 +0000 Subject: [PATCH 2/3] feat: Updated 1 files --- sweepai/handlers/on_linear_ticket.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/sweepai/handlers/on_linear_ticket.py b/sweepai/handlers/on_linear_ticket.py index df181f2d47..76c332069f 100644 --- a/sweepai/handlers/on_linear_ticket.py +++ b/sweepai/handlers/on_linear_ticket.py @@ -8,8 +8,8 @@ def handle_linear_ticket(event: Dict): # Extract relevant information from the event payload ticket_id = event["data"]["id"] - ticket_title = event["data"]["title"] - ticket_description = event["data"]["description"] + + # Check if the ticket has the "Sweep" label has_sweep_label = any(label["name"] == "Sweep" for label in event["data"]["labels"]["nodes"]) @@ -17,6 +17,17 @@ def handle_linear_ticket(event: Dict): if has_sweep_label: # Invoke the Sweep workflow for the Linear ticket logger.info(f"Linear ticket {ticket_id} has the Sweep label, invoking Sweep workflow") - # TODO: Implement Sweep workflow for Linear tickets + from sweepai.handlers.on_ticket import on_ticket + + on_ticket( + title=f"Linear Ticket {ticket_id}: {event['data']['title']}", + summary=event["data"]["description"], + issue_number=ticket_id, + issue_url=event["url"], + username=event["data"]["creator"]["name"], + repo_full_name="linear_repo", # Get repo name from Linear ticket + repo_description="", + installation_id=0, # Map Linear user to GitHub installation ID + ) else: logger.info(f"Linear ticket {ticket_id} does not have the Sweep label, ignoring") \ No newline at end of file From 9855dac2c34ed5137ae572e5159303ef2338d8fc Mon Sep 17 00:00:00 2001 From: "sweep-nightly[bot]" <131841235+sweep-nightly[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 07:59:50 +0000 Subject: [PATCH 3/3] feat: Updated 1 files --- sweepai/handlers/on_linear_ticket.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sweepai/handlers/on_linear_ticket.py b/sweepai/handlers/on_linear_ticket.py index 76c332069f..f7ff86c156 100644 --- a/sweepai/handlers/on_linear_ticket.py +++ b/sweepai/handlers/on_linear_ticket.py @@ -19,9 +19,10 @@ def handle_linear_ticket(event: Dict): logger.info(f"Linear ticket {ticket_id} has the Sweep label, invoking Sweep workflow") from sweepai.handlers.on_ticket import on_ticket + ticket_description = event["data"]["description"] on_ticket( title=f"Linear Ticket {ticket_id}: {event['data']['title']}", - summary=event["data"]["description"], + summary=ticket_description, issue_number=ticket_id, issue_url=event["url"], username=event["data"]["creator"]["name"],