Back to jobs
Trigger: eventTrigger
Sends a reminder message to a Slack channel if a GitHub issue is left open for 24 hours.
/src/githubIssueReminder
Dev Ops
1import { TriggerClient } from "@trigger.dev/sdk";2import { Github, events } from "@trigger.dev/github";3import { Slack } from "@trigger.dev/slack";45const client = new TriggerClient({ id: "jobs-showcase" });67const github = new Github({ id: "github" });8const slack = new Slack({ id: "slack" });910// Sends a Slack message to a channel if a GitHub issue is left open for 24 hours11client.defineJob({12id: "github-new-issue-reminder",13name: "GitHub: new issue reminder",14version: "1.0.0",15trigger: github.triggers.repo({16event: events.onIssueOpened,17owner: "<your-org-name>",18repo: "<your-repo-name>",19}),20integrations: {21github,22slack,23},24run: async (payload, io, ctx) => {25const delayDuration =26ctx.environment.type === "DEVELOPMENT" ? 3 : 60 * 60 * 24;27await io.wait("wait 24 hours", delayDuration);2829const issue = await io.github.getIssue("get issue", {30owner: payload.repository.owner.login,31repo: payload.repository.name,32issueNumber: payload.issue.number,33});3435if (issue.updated_at === payload.issue.updated_at) {36const assigneeResult = await io.github.addIssueAssignees("add assignee", {37owner: payload.repository.owner.login,38repo: payload.repository.name,39issueNumber: payload.issue.number,40assignees: [payload.sender.login],41});4243await io.slack.postMessage("send reminder", {44channel: process.env.SLACK_CHANNEL_ID!,45text: `Issue ${payload.issue.title} is still open. I've assigned it to ${payload.sender.login}.\n${issue.html_url}`,46});47}48},49});5051// These lines can be removed if you don't want to use express52import { createExpressServer } from "@trigger.dev/express";53createExpressServer(client);