Skip to content

Instantly share code, notes, and snippets.

@Saqoosha
Last active August 10, 2022 15:31
Show Gist options
  • Save Saqoosha/4d9580564ac3e4caab7d to your computer and use it in GitHub Desktop.
Save Saqoosha/4d9580564ac3e4caab7d to your computer and use it in GitHub Desktop.
Send GitHub wiki update notification to Slack by using AWS Lambda
console.log('Loading function');
var util = require('util');
var url = require('url');
var https = require('https');
var hookURL = "https://hooks.slack.com/services/............";
var postMessage = function(message, callback) {
var body = JSON.stringify(message);
var options = url.parse(hookURL);
options.method = 'POST';
options.headers = {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(body),
};
var postReq = https.request(options, function(res) {
var chunks = [];
res.setEncoding('utf8');
res.on('data', function(chunk) {
return chunks.push(chunk);
});
res.on('end', function() {
var body = chunks.join('');
if (callback) {
callback({
body: body,
statusCode: res.statusCode,
statusMessage: res.statusMessage
});
}
});
return res;
});
postReq.write(body);
postReq.end();
};
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
var slackMessage = {
username: "GitHub Webhook",
icon_emoji: ":octocat:",
};
var page = event.pages[0];
switch (page.action) {
case "created":
slackMessage.text = util.format("[%s] New wiki page <%s|%s> created by %s.", event.repository.full_name, page.html_url, page.page_name, event.sender.login);
break;
case "edited":
slackMessage.text = util.format("[%s] Wiki page <%s|%s> edited by %s.", event.repository.full_name, page.html_url, page.page_name, event.sender.login);
break;
default:
slackMessage.text = "Unknown wiki update...";
break;
}
postMessage(slackMessage, function(response) {
if (response.statusCode < 400) {
console.info('Message posted successfully');
context.succeed();
} else if (response.statusCode < 500) {
console.error("Error posting message to Slack API: " + response.statusCode + " - " + response.statusMessage);
context.succeed(); // Don't retry because the error is due to a problem with the request
} else {
// Let Lambda retry
context.fail("Server error when processing message: " + response.statusCode + " - " + response.statusMessage);
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment