class Jenkins::Builder::CLI

Public Class Methods

create_alias_commands(aliases) click to toggle source
# File lib/jenkins/builder/cli.rb, line 16
def create_alias_commands(aliases)
  aliases.each do |name, command|
    desc "#{name}", "Alias for: `#{command}'"
    define_method name do |*args|
      self.class.start(Shellwords.split(command) + args)
    end
  end
end
main(args) click to toggle source
# File lib/jenkins/builder/cli.rb, line 10
def main(args)
  validate_fzf!
  @config = Jenkins::Builder::Config.new
  create_alias_commands(@config.aliases || [])
  start(args)
end
validate_fzf!() click to toggle source
# File lib/jenkins/builder/cli.rb, line 25
def validate_fzf!
  `fzf --version`
rescue Errno::ENOENT
  raise 'Required command fzf is not installed.'
end

Public Instance Methods

alias(name=nil, command=nil) click to toggle source
# File lib/jenkins/builder/cli.rb, line 92
def alias(name=nil, command=nil)
  if name.nil? || command.nil?
    Jenkins::Builder::App.new.list_aliases
    exit
  end
  Jenkins::Builder::App.new.create_alias(name, command)
end
build(*jobs) click to toggle source
# File lib/jenkins/builder/cli.rb, line 61
def build(*jobs)
  if options[:version]
    puts Jenkins::Builder::VERSION
    exit
  end
  if options.service.nil?
    service = fzf(Config.new().services).first
    exit if service.nil?
  else
    service = options.service
  end
  app = Jenkins::Builder::App.new(service, options)
  if jobs.empty?
    jobs = fzf(app.fetch_all_jobs)
    exit if jobs.empty?
    job = jobs.first

    if app.use_mbranch?(job)
      branches = fzf(app.all_branches)
      exit if branches.empty?
      branch = branches.first
      jobs = [format('%s:%s', job, branch)]
    else
      jobs = [job]
    end
  end
  puts "Jobs: #{jobs.join(", ")}"
  app.build_each(jobs)
end
fzf(lines) click to toggle source
# File lib/jenkins/builder/cli.rb, line 131
def fzf(lines)
  IO.popen('fzf', 'r+') do |p|
    p.puts(lines.join("\n"))
    p.close_write
    p.readlines.map(&:chomp)
  end
end
info() click to toggle source
# File lib/jenkins/builder/cli.rb, line 53
def info
  Jenkins::Builder::App.new.print_info(options)
end
read_password(prompt) click to toggle source
# File lib/jenkins/builder/cli.rb, line 124
def read_password(prompt)
  print "#{prompt}"
  result = STDIN.noecho(&:gets).chomp
  puts
  result
end
read_text(prompt) click to toggle source
# File lib/jenkins/builder/cli.rb, line 118
def read_text(prompt)
  print "#{prompt}"
  result = STDIN.gets.chomp
  result
end
refresh_jobs_cache() click to toggle source
# File lib/jenkins/builder/cli.rb, line 106
def refresh_jobs_cache
  Jenkins::Builder::App.new.refresh_jobs_cache
end
setup() click to toggle source
# File lib/jenkins/builder/cli.rb, line 37
def setup
  if options[:edit]
    editor = ENV['VISUAL'] || ENV['EDITOR'] || "vim"
    exec("#{editor} #{File.expand_path('~/.jenkins-builder.yaml')}")
  else
    url = read_text('Input Jenkins URL: ')
    username = read_text('Input Username: ')
    password = read_password('Input Password: ')
    git_branches = read_text('Input Git Branches separated by comma, e.g. origin/develop,origin/master: ').split(/\s*,\s*/)

    Jenkins::Builder::App.new.setup(url: url, username: username, password: password, branches: git_branches)
  end
end
unalias(name) click to toggle source
# File lib/jenkins/builder/cli.rb, line 101
def unalias(name)
  Jenkins::Builder::App.new.delete_alias(name)
end
version() click to toggle source
# File lib/jenkins/builder/cli.rb, line 111
def version
  puts Jenkins::Builder::VERSION
end