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";
5
const github = new Github({
7
token: process.env.GITHUB_TOKEN!,
10
const openai = new OpenAI({
12
apiKey: process.env.OPENAI_API_KEY!,
15
const slack = new Slack({ id: "slack" });
19
id: "summarize-yesterday-commits-on-slack",
20
name: "Summarize yesterdays GitHub commits on Slack",
22
trigger: cronTrigger({
32
run: async (payload, io, ctx) => {
34
const since = payload.lastTimestamp?.toISOString();
35
const until = payload.ts?.toISOString();
38
const owner = "<your-org-name>";
39
const repo = "<your-repo-name>";
41
const { data } = await io.github.runTask(
42
"get-yesterdays-commits",
44
return client.rest.repos.listCommits({
51
{ name: "Get Yesterday's Commits" }
55
const formattedCommits = await io.runTask("format-commits", async () => {
56
return data.map((commit) => {
58
author: commit.commit.author?.name,
59
message: commit.commit.message,
60
time: commit.commit.author?.date,
61
link: commit.html_url,
67
const chatCompletion = await io.openai.createChatCompletion(
70
model: "gpt-3.5-turbo",
74
content: `You are a expert programmer experienced in GitHub.
75
You are to concisely summarize the GitHub commits in one message.
76
Reply with a heading message -- 'GitHub Commits for ${repo} yesterday'
77
-- followed by a summary of the commits. Use bullet points in your summary
78
list and use appropriate spacing for maximum readability.`,
82
content: `Here are all of the GitHub commits from yesterday
83
(delimited by triple quotes below). Please summarize them like
84
"{user} {message} ({url})".\n\n"""${JSON.stringify(
95
const response = await io.slack.postMessage("post message", {
96
channel: process.env.SLACK_CHANNEL_ID!,
97
text: chatCompletion.choices[0]?.message?.content || "No summary found",