Semaphore Blog

News and updates from your friendly continuous integration and deployment service.

Fine-Grained Control Over Chat Notifications

Get future posts like this one in your inbox.

Follow us on

We are pleased to announce a few highly requested improvements to our chat and email notification system.

Receive notifications only for failed builds and deploys

You can now choose to be notified only after failed builds and deploys, reducing noise in your channels, rooms, and inboxes when continuous delivery is running smoothly. This change applies to both chat and email notifications.

Limit which branches and servers trigger notifications

As your team grows, so does the number of feature branches being worked on, and deploying to staging servers happens more frequently. Receiving notifications about every activity in one central place like Slack usually ends up being too noisy.

Chat notifications can now be filtered by branches (for builds) and servers (for deploys), which means more focused feedback for your team.

For branches, you can use regular expressions to define a whitelist.

For servers, simply tick off those that you would not like to hear from.

Increasing signal, reducing noise

We hope you will find these updates useful. You can access them in your chat notifications settings under “Project settings”.

Just as a reminder, Semaphore supports chat notifications for Campfire, Flowdock, HipChat, and Slack. Be sure to let us know if you have any feedback or suggestions.

Happy building!

Introducing Python Continuous Integration on Semaphore

This week, we’re excited to announce that Semaphore now officially supports continuous integration and deployment of your Python applications.

Python Continuous Integration & Deplyoment

Python: Always look on the bright side of your code

Python, famously named after the BBC comedy series “Monty Python’s Flying Circus”, is a powerful high-level open source programming language supporting multiple programming paradigms including object-oriented, imperative and functional programming. Due to its clean, simple and readable syntax, it is one of the most popular programming languages, ranked as the fifth most popular language in the TIOBE Programming Community Index.

It has a comprehensive standard library which describes all the components which are shipped with the language. This reflects the design philisophy which Python is built on. A small core which is easily extensible. PyPI(Python Package Index) hosts thousands of packages (called wheels), and this number is growing rapidly. PyPI packages make it easy to add a wide variety of functionalities to applications without reinventing the wheel.

True to its name’s origin, Python aims to make the language fun to use on all levels and to maximize user-friendliness.

Setting Up Continuous Integration for a Python project

Once you’ve signed up for a Semaphore account, you can add a Python project to Semaphore. Semaphore supports both GitHub and BitBucket.

Setting up CI for a Python project on Semaphore

Choosing your project and branch will launch a short analysis in which Semaphore determines the configuration of your project. These suggested build commands and language settings can be changed at any time in Project Settings.

Automatic configuration of a Python repository for continuous integration on Semaphore

Semaphore supports a number of Python versions which are living in their own virtual environment. Every version has a set of packages pre-installed. These include pip, mock, pytest, and nose. Packages installed with pip are cached and reused between builds, drastically improving build times.

Completing the setup will launch the first build of your project.

First continuous integration build of a Python project on Semaphore

To set up continuous deployment for your Python project, you can follow our tutorial that covers continuous deployment of a Django application to Heroku.

We can’t wait to see the things you make with Python and Semaphore. Happy building!

Ruby 2.1.7 Available In a Minor Platform Update

We just released a platform update - v1508.1.

Chromedriver gets an update with version 2.18 which supports Chrome versions v43-46.

Our tool for switching between Java versions change-java-version, now correctly sets the JAVA_HOME environment variable.

New things

Ruby 2.1.7 is now part of the platform which brings a security fix for CVE-2015-3900 and many bug fixes.

A full list of changes is available in the platform changelog.

Platform update on August 25th

The upcoming platform update is scheduled for August 25th, 2015.

Cassandra is now on version 2.2.0. The cassandra-cli tool is deprecated with this release and cqlsh is used instead.

Chromedriver gets an update with version 2.16 which supports Chrome versions v42-45.

Git has been updated to version 2.5.0.

MongoDB is now on version 2.6.11.

MySQL has been updated to version 5.6.26.

Oracle JDK 8 gets and update with version 8u51.

PHP receives several updates with versions 5.4.44, 5.5.28, and 5.6.12.

Qt 5.2.1 gets and update with version 5.4.1.

Redis is now on version 3.0.3.

RethinkDB gets an update with version 2.1.1 which introduces major improvements and support for automatic failover using Raft.

Trying the new platform

You can evaluate the new platform right away by selecting Ubuntu 14.04 LTS v1508 (release candidate) from the Platform section of Project Settings. We encourage you to try it out, so that we can fix the issues you may encounter until the final release on the next Tuesday.

Changes in the final release

Oracle JDK 8 is updated to version 8u60.

Ruby 2.2.3 has been added to the platform.

A full list of changes is available in the platform changelog.

Video Tutorial – Continuous Integration and Deployment for Elixir

