No commit activity in last 3 years
No release in over 3 years
Continuous integration should really just be a script that captures the output of running your project update & test commands and presents recent results in a static html page. By keeping test reports in json, per-project CI configuration in 3 probably-one-line scripts, things are kept simple, quick, and super extensible. Want to use git, svn, or hg? No problem. Need to fire off results to Twitter or Campfire? It's one line away. CI depends on cron.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

Crazy Ivan¶ ↑

Crazy Ivan (CI) is simplest possible continuous integration tool.

Usage¶ ↑

Create a directory where your projects will live
  $ mkdir /var/continuous-integration

Place some project(s) in that directory
  $ cd /var/continuous-integration
  $ git clone git://github.com/edward/active_merchant.git

Set up continuous integration for each project
  $ crazy_ivan setup  # creates example ci scripts in 
                      # each project (see How this works)

  $ crazy_ivan setup  # creates the ci directory, and
                      # creates a configuration file,
                      # sets a cron job to run crazy_ivan

Manually run it once to check everything is ok
  $ cd /var/continuous-integration
  $ crazy_ivan /var/www/ci       # the test reports path should be
                                 # accessible via your web server

  $ open /var/www/ci/index.html  # or check it through your browser

Set a cron job to run it every 15 minutes
  $ echo "0,15,30,45 * * * * cd /var/continuous-integration; crazy_ivan /var/www/ci" > ci.cron
  $ crontab ci.cron

Note that you don’t want this running too frequently; having overlapping 
runs is possible and would be bad.

(Functionality to have this run as a web-hook is planned.)

How this works¶ ↑

* crazy_ivan is executed periodically by cron
* crazy_ivan looks in directories one level deeper than where it’s been called

  => asked to run in /projects
                       /shopify
      looks in each    /liquid
      of these dirs    /active_merchant
           ========>   /active_shipping

  => within each directory, it expects four executable scripts
     to execute at the /:

        /shopify
          /.ci/update
               version
               test
               conclusion

* crazy_ivan first executes `update` and captures the output:

    #!/usr/bin/env bash

    git pull  # Whatever your application
              # needs to do to update your
              # source from a repository

* crazy_ivan then exectutes `version` and captures the output:

    #!/usr/bin/env bash

    #!/usr/bin/env ruby -wKU             # Get a version hash/fingerprint/id
    puts `git show`[/^commit (.+)$/, 1]  # from your version control system
                                         #
                                         # (Note that this will be truncated
                                         #  to fit within a filename length.)

* crazy_ivan then executes `test` and captures the output:

    #!/usr/bin/env bash

    rake db:migrate    # This task prepares the application
    rake test          # for running tests, then runs them

* At each of these three steps, the output is repackaged
  into a .json file to be consumed in the directory holding
  the static html.

* crazy_ivan then executes `conclusion`, passing it the same results packaged
  in the .json file used in the static html view.

Copyright and Credits¶ ↑

Copyright © 2009 Edward Ocampo-Gooding. See LICENSE for details.

Heavily inspired/first code sketch written by Tobi Lütke.