mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2024-12-24 07:46:41 +00:00
9e327bf7a6
This commit changes the automation scripts so that the base image is built together with the rest of the supervisor. We use a hash of the contents of the base-image folder as tag for the base image so that unnecessary rebuilds are avoided. The build scripts are also modified to always clean up the resulting base image and the image used to build it. We use docker pull and push to enable caching. Change-Type: patch Signed-off-by: Pablo Carranza Velez <pablo@resin.io>
230 lines
7.4 KiB
Makefile
230 lines
7.4 KiB
Makefile
OS := $(shell uname)
|
|
|
|
ifdef http_proxy
|
|
DOCKER_HTTP_PROXY=--build-arg http_proxy=$(http_proxy)
|
|
endif
|
|
|
|
ifdef https_proxy
|
|
DOCKER_HTTPS_PROXY=--build-arg https_proxy=$(https_proxy)
|
|
endif
|
|
|
|
ifdef no_proxy
|
|
DOCKER_NO_PROXY=--build-arg no_proxy=$(no_proxy)
|
|
endif
|
|
|
|
ifdef use_proxy_at_runtime
|
|
rt_http_proxy=$(http_proxy)
|
|
rt_https_proxy=$(https_proxy)
|
|
rt_no_proxy=$(no_proxy)
|
|
endif
|
|
|
|
DISABLE_CACHE = 'false'
|
|
|
|
ARCH = rpi# rpi/amd64/i386/armv7hf/armel
|
|
|
|
DEPLOY_REGISTRY =
|
|
|
|
SUPERVISOR_VERSION = master
|
|
ESCAPED_BASE_IMAGE_TAG = resin\/$(ARCH)-supervisor-base:$(SUPERVISOR_VERSION)
|
|
|
|
DOCKER_VERSION:=$(shell docker version --format '{{.Server.Version}}')
|
|
DOCKER_MAJOR_VERSION:=$(word 1, $(subst ., ,$(DOCKER_VERSION)))
|
|
DOCKER_MINOR_VERSION:=$(word 2, $(subst ., ,$(DOCKER_VERSION)))
|
|
DOCKER_GE_1_12 := $(shell [ $(DOCKER_MAJOR_VERSION) -gt 1 -o \( $(DOCKER_MAJOR_VERSION) -eq 1 -a $(DOCKER_MINOR_VERSION) -ge 12 \) ] && echo true)
|
|
|
|
# In docker 1.12 tag --force has been removed.
|
|
ifeq ($(DOCKER_GE_1_12),true)
|
|
DOCKER_TAG_FORCE=
|
|
else
|
|
DOCKER_TAG_FORCE=-f
|
|
endif
|
|
|
|
all: supervisor
|
|
|
|
PUBNUB_SUBSCRIBE_KEY = sub-c-bananas
|
|
PUBNUB_PUBLISH_KEY = pub-c-bananas
|
|
MIXPANEL_TOKEN = bananasbananas
|
|
|
|
PASSWORDLESS_DROPBEAR = false
|
|
|
|
IMAGE = "resin/$(ARCH)-supervisor:$(SUPERVISOR_VERSION)"
|
|
DOCKERFILE = $(ARCH)
|
|
|
|
SUPERVISOR_IMAGE=$(DEPLOY_REGISTRY)$(IMAGE)
|
|
|
|
ifeq ($(ARCH),rpi)
|
|
GOARCH = arm
|
|
GOARM = 6
|
|
endif
|
|
ifeq ($(ARCH),armv7hf)
|
|
GOARCH = arm
|
|
GOARM = 7
|
|
endif
|
|
ifeq ($(ARCH),armel)
|
|
GOARCH = arm
|
|
GOARM = 5
|
|
endif
|
|
ifeq ($(ARCH),i386)
|
|
GOARCH = 386
|
|
endif
|
|
ifeq ($(ARCH),amd64)
|
|
GOARCH = amd64
|
|
endif
|
|
SUPERVISOR_DIND_MOUNTS := -v $$(pwd)/../../:/resin-supervisor -v $$(pwd)/config.json:/mnt/conf/config.json -v $$(pwd)/config/env:/usr/src/app/config/env -v $$(pwd)/config/localenv:/usr/src/app/config/localenv
|
|
ifeq ($(OS), Linux)
|
|
SUPERVISOR_DIND_MOUNTS := ${SUPERVISOR_DIND_MOUNTS} -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /bin/kmod:/bin/kmod
|
|
endif
|
|
ifdef PRELOADED_IMAGE
|
|
SUPERVISOR_DIND_MOUNTS := ${SUPERVISOR_DIND_MOUNTS} -v $$(pwd)/apps.json:/usr/src/app/config/apps.json
|
|
else
|
|
PRELOADED_IMAGE=
|
|
endif
|
|
|
|
SUPERVISOR_EXTRA_MOUNTS =
|
|
|
|
DOCKERD_PROXY=tools/dind/config/services/docker.service.d/proxy.conf
|
|
${DOCKERD_PROXY}:
|
|
rm -f ${DOCKERD_PROXY}
|
|
if [ -n "${rt_http_proxy}" ]; then \
|
|
proxies="\"HTTP_PROXY=${rt_http_proxy}\""; \
|
|
proxies="$${proxies[*]} \"http_proxy=${rt_http_proxy}\""; \
|
|
fi; \
|
|
if [ -n "${rt_https_proxy}" ]; then \
|
|
proxies="$${proxies[*]} \"HTTPS_PROXY=${rt_https_proxy}\""; \
|
|
proxies="$${proxies[*]} \"https_proxy=${rt_https_proxy}\""; \
|
|
fi; \
|
|
if [ -n "${rt_no_proxy}" ]; then \
|
|
proxies="$${proxies[*]} \"no_proxy=${rt_no_proxy}\""; \
|
|
fi; \
|
|
if [ -n "${proxies}" ]; then \
|
|
echo "[Service]" > ${DOCKERD_PROXY}; \
|
|
echo "Environment=$${proxies[*]}" >> ${DOCKERD_PROXY}; \
|
|
else \
|
|
touch ${DOCKERD_PROXY}; \
|
|
fi
|
|
|
|
supervisor-dind: ${DOCKERD_PROXY}
|
|
cd tools/dind \
|
|
&& docker build \
|
|
$(DOCKER_HTTP_PROXY) \
|
|
$(DOCKER_HTTPS_PROXY) \
|
|
$(DOCKER_NO_PROXY) \
|
|
--no-cache=$(DISABLE_CACHE) \
|
|
--build-arg PASSWORDLESS_DROPBEAR=$(PASSWORDLESS_DROPBEAR) \
|
|
-t resin/resin-supervisor-dind:$(SUPERVISOR_VERSION) .
|
|
|
|
run-supervisor: stop-supervisor supervisor-dind
|
|
cd tools/dind \
|
|
&& echo "SUPERVISOR_IMAGE=$(SUPERVISOR_IMAGE)" > config/localenv \
|
|
&& echo "PRELOADED_IMAGE=$(PRELOADED_IMAGE)" >> config/localenv \
|
|
&& echo "SUPERVISOR_EXTRA_MOUNTS=$(SUPERVISOR_EXTRA_MOUNTS)" >> config/localenv; \
|
|
if [ -n "$(rt_http_proxy)" ]; then \
|
|
echo "HTTP_PROXY=$(rt_http_proxy)" >> config/localenv \
|
|
&& echo "http_proxy=$(rt_http_proxy)" >> config/localenv; \
|
|
fi; \
|
|
if [ -n "$(rt_https_proxy)" ]; then \
|
|
echo "HTTPS_PROXY=$(rt_https_proxy)" >> config/localenv \
|
|
&& echo "https_proxy=$(rt_https_proxy)" >> config/localenv; \
|
|
fi; \
|
|
if [ -n "$(rt_no_proxy)" ]; then \
|
|
echo "no_proxy=$(rt_no_proxy)" >> config/localenv; \
|
|
fi \
|
|
&& docker run -d --name resin_supervisor_1 --privileged ${SUPERVISOR_DIND_MOUNTS} resin/resin-supervisor-dind:$(SUPERVISOR_VERSION)
|
|
|
|
stop-supervisor:
|
|
# Stop docker and remove volumes to prevent us from running out of loopback devices,
|
|
# as per https://github.com/jpetazzo/dind/issues/19
|
|
-docker exec resin_supervisor_1 bash -c "systemctl stop docker" || true
|
|
-docker stop resin_supervisor_1 > /dev/null || true
|
|
-docker rm -f --volumes resin_supervisor_1 > /dev/null || true
|
|
|
|
refresh-supervisor-src:
|
|
echo " * Compiling CoffeeScript.." \
|
|
&& coffee -c ./src \
|
|
&& echo " * Restarting supervisor container.." \
|
|
&& docker exec -ti resin_supervisor_1 docker restart resin_supervisor
|
|
|
|
supervisor: nodesuper gosuper
|
|
sed 's/%%ARCH%%/$(ARCH)/g' Dockerfile.runtime.template | sed 's/%%BASE_IMAGE_TAG%%/$(ESCAPED_BASE_IMAGE_TAG)/g' > Dockerfile.runtime.$(ARCH)
|
|
echo "ENV VERSION=$(shell jq -r .version package.json) \\" >> Dockerfile.runtime.$(ARCH)
|
|
echo " DEFAULT_PUBNUB_PUBLISH_KEY=$(PUBNUB_PUBLISH_KEY) \\" >> Dockerfile.runtime.$(ARCH)
|
|
echo " DEFAULT_PUBNUB_SUBSCRIBE_KEY=$(PUBNUB_SUBSCRIBE_KEY) \\" >> Dockerfile.runtime.$(ARCH)
|
|
echo " DEFAULT_MIXPANEL_TOKEN=$(MIXPANEL_TOKEN)" >> Dockerfile.runtime.$(ARCH)
|
|
ifdef rt_https_proxy
|
|
echo "ENV HTTPS_PROXY=$(rt_https_proxy) \\" >> Dockerfile.runtime.$(ARCH)
|
|
echo " https_proxy=$(rt_https_proxy)" >> Dockerfile.runtime.$(ARCH)
|
|
endif
|
|
ifdef rt_http_proxy
|
|
echo "ENV HTTP_PROXY=$(rt_http_proxy) \\" >> Dockerfile.runtime.$(ARCH)
|
|
echo " http_proxy=$(rt_http_proxy)" >> Dockerfile.runtime.$(ARCH)
|
|
endif
|
|
ifdef rt_no_proxy
|
|
echo "ENV no_proxy=$(rt_no_proxy)" >> Dockerfile.runtime.$(ARCH)
|
|
endif
|
|
docker build \
|
|
$(DOCKER_HTTP_PROXY) \
|
|
$(DOCKER_HTTPS_PROXY) \
|
|
$(DOCKER_NO_PROXY) \
|
|
-f Dockerfile.runtime.$(ARCH) \
|
|
--pull \
|
|
-t $(IMAGE) .
|
|
|
|
lint:
|
|
docker run --rm resin/node-supervisor-$(ARCH):$(SUPERVISOR_VERSION) bash -c 'npm install resin-lint && npm run lint'
|
|
|
|
deploy: supervisor
|
|
docker tag $(DOCKER_TAG_FORCE) $(IMAGE) $(SUPERVISOR_IMAGE)
|
|
bash retry_docker_push.sh $(SUPERVISOR_IMAGE)
|
|
|
|
nodesuper:
|
|
sed 's/%%ARCH%%/$(ARCH)/g' Dockerfile.build.template > Dockerfile.build.$(ARCH)
|
|
docker build --pull \
|
|
$(DOCKER_HTTP_PROXY) \
|
|
$(DOCKER_HTTPS_PROXY) \
|
|
$(DOCKER_NO_PROXY) \
|
|
-f Dockerfile.build.$(ARCH) \
|
|
-t resin/node-supervisor-$(ARCH):$(SUPERVISOR_VERSION) .
|
|
docker run --rm \
|
|
-v `pwd`/build/$(ARCH):/build \
|
|
resin/node-supervisor-$(ARCH):$(SUPERVISOR_VERSION)
|
|
|
|
gosuper:
|
|
cd gosuper && docker build --pull \
|
|
$(DOCKER_HTTP_PROXY) \
|
|
$(DOCKER_HTTPS_PROXY) \
|
|
$(DOCKER_NO_PROXY) \
|
|
--build-arg GOARCH=$(GOARCH) \
|
|
--build-arg GOARM=$(GOARM) \
|
|
-t resin/go-supervisor-$(ARCH):$(SUPERVISOR_VERSION) .
|
|
docker run --rm \
|
|
-v `pwd`/build/$(ARCH):/build \
|
|
resin/go-supervisor-$(ARCH):$(SUPERVISOR_VERSION)
|
|
|
|
test-gosuper: gosuper
|
|
docker run \
|
|
--rm \
|
|
-v /var/run/dbus:/mnt/root/run/dbus \
|
|
-e DBUS_SYSTEM_BUS_ADDRESS="unix:path=/mnt/root/run/dbus/system_bus_socket" \
|
|
resin/go-supervisor-$(ARCH):$(SUPERVISOR_VERSION) bash -c \
|
|
'./test_formatting.sh && go test -v ./gosuper'
|
|
|
|
format-gosuper: gosuper
|
|
docker run \
|
|
--rm \
|
|
-v $(shell pwd)/gosuper:/go/src/resin-supervisor/gosuper \
|
|
resin/go-supervisor-$(ARCH):$(SUPERVISOR_VERSION) \
|
|
go fmt ./...
|
|
|
|
test-integration: gosuper
|
|
docker run \
|
|
--rm \
|
|
--net=host \
|
|
-e SUPERVISOR_IP="$(shell docker inspect --format '{{ .NetworkSettings.IPAddress }}' resin_supervisor_1)" \
|
|
--volumes-from resin_supervisor_1 \
|
|
-v /var/run/dbus:/mnt/root/run/dbus \
|
|
-e DBUS_SYSTEM_BUS_ADDRESS="unix:path=/mnt/root/run/dbus/system_bus_socket" \
|
|
resin/go-supervisor-$(ARCH):$(SUPERVISOR_VERSION) \
|
|
go test -v ./supertest
|
|
|
|
.PHONY: supervisor deploy supervisor-dind run-supervisor gosuper nodesuper
|