1 # simple build file to be used locally by Sam
8 PTY
.spawn(command
) do |stdin, stdout, pid
|
22 def ensure_docker_squash
23 docker_squash
= "https://github.com/goldmann/docker-squash/archive/master.zip"
24 run ("pip install --user #{$docker_squash} --upgrade")
28 def build(image
, version)
29 lines
= run("cd #{image[:name]} && docker build --build-arg version=#{version} .")
30 img
= lines
[-1]["successfully built ".length
..-1].strip
34 layers_to_squash
= run("docker history #{img} | wc -l").first
.to_i
- (1 + image
[:layers_to_keep])
36 if layers_to_keep
!= nil
37 run("docker-squash -t #{image[:tag]} --verbose -f #{layers_to_squash} #{img}")
39 run("docker-squash -t #{image[:tag]} --verbose #{img}")
43 run("docker tag #{img} #{image[:tag]}")
47 def bump(image
, image_version
)
48 run("sed -i '' -e 's/^\(# NAME:\).*$$/\1 discourse\/#{image_dir}/' #{image_dir}/Dockerfile")
49 run("sed -i '' -e 's/^\(# VERSION:\).*$$/\1 #{image_version}/' #{image_dir}/Dockerfile")
50 run("sed -i '' -e 's/^\(FROM discourse\/[^:]*:\).*/\1#{image_version}/' #{image_dir}/Dockerfile")
54 OptionParser
.new
do |parser
|
55 parser
.on("-i", "--image image",
56 "Build the image. No parameter means [base discourse discourse_test].") do |i
|
59 parser
.on("-b", "--bump version",
60 "Bumps the version in the Dockerfiles specified by --image") do |v
|
61 options
[:version] = [v
]
65 DEFAULT_IMAGES
= %i
[base discourse discourse_test discourse_dev discourse_bench
]
67 todo
= options
[:image] || DEFAULT_IMAGES
68 version = options
[:version] || '1.3.7'
70 if ENV["USER"] != "root"
71 STDERR.puts
"Build script must be ran as root due to docker-squash"
78 base
: { name
: 'base', tag
: "discourse/base:#{version}", squash
: true },
79 discourse
: { name
: 'discourse', tag
: "discourse/discourse:#{version}", squash
: true, layers_to_keep
: 1 },
80 discourse_test
: { name
: 'discourse_test', tag
: "discourse/discourse_test:#{version}", squash
: true, layers_to_keep
: 2 },
81 discourse_dev
: { name
: 'discourse_dev', tag
: "discourse/discourse_dev:#{version}", squash
: false },
82 discourse_bench
: { name
: 'discourse_bench', tag
: "discourse/discourse_bench:#{version}", squash
: false }
87 bump(images
[image
][:name], options
[:version]) if options
[:version]
88 run
"(cd base && ./download_phantomjs)" if image
== 'base'
89 build(images
[image
], version)