This repository has been archived by the owner on Mar 4, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
88 lines (82 loc) · 2.03 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
require('dotenv').config();
const { IncomingWebhook } = require('@slack/webhook');
const webhook = new IncomingWebhook(process.env.SLACK_WEBHOOK_URL);
const statusCodes = {
CANCELLED: {
color: '#fbbc05',
text: 'Build cancelled'
},
FAILURE: {
color: '#ea4335',
text: 'Build failed'
},
INTERNAL_ERROR: {
color: '#ea4335',
text: 'Internal error encountered during build'
},
QUEUED: {
color: '#fbbc05',
text: 'New build queued'
},
SUCCESS: {
color: '#34a853',
text: 'Build successfully completed'
},
TIMEOUT: {
color: '#ea4335',
text: 'Build timed out'
},
WORKING: {
color: '#34a853',
text: 'New build in progress'
}
};
const createSlackMessage = (build) => {
const statusMessage = statusCodes[build.status].text;
const branchName = build.substitutions.BRANCH_NAME;
const commitSha = build.substitutions.SHORT_SHA;
return {
text: `${statusMessage} for *${build.projectId}*.`,
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: `${statusMessage} for *${build.projectId}*.`
}
}
],
attachments: [
{
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: `*Build Log:* <${build.logUrl}|${build.id}>`
}
},
{
type: 'context',
elements: [
{
type: 'mrkdwn',
text: `*Branch:* <${process.env.GITHUB_REPO_URL}/tree/${branchName}|${branchName}>`
},
{
type: 'mrkdwn',
text: `*Commit:* <${process.env.GITHUB_REPO_URL}/commit/${commitSha}|${commitSha}>`
}
]
}
],
color: statusCodes[build.status].color
}
]
};
};
module.exports.subscribe = async (event) => {
const build = JSON.parse(Buffer.from(event.data, 'base64').toString());
const message = createSlackMessage(build);
await webhook.send(message);
};