class Dodebui::Cli

commandline interface for dodebui

Attributes

apt_proxy[RW]
build_distributions[RW]
source_templates[RW]
wd[R]

Public Class Methods

logger() click to toggle source
# File lib/dodebui/cli.rb, line 12
def self.logger
  @logger ||= Logger.new(STDOUT)
end
new() click to toggle source
# File lib/dodebui/cli.rb, line 16
def initialize
  @dodebuifiles ||= ['Dodebuifile']
  @original_dir = Dir.getwd
  @distributions_sem = Mutex.new
end

Public Instance Methods

build() click to toggle source
# File lib/dodebui/cli.rb, line 129
def build
  threads = []
  @distributions.each do |dist|
    threads << Thread.new do
      begin
        dist.build.build
      rescue => e
        logger.warn("Failed building on image '#{dist.image_name}': #{e}")
        @distributions_sem.synchronize do
          @distributions -= [dist]
        end
      end
    end
  end
  # wait for all threads
  threads.each(&:join)
end
check_outcome() click to toggle source
# File lib/dodebui/cli.rb, line 58
def check_outcome
  return if @distributions.length == build_distributions.length
  logger.error(
    "Only built #{@distributions.length} out of " \
    "#{build_distributions.length}"
  )
  exit 1
end
dodebuifile?() click to toggle source
# File lib/dodebui/cli.rb, line 22
def dodebuifile?
  @dodebuifiles.each do |fn|
    return fn if File.exist?(fn)
  end
  nil
end
ensure_images_updated() click to toggle source
# File lib/dodebui/cli.rb, line 102
def ensure_images_updated
  # ensure images are up to date
  threads = []
  @distributions.each do |dist|
    threads << Thread.new do
      begin
        dist.ensure_image_updated
      rescue => e
        logger.warn(
          "Failed ensuring a updated image '#{dist.image_name}': #{e}"
        )
        @distributions_sem.synchronize do
          @distributions -= [dist]
        end
      end
    end
  end
  # wait for all threads
  threads.each(&:join)
end
load_dodebiufile() click to toggle source
# File lib/dodebui/cli.rb, line 41
def load_dodebiufile
  dodebuifile, location = find_dodebuifile_location
  fail 'No Dodebuifile found' if dodebuifile.nil?
  @dodebuifile = File.join(location, dodebuifile)
  @wd = location
  Cli.logger.info("Working directory #{@wd}")
  Cli.logger.info("Config file #{@dodebuifile}")
  load_dodebiufile_raw @dodebuifile
end
load_dodebiufile_raw(path) click to toggle source
# File lib/dodebui/cli.rb, line 51
def load_dodebiufile_raw(path)
  File.open(path, 'r') do |infile|
    code = infile.read
    eval(code) # rubocop:disable Lint/Eval
  end
end
logger() click to toggle source
# File lib/dodebui/cli.rb, line 91
def logger
  Cli.logger
end
prepare_distributions(distributions = []) click to toggle source
# File lib/dodebui/cli.rb, line 95
def prepare_distributions(distributions = [])
  @distributions = distributions.map do |name|
    Distribution.new(name, self)
  end
  ensure_images_updated
end
prepare_sources() click to toggle source
# File lib/dodebui/cli.rb, line 123
def prepare_sources
  @distributions.each do |dist|
    dist.build.source
  end
end
run() click to toggle source
# File lib/dodebui/cli.rb, line 67
def run
  Cli.logger.info("Initializing dodebui #{VERSION}")

  load_dodebiufile

  test_docker

  prepare_distributions build_distributions

  prepare_sources

  build

  check_outcome
end
test_docker() click to toggle source
# File lib/dodebui/cli.rb, line 83
def test_docker
  Docker.options[:read_timeout] = 3600
  data = Docker.version
  Cli.logger.info(
    "Connecting to Docker server successful (version #{data['Version']})"
  )
end