#!/usr/bin/env ruby require "rubygems" require "thor" require File.dirname(__FILE__) + "/../lib/integrity" class WithIntegrity < Thor include FileUtils desc "install [PATH]", "Copy template files to PATH. Next, go there and edit them." def install(path) @root = File.expand_path(path) create_dir_structure copy_template_files edit_template_files create_db(root / 'config.yml') after_setup_message end desc "create_db [CONFIG]", "Checks the `database_uri` in CONFIG and creates and bootstraps a database for integrity" def create_db(config) Integrity.new(config) DataMapper.auto_migrate! end private attr_reader :root def create_dir_structure mkdir_p root mkdir_p root / "builds" mkdir_p root / "log" end def copy_template_files cp Integrity.root / "config" / "config.sample.ru", root / "config.ru" cp Integrity.root / "config" / "config.sample.yml", root / "config.yml" cp Integrity.root / "config" / "thin.sample.yml", root / "thin.yml" end def edit_template_files edit_integrity_configuration edit_thin_configuration end def edit_integrity_configuration config = File.read(root / "config.yml") config.gsub! %r(sqlite3:///var/integrity.db), "sqlite3://#{root}/integrity.db" config.gsub! %r(/path/to/scm/exports), "#{root}/builds" config.gsub! %r(/var/log), "#{root}/log" File.open(root / "config.yml", "w") { |f| f.puts config } end def edit_thin_configuration config = File.read(root / 'thin.yml') config.gsub! %r(/apps/integrity), root File.open(root / 'thin.yml', 'w') { |f| f.puts config } end def after_setup_message puts puts %Q(Awesome! Integrity was installed successfully!) puts puts %Q(If you want to enable notifiers, install the gems and then require them) puts %Q(in #{root}/config.ru) puts puts %Q(For example:) puts puts %Q( sudo gem install -s http://gems.github.com foca-integrity-email) puts puts %Q(And then in #{root}/config.ru add:) puts puts %Q( require "notifier/email") puts puts %Q(Don't forget to tweak #{root / "config.yml"} to your needs.) end end WithIntegrity.start