"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') }}

`); } resultIsAvailable(dedent`

GitHub

Last updated: {{ formatDate(lastUpdated) }}
${renderedEvents.join("")}
`); }); const gitHubFeed = function (err, stuff) { return err; }; function generateGitHubEvent(event) { switch (event) { case event.type === "CommitCommentEvent": return ` ${event.actor.display_login} commented on commit in `; case event.type === "CreateEvent": return ` ${event.actor.display_login} created ${event.payload.ref_type} ${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;