"use strict";
// P A C K A G E S
const async = require("async");
const color = require("colorette");
const local = require("app-root-path").require;
const octokit = require("@octokit/rest")();
const redis = require("redis");
// U T I L S
const messageSlack = local("/app/helpers/slack");
const relativeDate = local("/app/modules/relative-date");
String.prototype.escape = function() {
const tagsToReplace = {
"&": "&",
"<": "<",
">": ">"
};
return this.replace(/[&<>]/g, tag => tagsToReplace[tag] || tag);
};
// R E D I S
let client;
if (typeof process.env.GITHUB_OAUTH_TOKEN !== "undefined") {
// new octokit({
// auth: `token ${process.env.GITHUB_OAUTH_TOKEN}`
// });
// https://github.com/octokit/rest.js/issues/1207
octokit.authenticate({
type: "oauth",
token: process.env.GITHUB_OAUTH_TOKEN
});
} else process.stdout.write(`${color.red("[missing]")} GitHub token`);
if (typeof process.env.REDISCLOUD_URL !== "undefined") {
client = redis.createClient(process.env.REDISCLOUD_URL);
client.on("error", redisError => {
process.env.NODE_ENV === "development" ?
process.stdout.write(`\n${color.yellow("Unable to connect to Redis client.")}\nYou may be missing an .env file or your connection was reset.`) :
messageSlack(
"\n" +
"> *REDIS ERROR:* ```" + JSON.parse(JSON.stringify(redisError)) + "```" + "\n" +
"> _Cause: Someone is trying to run LBRY.tech locally without environment variables OR Heroku is busted_\n"
)
;
});
} else process.stdout.write(`${color.red("[missing]")} Redis client URL`);
// P R O G R A M
function generateEvent(event) {
switch(event.type) {
case "CommitCommentEvent":
return `
${event.actor.display_login} commented on
commit in
`;
case "CreateEvent":
return `
${event.actor.display_login} created ${event.payload.ref_type}
${refToBranch(event.payload.ref)}
in
`;
case "DeleteEvent":
return `
${event.actor.display_login} deleted
${event.payload.ref_type} ${event.payload.ref}
in
`;
case "ForkEvent":
return `
${event.actor.display_login} forked
${event.repo.name} to
${event.payload.forkee.full_name}
`;
case "IssueCommentEvent":
if (event.payload.issue.pull_request) {
return `
${event.actor.display_login} commented on pull request
${event.payload.issue.title.escape()} in
`;
} else {
return `
${event.actor.display_login} commented on issue
${event.payload.issue.title.escape()} in
`;
}
case "IssuesEvent":
return `
${event.actor.display_login} ${event.payload.action} issue
${event.payload.issue.title.escape()} in
`;
case "PullRequestEvent":
return `
${event.actor.display_login} pull request
${event.payload.pull_request.title.escape()} in
`;
case "PullRequestReviewCommentEvent":
return `
${event.actor.display_login} commented on pull request
${event.payload.pull_request.title.escape()} in
`;
case "PushEvent":
return `
${event.actor.display_login} pushed to
${refToBranch(event.payload.ref)}
in
`;
case "ReleaseEvent":
return `
${event.actor.display_login} released
${event.payload.release.tag_name} in
`;
case "WatchEvent":
return `
${event.actor.display_login} starred the repo
`;
default:
break;
}
}
function generateGitHubFeed(displayGitHubFeed) {
if (typeof process.env.REDISCLOUD_URL !== "undefined") {
client.zrevrange("events", 0, 9, (err, reply) => {
if (err) return; // TODO: Render a div with nice error message
const events = [];
const renderedEvents = [];
reply.forEach(item => events.push(JSON.parse(item)));
for (const event of events) {
const repoName = `
${event.repo.name}
`;
renderedEvents.push(`
${generateEvent(event)} ${event.type !== "ForkEvent" ? repoName : ""} ${relativeDate(new Date(event.created_at))}