Semaphore is great for testing your web application. Every day, code of thousands of developers is flowing through Semaphore for verification so that they can deliver new features to users with confidence.

But there’s more to delivery than testing, namely you need to deploy your code to the target servers. If you’re working in a team, someone needs to make sure that everyone has the right SSH configuration on their machines to be able to deploy. Done manually, deployment is a repetitive and distracting procedure. And since it has to be done within terminal sessions, there’s no way of keeping track of who deployed what and when.

Today we’re officially launching deployment as a first-class feature to futher increase your development velocity. Now you can let Semaphore automatically deploy working code to your application server. You’ll know exactly which version is on each of your servers. Best of all, this comes completely free – deployment jobs have top priority and do not count against your processor limit.

Here’s how it works:

Setting up a server

Get started by going to your project settings, Deployment tab. Following our goal of making things as simple as possible, you can set up a deploy target in a few easy steps. We are launching with two major options: Heroku and a custom script, which is usually Capistrano.

When using your deploy script, you need one new passwordless SSH RSA key that is present in the .ssh/authorized_keys file on server, inside the deploy user’s home directory.

Is it automatic?

The major behaviour difference comes from this option. Automatic deploys are tied to a particular branch, so for example every passed build of the staging branch will be deployed to this server.

With manual deployment, you can deploy any build from any branch. Note that this action is still possible to do on servers with automatic deployment. For example, you normally deploy to staging server from the staging branch, but sometimes also a snapshot of a short-lived feature branch.

Green builds trigger an automatic deploy

With automatic deployment set up for a specific branch, Semaphore will run a deploy with commands that you’ve provided in the setup process. The deploy in progress and report look similar to the build counterpart.

Deploying manually

To deploy a particular build manually, open it and click on “Deploy manually” in the top right corner of its header. You can then select the target server and write a quick release note. This is very useful because in many cases the last commit message will be something like “Merge ‘staging’ into master”. Instead of that, you can write something which will make it clear what went in with the release.

Notifications come in full package

The project timeline now includes deploys and their status for your viewing pleasure.

Semaphore can send email and chat notifications for each deploy. As with builds, you can turn this off in your project’s notification settings.

For a long time we’ve been sending reports to the login email address, but now every user can specify a different email for notifications on each project.

Deploys also come with full API and webhooks support.

A sidenote for the API: we’re aware that it could be a little bit better – we’ve started with a single endpoint and deliberately been adding new layers over time – so a V2 is in plans.

Viewing deploy history

While the dashboard and project page display the current deploy on each server, when necessary you can go to the server page and see the full deploy history. The entries are separated by dates which is a nice way to get a sense of progress.

We hope that you will enjoy these new features. Our big thanks goes to our power users who have been deploying their apps while this was in beta.

Ship early and ship twice as often.