-
Notifications
You must be signed in to change notification settings - Fork 139
/
builder.rb
65 lines (56 loc) · 1.55 KB
/
builder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class ExecError < StandardError
attr_accessor :exit_status, :last_line
def initialize(exit_status, last_line)
super("Error on cmd. #{exit_status}")
self.exit_status = exit_status
self.last_line = last_line
end
end
def stream_exec(cmd)
puts "Executing cmd: #{cmd}"
exit_status = nil
last_line = ""
Open3.popen2e(cmd) do |stdin, stdout_stderr, wait_thread|
Thread.new do
stdout_stderr.each {|l|
puts l
# Save last line for error checking
last_line = l
}
end
# stdin.puts 'ls'
# stdin.close
exit_status = wait_thread.value
raise ExecError.new(exit_status, last_line) if exit_status.exitstatus != 0
end
return exit_status
end
def build(name)
puts "Building #{name}..."
cmd = "docker build --no-cache -t #{name} ."
stream_exec(cmd)
end
# vtag tags the versions and returns which tags it added
# numtags is how many version tags starting from patch. If 1, then only patch will be applied.
def vtag(name, fromtag, v, dev=false, numtags=3)
tags_added = [fromtag]
newnum = [numtags, v.split(".").length()].min()
newnum.times do |i|
t = v
t += "-dev" if dev
to = "#{name}:#{t}"
from = "#{name}:#{fromtag}"
puts "Tagging #{from} with #{to}"
status = stream_exec("docker tag #{from} #{to}")
tags_added << t
v = v[0...v.rindex('.')] if i < (newnum - 1)
end
return tags_added
end
def push_all(name, tags)
tags.each do |t|
fullname = "#{name}:#{t}"
puts "Pushing #{fullname}"
status = stream_exec("docker push #{fullname}")
end
end