lib/negroku/cli.rb in negroku-1.1.14 vs lib/negroku/cli.rb in negroku-2.0.0.pre1

- old
+ new

@@ -1,217 +1,30 @@ -require 'thor' -require 'rainbow' -require 'highline/import' -require 'negroku' +require 'gli' +require 'inquirer' +require 'negroku/i18n' +require 'negroku/version' +require 'negroku/cli/bootstrap' -trap('INT') { exit } +module Negroku::CLI -class App < Thor + extend GLI::App - say "\n\n#############################################".bright() - say "## NEGROKU ##".bright() - say "#############################################\n".bright() + # Set th version + version Negroku::VERSION - desc "create", "Create application. Intialize the capfile, also create the deploy.rb file in the config folder" - method_option :local_recipes, :type => :boolean, :aliases => "-l" - method_option :path, :type => :string, :aliases => "-p" - def create(name=nil) - # Get configuration - config = getConfig + # Negroku commands will manage the interactive cli ui + default_command :negroku - # Test for config - if config.empty? - say "[WARNING]".foreground(:red) - say "It's recommended that you add some custom settings to negroku before you create your app deployment\n\n" - say "You can add your deployment servers urls using:\n" - say "negroku target add my.deployment.com".foreground(:yellow) - say "negroku target add 104.284.3.1\n".foreground(:yellow) - unless agree "You have not added custom settings! Do you want to continue? [y/n]", true - say "Goodbye" - exit - end - end + # Don't show the negroku commands in the help + hide_commands_without_desc true - say "We're about to create your application deploy setup\n".foreground(:green) + # Use the gemspec summary to describe the cli + program_desc Gem::Specification.find_by_name('negroku').summary - # Hash to hold the app info - data = {} + # Load all the commands in the negroku/cli/command folder + commands_from 'negroku/cli/commands' - # Get the name - if name.nil? - data[:application_name] = ask "Give your application a name:".bright() - else - data[:application_name] = name - end - - # The application code repository - choose do |menu| - - say "\nREPOSITORIES" - say "============" - menu.prompt = "Please choose your repository?".bright() - menu.select_by = :index - - # find local remote from git repo - %x(git remote -v 2> /dev/null | awk '{print $2}' | uniq).split("\n").each do |url| - menu.choice(url) do |server| - say("Using #{server}") - data[:repo] = server; - end - end - - # add other repo choice - menu.choice(:other) { - data[:repo] = ask "Type the url and username e.g. git@github.com:username/app-name.git: ".bright() - } - end - - # The application target deploy server - say "\nTARGET SERVERS" - say "==============\n" - %w(staging production).each do |stage| - - # Stage title - puts "\n#{stage.upcase}".foreground(:green) - - # Ask server - choose do |menu| - menu.prompt = "Please choose your #{stage} deployment server?".bright() - menu.select_by = :index - - # Adds the targets in the config file if there is one - if config[:target] - config[:target].each do |val| - menu.choice(val) do |server| - say("Using #{server} for #{stage}") - data[:"#{stage}_server"] = server; - end - end - else - say "[INFO] There are no target urls in the default settings".color(:yellow) - end - - menu.choice(:other) { - data[:"#{stage}_server"] = ask "Type the hostname or ip of the #{stage} server to deploy to:".bright() - } - end - - # Add custom domain - case stage - when "staging" - domain = data[:"#{stage}_server"].gsub(/^([a-z\d]*)/, data[:application_name]) - when "production" - domain = "www.#{data[:application_name]}.com" - end - if agree "Do you want to use #{domain}? [y/n]", true - data[:"#{stage}_domains"] = domain - else - data[:"#{stage}_domains"] = ask "Please enter the domains separated by spaces" - end - end - - init(".", data) - - say "\n\nWhat to do next?\n".bright() - say "Setup your app running " + "cap deploy:setup".color(:yellow) + " then " + "cap deploy:cold".color(:yellow) - say "You can try with " + "cap -T".color(:yellow) +" to see the available tasks" - say "Also you can check the following files, you may want to change some things there" - say "config/deploy.rb".color(:yellow) - say "config/deploy/staging.rb".color(:yellow) - say "config/deploy/production.rb".color(:yellow) - say "\nHAPPY DEPLOY".foreground(:green) - end + # Initialize GLI app + exit Negroku::CLI.run(ARGV) end -class Target < Thor - desc "add", "add new default target server" - def add(host=nil) - if host.nil? - host = ask("Type the host or ip for the target machine") - end - saveConfig(:add, :target, host) - say "[Negroku] Added #{host}" - end - desc "remove", "remove some target" - def remove - puts "I will remove a target" - end - - desc "list", "show the targets" - def list - puts "I will list the target servers" - end -end - -class Konfig < Thor - namespace "config" - - desc "show", "Show the current configuration file" - - def show - showConfig - end -end - -class RemoteEnv < Thor - namespace "env" - class_option :stage, :type => :string, :aliases => "-s", :desc => "Set the capistrano stage to be used", :banner => "STAGE" - - desc "show", "Show the current remote variables" - def show - %x(cap #{options[:stage]} rbenv:vars:show) - end - - desc "add", "Adds or updates env variables to the remote server" - method_option :local, :type => :boolean, :aliases => "-l" - def add(key=nil, value=nil) - - # Check if the paramenter were sent in the call - # Ask for the value if only the key was sent - if !key.nil? && value.nil? - value = ask("Please enter the value for #{key}:") - # If nothing was sent - elsif key.nil? && value.nil? - # Check if the .rbenv-vars file exists and offer get the info from there - if File.exist?(".rbenv-vars") && (agree "Do you want to add variables from your local .rbenv-vars file [y/n]", true) - choose do |menu| - menu.prompt = "Please choose variable you want to add?".bright() - menu.select_by = :index - - File.readlines(".rbenv-vars").each do |line| - menu.choice(line.gsub("\n","")) do |command| - key = command.split("=")[0] - value = command.split("=")[1] - end - end - end - else - key = ask("Please enter the variable key:") - value = ask("Please enter the value for #{key}:") - end - end - - %x(cap #{options[:stage]} rbenv:vars:add -s key="#{key}" -s value="#{value}") - end -end - -module Negroku - class CLI < Thor - class_option :version, :type => :boolean, :aliases => "-v" - - def initialize(*) - super - - # Show the version - if options[:version] - puts Negroku::VERSION - exit 0 - end - end - - register(App, 'app', 'app [COMMAND]', 'Application') - register(Target, 'target', 'target [COMMAND]', 'Target servers') - register(Konfig, 'config', 'config [COMMAND]', 'Configuration') - register(RemoteEnv, 'env', 'env [COMMAND]', 'Remote environmental variables') - end -end