Simple Asynchoronous Continuous Integration System for RubyOnRails
Ruby JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


== Welcome to Inotegration

Inotegration was made by Inovare ( to help Rails 
programmers and companies to do easy Asynchronous Continuous Integration 
with RubyOnRails, without needing to edit giant XML files.

Inotegration runs any tests, specs and metrics inside your project.

PLEASE! Feel free to send suggestions, patches, complains, bugs, anything related 
to Inotegration to me (felipegiotto a, I'll answer as soon as

== Getting Started

To use Inotegration, you have to follow these steps:

1. Install any missing gems with "sudo rake gems:install"
2. Create symlinks inside the "projects" folder to each of your projects.
3. Run "rake projects:schedule_analyses" once to update your crontab and 
schedule periodical analyses
4. There's no fourth step! You're ready to use Inotegration! Migrate your production 
database, start the server and try! Maybe you'll need to wait 5 minutes for the scheduled task to
run. If you're not patient enough, type "rake projects:analyse RAILS_ENV=production" and
start using Inotegration NOW!

You need to use the production environment, because the "whenever" gem schedules 
the updates in the production database. If you need to change this behavior, type
"crontab -e" manually and change the RAILS_ENV manually.

Make sure to use some RSA key or equivalent to authorize your GIT and SVN projects, because
Inotegration still can't send login and/or passwords. To test this functionality, you may
type "git pull" or "svn update" inside each of your project's folders. The code should
be updated automatically, without needing to provide keys/usernames/passwords.

== Emails

In order to send notification e-mails, you need to configure ActionMailer. Inside /config folder, rename
"email_template.yml" to "email.yml" and write your ActionMailer configuration.

== Information

Inotegration was created by Felipe Giotto (felipegiotto a from 
Inovare ( and was inspired by Marty Andrews 
(, more specifically by one of his posts, 
"Enforcing Ruby code quality" (

Inotegration checks for modification in GIT and SVN repositories, periodically 
running "svn update" or "git pull" commands. If any changes are fetched from the 
repository, Inotegration starts the above tasks, storing the results in the database.

These tasks are performed by Inotegration to each of your projects:

1. Unit and Funcional tests (Test::Unit)
2. Specs
3. Flog Code Complexity Analysis (see for more information)
4. Flay Code Duplication Analysis (see for more information)
5. Roodi Code Quality Analysis (see for more information)
6. Reek Code Quality Analysis (see for 
more information)
7. Finally, "rake stats"

Inotegration was built with Ubuntu 9.X, but it should work with most operational systems.
With Windows (blearghhh!), you may need to manually schedule the "rake projects:analyse"
to run periodically, since Inotegration uses cron to schedule tasks.

== Customization

You may customize Flog, Flay, Roodi and Reek by editing "config/inotegration.yml" 
(created automatically).

The MaximumFlogComplexity key stores the complexity threshold from Flog. 
You can change this threshold to any value you want.
We recommend reading the Flog README file for more information.

The MaximumFlayThreshold key stores the duplication threshold from Flay.
You can change this threshold to any value you want.
We recommend reading the Flay README file for more information.

The RoodiConfig key stores many keys and values to customize Roodi.
We recommend reading the Roodi README file for more information.

The ReekConfig key stores many keys and values to customize Reek
We recommend reading the Reek README file for more information.

== Excuses

I'm a big fan of TDD and BDD. But, this is my story: I'm at my family's house,
in a Valentine's Day, without my girlfriend. So, I decided to use these "free" days 
to make some experiments. Then, suddenly, Inotegration was born!

Now, it's sunday afternoon, soon I'll go home and I want to publish my code as
soon as possible. So, I'll put this code on Github and then, when I have some free time,
according to the good TDD practices, I'll delete each piece of my code, 
make some tests and develop Inotegration again from scratch. These modifications
will soon be available in Github


* The default thresholds for the analysis tools are too tight!
* Model Validations and tests.
* Make the analyse method thread-safe.

== Known Bugs

* If your SCM need manual authentication, the scheduled analyses will wait forever for the command,
the rake task will keep running every 5 minutes and soon your memory will be over. ;D