[Travis CI][travis] is a flexible and easy to use continuous integration 
server; see the [Getting Started page][travis-getting-started] for more 
details. The flexibility means that there are any number of ways to setup 
and test your extensions. Here is one way.

First you need to add a `.travis.yml` file to the root of your repository.

    rvm:
      - 1.8.7
      - 1.9.2
      - 1.9.3

    before_script: "./spec/ci/before_script"

    script: "./spec/ci/script"

    env:
      - RADIANT_VERSION=0.9.1 DB=mysql
      - RADIANT_VERSION=0.9.1 DB=postgres
      - RADIANT_VERSION=1.0.0 DB=mysql
      - RADIANT_VERSION=1.0.0 DB=postgres

    notifications:
      recipients:
        - y...@example.com

The `rvm` array shows the Ruby versions you want to test against; since 
Radiant 1.0 supports the three latest Ruby releases your extension should 
too. Likewise the `env` array list Radiant version/database combinations to 
test against; the Radiant version can be any [tagged version of 
Radiant][tags].

Next up we need to create the `before_script` referenced above. The 
`before_script` is run before your tests and sets up a complete Radiant 
environment within which your tests will be run.

    cd ~
    git clone git://github.com/radiant/radiant.git
    cd ~/radiant
    if [[ $RADIANT_VERSION != "master" ]]
    then
      git checkout -b $RADIANT_VERSION $RADIANT_VERSION
    fi
    cp -r ~/builds/*/YOUR_REPOSITORY_NAME 
vendor/extensions/YOUR_EXTENSION_NAME
    gem install bundler --pre
    bundle install

    case $DB in
      "mysql" )
        mysql -e 'create database radiant_test;'
        cp spec/ci/database.mysql.yml config/database.yml;;
      "postgres" )
        psql -c 'create database radiant_test;' -U postgres
        cp spec/ci/database.postgresql.yml config/database.yml;;
    esac

    bundle exec rake db:migrate
    bundle exec rake db:migrate:extensions

Replace `YOUR_REPOSITORY_NAME` and `YOUR_EXTENSION_NAME` in the 
`before_script` with the actual name of your repo and extension; e.g. 
`radiant-sheets-extension` and `sheets` respectively. **Don't forget to 
make this script executable before committing it to your repository**.

Finally we need to create the `script` file. This is the script that 
actually executes your tests.

    cd ~/radiant
    bundle exec rake spec:extensions EXT=YOUR_EXTENSION_NAME

Again you need to replace `YOUR_EXTENSION_NAME` with the real thing and 
**make the script executable**.

All that's left to do is login to [Travis][travis], enable the commit-hook 
for you repository and push. Head over to <http://travis-ci.org/> and click 
the "Sign in with GitHub" link. Once you've authorized through GitHub visit 
your profile page on Travis, find the extension to enable and flick the 
switch to on.

Now you're ready to commit and push the `.travis.yml`, `before_script` and 
`script` files and let Travis handle the rest. If you want to know more 
about all the options you have with Travis the [documentation][docs] is 
very good. You can see an example of this setup in action on the 
[Sheets][sheets-repo] extension or check out what it looks like to have 
your specs run by Travis by visiting the Travis page for 
[Sheets][sheets-ci]. Once setup Travis will run your tests after every 
commit unless you add `[ci skip]` to the commit message (which is good 
practice when pushing documentation or other commits that don't affect 
functionality).

[travis]: http://travis-ci.org/
[travis-getting-started]: 
http://about.travis-ci.org/docs/user/getting-started/
[tags]: https://github.com/radiant/radiant/tags
[docs]: http://about.travis-ci.org/docs/
[sheets-repo]: https://github.com/radiant/radiant-sheets-extension
[sheets-ci]: http://travis-ci.org/radiant/radiant-sheets-extension

Reply via email to