lib/flow/cli/commands/remote.rb in flow-cli-0.0.4 vs lib/flow/cli/commands/remote.rb in flow-cli-0.0.5
- old
+ new
@@ -6,56 +6,78 @@
module Flow::Cli
module Commands
class Remote < Thor
def initialize(*args, &proc)
super(*args)
- @prompt = TTY::Prompt.new
- @pastel = Pastel.new
- @warning = @pastel.yellow.detach
- @error = @pastel.red.bold.detach
@db_manager = Utils::DbManager
@api_manager = Utils::FlowApiManager.load_from_db(&proc)
+ @cmd_helper = Utils::CmdHelper.instance
end
+ desc "help_ios_init", 'how to fetch provisions, p12 files'
+ def help_ios_init
+ @cmd_helper.echo_warning %(when you build ios project, you should upload p12 and provision to flow ci project
+ followed this website to build p12 and provision files
+ http://docs.flow.ci/en/upload_certificate_and_provisioning_profiles.html (EN)
+ http://docs.flow.ci/zh/upload_certificate_and_provisioning_profiles.html (中文)
+
+ finally,
+ run `flow-cli remote upload_p12 FILE` and `flow-cli remote upload_provision FILE` to upload the files.
+ )
+ end
+
desc "login", "bind flow ci account to flow cli."
def login
- email = @prompt.ask("email?")
- password = @prompt.mask("password?")
+ email = @cmd_helper.ask("email?")
+ password = @cmd_helper.mask("password?")
Utils::FlowApiManager.login(email, password)
- puts "login success"
+ @cmd_helper.echo_warning "you info saved to ~/.flow_cli_config.yml"
+ @cmd_helper.echo "login success..."
end
+ option :branch, default: "master"
+ desc "run_manual_job", 'run manual job(default branch master) using --branch to specify branch'
+ def run_manual_job
+ choosed_project_check
+ answer = @api_manager.run_manual_job(
+ current_flow_id,
+ current_project_id,
+ options[:branch]
+ )
+ @cmd_helper.echo("job started. click ( cmd + click ) url to visit on browser")
+ @cmd_helper.echo("https://dashboard.flow.ci/projects/#{current_project_id}/jobs/#{answer[:id]}")
+ end
desc "reset", "reset flow api info data"
def reset
- @db_manager.overide_save({})
- puts "reset success..."
+ @db_manager.reset
+ @cmd_helper.echo_warning "reset ok"
end
desc "project_init", "set a project from flow ci to operation"
def project_init
projects = current_api_manager.fetch_projects
- begin
- file_origin = `git remote -v`.to_s.match("git.*.git").first
- rescue
- puts @warning.call "read git origin fail..."
- end
+ # begin
+ # file_origin = `git remote -v`.to_s.match("git.*.git").first
+ # rescue
+ # cmd_helper.echo_warning "read git origin fail..."
+ # end
dict = {}
dict = Hash[projects.map { |p| [p[:name].to_s, p[:id]] }]
- current_project_id = @prompt.select("Choose your project?", dict)
+ current_project_id = @cmd_helper.select("Choose your project?", dict)
@db_manager.save_attribute(:current_project_id, current_project_id)
flows = current_api_manager.fetch_flows(current_project_id)
current_flow_id = if flows.count == 1
flows.first[:id]
else
dict = {}
flows.each { |p| dict[(p[:name]).to_s] = p[:id] }
- @prompt.select("Choose your flow?", dict)
+ @cmd_helper.select("Choose your flow?", dict)
end
@db_manager.save_attribute(:current_flow_id, current_flow_id)
puts "project_id = #{current_project_id}, flow_id = #{current_flow_id}. saved this info..."
end
@@ -66,60 +88,90 @@
project_init unless @db_manager.read_attribute(:current_flow_id)
api_p12s = current_api_manager.load_p12s(@db_manager.read_attribute(:current_flow_id))
old_p12 = api_p12s.find { |p12| p12[:filename] == basename }
unless old_p12.nil?
- if @prompt.yes? "found a same name file, override?"
+ if @cmd_helper.yes? "found a same name file, override?"
current_api_manager.delete_p12(old_p12[:id], @db_manager.read_attribute(:current_flow_id))
else
- return puts "canceled.."
+ return @cmd_helper.echo_warning "canceled..."
end
end
current_api_manager.upload_p12(@db_manager.read_attribute(:current_flow_id), file_path, password)
- puts "uploaded."
+ puts "uploaded. you can run `flow-cli remote list_p12s` to check the operation."
end
desc "list_p12s", "list_p12s"
def list_p12s
choosed_project_check
- puts current_api_manager.load_p12s(@db_manager.read_attribute(:current_flow_id))
+ dict = current_api_manager.load_p12s(current_flow_id)
+ if dict.count.zero?
+ @cmd_helper.echo_warning("no p12 found in project #{current_project_id}")
+ else
+ @cmd_helper.puts_table(dict)
+ end
end
- desc "upload_provision", "upload_provision"
+ desc "fetch_latest_jobs", "fetch_latest_jobs"
+ def fetch_latest_jobs
+ choosed_project_check
+ list = @api_manager.fetch_latest_jobs(current_flow_id, current_project_id)
+ show_data = list.map do |item|
+ tmp = item.slice(:id, :status, :event_type, :number, :branch, :commit_log)
+ tmp[:created_at_str] = Time.at(item[:created_at]).to_s
+ tmp[:url] = "https://dashboard.flow.ci/projects/#{current_project_id}/jobs/#{tmp[:id]}"
+ tmp
+ end
+ @cmd_helper.puts_table(show_data, %i[number event_type branch status commit_log created_at_str url])
+ end
+
+ desc "upload_provision FILE_PATH", "upload_provision"
def upload_provision(file_path)
choosed_project_check
basename = File.basename file_path
- project_init unless @db_manager.read_attribute(:current_flow_id)
- api_provisions = current_api_manager.load_provisions(@db_manager.read_attribute(:current_flow_id))
+ api_provisions = current_api_manager.load_provisions(current_flow_id)
old_provision = api_provisions.find { |provision| provision[:filename] == basename }
unless old_provision.nil?
- if @prompt.yes? "found a same name file, override?"
- current_api_manager.delete_provision(old_provision[:id], @db_manager.read_attribute(:current_flow_id))
+ if @cmd_helper.yes? "found a same name file, override?"
+ current_api_manager.delete_provision(old_provision[:id], current_flow_id)
else
return puts "canceled.."
end
end
- current_api_manager.upload_provision(@db_manager.read_attribute(:current_flow_id), file_path)
- puts "uploaded."
+ current_api_manager.upload_provision(current_flow_id, file_path)
+ puts "uploaded. you can run `flow-cli remote list_provisions` to check the operation."
end
desc "list_provisions", "list provisions"
def list_provisions
choosed_project_check
- puts current_api_manager.load_provisions(@db_manager.read_attribute(:current_flow_id))
+ dict = current_api_manager.load_provisions(current_flow_id)
+ if dict.count.zero?
+ @cmd_helper.echo_warning("no p12 found in project #{current_project_id}")
+ else
+ @cmd_helper.puts_table(dict)
+ end
end
no_commands do
private
def current_api_manager
return @current_api_manager unless @current_api_manager.nil?
@api_manager.refresh_login do
- [@prompt.ask("email?"), @prompt.mask("password?")]
+ [@cmd_helper.ask("email?"), @cmd_helper.mask("password?")]
end
@current_api_manager = @api_manager
@current_api_manager
+ end
+
+ def current_project_id
+ @current_project_id ||= @db_manager.read_attribute(:current_project_id)
+ end
+
+ def current_flow_id
+ @current_flow_id ||= @db_manager.read_attribute(:current_flow_id)
end
def choosed_project_check
project_init if @db_manager.read_attribute(:current_project_id).nil?
end