Edward Loveall

Pull Feed

Pull Feed Logo

I just launched Pull Feed. It will give you a feed url for new pull requests for any particular GitHub repository. I created it to solve an itch: I wanted to keep up with particular open source projects, but GitHub only offers the ability to “Watch” a repository. Watching means you get notifications for pretty much all forms of activity; new issues, new pull requests, comments, etc. That was too much. I just wanted to know what was being proposed.

I also really enjoy the feed model of consuming content. RSS feeds pile up in my feed reader and let me read them on my own terms. No alerts, just content when I decide I want to go check it out. It’s great!

So I made Pull Feed. It’s free, requires no sign up, and is 100% open source. Below are some technical details about how I made it. If you’re curious, read on.

The Tech

On a basic level, a feed url consists of an owner and repo component. Something like pullfeed.co/feeds/github/linguist. It then hits GitHub’s Pull Request API, parses the pull requests for that repository, and turns it into an Atom feed.

Pull Feed is built with Ruby on Rails. It runs on a Centos 7 box at Digital Ocean using nginx and a puma. This was my first real success deploying to a linux server on my own. Before this, I’d used Heroku, while great for quick deploys, gets very expensive.

If you’re familiar with common ruby gems, there aren’t too many surprising libraries used in the project. Of interest GitHub uses Markdown to format descriptions of each pull request. Redcarpet parses that Markdown. Bourbon and Neat remain my favorite gems for developing SCSS layouts and styles.

Atom vs RSS

When I originally started, I had RSS in mind. The problem came when I wanted to add authors to each entry. There are a few different ways to show authors in RSS:

<author><name>Edward Loveall</name></author>
<author>Edward Loveall</author>
<creator>Edward Loveall</creator>

Feed readers have varying levels of support for these tags. For example, I use ReadKit. It works great with the <creator> tag, but not so much with the others, that are defined in specs and seem far more semantic. No good. Feedbin does a great job at parsing all these random formats out and making this display nice, but not everyone uses Feedbin and I wanted something that would work well with as many feeds as possible.

I had heard that Atom was better for a while but I had it in my head that it was less ubiquitous. That doesn’t seem to be the case at all. Pretty much everything I’ve run across supports both Atom and RSS. And it solved my author problem too:

<author><name>Edward Loveall</name></author>

This is the only supported way in the Atom spec to define an author. And it’s nice and semantic. Nice.

So that’s Pull Feed. If you’re interested in keeping up with open source projects, check it out! I’ve so far been able to keep up with project like activemodelserializers, suspenders, til, and others. Maybe you can too.