class Omnibus::CLI::Application

Public Class Methods

start(*args) click to toggle source

Override start so we can catch and process any exceptions bubbling up

Calls superclass method
# File lib/omnibus/cli/application.rb, line 121
def self.start(*args)
  begin
    super
  rescue => e
    error_msg = "Something went wrong...the Omnibus just ran off the road!"
    error_msg << "\n\nError raised was:\n\n\t#{$!}"
    error_msg << "\n\nBacktrace:\n\n\t#{e.backtrace.join("\n\t")}"
    if e.respond_to?(:original) && e.original
      error_msg << "\n\nOriginal Error:\n\n\t#{e.original}"
      error_msg << "\n\nOriginal Backtrace:\n\n\t#{e.original.backtrace.join("\n\t")}"
    end
    # TODO - we need a proper UI class
    Thor::Base.shell.new.say(error_msg, :red)
    exit 1
  end
end

Public Instance Methods

clean(project_name) click to toggle source
# File lib/omnibus/cli/application.rb, line 38
def clean(project_name)
  project = load_project!(project_name)

  deletion_list = []
  deletion_list << Dir.glob("#{Omnibus.config.source_dir}/**/*")
  deletion_list << Dir.glob("#{Omnibus.config.build_dir}/**/*")

  if options[:purge]
    deletion_list << Dir.glob("#{Omnibus.config.package_dir}/**/*")
    deletion_list << Dir.glob("#{Omnibus.config.cache_dir}/**/*")
    deletion_list << project.install_path if File.exist?(project.install_path)
  end

  deletion_list.flatten!
  deletion_list.each{|f| remove_file(f) }
end
project(name) click to toggle source
# File lib/omnibus/cli/application.rb, line 56
def project(name)
  name = name.chomp("/") # remove trailing slash if present
  target = File.join(Dir.pwd, "omnibus-#{name}")
  install_path = File.join("/opt", name)
  opts = {
    :name => name,
    :install_path => install_path
  }

  # core project files
  template(File.join("Gemfile.erb"), File.join(target, "Gemfile"), opts)
  template(File.join("gitignore.erb"), File.join(target, ".gitignore"), opts)
  template(File.join("README.md.erb"), File.join(target, "README.md"), opts)
  template(File.join("omnibus.rb.example.erb"), File.join(target, "omnibus.rb.example"), opts)

  # project definition
  template(File.join("project.rb.erb"), File.join(target, "config", "projects", "#{name}.rb"), opts)

  # example software definitions
  config_software = File.join(target, "config", "software")
  template(File.join("software", "c-example.rb.erb"),
           File.join(config_software, "c-example.rb"), opts)
  template(File.join("software", "erlang-example.rb.erb"),
           File.join(config_software, "erlang-example.rb"), opts)
  template(File.join("software", "ruby-example.rb.erb"),
           File.join(config_software, "ruby-example.rb"), opts)

  # Vagrant build lab
  template(File.join("Berksfile.erb"), File.join(target, "Berksfile"), opts)
  template(File.join("Vagrantfile.erb"), File.join(target, "Vagrantfile"), opts)

  # render out stub packge scripts
  %w{ makeselfinst postinst postrm }.each do |package_script|
    script_path = File.join(target, "package-scripts", name, package_script)
    template_path = File.join("package_scripts", "#{package_script}.erb")
    # render the package script
    template(template_path, script_path, opts)
    # ensure the package script is executable
    FileUtils.chmod(0755, script_path)
  end
end
version() click to toggle source
# File lib/omnibus/cli/application.rb, line 99
def version
  say("Omnibus: #{Omnibus::VERSION}", :yellow)
end