NEW Run your Ruby tests in a few minutes and ship faster with Boosters, one-click auto parallelization · Learn more…
×

Semaphore Blog

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

Video Tutorial – Continuous Integration and Deployment for Elixir

Get future posts like this one in your inbox.

Follow us on

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!

Platform update on May 19th

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!

Get future posts like this one in your inbox.

Follow us on