From 72a439473ab24135ad6d287ceec5b34331020662 Mon Sep 17 00:00:00 2001 From: Abhi-Bohora Date: Sat, 2 Nov 2024 14:44:32 +0545 Subject: [PATCH] Cancel trigger.dev job on unassign --- lib/github/hooks/issue.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/github/hooks/issue.ts b/lib/github/hooks/issue.ts index 8505bee..f889758 100644 --- a/lib/github/hooks/issue.ts +++ b/lib/github/hooks/issue.ts @@ -17,6 +17,7 @@ import { getRepositoryByGithubId } from "@/lib/repository/service"; import { getUser } from "@/lib/user/service"; import { issueReminderTask } from "@/src/trigger/issueReminder"; import { Webhooks } from "@octokit/webhooks"; +import { runs } from "@trigger.dev/sdk/v3"; import { isMemberOfRepository } from "../services/user"; import { @@ -69,6 +70,12 @@ export const onIssueOpened = async (webhooks: Webhooks) => { }); }; +const issueReminderRuns = new Map(); + +const getIssueKey = (owner: string, repo: string, issueNumber: number) => { + return `${owner}/${repo}/${issueNumber}`; +}; + export const onAssignCommented = async (webhooks: Webhooks) => { webhooks.on(EVENT_TRIGGERS.ISSUE_COMMENTED, async (context) => { try { @@ -232,13 +239,15 @@ Thanks for playing 🕹️ OPEN SOURCE LETS GOOOO! `; //send trigger event to wait for 36hrs then send a reminder if the user has not created a pull request try { if (context.payload.installation?.id) { - await issueReminderTask.trigger({ + const {id} = await issueReminderTask.trigger({ issueNumber, repo, owner, commenter, installationId: context.payload.installation.id ?? "", }); + const issueKey = getIssueKey(owner, repo, issueNumber); + issueReminderRuns.set(issueKey, id); } } catch (error) { console.error("Error sending event:", error.message); @@ -331,6 +340,19 @@ export const onUnassignCommented = async (webhooks: Webhooks) => { } const assignee = context.payload.issue.assignees[0].login; + const cancelReminderTask = async () => { + try { + const issueKey = getIssueKey(owner, repo, issueNumber); + const runId = issueReminderRuns.get(issueKey); + + if (runId) { + await runs.cancel(runId); + issueReminderRuns.delete(issueKey); + } + } catch (error) { + console.error("Error cancelling run:", error); + } + }; if (assignee === commenter) { await octokit.issues.removeAssignees({ owner, @@ -338,6 +360,7 @@ export const onUnassignCommented = async (webhooks: Webhooks) => { issue_number: issueNumber, assignees: [assignee], }); + await cancelReminderTask(); await octokit.issues.createComment({ owner, repo,