class Deploy::CLI
Constants
- PROTOCOL_NAME
Constants for formatting output
Public Class Methods
ask_config_question(question_text, valid_format = /.+/)
click to toggle source
# File lib/deploy/cli.rb, line 149 def ask_config_question(question_text, valid_format = /.+/) question_text = "#{question_text}: " ask(question_text) do |q| q.whitespace = :remove q.responses[:not_valid] = "That answer is not valid" q.responses[:ask_on_error] = :question q.validate = valid_format end end
configure()
click to toggle source
# File lib/deploy/cli.rb, line 128 def configure configuration = { account: ask_config_question("Account Domain (e.g. https://atech.deployhq.com)", %r{\Ahttps?://[a-z0-9\.\-]+.deployhq.com\z}), username: ask_config_question("Username or e-mail address"), api_key: ask_config_question("API key (You can find this in Settings -> Security)"), project: ask_config_question("Default project to use (please use permalink from web URL)") } confirmation = true if File.exists?(@options.config_file) confirmation = agree("File already exists at #{@options.config_file}. Overwrite? ") end return unless confirmation file_data = JSON.pretty_generate(configuration) File.write(@options.config_file, file_data) say("File written to #{@options.config_file}") end
deploy()
click to toggle source
# File lib/deploy/cli.rb, line 104 def deploy @ungrouped_servers = @project.servers @server_groups = @project.server_groups parent = nil while parent.nil? parent = choose do |menu| menu.prompt = "Please choose a server or group to deploy to:" menu.choices(*(@ungrouped_servers + @server_groups)) menu.choice("List Server Details") do server_list nil end end end latest_revision = @project.latest_revision(parent.preferred_branch) deployment = @project.deploy(parent.identifier, parent.last_revision, latest_revision) STDOUT.print "Waiting for an available deployment slot..." DeploymentProgressOutput.new(deployment).monitor end
invoke(args)
click to toggle source
# File lib/deploy/cli.rb, line 16 def invoke(args) @options = OpenStruct.new parser = OptionParser.new do |opts| opts.banner = "Usage: deployhq [options] command" opts.separator "" opts.separator "Commands:" opts.separator "deploy\t\t Start a new deployment" opts.separator "servers\t\t List configured servers and server groups" opts.separator "configure\t\t Create a new configuration file for this tool" opts.separator "" opts.separator "Common Options:" @options.config_file = './Deployfile' opts.on("-c", "--config path", 'Configuration file path') do |config_file_path| @options.config_file = config_file_path end opts.on("-p", "--project project", "Project to operate on (default is read from project: in config file)") do |project_permalink| @options.project = project_permalink end opts.on_tail('-v', '--version', "Shows Version") do puts Deploy::VERSION exit end opts.on_tail("-h", "--help", "Displays Help") do puts opts exit end end begin parser.parse!(args) command = args.pop rescue OptionParser::InvalidOption STDERR.puts parser.to_s exit 1 end unless command == 'configure' begin Deploy.configuration_file = @options.config_file rescue Errno::ENOENT STDERR.puts "Couldn't find configuration file at #{@options.config_file.inspect}" exit 1 end project_permalink = @options.project || Deploy.configuration.project if project_permalink.nil? STDERR.puts "Project must be specified in config file or as --project argument" exit 1 end @project = Deploy::Project.find(project_permalink) end case command when 'deploy' deploy when 'servers' server_list when 'configure' configure else STDERR.puts parser.to_s end end
server_list()
click to toggle source
# File lib/deploy/cli.rb, line 87 def server_list @server_groups ||= @project.server_groups if @server_groups.count > 0 @server_groups.each do |group| puts "Group: #{group.name}".bold puts group.servers.map {|server| format_server(server) }.join("\n\n") end end @ungrouped_servers ||= @project.servers if @ungrouped_servers.count > 0 puts "\n" if @server_groups.count > 0 puts "Ungrouped Servers".bold puts @ungrouped_servers.map {|server| format_server(server) }.join("\n\n") end end
Private Class Methods
format_kv_pair(hash)
click to toggle source
# File lib/deploy/cli.rb, line 180 def format_kv_pair(hash) longest_key = hash.keys.map(&:length).max + 2 hash.each_with_index.map do |(k,v), i| str = sprintf("%#{longest_key}s : %s", k,v) i == 0 ? str.color(:bold) : str end.join("\n") end
format_server(server)
click to toggle source
Data formatters
# File lib/deploy/cli.rb, line 162 def format_server(server) server_params = { "Name" => server.name, "Type" => PROTOCOL_NAME[server.protocol_type.to_sym], "Path" => server.server_path, "Branch" => server.preferred_branch, "Current Revision" => server.last_revision, } server_params["Hostname"] = [server.hostname, server.port].join(':') if server.hostname server_params["Bucket"] = server.bucket_name if server.bucket_name server_params["Region"] = server.region if server.region server_params["Container"] = server.container_name if server.container_name Array.new.tap do |a| a << format_kv_pair(server_params) end.join("\n") end