"use strict"; require("dotenv").config(); // P A C K A G E S const dedent = require("dedent"); const html = require("choo-async/html"); const local = require("app-root-path").require; const octokit = require("@octokit/rest")(); const redis = require("redis"); // V A R I A B L E S if (typeof process.env.GITHUB_OAUTH_TOKEN !== "undefined") { octokit.authenticate({ type: "oauth", token: process.env.GITHUB_OAUTH_TOKEN }); } // const logSlackError = local("/helpers/slack"); let client; // process.env.NODE_ENV === "development" ? "" : redisClient = redis.createClient(process.env.REDISCLOUD_URL); client = redis.createClient(process.env.REDISCLOUD_URL); client.on("error", err => { // eslint-disable-line // console.log("Error", err); // logSlackError }); // P R O G R A M client.zrevrange("events", 0, 9, (err, reply) => { if (err) return; const events = []; const renderedEvents = []; reply.forEach(item => events.push(JSON.parse(item))); for (const event of events) { // console.log(event.type); renderedEvents.push(`
${generateGitHubEvent(event)} ${event.repo.name} {{ event.created_at | moment('from') }}
${event.payload.ref}
in
`;
case event.type === "DeleteEvent":
return `
${event.actor.display_login} deleted
${event.payload.ref_type} ${event.payload.ref}
in
`;
case event.type === "ForkEvent":
return `
${event.actor.display_login} forked
${event.repo.name} to
${event.payload.forkee.name} in
`;
case event.type === "IssueCommentEvent":
if (event.payload.issue.pull_request) {
return `
${event.actor.display_login} commented on pull request
${event.payload.issue.title} in
`;
} else {
return `
${event.actor.display_login} commented on issue
${event.payload.issue.title} in
`;
}
case event.type === "IssuesEvent":
return `
${event.actor.display_login} ${event.payload.action} issue
${event.payload.issue.title} in
`;
case event.type === "PullRequestEvent":
return `
${event.actor.display_login} ${event.payload.action} pull request
${event.payload.pull_request.title} in
`;
case event.type === "PullRequestReviewCommentEvent":
return `
${event.actor.display_login} commented on pull request
${event.payload.pull_request.title} in
`;
case event.type === "PushEvent":
return `
${event.actor.display_login} pushed to
${refToBranch(event.payload.ref)}
in
`;
case event.type === "ReleaseEvent":
return `
${event.actor.display_login} released
${event.payload.release.tag_name} in
`;
case event.type === "WatchEvent":
return `
${event.actor.display_login} starred the repo
`;
default:
break;
}
}
function generateGitHubUrl(type, event) {
switch (type) {
case "actor":
return `https://github.com/${event.actor.display_login}`;
case "comment":
return event.payload.comment.html_url;
case "repo":
return `https://github.com/${event.repo.name}`;
case "forkee":
return `https://github.com/${event.payload.forkee.full_name}`;
case "issue":
return event.payload.issue.html_url;
case "pull_request":
return event.payload.pull_request.html_url;
case "release":
return event.payload.release.html_url;
case "push":
return `https://github.com/${event.repo.name}/tree/${event.payload.ref.replace("refs/heads/", "")}`;
default:
break;
}
}
function refToBranch(ref) {
return ref.replace("refs/heads/", "");
}
// E X P O R T
module.exports = exports = gitHubFeed;