Use new docker squash
[discourse_docker.git] / image / Makefile
CommitLineData
3447089f
JR
1IMAGE_VERSION := 1.3.7
2
3SHELL := /bin/bash
4OS := $(shell uname | tr '[:upper:]' '[:lower:]')
5
0e0a4a48
JR
6SQUASH ?= YES
7
3447089f
JR
8DOCKER_SQUASH_URL := https://github.com/jwilder/docker-squash/releases/download/v0.2.0/docker-squash-${OS}-amd64-v0.2.0.tar.gz
9
10
0e0a4a48 11
3447089f
JR
12# omitting discourse_fast_switch from 'all' as it seems obsolete.
13all: base discourse discourse_dev discourse_test discourse_bench
14.PHONY: all base discourse discourse_dev discourse_test discourse_bench discourse_fast_switch
15
16base: base-deps
17# discourse: discourse-deps
18discourse_dev: discourse_dev-deps
19# discourse_test: discourse_test-deps
20# discourse_bench: discourse_bench-deps
21# discourse_fast_switch: discourse_fast_switch-deps
22
23base:
24 @IMAGE_DIR=$@ IS_BASE=YES ${MAKE} build-image
25
39cb5472 26discourse discourse_dev discourse_test discourse_bench discourse_fast_switch:
3447089f
JR
27 @IMAGE_DIR=$@ ${MAKE} build-image
28
29
30base-deps: base/phantomjs
31.PHONY: base-deps
32
33base/phantomjs:
34 @echo "Fetching phantomjs..."
35 cd base && ./download_phantomjs
36
37discourse_dev-deps:
38 @echo "Copying postgres and redis templates..."
39 sed -e 's/\(db_name: discourse\)/\1_development/' ../templates/postgres.template.yml > discourse_dev/postgres.template.yml
40 cp ../templates/redis.template.yml discourse_dev/redis.template.yml
41.PHONY: discourse_dev-deps
42
0e0a4a48
JR
43# If you don't want to docker-squash the image, prefix your command line with
44# SQUASH=NO, like:
45# SQUASH=NO make discourse_dev
3447089f
JR
46build-image: docker-squash update-dockerfile
47 @echo "----- building image: discourse/${IMAGE_DIR}:${IMAGE_VERSION} -----"
0e0a4a48 48ifeq (${SQUASH}, YES)
3447089f 49 docker build ${IMAGE_DIR} | tee .build.out
39cb5472
JR
50 tail -1 .build.out | awk '/^Successfully built / {print $$3}' > .build.hash
51 @echo "squashing $$(cat .build.hash)..."
52 docker save -o img.tar $$(cat .build.hash)
53 sudo ./docker-squash -verbose -i img.tar -o squash.tar $(if $(IS_BASE),-from root)
3447089f 54 docker load -i squash.tar
39cb5472 55 docker tag $$(cat .build.hash) discourse/${IMAGE_DIR}:${IMAGE_VERSION}
3447089f
JR
56 rm -f squash.tar
57 rm -f img.tar
39cb5472 58 rm -f .build.hash
3447089f 59 rm -f .build.out
0e0a4a48
JR
60else
61 docker build -t discourse/${IMAGE_DIR}:${IMAGE_VERSION} ${IMAGE_DIR}
3447089f
JR
62endif
63.PHONY: build-image
64
65docker-squash:
66 wget ${DOCKER_SQUASH_URL} --output-document=$@.tar.gz
67 tar -xzvf $@.tar.gz
68 rm -f $@.tar.gz
69
70# We want to ensure that the Dockerfiles all have an appropriate header
71# comment, and any FROM line refers to the version we're currently building.
72# Also, if there's a line that echoes into VERSION, replace the value with the
73# current version. (Dockerfiles support environment expansion, but not for
74# FROM or RUN statements.)
75update-dockerfile:
76 @echo "----- updating ${IMAGE_DIR}/Dockerfile for ${IMAGE_VERSION} -----"
77 @sed -i '' -e 's/^\(# NAME:\).*$$/\1 discourse\/${IMAGE_DIR}/' ${IMAGE_DIR}/Dockerfile
78 @sed -i '' -e 's/^\(# VERSION:\).*$$/\1 ${IMAGE_VERSION}/' ${IMAGE_DIR}/Dockerfile
79 @sed -i '' -e 's/^\(FROM discourse\/[^:]*:\).*/\1${IMAGE_VERSION}/' ${IMAGE_DIR}/Dockerfile
80 @sed -i '' -e 's/^\(RUN echo "\)[^"]*\(" > \/VERSION\)$$/\1${IMAGE_VERSION}\2/' ${IMAGE_DIR}/Dockerfile
81.PHONY: update-dockerfile