In May we had the pleasure of releasing official continuous integration and deployment support for Elixir projects on Semaphore.

We wanted to get to know the Elixir community better, so we started talking to developers working with Elixir. We have had the pleasure of working with Josh Adams from Elixir Sips, who has made two great screencasts showing how to use Semaphore for continuous integration and deployment of Phoenix applications in Elixir. Thanks, Josh!

If you are new to continuous integration and deployment, Josh’s video can help you start out on the right path. Here are the videos, hope you will enjoy watching them:

Continuous Integration - Using Semaphore CI to automatically test a Phoenix application each time we push new code


Continuous Deployment - Using Semaphore CI to automatically deploy your Phoenix application after the tests run successfully


Happy building, and stay young with Elixir!

P.S. You can sign up on Semaphore and use it for free on open source projects, or you can try out our freemium service on your private projects.

Python and JRuby 9.0.0.0 Available In a Minor Platform Update

We just released a minor platform update - v1507.1.

Bundler is now on version 1.10.6 which fixes the DependencyList issue from the previous version (1.10.5).

JRuby 9.0.0.0 is available. Major features include support for Ruby 2.2, POSIX-friendly IO and Process and others.

PhantomJS 2.0.0 is available along with a tool for switching between different versions. Add change-phantomjs-version <version>, where <version> is 1.9.8 or 2.0.0, to your build commands to activate the variant you would like to use.

Python versions 2.6, 2.7, 3.2, 3.3, 3.4, pypy, pypy3 are now part of the platform. Python versions are managed with virtualenv. Pre-installed packages include pip, mock, pytest, virtualenv, and nose. Choosing a Python version in Project Settings will activate the corresponding virtual environment during your build.

This release is the first step towards bringing full support for Python on Semaphore. If you have a Python project and would like to have early access to continuous integration on Semaphore, we invite you to add your project now and let us know if you have any feedback.

A full list of changes is available in the platform changelog.

Platform update on July 21st

The upcoming platform update is scheduled for July 21st, 2015.

Bundler gets an update with version 1.10.5. You can read more about the improvements and changes in Bundler’s official announcement.

Cassandra is now on version 2.1.8.

Elixir has been updated to version 1.0.5 which adds support for Erlang 18.0.

Erlang is now on version 18.0, which packs quite a few improvements and changes. See the detailed changelog for potential incompatibilities.

Git has been updated to version 2.4.5.

Go gets an update with version 1.4.2, which includes bug fixes for the go command, compiler, linker and others.

io.js has been updated to version 1.8.4.

JRuby gets and update with version 1.7.21 which includes Java integration performance improvements and improved compatibility with Ruby 1.9.3.

Maven is now on version 3.3.3.

Node.js gets two updates with versions 0.12.7 and 0.10.40.

PHP receives several updates with versions 5.4.43, 5.5.27, and 5.6.11.

RethinkDB gets an update with version 2.0.4.

Scala is now on version 2.11.7, including 53 fixed issues compared to the previous version.

Trying the new platform

You can evaluate the new platform right away by selecting Ubuntu 14.04 LTS v1507 (release candidate) from the Platform section of Project Settings. We encourage you to try it out, so that we can fix the issues you may encounter until the final release on the next Tuesday.

A full list of changes is available in the platform changelog.

Introducing Continuous Integration for Go on Semaphore

Golang Continuous Integration & Deployment

Today we’re happy to announce our next step in platform expansion with full support for continuous integration of Go projects on Semaphore.

Go: programming language of the future

Rob Pike described the reason behind creating Go as follows: “The goals of the Go project were to eliminate the slowness and clumsiness of software development at Google, and thereby to make the process more productive and scalable”.

In addition to being a C-like language with low-level features such as pointers, Go also offers many of the advantages of high-level languages — powerful data structures, duck typing and easy high-level concurrency are just some of them. With this in mind, Go becomes a very interesting solution for many classes of problems, from system tools to web services and distributed systems.

Continuous integration for Go projects

As Go has become more mature and gained momentum in the community, now is the right time to bring it to the next level and use it in production-facing applications. A big part of this process is incorporating testing and continuous integration practices in everyday development.

Semaphore makes getting started with continuous integration easy and intuitive. To add your first Go project on Semaphore, you just need to create a free account, and you’ll be ready to easily add a new project within minutes.

Semaphore will help you by suggesting optimal build commands for your projects. In the Go community, build commands are pretty standardized. However, if your project needs additional setup, it’s easy to tweak those commands to fit your needs.

Analysis of an Elixir project on Semaphore Semaphore can automatically configure your Go project for continuous integration.

At this point, you can lean back and watch your Go projects being built on Semaphore.

Join companies like CoreOS and others who are already testing their Go projects on Semaphore.

The Go stack

