class CIDE::Builder

Attributes

config[R]

Public Class Methods

new(config) click to toggle source
# File lib/cide/builder.rb, line 11
def initialize(config)
  @config = config
  @tmp_files = []
end

Public Instance Methods

build(tag: nil, pull: nil, ssh_key: nil) click to toggle source
# File lib/cide/builder.rb, line 16
def build(tag: nil, pull: nil, ssh_key: nil)
  raise ArgumentError, 'tag missing' unless tag

  if config.use_ssh
    raise ArgumentError, 'ssh_key missing' unless ssh_key
    unless File.exist?(ssh_key)
      raise ArgumentError, "ssh_key #{ssh_key} not found"
    end
    create_tmp_file! TEMP_SSH_KEY, File.read(ssh_key)
  end
  create_tmp_file! DOCKERFILE, config.to_dockerfile

  build_options = ['--force-rm']
  build_options << '--pull' if pull
  build_options.push '-f', DOCKERFILE
  build_options.push '-t', tag
  build_options << '.'
  docker :build, *build_options
ensure
  release_tmp_files!
end

Protected Instance Methods

create_tmp_file!(destination, content) click to toggle source
# File lib/cide/builder.rb, line 40
def create_tmp_file!(destination, content)
  FileUtils.mkdir_p(File.dirname(destination))
  @tmp_files << destination
  File.write(destination, content)
  # Dockerfile ADD compares content and mtime, we don't want that
  File.utime(1_286_701_800, 1_286_701_800, destination)
end
release_tmp_files!() click to toggle source
# File lib/cide/builder.rb, line 48
def release_tmp_files!
  @tmp_files.each do |file|
    FileUtils.rm_f(file)
  end
end