Semaphore Blog

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

Platform update on May 19th

Get future posts like this one in your inbox.

Follow us on

The upcoming platform update is scheduled for May 19th, 2015.

Bundler gets an update with version 1.9.7.

Cassandra is now on version 2.1.5.

ChromeDriver has been updated to version 2.15 which supports Chrome v40-43.

Git gets an update with version 2.4.0 with a new feature called “atomic push” which enables you to push to multiple branches atomically.

io.js is now on version 1.8.1.

Java gets two updates with OpenJDK 7u79 and Oracle JDK 8u45. A tool to switch Java versions more easily is also included. It can be used by adding change-java-version <version> to your build commands. Valid values for <version> are 1.7 or 7 for OpenJDK 7u79 and 1.8 or 8 for Oracle JDK 8u45.

PostgreSQL is now on version 9.4.1 which includes JSONB support, the ALTER SYSTEM SQL command to change the server configuration and other improvements. Please check out the PostgreSQL migration guide which covers the major changes and compatibility considerations.

PHP also receives several updates with versions 5.4.40, 5.5.24 and 5.6.8.

RethinkDB has been updated to version 2.0.1.

Trying the new platform

You can evaluate the new platform right away by selecting Ubuntu 14.04 LTS v1505 (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.

Platform update on April 21st

The upcoming platform update is scheduled for April 21st.

Bundler gets an update with version 1.9.3 incorporating the new Molinillo dependency resolver and the performance improvements from version 1.8.

Cassandra is now on version 2.1.4.

Elasticsearch has been updated to version 1.3.9.

Elixir is now on version 1.0.4 which supports Erlang 17.5.

Erlang gets an update with version 17.5.

io.js is now on version 1.6.4.

MongoDB has been updated to version 2.6.9.

MySQL is now on version 5.6.24 which, among other things, fixes the bug where the mysqld process wasn’t stopped properly with mysqld stop when the InnoDB memcached plugin was active.

RethinkDB is now on version 1.16.3.

Redis has been updated to version 3.0.0 which has some major performance improvements compared to version 2.8.

Node.js gets three updates with 0.10.38, 0.11.16 and 0.12.2.

PHP also receives several updates with versions 5.4.39, 5.5.23 and 5.6.7.

sbt has been updated to version 0.13.8.

New things

Gradle, the popular Java dependency manager, is now part of the platform with version 2.3.

Ruby versions 2.1.6 and 2.2.2 are added. These versions are currently selectable by adding one of the following build commands: rbenv global 2.1.6 or rbenv global 2.2.2. After the final release, they will be selectable in Project Settings.

Trying the new platform

You can evaluate the new platform right away by selecting Ubuntu 14.04 LTS v1504 (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.

Get Paid to Write Tutorials

Calling all developers who write! We are offering up to $200 per tutorial written. These tutorials will be featured on Semaphore community site and we will credit the author of the content. There is no limit to the number of tutorials you can write.

You can write an article on any tool or topic related to test-driven development, continuous delivery and devops automation. We have a page listing some ideas for writing tutorials which you can use as a starting point.

Our goal at Semaphore is to build a comprehensive and remarkably written collection of articles for software developers. We have bootstrapped Semaphore community with tutorials written by our own engineers, who will continue to actively contribute. But to reach our goal we are going to create an array of community writers who will be paid within a week of completing a new article. We are aiming to document both the basics and the state of the art in the industry, so it is our hope that these tutorials will be clear, technically accurate and of high quality.

How to apply

If you are interested in becoming an official Semaphore community writer, please submit a sample article or blog post and the topics you would like to write about. We will aim to respond to all submissions as soon as possible, but please allow us a couple of days for the initial reply.

Writing tips

We have published detailed guidelines on how to write a tutorial for Semaphore community and how to format it. You should read both of these articles before writing your own.

When in doubt you should follow the tone and approach of existing tutorials. Grammar and accuracy are most important, so please proofread your tutorial before submitting it.

We are looking for original tutorials to publish on Semaphore community. It is also acceptable to take an existing text, expand it with new information and adapt its format to Semaphore community guidelines.

Let’s do this

Educating developers about leading practices of TDD/BDD, CI, devops and helping them become better software craftsmen is our ultimate goal. The Semaphore community will be the key in accomplishing this objective. If you are interested in taking part in it—and get paid doing it—we are looking forward to hearing from you.

Official “Get Paid to Write” page on Semaphore community.

Scala Support on Semaphore

We’re happy to announce that as of today, Semaphore officially supports continuous integration and deployment of Scala applications.

Continuous integration and deployment for Scala projects on Semaphore

Scala: A Multi-Paradigm Language on JVM

What happens when you combine functional and object-oriented programming? Scala. The language is all about modularity. Scala’s approach is to implement small features which are using both object oriented and functional constructs to communicate effectively. This results in great flexibility. True to its name (short for “Scalable Language”), Scala is great for future proofing server side software with multi-threaded code and distributing the load in the cloud.

It runs on JVM and allows you to freely mix Java and Scala classes. This means you can integrate your favorite Java libraries with your Scala project and vice-versa. Scala programs are compiled to Java bytecode, so many bugs can be caught at compile-time before they see the light of day. However, Scala provides a lot of improvements over Java. A more flexible syntax, a unified type system which has no distinction between primitive types and boxed types and powerfull for-expressions just to name a few.

Scala is a mature language suitable for small projects and mission-critical systems alike providing excellent scalability.

Setting Up Continuous Integration for a Scala Project

After you create a Semaphore account you can add a Scala project right away. Adding a project from the dashboard will offer you a choice between GitHub and Bitbucket.

Setting up CI for a Scala project on Semaphore

When you select your project from the list along the desired branch, a brief analysis will run which will suggest commands based on the language in which the project is written in.

Automatic configuration of a Scala repository for continuous integration

The sbt build tool is included in the Semaphore platform by default. In version 0.13.7 of sbt, an experimental feature was introduced for dependency caching. Instead of a full dependency graph, mini graphs are used for each dependency. If your project is configured to take advantage of this feature, Semaphore will also cache those dependecies between builds.

First continuous integration build of a Scala project on Semaphore

With testing frameworks like specs2 and ScalaTest combined with Semaphore’s continuous integration and deployment features, you can rest assured that your code is always ready for action.

We’re looking forward to seeing things you make with Scala and Semaphore. Happy building!

Announcing Semaphore Community

Today we’re very happy to announce the launch of Semaphore community, our new initiative to build a vast knowledge base about test-driven development, continuous delivery and devops automation.

Rendered Text team behind Semaphore community

At Rendered Text, we’ve always been passionate about best practices and software quality. The software craftsmanship idea is something that resonates with our personal engineering values. It was true before Semaphore existed, was one of the reasons we decided to make a continuous integration product, and continues to motivate us every day.

With making and improving Semaphore, our goal has been to make continuous integration available to every developer, because we know that adopting that practice helps make better software, faster. Delivering a product that makes it super easy to use and scale CI is what we’ve been doing so far. But that’s only one part of the mission.

The bar to continuous integration, and further, a full continuous delivery process remains high. Developers need not only learn how to write good, clean code but also adopt test-driven development. Then they begin to see new problems that lead them to understand and apply behavior-driven development. Finally, they need to cross the chasm to efficient delivery and maintenance with emerging continuous delivery and devops automation practices.

Learn from tutorials

Our main goal with Semaphore community is to capture the state of the art in the industry and make it easily accessible to a wide audience of developers. For these reasons, the core of the new site are tutorials on test-driven development, continuous integration and devops automation. We are starting with over 20 original articles on a wide range of topics, from a general introduction to CI, a series that teaches you RSpec from scratch and how to test Clojure web applications with Selenium to integration testing Chef cookbooks.

All tutorials are published under the Creative Commons attribution, non-commercial share-alike international license.

You are also invited to submit your own tutorial. We will publish more information on that in a separate blog post.

Follow the topics that interest you

All articles are tagged accordingly and you can easily subscribe to tags to receive an email whenever a new article on the technology you’re interested in is published. You can also subscribe to updates on individual articles. Our goal is to keep them fresh.

Connect with other developers

All tutorials have comments built in, so you can easily engage in a discussion with other developers and share your tips. If you’d be interested in participating in forum focused on CI, BDD and devops, please let us know.

Explore how other developers work

On the community homepage you will also find links to some interesting open source projects on Semaphore and interviews with teams of successful software companies which have been published on this blog earlier. As with everything else, our goal is to share not just our knowledge, but help others tell about their experience as well. If you’d like your team to be featured, please get in touch.

Terms of Service update

Since Semaphore is now about to publicly host content created by its users, we’ve updated our Terms of Service with new sections that:

  • Clarify what we consider inappropriate user behavior after registration.
  • Updated user conduct section regarding user content.
  • Added a new section on content and user content.

Please let us know what you think about Semaphore community, either in the comments below or by directly contacting us via support or email.

Happy building!

P.S. —
If you like what you find, tell your peers about semaphoreci.com/community by sharing a link on social networks.

Platform update on March 24th

The upcoming platform update is scheduled for Tuesday, March 24th, 2015.

Git is now on version 2.3.3.

io.js get an update with version 1.5.1.

Java 8 gets an update with Oracle JDK 8u40.

MongoDB is updated to version 2.6.8. You can get more insight into the major changes by checking out the official changelog.

PHP gets three updates with 5.6.6, 5.5.22 and 5.4.38.

New things

Ruby 2.2.1 has been added to the platform which fixes the memory leak issue on Symbol GC issue among other things. Check out the Ruby changelog for more information. You can switch to this version of Ruby by adding rbenv global 2.2.1 to your build commands. After the final release, it will be selectable in the interface without the need to use the command.

Trying the new platform

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

Changes in the final release

Node.js gets an update with version 0.10.37.

Scala is now on version 2.11.6.

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

We Moved from SemaphoreApp.com to SemaphoreCI.com

We changed our URL from semaphoreapp.com to semaphoreci.com.

You may wonder why we did it. Back in the day when Semaphore was just an idea in our heads the concept of “continuous integration” (CI) wasn’t that widely spread. It seemed like a good idea to us to append the suffix “app” to compose an available domain name. Over time we’ve noticed many people think that it’s a part of the name of the service. Now we are dropping the “app” for “ci” to be more easily recognised as a CI service.

Nothing else changes. We are still the same Semaphore as you know us. Same people, same ideas and a slightly different URL.

We will also be supporting all v1 API actions at semaphoreapp.com until the end of 2015.

P.S.
If you enjoy using Semaphore, you can help us spread the word about our service by mentioning our new Twitter handle @semaphoreci in a nice tweet. Every mention helps. We appreciate your support!

Adapting to Third-party Application Restrictions on GitHub

GitHub has changed how organization administrators can control access to their repositories for third-party applications, such as Semaphore. As explained in their blog post, third-party restrictions allow you to gain a more fine grained control over your organization’s repositories and the data on GitHub.

As of February 24, 2015 this is reflecting on how Semaphore interacts for all GitHub repositories owned by organizations which have enabled third-party application restrictions. The technical details are on GitHub’s developer blog. This post summarizes the actions we are taking on Semaphore to adapt to GitHub’s new policies as well as actions you will need to take if you are an owner of an organization on GitHub.

Actions we are taking

Enabling third-party application restrictions on GitHub will invalidate all SSH keys created before February 2014, which are part of your organization. For this reason, we will regenerate deploy keys which fall into that timespan. If your project is affected, you’ll receive an email from GitHub stating that a new deploy key has been added to your repository.

Actions you need to take

If you don’t enable third-party application restriction on GitHub, there are no actions required on your side.

Restricting third-party applications for your organization has some repercussions. If you plan on using these restrictions, please consult this page on GitHub for all the details.

One notable change is that GitHub will blacklist all current SSH keys and new keys have to be approved. You’ll notice this when you try to access the organization’s repository by either a push, pull or clone actions. When this happens, an error message will guide you through the process of verifying your SSH key. This is affecting both deploy and user keys.

If you notice any anomalies, please contact us as soon as possible through a support ticket or on live chat so we can solve the issue in a timely manner.

Happy building!

Platform update on February 24th

The upcoming platform update is scheduled for Tuesday, February 24th, 2015.

Chromedriver is now on version 2.14 which supports Chrome versions v39-42.

Bundler is updated to version 1.7.13.

Elasticsearch gets an update with version 1.3.8.

Elixir is now on version 1.0.3.

Firefox is updated to version 35.0.1 which requires all projects using the selenium-webdriver gem to update it with bundle update selenium-webdriver.

Git is now on version 2.3. You can read more about the new features like push to deploy and faster cloning in GitHub’s blog post.

Java gets two updates with versions OpenJDK 7u75 and Oracle JDK 8u31.

JRuby is updated to version 1.7.19 which continues to focus on improving the compatibility with Ruby 1.9.3.

MySQL is updated to version 5.6.23.

Node.js receives an update with 0.10.36.

PHP gets three updates with 5.6.5, 5.5.21 and 5.4.37.

RethinkDB get an update with version 1.16.2

Scala is updated to 2.11.5 which fixes these 74 issues.

New things

Node.js version 0.12 is now part of the platform. It can be used by adding nvm use 0.12 to your build commands. This version will be selectable in the interface after the final release of the platform without the need to use the command.

Another newcomer to the platform is io.js version 1.2.0. io.js is a fork of Node.js, built against the latest V8 versions including many ES6 features out-of-the-box.

LFTP is now included by default.

Trying the new platform

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

Changes in the final release

Cassandra is now on version 2.1.3.

Firefox’s update has been held back because version 35.0.1 has some compability issues with the latest selenium-webdriver gem version 2.44.0.

Qt version 5.2.1 is now part of the platform. Qt versions are selectable by creating an environment variable named QT_SELECT in Project Settings and assigning it a value of 4 or 5 depending on which Qt version you would like to use. The default version is set to 4.8.1.

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

Schedule Continuous Integration Builds Easily

Today we’re launching the build scheduler — an easy way to run anything on Semaphore on a daily or hourly basis.

Continuous integration build scheduler on Semaphore

Using the scheduler you can

  • Set up nightly builds.
  • Perform automated quality assurance (QA) tests on a remote server.
  • Keep the build of an inactive project up to date.
  • Periodically run any kind of job.

Configuring the scheduler is very simple. In the “Build Scheduler” project settings tab, select a branch, set a daily or hourly time when you would like your job to run and you’re done. Your configured build commands will run at designated time, no hands.

Note that if your project is configured for continuous deployment, a successful scheduled build will also trigger a deploy, just like a regular build.

Happy building!

Get future posts like this one in your inbox.

Follow us on