Semaphore currently includes Go version 1.4 out of the box.

The $GOPATH environment variable is set to /home/runner/workspace, which contains the standard Go workspace hierarchy (bin, pkg and src folders, etc.).

Your project’s root directory is represented with a symlink in the src folder of $GOPATH, and all commands are executed from it (by Go convention, it goes as follows: $GOPATH/src/<REPO_HOST>/<REPO_OWNER>/<REPO_OWNER>).

To achieve faster build times, we recommend managing your project’s dependencies with godep so that they are vendored properly. This can reduce your build time by cutting the time needed for downloading dependencies for each build.

Testing

One of the big advantages of Go is that it comes prepackaged with testing tools, so there are not many excuses for not testing your code. To test Go applications on Semaphore, just add the following code to your build commands, and you should have your tests running:

go get -v -d ./...
go test -v ./...

The three dots (./…) Go wildcard is used to expand to all package directories in your current directory.

Any additional testing tools like Testify or Ginkgo can be installed easily using the standard go get commands, such as:

go get github.com/stretchr/testify

If you are using some other tools or dependencies you’d like to be part of the default platform, please let us know.

Deployment

Even though Heroku doesn’t have official Go support yet, it’s still an easy way to get started with deploying Go-backed web applications.

An alternative deployment approach which will be interesting to the Go community is the generic deployment option via SSH. Compile your app, upload it via SSH, and you’re ready to go. Either strategy enables you to ship new features, track releases and get feedback faster than ever, so make sure to try them out.

We encourage you to contact us with suggestions and feedback. We’d also love to see the setups you use for Go on Semaphore.

Happy building!

Platform update on June 23rd

The upcoming platform update is scheduled for June 23rd, 2015.

Bundler gets an update with version 1.9.9.

Cassandra has been updated to version 2.1.6.

Git gets and update with version 2.4.3.

io.js is now on version 1.8.2 featuring an improved memory footprint when using TLS.

JRuby gets an update with version 1.7.20.1 which improves compatibility with Ruby 1.9.3.

MongoDB has been updated to version 2.6.10.

MySQL is now on version 5.6.25 with quite a few InnoDB and other bugfixes.

PHP receives several updates with versions 5.4.42, 5.5.26 and 5.6.10.

Redis gets an update with version 3.0.2 which fixes a critical security issue present in older versions.

RethinkDB is now on version 2.0.3.

Trying the new platform

You can evaluate the new platform right away by selecting Ubuntu 14.04 LTS v1506 (release candidate) from the Platform section of Project Settings. We encourage you to try it out, so that we can fix the issues you may encounter until the final release on the next Tuesday.

A full list of changes is available in the platform changelog.

Elixir Continuous Integration Now Available on Semaphore

It’s our pleasure to announce that, as of today, Semaphore officially supports continuous integration and deployment of Elixir applications.

Elixir Continuous Integration & Deployment

Elixir: Functional programming for everyone

Elixir was born out of the need for better concurency and higher productivity in the rock solid Erlang virtual machine called BEAM. Deriving from the fact that it compiles to Erlang bytecode, it has access to all existing features of Erlang, while having zero impact on runtime. One of its key features is the support for metaprogramming, giving you the freedom to access even abstract syntax trees (AST), if fiddling with things on the compiler level is your thing. Another big benefit is polymorphism, which is a real rarity in the functional programming world.

Summing all these things up, we get a fast, flexible and welcoming functional programming language aimed towards the development of fault-tolerant, distributed applications of any size.

Continuous Integration for Elixir Projects

After you have signed up for a Semaphore account, you’re ready to add your first Elixir project.

Projects can be created from source code hosted either on GitHub or BitBucket.

CI for Elixir on Semaphore

Select your repository from the list, and then select the first branch which will be built.

Select Elixir project for CI on Semaphore

By default, new branches will be added automatically when you push them to your git repository server git repository server, such as GitHub and Bitbucket. There’s also an option to add branches manually on the project’s dashboard later on.

Branch selection for an Elixir project on Semaphore

A quick analysis will detect your repository’s language, after which Semaphore will present some commands, which will run during the build process. You are free to modify these commands at any time in project settings.

Analysis of an Elixir project on Semaphore

The mix build tool is available in the Semaphore platform out-of-the-box. Hex packages are cached between builds, which ensures that your builds are as time-efficient as possible.

The last step you need to take is triggering the build process. After a short while, you can see the results of the build. It passed!

Successful build of an Elixir project on Semaphore

Thanks to projects like Phoenix, Dynamo and others, the vibrant Elixir community is rapidly growing. Testing frameworks like ExUnit and Amrita make it possible to have a pleasant workflow which incorporates continuous integration and deployment practices.

Happy building!

Get future posts like this one in your inbox.

Follow us on