Skip to content

Commit ba76918

Browse files
committed
feat: Version worker
1 parent 932740e commit ba76918

2 files changed

Lines changed: 74 additions & 59 deletions

File tree

source/index.ts

Lines changed: 71 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -20,78 +20,90 @@ interface Env {
2020
DISCORD_WEBHOOK_ID: string;
2121
DISCORD_WEBHOOK_TOKEN: string;
2222
SENTRY_DATA_SOURCE_NAME: string;
23+
CF_VERSION_METADATA: WorkerVersionMetadata;
2324
}
2425

25-
export default withSentry((env) => ({ dsn: env.SENTRY_DATA_SOURCE_NAME, sendDefaultPii: true }), {
26-
async fetch(request, env) {
27-
if (request.method !== "POST") {
28-
return new Response(null, { status: 405 });
29-
}
26+
export default withSentry(
27+
(env) => ({
28+
dsn: env.SENTRY_DATA_SOURCE_NAME,
29+
release: env.CF_VERSION_METADATA.id,
30+
sendDefaultPii: true,
31+
}),
32+
{
33+
async fetch(request, env) {
34+
if (request.method !== "POST") {
35+
return new Response(null, { status: 405 });
36+
}
3037

31-
const eventType = request.headers.get("x-github-event") as WebhookEventName;
38+
const eventType = request.headers.get("x-github-event") as WebhookEventName;
3239

33-
if (eventType === "ping") {
34-
await new API(new REST()).webhooks.execute(
35-
env.DISCORD_WEBHOOK_ID,
36-
env.DISCORD_WEBHOOK_TOKEN,
37-
{ allowed_mentions: { parse: [] }, content: "Ping!" },
38-
);
40+
if (eventType === "ping") {
41+
await new API(new REST()).webhooks.execute(
42+
env.DISCORD_WEBHOOK_ID,
43+
env.DISCORD_WEBHOOK_TOKEN,
44+
{ allowed_mentions: { parse: [] }, content: "Ping!" },
45+
);
3946

40-
return new Response(null, { status: 204 });
41-
}
47+
return new Response(null, { status: 204 });
48+
}
4249

43-
const signature = request.headers.get("x-hub-signature-256");
44-
const text = await request.text();
45-
const webhooks = new Webhooks({ secret: env.GITHUB_WEBHOOK_SECRET });
50+
const signature = request.headers.get("x-hub-signature-256");
51+
const text = await request.text();
52+
const webhooks = new Webhooks({ secret: env.GITHUB_WEBHOOK_SECRET });
4653

47-
try {
48-
await webhooks.verify(text, signature!);
49-
} catch (error) {
50-
console.error(error);
51-
return new Response(null, { status: 401 });
52-
}
54+
try {
55+
await webhooks.verify(text, signature!);
56+
} catch (error) {
57+
console.error(error);
58+
return new Response(null, { status: 401 });
59+
}
5360

54-
const payload = JSON.parse(text) as WebhookEvent;
61+
const payload = JSON.parse(text) as WebhookEvent;
5562

56-
if ("repository" in payload && payload.repository.private) {
57-
return new Response(null, { status: 204 });
58-
}
63+
if ("repository" in payload && payload.repository.private) {
64+
return new Response(null, { status: 204 });
65+
}
5966

60-
let components: APIMessageTopLevelComponent[] | undefined;
67+
let components: APIMessageTopLevelComponent[] | undefined;
6168

62-
if (eventType === "create") {
63-
components = createComponents(payload as CreateEvent);
64-
} else if (eventType === "push") {
65-
const pushEvent = payload as PushEvent;
69+
if (eventType === "create") {
70+
components = createComponents(payload as CreateEvent);
71+
} else if (eventType === "push") {
72+
const pushEvent = payload as PushEvent;
6673

67-
// Deleting a branch or tag triggers a push event with no commits.
68-
// Allow force-pushes.
69-
if (pushEvent.commits.length === 0 && !pushEvent.forced) {
70-
return new Response(null, { status: 204 });
71-
}
74+
// Deleting a branch or tag triggers a push event with no commits.
75+
// Allow force-pushes.
76+
if (pushEvent.commits.length === 0 && !pushEvent.forced) {
77+
return new Response(null, { status: 204 });
78+
}
7279

73-
components = pushCreatedComponents(pushEvent);
74-
} else if (eventType === "delete") {
75-
components = deleteComponents(payload as DeleteEvent);
76-
} else if (eventType === "star") {
77-
const starEvent = payload as StarEvent;
80+
components = pushCreatedComponents(pushEvent);
81+
} else if (eventType === "delete") {
82+
components = deleteComponents(payload as DeleteEvent);
83+
} else if (eventType === "star") {
84+
const starEvent = payload as StarEvent;
7885

79-
if (starEvent.action === "deleted") {
80-
return new Response(null, { status: 204 });
86+
if (starEvent.action === "deleted") {
87+
return new Response(null, { status: 204 });
88+
}
89+
90+
components = starCreatedComponents(starEvent);
91+
} else {
92+
throw new Error(`Unhandled event type: ${eventType}.`);
8193
}
8294

83-
components = starCreatedComponents(starEvent);
84-
} else {
85-
throw new Error(`Unhandled event type: ${eventType}.`);
86-
}
87-
88-
await new API(new REST()).webhooks.execute(env.DISCORD_WEBHOOK_ID, env.DISCORD_WEBHOOK_TOKEN, {
89-
allowed_mentions: { parse: [] },
90-
components,
91-
flags: MessageFlags.IsComponentsV2,
92-
with_components: true,
93-
});
94-
95-
return new Response(null, { status: 204 });
96-
},
97-
} satisfies ExportedHandler<Env>);
95+
await new API(new REST()).webhooks.execute(
96+
env.DISCORD_WEBHOOK_ID,
97+
env.DISCORD_WEBHOOK_TOKEN,
98+
{
99+
allowed_mentions: { parse: [] },
100+
components,
101+
flags: MessageFlags.IsComponentsV2,
102+
with_components: true,
103+
},
104+
);
105+
106+
return new Response(null, { status: 204 });
107+
},
108+
} satisfies ExportedHandler<Env>,
109+
);

wrangler.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ routes = [{ pattern = "github-discord.thatskyapplication.com", custom_domain = t
88

99
[observability]
1010
enabled = true
11+
12+
[version_metadata]
13+
binding = "CF_VERSION_METADATA"

0 commit comments

Comments
 (0)