1
import { TriggerClient, cronTrigger } from "@trigger.dev/sdk";
2
import { Github } from "@trigger.dev/github";
3
import { OpenAI } from "@trigger.dev/openai";
4
import { Slack } from "@trigger.dev/slack";
6
const github = new Github({
8
token: process.env.GITHUB_TOKEN!,
11
const openai = new OpenAI({
13
apiKey: process.env.OPENAI_API_KEY!,
16
const slack = new Slack({ id: "slack" });
20
id: "summarize-yesterday-commits-on-slack",
21
name: "Summarize yesterdays GitHub commits on Slack",
23
trigger: cronTrigger({
33
run: async (payload, io, ctx) => {
35
const since = payload.lastTimestamp?.toISOString();
36
const until = payload.ts?.toISOString();
39
const owner = "<your-org-name>";
40
const repo = "<your-repo-name>";
42
const { data } = await io.github.runTask(
43
"get-yesterdays-commits",
45
return client.rest.repos.listCommits({
52
{ name: "Get Yesterday's Commits" }
56
const formattedCommits = await io.runTask("format-commits", async () => {
57
return data.map((commit) => {
59
author: commit.commit.author?.name,
60
message: commit.commit.message,
61
time: commit.commit.author?.date,
62
link: commit.html_url,
68
const chatCompletion = await io.openai.createChatCompletion(
71
model: "gpt-3.5-turbo",
75
content: `You are a expert programmer experienced in GitHub.
76
You are to concisely summarize the GitHub commits in one message.
77
Reply with a heading message -- 'GitHub Commits for ${repo} yesterday'
78
-- followed by a summary of the commits. Use bullet points in your summary
79
list and use appropriate spacing for maximum readability.`,
83
content: `Here are all of the GitHub commits from yesterday
84
(delimited by triple quotes below). Please summarize them like
85
"{user} {message} ({url})".\n\n"""${JSON.stringify(
96
const response = await io.slack.postMessage("post message", {
97
channel: process.env.SLACK_CHANNEL_ID!,
98
text: chatCompletion.choices[0]?.message?.content || "No summary found",