class Minos::Artifact
Attributes
artifact[R]
options[R]
Public Class Methods
new(artifact, options: {})
click to toggle source
# File lib/minos/artifact.rb, line 15 def initialize(artifact, options: {}) @artifact = artifact @options = options end
Public Instance Methods
build() { |Task[ *map.each_with_index { |cache, i| docker_pull(i, cache) }| ... }
click to toggle source
# File lib/minos/artifact.rb, line 24 def build yield List::Task[ *caches.map.each_with_index { |cache, i| docker_pull(i, cache) } ] .traverse .bind { |_| docker_build } .to_result end
name()
click to toggle source
# File lib/minos/artifact.rb, line 20 def name artifact['name'] end
push() { |Task[ *map.each_with_index { |tag, i| docker_push(i, tag) }| ... }
click to toggle source
# File lib/minos/artifact.rb, line 33 def push yield List::Task[ *tags.map.each_with_index { |tag, i| docker_push(i, tag) } ] .traverse .to_result end
Private Instance Methods
caches()
click to toggle source
# File lib/minos/artifact.rb, line 138 def caches docker['cacheFrom'] end
colors()
click to toggle source
# File lib/minos/artifact.rb, line 123 def colors %i(blue cyan yellow magenta) end
docker()
click to toggle source
# File lib/minos/artifact.rb, line 134 def docker artifact['docker'] end
docker_build()
click to toggle source
# File lib/minos/artifact.rb, line 61 def docker_build Task[:io, &-> { color = :green print "Building #{target}...", color: color if run "docker build --rm #{Minos::Utils.to_args(docker)} .", color: color print "Successfully built #{target}", color: color return Success() else print "Failed building #{target}", color: :red return Failure($?) end }] end
docker_pull(i, cache)
click to toggle source
# File lib/minos/artifact.rb, line 43 def docker_pull(i, cache) Task[:io, &-> { color = select_color(i) if run "docker inspect #{cache} -f '{{json .ID}}' > /dev/null 2>&1" print "Using local #{cache}", color: color else print "Trying to pull #{cache}...", color: color if run "docker pull #{cache} 2> /dev/null", color: color print "Using local #{cache}", color: color else print "Enable to pull #{cache}", color: color end end return Success() }] end
docker_push(i, tag)
click to toggle source
# File lib/minos/artifact.rb, line 75 def docker_push(i, tag) Task[:io, &-> { color = select_color(i) print "Pushing #{image}:#{tag}...", color: color if run "docker tag #{image}:#{target} #{image}:#{tag} && docker push #{image}:#{tag}", color: color print "Successfully pushed #{image}:#{tag}", color: color return Success() else print "Failed pushing #{image}:#{tag}", color: :red return Failure($?) end }] end
env()
click to toggle source
# File lib/minos/artifact.rb, line 127 def env { 'IMAGE' => image, 'TARGET' => target, } end
image()
click to toggle source
# File lib/minos/artifact.rb, line 142 def image artifact['image'] end
print(msg, color: colors.first)
click to toggle source
# File lib/minos/artifact.rb, line 115 def print(msg, color: colors.first) say_status(name, msg, color) end
run(cmd, color: colors.first)
click to toggle source
# File lib/minos/artifact.rb, line 89 def run(cmd, color: colors.first) Open3.popen3("#{Minos::Utils.to_envs(env)} ; #{cmd}") do |stdin, stdout, stderr, wait_thr| t_out = Thread.new do while line = stdout.gets do print(line, color: color) end end t_err = Thread.new do while line = stderr.gets do print(line, color: :red) end end wait_thr.join t_err.join t_out.join stdin.close stdout.close stderr.close wait_thr.value.success? end end
select_color(i)
click to toggle source
# File lib/minos/artifact.rb, line 119 def select_color(i) colors[i % colors.count] end
target()
click to toggle source
# File lib/minos/artifact.rb, line 146 def target docker['target'] end