2daeaec314cafe9e41e1be39bd3284de804fb26b
[discourse_docker.git] / image / build.rb
1 # simple build file to be used locally by Sam
2 #
3 require 'pty'
4
5 $version = "1.0.17"
6
7 $docker_squash = "https://github.com/jwilder/docker-squash/releases/download/v0.2.0/docker-squash-linux-amd64-v0.2.0.tar.gz"
8
9 $base_image = "discourse/base:#{$version}"
10 $image = "discourse/discourse:#{$version}"
11 $fast_switch= "discourse/discourse_fast_switch:#{$version}"
12 $test = "discourse/discourse_test:#{$version}"
13
14 if ENV["USER"] != "root"
15 STDERR.puts "Build script must be ran as root due to docker-squash"
16 exit 1
17 end
18
19 def run(command)
20 lines = []
21 PTY.spawn(command) do |stdin, stdout, pid|
22 begin
23 stdin.each do |line|
24 lines << line
25 puts line
26 end
27 rescue Errno::EIO
28 # we are done
29 end
30 end
31
32 lines
33 end
34
35 def ensure_docker_squash
36 return if File.exist?("docker-squash")
37 run ("wget #{$docker_squash}")
38 run ("tar -xzvf *.tar.gz")
39 run ("rm -f docker-squash-linux*")
40 end
41
42 ensure_docker_squash
43
44 def build(path, tag, is_base)
45 lines = run("cd #{path} && docker build .")
46 img = lines[-1]["successfully built ".length..-1].strip
47
48 run("docker save #{img} | ./docker-squash -t #{tag} -verbose #{is_base && "-from root"} | docker load")
49 end
50
51 build("base",$base_image,true)
52 build("discourse",$image,false)
53 build("discourse_fast_switch",$fast_switch,false)
54 build("discourse_test",$test,false)