class QB::Docker::Image
Public Class Methods
build!(name:, path:, push: false, tags: [], _cmd_stream: true, **build_opts)
click to toggle source
# File lib/qb/docker/image.rb, line 78 def self.build! name:, path:, push: false, tags: [], _cmd_stream: true, **build_opts cmd = QB::Docker::CLI.build_cmd path, tag: name.to_s, **build_opts logger.info "building...", name: name.to_s, path: path, push: push, _cmd_stream: _cmd_stream, cmd: cmd.prepare result = run_cmd! cmd, stream: _cmd_stream tags.each do |tag_arg| cmd = QB::Docker::CLI.tag_cmd name, tag_arg tag = cmd.args[1] logger.debug "Tagging #{ name } as #{ tag }", tag_arg: tag_arg result = run_cmd cmd, stream: _cmd_stream if result.ok? logger.info "Tagged #{ name } as #{ tag }.", cmd: cmd.last_prepared_cmd else logger.error "Failed to tag #{ name } as #{ tag }", tag_arg: tag_arg, cmd: cmd.last_prepared_cmd end end QB::Docker::CLI.push( name ) if push result end
ensure_present!(name:, pull: nil, build: nil, force: false, push: false, tags: [])
click to toggle source
# File lib/qb/docker/image.rb, line 120 def self.ensure_present! name:, pull: nil, build: nil, force: false, push: false, tags: [] name = QB::Docker::Image::Name.from name if pull.nil? && name.tag && name.tag.version.is_a?( QB::Package::Version::Leveled ) pull = !name.tag.version.dev? end logger.info "Ensuring image is present...", name: name.to_s, pull: pull, push: push, force: force if force logger.info "Forcing build...", name: name.to_s build! name: name, push: push, tags: tags, **build return end if name.exists? logger.info "Image exists", name: name.to_s return end logger.info "Name does NOT exist", name: name.to_s if pull logger.info "Attempting to pull...", name: name.to_s return if QB::Docker::CLI.pull?( name ) end logger.info "Resorting to building...", name: name.to_s, path: build[:path] build! name: name, push: push, tags: tags, **build end
Private Class Methods
run_cmd(cmd, stream: true, raise_on_fail: false)
click to toggle source
# File lib/qb/docker/image.rb, line 52 def self.run_cmd cmd, stream: true, raise_on_fail: false if stream if raise_on_fail cmd.stream! else cmd.stream end else cmd.capture.tap { |result| if raise_on_fail && result.error? raise QB::Docker::CLI::Error.from_result result end } end end
run_cmd!(cmd, stream: true)
click to toggle source
# File lib/qb/docker/image.rb, line 71 def self.run_cmd! cmd, stream: true run_cmd cmd, stream: stream, raise_on_fail: true end