Last active
September 21, 2019 00:33
-
-
Save VirtuBox/072e6d52c7a49b6c9165ce7725b190c1 to your computer and use it in GitHub Desktop.
Github releases integration with rocket.chat (issue, commit, push, pull request, comment, release)
This file contains hidden or 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 */ | |
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: [] | |
}] | |
} | |
}; | |
}, | |
/* NEW RELEASE */ | |
release(request) { | |
const user = request.content./* 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: [] | |
}] | |
} | |
}; | |
}, | |
/* NEW RELEASE */ | |
release(request) { | |
const user = request.content.sender; | |
if (request.content.action == "published") { | |
var body = request.content.release.body; | |
} else { | |
return { | |
error: { | |
success: false, | |
message: 'Unsupported release action' | |
} | |
}; | |
} | |
const action = request.content.action.capitalizeFirstLetter(); | |
const text = '_' + request.content.repository.full_name + '_\n' + | |
'**[' + 'Release ' + request.content.release.name + '](' + | |
request.content.release.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' | |
} | |
}; | |
} | |
}; | |
if (request.content.action == "published") { | |
var body = request.content.release.body; | |
} else { | |
return { | |
error: { | |
success: false, | |
message: 'Unsupported release action' | |
} | |
}; | |
} | |
const action = request.content.action.capitalizeFirstLetter(); | |
const text = '_' + request.content.repository.full_name + '_\n' + | |
'**[' + 'Release ' + request.content.release.name + '](' + | |
request.content.release.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' | |
} | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment