GitHub feed is working

This commit is contained in:
ポール ウェッブ 2018-07-12 16:07:16 -05:00
parent 171445418f
commit 754b92fc08
14 changed files with 338 additions and 534 deletions

View file

@ -3,6 +3,3 @@ node_js:
- "10.2"
before_install:
- npm i -g npm@latest
- curl -o- -L https://yarnpkg.com/install.sh | bash
- export PATH="$HOME/.yarn/bin:$PATH"
- yarn config set ignore-engines true

View file

@ -53,4 +53,4 @@ We take security seriously. Please contact [security@lbry.io](mailto:security@lb
## Contact
The primary contact for this project is [@netoperatorwibby](https://github.com/netoperatorwibby)
The primary contact for this project is [@netoperatorwibby](https://github.com/netoperatorwibby).

133
helpers/github.js Normal file
View file

@ -0,0 +1,133 @@
"use strict";
// P R O G R A M
function generateEvent(event) {
switch (event.type) {
case "CommitCommentEvent":
return `
<strong>${event.actor.display_login}</strong> commented on
<a href="${generateUrl("comment", event)}" title="View this comment on GitHub">commit</a> in
`;
case "CreateEvent":
return `
<strong>${event.actor.display_login}</strong> created
${event.payload.ref_type} <code>${event.payload.ref}</code> in
`;
case "DeleteEvent":
return `
<strong>${event.actor.display_login}</strong> deleted
${event.payload.ref_type} <code>${event.payload.ref}</code> in
`;
case "ForkEvent":
return `
<strong>${event.actor.display_login}</strong> forked
<strong><a href="${generateUrl("repo", event)}" title="View this repo on GitHub" target="_blank" rel="noopener noreferrer">${event.repo.name}</a></strong> to
<strong><a href="${generateUrl("forkee", event)}" title="View this repo fork on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.forkee.name}</a></strong> in
`;
case "IssueCommentEvent":
if (event.payload.issue.pull_request) {
return `
<strong>${event.actor.display_login}</strong> commented on pull request
<em><a href="${generateUrl("issue", event)}" title="View this comment on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.issue.title}</a></em> in
`;
} else {
return `
<strong>${event.actor.display_login}</strong> commented on issue
<em><a href="${generateUrl("issue", event)}" title="View this comment on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.issue.title}</a></em> in
`;
}
case "IssuesEvent":
return `
<strong>${event.actor.display_login}</strong> ${event.payload.action} issue
<em><a href="${generateUrl("issue", event)}" title="View this issue on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.issue.title}</a></em> in
`;
case "PullRequestEvent":
return `
<strong>${event.actor.display_login}</strong> ${event.payload.action} pull request
<em><a href="${generateUrl("pull_request", event)}" title="View this pull request on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.pull_request.title}</a></em> in
`;
case "PullRequestReviewCommentEvent":
return `
<strong>${event.actor.display_login}</strong> commented on pull request
<em><a href="${generateUrl("pull_request", event)}" title="View this comment on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.pull_request.title}</a></em> in
`;
case "PushEvent":
return `
<strong>${event.actor.display_login}</strong> pushed to
<code><a href="${generateUrl("push", event)}" title="View this branch on GitHub" target="_blank" rel="noopener noreferrer">${refToBranch(event.payload.ref)}</a></code> in
`;
case "ReleaseEvent":
return `
<strong>${event.actor.display_login}</strong> released
<em><a href="${generateUrl("release", event)}" title="View this release on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.release.tag_name}</a></em> in
`;
case "WatchEvent":
return `
<strong>${event.actor.display_login}</strong> starred the repo
`;
default:
break;
}
}
function generateUrl(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;
}
}
// H E L P E R
function refToBranch(ref) {
return ref.replace("refs/heads/", "");
}
// E X P O R T
module.exports = exports = {
generateEvent,
generateUrl
};

View file

@ -1,30 +0,0 @@
"use strict";
// P R O G R A M
module.exports = exports = promises => { // via https://gist.github.com/peisenmann/41488a45364974705cd6
return new Promise(resolve => {
let retVals = Array(promises.length).fill();
let states = Array(promises.length).fill();
const f = i => res => {
retVals[i] = res;
states[i] = true;
if (states.every(s => s)) resolve(retVals);
};
promises.forEach((p, i) => {
Promise.resolve(p).then(f(i), f(i));
});
});
};
/***
// Usage
allComplete([p1, p2, p3, "not-a-promise"]).then(result => {
log(result);
});
**/

View file

@ -8,9 +8,8 @@
"@octokit/rest": "^15.9.4",
"app-root-path": "^2.1.0",
"async": "^2.6.1",
"async-redis": "^1.1.4",
"chalk": "^2.4.1",
"choo": "^6.12.1",
"choo": "^6.13.0",
"choo-async": "^0.1.1",
"choo-bundles": "^0.2.4",
"choo-data": "^0.1.1",
@ -18,6 +17,7 @@
"choo-websocket": "^2.0.0",
"cors": "^2.8.4",
"cron": "^1.3.0",
"date-format-lite": "^17.7.0",
"decamelize": "^2.0.0",
"dedent": "^0.7.0",
"dotenv": "^6.0.0",
@ -36,6 +36,7 @@
"markdown-it-sup": "^1.0.0",
"nanohtml": "^1.2.4",
"redis": "^2.8.0",
"relative-date": "^1.1.3",
"request-promise-native": "^1.0.5",
"slack-node": "^0.2.0",
"socket.io": "^2.1.1",
@ -47,7 +48,7 @@
"choo-devtools": "^2.5.1",
"nodemon": "^1.18.1",
"npm-run-all": "^4.1.3",
"sass": "^1.9.0",
"sass": "^1.9.1",
"snazzy": "^7.1.1",
"standardx": "^2.1.0",
"updates": "^3.2.1"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

17
public/scripts/sockets.js Normal file
View file

@ -0,0 +1,17 @@
/* global ws, $ */ "use strict";
ws.onmessage = socket => {
const data = JSON.parse(socket.data);
switch (true) {
case data.message === "updated html":
$(data.selector).html(data.html);
break;
default:
console.log(data);
break;
}
};

View file

@ -15,23 +15,16 @@ body {
overflow-x: hidden;
position: relative;
z-index: 0;
}
main {
display: flex;
flex-direction: column;
min-height: 100vh;
padding-top: 4rem;
&:not(.home) {
> div:first-of-type {
main > div:first-of-type {
flex: 1;
}
}
&.home {
@media (min-width: 1001px) {
> div:first-of-type {
main > div:first-of-type {
display: grid;
grid-gap: 0;
grid-template-areas:
@ -47,6 +40,13 @@ main {
}
}
main {
display: flex;
flex-direction: column;
min-height: 100vh;
padding-top: 4rem;
}
.inner-wrap {
margin-right: auto;
margin-left: auto;

124
server.js
View file

@ -1,4 +1,4 @@
"use strict"; require("dotenv").config();
"use strict"; require("dotenv").config(); require("date-format-lite");
@ -6,9 +6,7 @@
const chalk = require("chalk");
const cors = require("cors");
// const local = require("app-root-path").require;
// V A R I A B L E S
const dedent = require("dedent");
const fastify = require("fastify")({
logger: {
@ -17,14 +15,42 @@ const fastify = require("fastify")({
}
});
const octokit = require("@octokit/rest")();
const redis = require("redis");
const relativeDate = require("relative-date");
const local = require("app-root-path").require;
// V A R I A B L E S
const github = local("/helpers/github");
const log = console.log; // eslint-disable-line
// const logSlackError = local("/helpers/slack");
const logSlackError = local("/helpers/slack");
let client;
if (typeof process.env.GITHUB_OAUTH_TOKEN !== "undefined") {
octokit.authenticate({
type: "oauth",
token: process.env.GITHUB_OAUTH_TOKEN
});
}
if (typeof process.env.REDISCLOUD_URL !== "undefined") {
client = redis.createClient(process.env.REDISCLOUD_URL);
client.on("error", redisError => {
process.env.NODE_ENV === "development" ?
log("Unable to connect to Redis client. You may be missing an .env file") :
logSlackError("An error occured with Redis", redisError)
;
});
}
// P R O G R A M
fastify.use(cors());
fastify.register(require("fastify-compress"));
fastify.register(require("fastify-ws"));
@ -44,47 +70,25 @@ fastify.register(require("choo-ssr/fastify"), {
]
});
/*
fastify.decorate("io", new WebSocket.Server({ server: fastify.server }));
fastify.io.on("connection", (socket, req) => {
console.log("connected");
socket.url = req.url;
socket.on("disconnect", () => {
console.log("someone left");
});
// On message broadcast to everyone
socket.on("message", data => {
// Broadcast to everyone else
fastify.io.clients.forEach(client => {
console.log(socket.url, client.url);
if (socket.url === client.url && client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
});
});
*/
fastify.ready(err => {
if (err) throw err;
fastify.ws.on("connection", socket => {
// console.log("Client connected.");
socket.send("welcome");
socket.send(JSON.stringify({ "message": "welcome" }));
socket.on("message", msg => {
if (msg === "landed on homepage") {
//
generateGitHubFeed(result => {
socket.send(JSON.stringify({
"message": "updated html",
"html": result,
"selector": "#github-feed"
}));
});
}
socket.send(msg); // Creates an echo server
});
socket.on("close", () => console.log("Client disconnected."));
socket.on("close", () => log("Client disconnected.")); // TODO: Close socket?
});
});
@ -100,8 +104,52 @@ const start = async () => {
process.exit(1);
}
log(`\n${chalk.green("⚡")} ${fastify.server.address().port}\n`);
// logSlackError(`Server started at port \`${fastify.server.address().port}\``);
process.env.NODE_ENV === "development" ?
log(`\n${chalk.green("⚡")} ${fastify.server.address().port}\n`) :
logSlackError(`Server started at port \`${fastify.server.address().port}\``)
;
};
start();
// H E L P E R S
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) {
renderedEvents.push(`
<div class='github-feed__event'>
<a href="${github.generateUrl("actor", event)}" target="_blank" rel="noopener noreferrer">
<img src="${event.actor.avatar_url}" class="github-feed__event__avatar" alt=""/>
</a>
<p>
${github.generateEvent(event)}
<a href="${github.generateUrl("repo", event)}" title="View this repo on GitHub" target="_blank" rel="noopener noreferrer"><strong>${event.repo.name}</strong></a>
<em class="github-feed__event__time">${relativeDate(new Date(event.created_at))}</em>
</p>
</div>
`);
}
// TODO: Update `.last-updated` every minute
displayGitHubFeed(dedent`
<h3>GitHub</h3>
<h5 class="last-updated">Last updated: ${new Date().format("YYYY-MM-DD at H:mm:ss A").toLowerCase().replace(/-/g, "&middot;")}</h5>
${renderedEvents.join("")}
`);
});
}
}

View file

@ -1,169 +0,0 @@
"use strict"; require("dotenv").config();
// P A C K A G E S
const async = require("async");
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 redisClient;
// process.env.NODE_ENV === "development" ? "" : redisClient = redis.createClient(process.env.REDISCLOUD_URL);
redisClient = redis.createClient(process.env.REDISCLOUD_URL);
// P R O G R A M
const githubFeed = () => async (state, emit) => { // eslint-disable-line
/* process.env.NODE_ENV === "development" ? "" : */ redisClient.zrevrange("events", 0, 9, (err, reply) => {
if (err) return;
const events = [];
reply.forEach(item => events.push(JSON.parse(item)));
console.log(events);
return events;
// res.json(events); // respond with JSON
});
/*
return html`
<article class="page" itemtype="http://schema.org/BlogPosting">
<header class="page__header">
<div class="page__header-wrap">
<div class="inner-wrap">
<h1 class="page__header__title" itemprop="name headline">Resources</h1>
</div>
</div>
</header>
<section class="page__content" itemprop="articleBody">
<div class="inner-wrap">
<h2>Whitepaper</h2>
<h4>LBRY: A Decentralized Digital Content Marketplace</h4>
<p>Some info here about the whitepaper and <a href="/whitepaper.html">a link</a>.</p>
<h2>API Specification</h2>
<h4>All of our APIs, in one place</h4>
<h3>chainquery</h3>
<ul>
<li><a href="https://github.com/lbryio/chainquery">Codebase</a></li>
<li><a href="">OpenAPI signature</a></li>
</ul>
<h3>lbry</h3>
<ul>
<li><a href="https://lbry.io/api">Codebase</a></li>
<li><a href="/resources/lbry.html">OpenAPI signature</a></li>
</ul>
<h3>lbrycrd</h3>
<ul>
<li><a href="https://github.com/lbryio/lbrycrd">Codebase</a></li>
<li><a href="/resources/lbrycrd.html">OpenAPI signature</a></li>
</ul>
<h3>Lighthouse</h3>
<ul>
<li><a href="https://lbryio.github.io/lighthouse">Codebase</a></li>
<li><a href="">OpenAPI signature</a></li>
</ul>
<h2>The Front Desk</h2>
<h4>Latest news and musings from the LBRY team</h4>
<ul class="blog-posts">
<li class="blog-post">
<a class="blog-post__title" href="https://lbry.io/news/we-are-hiring-our-boss">We're Hiring Our Boss</a>
<div class="blog-post__meta">
<span class="blog-post__meta__date">2018/05/11</span>
<span class="blog-post__meta__author">Samuel Bryan</span>
</div>
</li>
<li class="blog-post">
<a class="blog-post__title" href="https://lbry.io/news/lbry-development-community-update-apr-2018">Development and Community Update April 2018</a>
<div class="blog-post__meta">
<span class="blog-post__meta__date">2018/05/04</span>
<span class="blog-post__meta__author">Samuel Bryan</span>
</div>
</li>
<li class="blog-post">
<a class="blog-post__title" href="https://lbry.io/news/imineblocks">Hey, mine your own business!</a>
<div class="blog-post__meta">
<span class="blog-post__meta__date">2018/04/05</span>
<span class="blog-post__meta__author">Reilly Smith</span>
</div>
</li>
<li class="blog-post">
<a class="blog-post__title" href="https://lbry.io/news/lbry-development-community-update-mar-2018">Development and Community Update March 2018</a>
<div class="blog-post__meta">
<span class="blog-post__meta__date">2018/04/03</span>
<span class="blog-post__meta__author">Tom Zarebczan</span>
</div>
</li>
<li class="blog-post">
<a class="blog-post__title" href="https://lbry.io/news/if-you-still-havent-found-what-youre-searching-for">If you still haven't found what you're searching for...</a>
<div class="blog-post__meta">
<span class="blog-post__meta__date">2018/03/22</span>
<span class="blog-post__meta__author">Brinck Slattery</span>
</div>
</li>
</ul>
</div>
</section>
</article>
<script>
// TODO: make this happen in components/layout
document.getElementsByTagName("body")[0].classList.add("resources"); // documentation
</script>
`;
*/
};
function updateGithubFeed() {
octokit.activity.getEventsForOrg({
org: "lbryio",
per_page: 20,
page: 1
}).then(({ data }) => {
async.eachSeries(data, (item, callback) => {
const eventString = JSON.stringify(item);
redisClient.zrank("events", eventString, (err, reply) => {
if (reply === null) redisClient.zadd("events", item.id, eventString, callback);
else callback();
});
}, () => {
// Keep the latest 50 events
redisClient.zremrangebyrank("events", 0, -51);
});
}).catch(err => {
logSlackError("ERROR: Unable to update Github feed:\n", "```" + JSON.stringify(err) + "```");
});
}
// E X P O R T
module.exports = exports = githubFeed;

View file

@ -5,6 +5,12 @@
// P A C K A G E
const html = require("choo-async/html");
// const local = require("app-root-path").require;
// const test = local("/views/partials/github-feed");
// console.log(test());
// test();
@ -12,6 +18,7 @@ const html = require("choo-async/html");
// eslint-disable-next-line
const home = () => async (state, emit) => html`
<div>
<section class="hero">
<div>
<h1>
@ -57,6 +64,8 @@ const home = () => async (state, emit) => html`
</div>
</section>
<div id="github-feed" class="github-feed"></div>
<section class="contribute">
<div class="inner-wrap">
<h3>Contribute</h3>
@ -77,7 +86,7 @@ const home = () => async (state, emit) => html`
<h3>Development</h3>
<p>Like a bit of documentation but would prefer to jump in and make your mark on the blockchain? Perhaps add cats to it?</p>
<a class="cta" href="/api" title="">Learn the LBRY API</a>
<a class="cta" href="/api" title="Learn the LBRY API">Learn the LBRY API</a>
</div>
</section>
@ -87,12 +96,12 @@ const home = () => async (state, emit) => html`
<p>Hang out with us! We have a vibrant community of lbryians and would be <em>delighted</em> if you joined us.</p>
<ul>
<li><a href="//chat.lbry.io" title="">Discord</a></li>
<li><a href="//www.reddit.com/r/lbry" title="">Reddit</a></li>
<!--/ <li><a href="//" title="">StackOverflow</a></li> /-->
<li><a href="//chat.lbry.io" title="LBRY on Discord">Discord</a></li>
<li><a href="//www.reddit.com/r/lbry" title="LBRY on Reddit">Reddit</a></li>
</ul>
</div>
</section>
</div>
<script>
$(function () {
@ -110,7 +119,7 @@ const home = () => async (state, emit) => html`
return;
} else {
console.log("Waiting for websocket connection to come online");
socketReady(socket,callback);
socketReady(socket, callback);
}
}, 5);
};

View file

@ -1,197 +0,0 @@
"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(`
<div class='github-feed__event'>
<a href="${generateGitHubUrl("actor", event)}" target="_blank" rel="noopener noreferrer">
<img src="${event.actor.avatar_url}" class="github-feed__event__avatar" alt=""/>
</a>
<p>
${generateGitHubEvent(event)}
<a href="${generateGitHubUrl("repo", event)}" title="View this repo on GitHub" target="_blank" rel="noopener noreferrer"><strong>${event.repo.name}</strong></a>
<em class="github-feed__event__time">{{ event.created_at | moment('from') }}</em>
</p>
</div>
`);
}
resultIsAvailable(dedent`
<div id="github-feed" class="github-feed">
<h3>GitHub</h3>
<h5 class="last-updated" v-on:click="updateFeed">Last updated: {{ formatDate(lastUpdated) }}</h5>
${renderedEvents.join("")}
</div>
`);
});
const gitHubFeed = function (err, stuff) {
return err;
};
function generateGitHubEvent(event) {
switch (event) {
case event.type === "CommitCommentEvent":
return `
<strong>${event.actor.display_login}</strong> commented on
<a href="${generateGitHubUrl("comment", event)}" title="View this comment on GitHub">commit</a> in
`;
case event.type === "CreateEvent":
return `
<strong>${event.actor.display_login}</strong> created
${event.payload.ref_type} <code>${event.payload.ref}</code> in
`;
case event.type === "DeleteEvent":
return `
<strong>${event.actor.display_login}</strong> deleted
${event.payload.ref_type} <code>${event.payload.ref}</code> in
`;
case event.type === "ForkEvent":
return `
<strong>${event.actor.display_login}</strong> forked
<strong><a href="${generateGitHubUrl("repo", event)}" title="View this repo on GitHub" target="_blank" rel="noopener noreferrer">${event.repo.name}</a></strong> to
<strong><a href="${generateGitHubUrl("forkee", event)}" title="View this repo fork on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.forkee.name}</a></strong> in
`;
case event.type === "IssueCommentEvent":
if (event.payload.issue.pull_request) {
return `
<strong>${event.actor.display_login}</strong> commented on pull request
<em><a href="${generateGitHubUrl("issue", event)}" title="View this comment on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.issue.title}</a></em> in
`;
} else {
return `
<strong>${event.actor.display_login}</strong> commented on issue
<em><a href="${generateGitHubUrl("issue", event)}" title="View this comment on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.issue.title}</a></em> in
`;
}
case event.type === "IssuesEvent":
return `
<strong>${event.actor.display_login}</strong> ${event.payload.action} issue
<em><a href="${generateGitHubUrl("issue", event)}" title="View this issue on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.issue.title}</a></em> in
`;
case event.type === "PullRequestEvent":
return `
<strong>${event.actor.display_login}</strong> ${event.payload.action} pull request
<em><a href="${generateGitHubUrl("pull_request", event)}" title="View this pull request on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.pull_request.title}</a></em> in
`;
case event.type === "PullRequestReviewCommentEvent":
return `
<strong>${event.actor.display_login}</strong> commented on pull request
<em><a href="${generateGitHubUrl("pull_request", event)}" title="View this comment on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.pull_request.title}</a></em> in
`;
case event.type === "PushEvent":
return `
<strong>${event.actor.display_login}</strong> pushed to
<code><a href="${generateGitHubUrl("push", event)}" title="View this branch on GitHub" target="_blank" rel="noopener noreferrer">${refToBranch(event.payload.ref)}</a></code> in
`;
case event.type === "ReleaseEvent":
return `
<strong>${event.actor.display_login}</strong> released
<em><a href="${generateGitHubUrl("release", event)}" title="View this release on GitHub" target="_blank" rel="noopener noreferrer">${event.payload.release.tag_name}</a></em> in
`;
case event.type === "WatchEvent":
return `
<strong>${event.actor.display_login}</strong> 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;

View file

@ -43,13 +43,8 @@ function head () {
html`<link rel="stylesheet" href="/assets/css/style.css"/>`,
html`<script src="/assets/scripts/vendor/zepto.js"></script>`,
html`
<script>
const host = location.origin.replace(/^http/, "ws");
const ws = new WebSocket(host);
ws.onmessage = msg => console.log(msg.data);
</script>
`
html`<script>const ws = new WebSocket(location.origin.replace(/^http/, "ws"));</script>`,
html`<script src="/assets/scripts/sockets.js"></script>`
]}`;
}