245 lines
6.9 KiB
JavaScript
245 lines
6.9 KiB
JavaScript
/* exported Script */
|
||
|
||
String.prototype.capitalizeFirstLetter = function() {
|
||
return this.charAt(0).toUpperCase() + this.slice(1);
|
||
}
|
||
|
||
const getLabelsField = (labels) => {
|
||
let labelsArray = [];
|
||
labels.forEach(function(label) {
|
||
labelsArray.push(label.name);
|
||
});
|
||
labelsArray = labelsArray.join(', ');
|
||
return {
|
||
title: 'Labels',
|
||
value: labelsArray,
|
||
short: labelsArray.length <= 40
|
||
};
|
||
};
|
||
|
||
const githubEvents = {
|
||
ping(request) {
|
||
return {
|
||
content: {
|
||
text: '_' + request.content.hook.id + '_\n' + ':thumbsup: ' + request.content.zen
|
||
}
|
||
};
|
||
},
|
||
|
||
/* NEW OR MODIFY ISSUE */
|
||
issues(request) {
|
||
const user = request.content.sender;
|
||
|
||
if (request.content.action == "opened" || request.content.action == "reopened" || request.content.action == "edited") {
|
||
var body = request.content.issue.body;
|
||
} else if (request.content.action == "labeled") {
|
||
var body = "Current labels: " + getLabelsField(request.content.issue.labels).value;
|
||
} else if (request.content.action == "assigned" || request.content.action == "unassigned") {
|
||
// Note that the issues API only gives you one assignee.
|
||
var body = "Current assignee: " + request.content.issue.assignee.login;
|
||
} else if (request.content.action == "closed") {
|
||
if (request.content.issue.closed_by) {
|
||
var body = "Closed by: " + request.content.issue.closed_by.login;
|
||
} else {
|
||
var body = "Closed.";
|
||
}
|
||
} else {
|
||
return {
|
||
error: {
|
||
success: false,
|
||
message: 'Unsupported issue action'
|
||
}
|
||
};
|
||
}
|
||
|
||
const action = request.content.action.capitalizeFirstLetter();
|
||
|
||
const text = '_' + request.content.repository.full_name + '_\n' +
|
||
'**[' + action + ' issue #' + request.content.issue.number +
|
||
' - ' + request.content.issue.title + '](' +
|
||
request.content.issue.html_url + ')**\n\n' +
|
||
body;
|
||
|
||
return {
|
||
content: {
|
||
attachments: [
|
||
{
|
||
thumb_url: user.avatar_url,
|
||
text: text,
|
||
fields: []
|
||
}
|
||
]
|
||
}
|
||
};
|
||
},
|
||
|
||
/* COMMENT ON EXISTING ISSUE */
|
||
issue_comment(request) {
|
||
const user = request.content.comment.user;
|
||
|
||
if (request.content.action == "edited") {
|
||
var action = "Edited comment ";
|
||
} else {
|
||
var action = "Comment "
|
||
}
|
||
|
||
const text = '_' + request.content.repository.full_name + '_\n' +
|
||
'**[' + action + ' on issue #' + request.content.issue.number +
|
||
' - ' + request.content.issue.title + '](' +
|
||
request.content.comment.html_url + ')**\n\n' +
|
||
request.content.comment.body;
|
||
|
||
return {
|
||
content: {
|
||
attachments: [
|
||
{
|
||
thumb_url: user.avatar_url,
|
||
text: text,
|
||
fields: []
|
||
}
|
||
]
|
||
}
|
||
};
|
||
},
|
||
|
||
/* COMMENT ON COMMIT */
|
||
commit_comment(request) {
|
||
const user = request.content.comment.user;
|
||
|
||
if (request.content.action == "edited") {
|
||
var action = "Edited comment ";
|
||
} else {
|
||
var action = "Comment "
|
||
}
|
||
|
||
const text = '_' + request.content.repository.full_name + '_\n' +
|
||
'**[' + action + ' on commit id ' + request.content.comment.commit_id +
|
||
' - ' + + '](' +
|
||
request.content.comment.html_url + ')**\n\n' +
|
||
request.content.comment.body;
|
||
|
||
return {
|
||
content: {
|
||
attachments: [
|
||
{
|
||
thumb_url: user.avatar_url,
|
||
text: text,
|
||
fields: []
|
||
}
|
||
]
|
||
}
|
||
};
|
||
},
|
||
/* END OF COMMENT ON COMMIT */
|
||
|
||
/* PUSH TO REPO */
|
||
push(request) {
|
||
var commits = request.content.commits;
|
||
var multi_commit = ""
|
||
var is_short = true;
|
||
var changeset = 'Changeset';
|
||
if ( commits.length > 1 ) {
|
||
var multi_commit = " [Multiple Commits]";
|
||
var is_short = false;
|
||
var changeset = changeset + 's';
|
||
var output = [];
|
||
}
|
||
const user = request.content.sender;
|
||
|
||
var text = '**Pushed to ' + "["+request.content.repository.full_name+"]("+request.content.repository.url+"):"
|
||
+ request.content.ref.split('/').pop() + "**\n\n";
|
||
|
||
for (var i = 0; i < commits.length; i++) {
|
||
var commit = commits[i];
|
||
var shortID = commit.id.substring(0,7);
|
||
var a = '[' + shortID + '](' + commit.url + ') - ' + commit.message;
|
||
if ( commits.length > 1 ) {
|
||
output.push( a );
|
||
} else {
|
||
var output = a;
|
||
}
|
||
}
|
||
|
||
if (commits.length > 1) {
|
||
text += output.reverse().join('\n');
|
||
} else {
|
||
text += output;
|
||
}
|
||
|
||
return {
|
||
content: {
|
||
attachments: [
|
||
{
|
||
thumb_url: user.avatar_url,
|
||
text: text,
|
||
fields: []
|
||
}
|
||
]
|
||
}
|
||
};
|
||
}, // End GitHub Push
|
||
|
||
/* NEW PULL REQUEST */
|
||
pull_request(request) {
|
||
const user = request.content.sender;
|
||
|
||
if (request.content.action == "opened" || request.content.action == "reopened" || request.content.action == "edited" || request.content.action == "synchronize") {
|
||
var body = request.content.pull_request.body;
|
||
} else if (request.content.action == "labeled") {
|
||
var body = "Current labels: " + getLabelsField(request.content.pull_request.labels).value;
|
||
} else if (request.content.action == "assigned" || request.content.action == "unassigned") {
|
||
// Note that the issues API only gives you one assignee.
|
||
var body = "Current assignee: " + request.content.pull_request.assignee.login;
|
||
} else if (request.content.action == "closed") {
|
||
if (request.content.pull_request.merged) {
|
||
var body = "Merged by: " + request.content.pull_request.merged_by.login;
|
||
} else {
|
||
var body = "Closed.";
|
||
}
|
||
} else {
|
||
return {
|
||
error: {
|
||
success: false,
|
||
message: 'Unsupported pull request action'
|
||
}
|
||
};
|
||
}
|
||
|
||
const action = request.content.action.capitalizeFirstLetter();
|
||
|
||
const text = '_' + request.content.repository.full_name + '_\n' +
|
||
'**[' + action + ' pull request #' + request.content.pull_request.number +
|
||
' - ' + request.content.pull_request.title + '](' +
|
||
request.content.pull_request.html_url + ')**\n\n' +
|
||
body;
|
||
|
||
return {
|
||
content: {
|
||
attachments: [
|
||
{
|
||
thumb_url: user.avatar_url,
|
||
text: text,
|
||
fields: []
|
||
}
|
||
]
|
||
}
|
||
};
|
||
},
|
||
};
|
||
|
||
class Script {
|
||
process_incoming_request({ request }) {
|
||
const header = request.headers['x-github-event'];
|
||
if (githubEvents[header]) {
|
||
return githubEvents[header](request);
|
||
}
|
||
|
||
return {
|
||
error: {
|
||
success: false,
|
||
message: 'Unsupported method'
|
||
}
|
||
};
|
||
}
|
||
}
|