Electron Release Manager

Recently we released a new version of our Rodeo, our data science IDE. In the past this meant our users would have to go to our homepage, click on the Rodeo page, download Rodeo again, and then reinstall it. But luckily this is no longer the case! As of the v1.1 release, we’re officially supporting auto-updates for OSX users. To manage these releases and make the auto-updates magically happen, we built a really simple but handy tool called electron-release-manager.

The Problem

One of the biggest challenges in building Rodeo is that it runs cross-platform. We currently support Windows (32 and 64 bit), Mac (64 bit), and Linux (32 and 64 bit) users. These covers pretty much everyone (but not quite). As a result, we’ve seen lots of edge case bugs (for example, strange page display on low-res Windows machines). Lucky for us we’ve been able to fix a lot of them, but that still leaves us with the burning question of how we deliver these fixes to our users.

We quickly found out that making users manually download and reinstall Rodeo was NOT the way to go. There were just too many steps involved and we observed that when we pushed changes, it took a really long time for our users to migrate.

Enter the release manager

So to counteract this we did 2 things:

(1) Added auto-update support to Rodeo

(2) Built a way to quickly manage and deploy updates to Rodeo

The electron-release-manager is a simple node.js app that:

  • keeps track of Rodeo (or your own app) releases in S3
  • implements the Squirrel Server spec
  • show your old releases and provide downloadable links for them

Auto-updates with electron-release-manager

In the v0.34.0 release of Electron, support for auto-updates was introduced. As I mentioned, Electron uses Squirrel for handling downloading and installing updates to an Electron app. The protocol is really simple. Just provide a HTTP endpoint that accepts a parameter indicating the user’s version of the app, and then respond with an HTTP message indicating whether or not there’s a newer version.

{
    "url": "http://mycompany.com/myapp/releases/myrelease",
    "name": "My Release Name",
    "notes": "Theses are some release notes innit",
    "pub_date": "2013-09-18T12:29:53+01:00",
}

Unfortunately Electron doesn’t supply you with the server, so it’s up to you to either (A) implement the protocol yourself or (B) use someone else’s open source tool that does!

And that’s exactly what electron-release-manager does. It let’s you upload your releases to S3 (everyone’s favorite, cheapest file store) and serve them to your app’s users. And the end result? Your users get a little notification message telling them they’re app is ready to update!

Storing releases in S3

We have something of an S3 addiction here at Yhat. We use it for (almost) everything. If you’re not familiar with it, please give it a look.

Electron-release-manager uses s3 as it’s “backend” for storing releases. It’s a really simple architecture. Each release gets a directory. Inside that directory you put all of your builds for that release. Point electron-release-manager at the right bucket and voilà, you’ve got yourself auto-updates!

Directory Structure

We use a simple directory structure for managing releases and versions in Rodeo. In the s3 bucket, we create a directory for each release (i.e. 1.0.0, 1.0.1, etc.). Within each directory we put our builds for each platform with the following format:

Rodeo-v${VERSION}-${ARCH}.${FILE_TYPE}

So a release looks like this:

File Types

Users downloading your product for the first time will probably want the idiot-proof installers (.dmg for Mac, .exe for Windows). However, for auto-updates with Squirrel, you’ll need to provide .zip files for each platform. In the example above, you can see that we have both .dmg/.exe and .zip files in the release directory for each platform.

Use it yourself

Interested in using electron-release-manager for your own app? Check out the app on GitHub or if you don’t even care how the app works, click the Deploy to Heroku button.

Other Suggestions