Move everything to a complete base image
[discourse_docker.git] / image / auto_build.rb
1 # simple build file to be used locally by Sam
2 #
3 require 'pty'
4 require 'optparse'
5
6 def run(command)
7 lines = []
8 PTY.spawn(command) do |stdin, stdout, pid|
9 begin
10 stdin.each do |line|
11 lines << line
12 puts line
13 end
14 rescue Errno::EIO
15 # we are done
16 end
17 end
18
19 lines
20 end
21
22 def build(image)
23 sucess = false
24 lines = run("cd #{image[:name]} && docker build . --tag #{image[:tag]} #{image[:squash] ? '--squash' : ''}")
25 sucess = true if lines[-1] =~ 'successfully built'
26 end
27
28 def dev_deps()
29 run("sed -e 's/\(db_name: discourse\)/\1_development/' ../templates/postgres.template.yml > discourse_dev/postgres.template.yml")
30 run("cp ../templates/redis.template.yml discourse_dev/redis.template.yml")
31 end
32
33 options = {}
34 OptionParser.new do |parser|
35 parser.on("-i", "--image image",
36 "Build the image. No parameter means [base discourse discourse_test].") do |i|
37 options[:image] = [i.to_sym]
38 end
39 end.parse!
40
41 DEFAULT_IMAGES = [:base, :discourse, :discourse_test, :discourse_dev, :discourse_bench]
42
43 todo = options[:image] || DEFAULT_IMAGES
44 version = 'release'
45
46 images = {
47 base: { name: 'base', tag: "discourse/base:#{version}", squash: true },
48 discourse_test: { name: 'discourse_test', tag: "discourse/discourse_test:#{version}", squash: false},
49 discourse_dev: { name: 'discourse_dev', tag: "discourse/discourse_dev:#{version}", squash: false }
50 }
51
52 todo.each do |image|
53 puts images[image]
54 bump(images[image][:name], options[:version]) if options[:version]
55
56 dev_deps() if image == :discourse_dev
57 run "(cd base && ./download_phantomjs)" if image == :base
58
59 build(images[image])
60 end