Class: Dapp::Image::Stage

Inherits:
Docker
  • Object
show all
Includes:
Argument
Defined in:
lib/dapp/image/stage.rb

Overview

Stage

Instance Attribute Summary

Attributes inherited from Docker

#from, #name

Instance Method Summary collapse

Methods included from Argument

#add_change_cmd, #add_change_entrypoint, #add_change_env, #add_change_expose, #add_change_label, #add_change_onbuild, #add_change_user, #add_change_volume, #add_change_workdir, #add_cmd, #add_command, #add_entrypoint, #add_volume, #add_volumes_from

Methods inherited from Docker

cache, cache_reset, #id, image_config_option, #info, #pull!, #pulled?, #push!, #tagged?, #untag!

Methods included from Helper::Shellout

included, #shellout, #shellout!, #shellout_pack

Constructor Details

#initialize(name:, built_id: nil, from: nil) ⇒ Stage

Returns a new instance of Stage.



8
9
10
11
12
13
14
15
# File 'lib/dapp/image/stage.rb', line 8

def initialize(name:, built_id: nil, from: nil)
  @bash_commands = []
  @options = {}
  @change_options = {}
  @container_name = SecureRandom.hex
  @built_id = built_id
  super(name: name, from: from)
end

Instance Method Details

#build!(**kwargs) ⇒ Object



25
26
27
28
29
30
# File 'lib/dapp/image/stage.rb', line 25

def build!(**kwargs)
  run!(**kwargs)
  @built_id = commit!
ensure
  shellout("docker rm #{container_name}")
end

#built_id ⇒ Object



21
22
23
# File 'lib/dapp/image/stage.rb', line 21

def built_id
  @built_id ||= id
end

#export!(name, log_verbose: false, log_time: false, force: false) ⇒ Object



32
33
34
35
36
37
# File 'lib/dapp/image/stage.rb', line 32

def export!(name, log_verbose: false, log_time: false, force: false)
  image = self.class.new(built_id: built_id, name: name)
  image.tag!(log_verbose: log_verbose, log_time: log_time, force: force)
  image.push!(log_verbose: log_verbose, log_time: log_time)
  image.untag!
end

#labels ⇒ Object



17
18
19
# File 'lib/dapp/image/stage.rb', line 17

def labels
  self.class.image_config_option(image_id: built_id, option: 'labels')
end

#tag!(log_verbose: false, log_time: false, force: false) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/dapp/image/stage.rb', line 39

def tag!(log_verbose: false, log_time: false, force: false)
  if !(existed_id = id).nil? && !force
    raise Error::Build, code: :another_image_already_tagged if built_id != existed_id
    return
  end
  shellout!("docker tag #{built_id} #{name}", log_verbose: log_verbose, log_time: log_time)
  cache_reset
end