Find file
Fetching contributors…
Cannot retrieve contributors at this time
285 lines (223 sloc) 19.2 KB
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="">
<title>The Travis Blog</title>
<link rel="alternate" href=""/>
<link rel="self" href=""/>
<name>Team Travis</name>
<title type="html">Announcing "first class" PHP project support!</title>
<link rel="alternate" href=""/>
<content type="html">&lt;p&gt;Today we are happy to announce first class PHP support with Travis CI.&lt;/p&gt;
&lt;p&gt;It includes all the same features Ruby, Erlang and Node.js projects enjoy today, including:&lt;/p&gt;
&lt;li&gt;Easy to get started and integrates with GitHub.&lt;/li&gt;
&lt;li&gt;Test against multiple databases and services, including Mysql, Postgres, Redis, RabbitMQ and many more.&lt;/li&gt;
&lt;li&gt;Test your projects against multiple PHP versions.&lt;/li&gt;
&lt;li&gt;Build results are publicly available online so you can link to them in your bug reports, including line numbers.&lt;/li&gt;
&lt;li&gt;Notifications the way you want them! (email, IRC, and webhooks)&lt;/li&gt;
&lt;p&gt;Over the last several weeks many nice folks from the PHP community have been working with the Travis team
and it would not be possible without all the help from &lt;a href=""&gt;Loïc Frering&lt;/a&gt; and &lt;a href=""&gt;Pascal Borreli&lt;/a&gt;. &lt;a href=""&gt;Till Klampaeckel&lt;/a&gt; has helped us set up &lt;a href=""&gt;phpfarm&lt;/a&gt; and &lt;a href=""&gt;pyrus&lt;/a&gt; and test drive the whole thing. &lt;a href=""&gt;Álvaro Videla&lt;/a&gt; and
&lt;a href=""&gt;Lukas Kahwe Smith&lt;/a&gt; also helped us a lot by running some of the &lt;a href=""&gt;Friends of Symfony&lt;/a&gt; projects on Travis early on.
Pascal also got Symfony, Twig, Silex, Doctrine and Monolog test suites up and running on (we hope his patches will be accepted
&lt;p&gt;Having all those projects building fine for several days makes us confident that we are ready to ship this feature.&lt;/p&gt;
&lt;p&gt;Please see our &lt;a href=""&gt;initial documentation for PHP projects&lt;/a&gt; and &lt;a href=""&gt;the rest of the guides&lt;/a&gt;. We tried to link to as many real world .travis.yml examples to demonstrate all the features in action.&lt;/p&gt;
&lt;p&gt;In addition, we have a couple of machines lined up that we will be running PHP builds on. One of them is &lt;a href=""&gt;Shopify&lt;/a&gt;: they donated us a worker we have been using for Node.js projects. Another one is &lt;a href=""&gt;ServerGrove&lt;/a&gt;, experts in PHP hosting and specifically frameworks like Symfony and Zend Framework: they donated us one more machine to run PHP builds
&lt;p&gt;If you have questions, find us in #travis on, we will be happy to answer them. To stay up to date with new announcements, CI environment software updates and more, &lt;a href=""&gt;follow us on Twitter&lt;/a&gt; and &lt;a href="!forum/travis-ci"&gt;join our mailing list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We hope you enjoy using Travis for your open source projects as much as we do. Go add your PHP projects to Travis CI and recommend your fellow PHP developers to do the same!&lt;/p&gt;
&lt;p&gt;The Travis Team.&lt;/p&gt;
&lt;h2 id="spread-the-word"&gt;Spread the word!&lt;/h2&gt;
&lt;p&gt;Feel free to &lt;a href=""&gt;discuss and upvote on Hacker News&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;li&gt;Doctrine is now on Travis: &lt;a href="!/doctrine/doctrine2"&gt;doctrine2&lt;/a&gt;, &lt;a href="!/doctrine/common"&gt;common&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Monolog is now on Travis &lt;a href="!/Seldaek/monolog"&gt;Monolog&lt;/a&gt;&lt;/li&gt;
<title type="html">VM environment upgrade, Nov 11th, 2011</title>
<link rel="alternate" href=""/>
<content type="html">&lt;p&gt; Ruby workers were upgraded, here is what’s new:&lt;/p&gt;
&lt;h2 id="ruby-workers-changes"&gt;Ruby Workers Changes&lt;/h2&gt;
&lt;li&gt;Updated Rubinius 2.0 from 2.0.testing branch&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;RabbitMQ 2.7.0&lt;/a&gt;&lt;/li&gt;
&lt;p&gt;Rubinius team was busy making GC and full CPU concurrency improvements as well as upgrading Ruby standard library
for their 1.9 mode. Give it a try by testing your Ruby projects against Rubinius!&lt;/p&gt;
&lt;h2 id="nodejs-workers-changes"&gt;Node.js Workers Changes&lt;/h2&gt;
&lt;p&gt;Node.js workers were upgraded, too:&lt;/p&gt;
&lt;li&gt;&lt;a href=""&gt;RabbitMQ 2.7.0&lt;/a&gt;&lt;/li&gt;
&lt;h2 id="follow-us-on-twitter"&gt;Follow Us on Twitter&lt;/h2&gt;
&lt;p&gt;To get regular updates about environment upgrades and other developments, &lt;a href=""&gt;follow Travis CI on Twitter&lt;/a&gt;
and watch our &lt;a href=""&gt;Chef cookbooks repository on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;MK&lt;/a&gt; on behalf of the Travis CI Team.&lt;/p&gt;
<title type="html">Announcing "first class" Node.js project support!</title>
<link rel="alternate" href=""/>
<content type="html">&lt;p&gt;One of the things people keep asking us is when language X will be a first class citizen on Travis-CI.
While it has been possible to build Node.js and C++ projects on Ruby workers for a while, it is not very convenient or intuitive, and such projects will not get the killer feature of testing against multiple versions/implementations. So we have good news for the Node.js community: Node.js is gaining first class support on Travis-CI, joining Ruby and Erlang.&lt;/p&gt;
&lt;p&gt;Thanks to the hard work by &lt;a href=""&gt;Harry Brundage&lt;/a&gt; and the Travis core team, it is now possible to test your Node.js projects against multiple Node versions (currently 0.4.12, 0.5.8 and 0.6.0). We use &lt;a href=""&gt;NVM (“RVM for Node.js”) project&lt;/a&gt; and &lt;a href=""&gt;Chef cookbooks&lt;/a&gt; to enable to easy switching of Node.js versions.&lt;/p&gt;
&lt;p&gt;In addition, Shopify now sponsors a machine that we will be running five Node.js workers on. Please thank them by sending a loving tweet or two to &lt;a href=""&gt;@Shopify&lt;/a&gt; :)&lt;/p&gt;
&lt;h3 id="how-do-i-test-my-project-against-multiple-nodejs-versions"&gt;How do I test my project against multiple Node.js versions?&lt;/h3&gt;
&lt;p&gt;To test your Node.js project against multiple Node versions, add a ‘.travis.yml’ file to your GitHub repository and add the following to it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;language: "node_js"
- 0.4
- 0.5
- 0.6
&lt;p&gt;When you define “node_js” as the language it tells Travis to switch the Node.js version (nvm use 0.4), install the dependencies of the project (npm install), and run the tests (npm test). If you define multiple Node.js versions to test against, like the above example, Travis will create a matrix of test configurations, in this case three builds will be queued. Or you can leave out the node_js versions to test against and Travis will use 0.4 by default. If your project is not yet Node 0.5 or 0.6 compatible,
you can exclude those versions. The same goes for project that want to only support 0.6, for example.&lt;/p&gt;
&lt;p&gt;See Shopify’s &lt;a href=""&gt;Batman&lt;/a&gt; as well as &lt;a href="!/martin_sunset"&gt;Martin Wawrusch&lt;/a&gt;’s &lt;a href=""&gt;;/a&gt; and &lt;a href=""&gt;;/a&gt; projects as examples.&lt;/p&gt;
&lt;h2 id="the-workflow"&gt;The Workflow&lt;/h2&gt;
&lt;p&gt;Travis’ Node.js builder will do the following as part of the build process:&lt;/p&gt;
&lt;li&gt;Clone your repository from GitHub&lt;/li&gt;
&lt;li&gt;Pick Node.js version to use&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;before_install&lt;/code&gt; commands (can be more than one)&lt;/li&gt;
&lt;li&gt;Install dependencies using &lt;code&gt;npm install [npm_args]&lt;/code&gt; or whatever you provide in the &lt;code&gt;install&lt;/code&gt; key in your .travis.yml file&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;before_script&lt;/code&gt; (can be more than one script)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;install&lt;/code&gt; command if you provided it in your .travis.yml. By default it is &lt;code&gt;npm test&lt;/code&gt; if it finds package.json in the repository root or &lt;code&gt;make test&lt;/code&gt; otherwise.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;after_script&lt;/code&gt; (can be more than one command)&lt;/li&gt;
&lt;li&gt;Report the build has finished running&lt;/li&gt;
&lt;p&gt;Most of steps in the workflow can be overriden by projects that need it. We recommend you to use defaults when possible, though.&lt;/p&gt;
&lt;p&gt;For more information on what is &lt;a href=""&gt;available in terms of services&lt;/a&gt; (mysql, postgres, riak, etc.), or how to configure your builds or matrix, visit the &lt;a href=""&gt;docs site&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="next-steps"&gt;Next steps&lt;/h3&gt;
&lt;p&gt;We have support for more languages in the works, one of which we hope to ship really soon, so stay tuned!&lt;/p&gt;
&lt;h3 id="in-conclusion-aka-lots-of-3-3-3"&gt;In conclusion (a.k.a lots of &amp;lt;3 &amp;lt;3 &amp;lt;3)&lt;/h3&gt;
&lt;p&gt;Once again we would like to thank Harry for doing most of the work on first class Node.js support and Shopify for sponsoring a machine that we will host the workers on. &lt;/p&gt;
&lt;p&gt;Now go add your Node.js projects to and tell your friends and colleagues about it!&lt;/p&gt;
&lt;p&gt;&amp;lt;3 &amp;lt;3 &amp;lt;3, the &lt;a href=""&gt;Travis CI core team&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="discuss-on-hacker-news"&gt;Discuss on Hacker News&lt;/h3&gt;
&lt;p&gt;You can discuss Node.js support on &lt;a href=""&gt;on Hacker News&lt;/a&gt;.&lt;/p&gt;
<title type="html">VM environment upgrade, Oct 31st, 2011</title>
<link rel="alternate" href=""/>
<content type="html">&lt;p&gt; Ruby workers were upgraded to provide the following:&lt;/p&gt;
&lt;li&gt;Ruby 1.9.3-p0 (final release)&lt;/li&gt;
&lt;li&gt;JRuby 1.6.5&lt;/li&gt;
&lt;li&gt;Updated Rubinius 2.0 from 2.0.testing branch&lt;/li&gt;
&lt;li&gt;Node.js 0.4.12, npm 1.0.18&lt;/li&gt;
&lt;li&gt;MongoDB 2.0.1&lt;/li&gt;
&lt;li&gt;Riak 1.0.1&lt;/li&gt;
&lt;li&gt;RVM 1.9.2&lt;/li&gt;
&lt;p&gt;There is also one more change we want to highlight: we now provide two installations of Rubinius, one in Ruby 1.8 mode
and another one in Ruby 1.9 mode. Their RVM aliases are &lt;em&gt;rbx-18mode&lt;/em&gt; and &lt;em&gt;rbx-19mode&lt;/em&gt;, respectively. For example, to test your gem
against Rubinius in both modes, you can use the following list of Rubies in your .travis.yml file:&lt;/p&gt;
- 1.8.7
- 1.9.3
- jruby
- rbx-18mode
- rbx-19mode
&lt;p&gt;Existing aliases for 1.8 mode (&lt;em&gt;rbx&lt;/em&gt; and &lt;em&gt;rbx-2.0&lt;/em&gt;) are still around and will work.&lt;/p&gt;
&lt;p&gt;Rubinius’ Ruby 1.9 features support is still a work in progress (it does not support encodings yet, for example) but
we encourage Ruby developers to try testing their libraries against Rubinius, in both 1.8 and 1.9 modes. Now it is even
easier to do on;/p&gt;
&lt;p&gt;To get regular updates about environment upgrades and other developments, &lt;a href=""&gt;follow Travis CI on Twitter&lt;/a&gt;
and watch our &lt;a href=""&gt;Chef cookbooks repository on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;MK&lt;/a&gt;&lt;/p&gt;
<title type="html">A Big Refactoring!</title>
<link rel="alternate" href=""/>
<content type="html">&lt;p&gt;We’ve just rolled out a big refactoring to the Travis CI &lt;a href=""&gt;application&lt;/a&gt;
(i.e. the server app which runs on Heroku) that we’ve been working on over the
last four weeks.&lt;/p&gt;
&lt;p&gt;This refactoring was quite far-reaching and even though we’ve tried hard to
make sure everything works fine there may be glitches and bugs that we’ve
&lt;h2 id="why"&gt;Why?&lt;/h2&gt;
&lt;p&gt;The motivation behind all of this work was quite manifold. Maybe the best
summary is that our previous domain model still had the very basic design from
its original spike. But here are some more details. We wanted to achieve the
following things:&lt;/p&gt;
&lt;li&gt;Split up the monster Build model into more finegrained classes for more
&lt;li&gt;Move to a statemachine-like pattern for more explicitely reflecting
various state changes that happen across various models&lt;/li&gt;
&lt;li&gt;Lay better grounds for the long planned move to &lt;a href=""&gt;AMQP&lt;/a&gt;
(communication with the workers)&lt;/li&gt;
&lt;li&gt;Lay better grounds for the long planned move Sproutcore (reimplementation of
the JS client)&lt;/li&gt;
&lt;li&gt;Improve test coverage and move to RSpec (for unifying test technologies and a
slightly lower barrier for new devs)&lt;/li&gt;
&lt;li&gt;Generally clean up both model and test code.&lt;/li&gt;
&lt;p&gt;One major intention was to generally clean up our codebase, complete and
improve the test suite and make the model design more readable. Another was
to split up the former Build model which had grown into a huge tangled monster.
And while we were at it we also wanted to better communicate the fact that the
domain model is very much about about triggering state changes through various
events and messages.&lt;/p&gt;
&lt;p&gt;You can find more information about the new domain model design &lt;a href=""&gt;in this
Some of the details outlined there haven’t been implemented, yet. E.g. the
&lt;code&gt;Build&lt;/code&gt; model does not have the mentioned &lt;code&gt;errored&lt;/code&gt; and &lt;code&gt;cancelled&lt;/code&gt; states, the
&lt;code&gt;Task::Test&lt;/code&gt; does not have &lt;code&gt;cloned&lt;/code&gt; and &lt;code&gt;installed&lt;/code&gt; states … simply because the
worker does not support triggering these, yet. These things will probably be
added in a later stage.&lt;/p&gt;
&lt;p&gt;When we reviewed common Ruby statemachine implementations we found none of them
do what we needed, so we came up with our own brand of it:
&lt;a href=""&gt;simple_states&lt;/a&gt; may or may not
useful for your own usecase but it does exactly what we need in Travis CI and
nothing more.&lt;/p&gt;
&lt;p&gt;Another gem that has been implemented in the course of this refactoring is
&lt;a href=""&gt;data_migrations&lt;/a&gt;. We had quite a
bunch of columns to migrate from the &lt;code&gt;builds&lt;/code&gt; table to various other tables
(such as &lt;code&gt;commits&lt;/code&gt;, &lt;code&gt;requests&lt;/code&gt;, &lt;code&gt;tasks&lt;/code&gt;) and it seemed easier to come up with a
simple DSL for that than writing all these queries by hand.&lt;/p&gt;
&lt;p&gt;Also, we’re now using &lt;a href=""&gt;hashr&lt;/a&gt; in the
application, too (for &lt;code&gt;Travis.config&lt;/code&gt;, specifically). We’ve used it in the
&lt;a href=""&gt;worker code&lt;/a&gt; before and it worked
pretty well.&lt;/p&gt;
&lt;h2 id="in-other-news-"&gt;In other news …&lt;/h2&gt;
&lt;p&gt;In other news, over the last month we have extract a &lt;a href=""&gt;small project that we use to develop our Chef cookbooks&lt;/a&gt; and
added the following tools to the &lt;a href=""&gt;VM infrastructure&lt;/a&gt;:&lt;/p&gt;
&lt;li&gt;kerl to support Erlang with testing against multiple OTP releases&lt;/li&gt;
&lt;li&gt;leiningen 1.6 for Clojure projects&lt;/li&gt;
&lt;li&gt;sbt 0.10 for Scala projects&lt;/li&gt;
&lt;li&gt;Thinking Sphinx 0.9.9, 1.10 and 2.0. &lt;a href=""&gt;Riddle&lt;/a&gt; and &lt;a href=""&gt;Thinking Sphinx&lt;/a&gt; are now hosted on Travis.&lt;/li&gt;
&lt;li&gt;RabbitMQ now installs HTTP API plugin&lt;/li&gt;