Last active
August 11, 2016 12:02
-
-
Save khobbits/a61ac19e07b95f14e9385633ccb2fa6f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* exported Script | |
Issue events (create, edit, close, reopen, assign, label, etc) | |
Issue comment events | |
Push events (singular and multiple commits) | |
*/ | |
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) { | |
if (typeof request.content.repository == "undefined") { | |
return { | |
content: { | |
text: '_' + request.content.organization.description + '_\n' + ':thumbsup: ' + request.content.zen | |
} | |
}; | |
} else { | |
return { | |
content: { | |
text: '_' + request.content.repository.full_name + '_\n' + ':thumbsup: ' + request.content.zen | |
} | |
}; | |
} | |
}, | |
/* member */ | |
member(request) { | |
const user = request.content.sender; | |
const action = request.content.action.capitalizeFirstLetter(); | |
const text = '_' + request.content.repository.full_name + '_\n' + | |
'**[' + action + ' member @' + request.content.member.login + | |
"**" + '](' + | |
request.content.member.html_url + ')'; | |
return { | |
content: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
text: text, | |
fields: [] | |
} | |
] | |
} | |
}; | |
}, | |
/* membership */ | |
membership(request) { | |
const user = request.content.sender; | |
const action = request.content.action.capitalizeFirstLetter(); | |
const text = '_' + request.content.organization.login + '/' + request.content.team.name + '_\n' + | |
'**[' + action + ' member @' + request.content.member.login + | |
"**" + '](' + | |
request.content.member.html_url + ')\n\nPermission Level: ' + request.content.team.permission; | |
return { | |
content: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
text: text, | |
fields: [] | |
} | |
] | |
} | |
}; | |
}, | |
/* repository */ | |
repository(request) { | |
const user = request.content.sender; | |
const action = request.content.action.capitalizeFirstLetter(); | |
const text = '_' + request.content.repository.full_name + '_\n' + | |
'**[' + action + ' repo ' + request.content.repository.name + | |
"**" + '](' + | |
request.content.repository.html_url + ')'; | |
return { | |
content: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
text: text, | |
fields: [] | |
} | |
] | |
} | |
}; | |
}, | |
/* 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: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
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: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
text: text, | |
fields: [] | |
} | |
] | |
} | |
}; | |
}, | |
*/ | |
/* Create branch/tag */ | |
create(request) { | |
const user = request.content.sender; | |
var text = '**Created new ' + request.content.ref_type + ": ["+request.content.repository.full_name+"]("+request.content.repository.url+"):" | |
+ request.content.ref.split('/').pop() + "**"; | |
return { | |
content: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
text: text, | |
fields: [] | |
} | |
] | |
} | |
}; | |
}, | |
/* Delete branch/tag */ | |
delete(request) { | |
const user = request.content.sender; | |
var text = '**Deleted ' + request.content.ref_type + ": ["+request.content.repository.full_name+"]("+request.content.repository.url+"):" | |
+ request.content.ref.split('/').pop() + "**"; | |
return { | |
content: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
text: text, | |
fields: [] | |
} | |
] | |
} | |
}; | |
}, | |
/* PUSH TO REPO */ | |
push(request) { | |
const user = request.content.sender; | |
var commits = request.content.commits; | |
var text = '**Pushed to ' + "["+request.content.repository.full_name+"]("+request.content.repository.url+"):" | |
+ request.content.ref.split('/').pop() + "**\n\n"; | |
var output = []; | |
if (commits.length == 0 && request.content.head_commit != null) { | |
commits.push(request.content.head_commit); | |
text += 'Set tag/branch reference to:' + "\n"; | |
} else if (commits.length == 0) { | |
text += 'Set tag/branch reference to: ' + request.content.after; | |
} | |
for (var i = 0; i < commits.length; i++) { | |
var commit = commits[i]; | |
var shortID = commit.id.substring(0,7); | |
var a = '[' + shortID + '](' + commit.url + ') - '; | |
var commitMessages = commit.message.split('\n') | |
if (commits.length > 1) { | |
a += commitMessages.shift(); | |
} | |
else if (commitMessages.length > 5) { | |
a += commitMessages.shift(); | |
a += "..."; | |
} | |
else { | |
a += commit.message; | |
} | |
output.push( a ); | |
} | |
text += output.reverse().slice(0,4).join('\n'); | |
if (output.length > 4) { | |
text += "\n(+" + (output.length - 4) + ' commits)'; | |
} | |
text += "\n[Diff/Full Changes]("+request.content.compare+")" | |
return { | |
content: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
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: { | |
icon_url: user.avatar_url, | |
alias: user.login, | |
attachments: [ | |
{ | |
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' | |
} | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment