From 12a7387c8e6394e16dd9449500a0532f465184c0 Mon Sep 17 00:00:00 2001 From: Daniel Nephin Date: Fri, 23 Jun 2017 00:52:34 -0400 Subject: [PATCH] Add a warning when make is run outside of a container. The warning can be disabled by setting the environment variable Signed-off-by: Daniel Nephin --- Makefile | 2 ++ docker.Makefile | 22 ++++++++++++---------- scripts/warn-outside-container | 18 ++++++++++++++++++ 3 files changed, 32 insertions(+), 10 deletions(-) create mode 100755 scripts/warn-outside-container diff --git a/Makefile b/Makefile index 771f496abe..81b0041b84 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,8 @@ all: binary +_:=$(shell ./scripts/warn-outside-container $(MAKECMDGOALS)) + .PHONY: clean clean: ## remove build artifacts rm -rf ./build/* cli/winresources/rsrc_* ./man/man[1-9] docs/yaml/gen diff --git a/docker.Makefile b/docker.Makefile index 9b958397a1..4aaee5489a 100644 --- a/docker.Makefile +++ b/docker.Makefile @@ -10,7 +10,7 @@ CROSS_IMAGE_NAME = docker-cli-cross VALIDATE_IMAGE_NAME = docker-cli-shell-validate MOUNTS = -v "$(CURDIR)":/go/src/github.com/docker/cli VERSION = $(shell cat VERSION) -ENVVARS = -e VERSION=$(VERSION) -e GITCOMMIT +ENVVARS = -e VERSION=$(VERSION) -e GITCOMMIT -e DISABLE_WARN_OUTSIDE_CONTAINER=1 # build docker image (dockerfiles/Dockerfile.build) .PHONY: build_docker_image @@ -39,12 +39,12 @@ build: binary # clean build artifacts using a container .PHONY: clean clean: build_docker_image - docker run --rm $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make clean + docker run --rm $(ENVVARS) $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make clean # run go test .PHONY: test test: build_docker_image - docker run --rm $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make test + docker run --rm $(ENVVARS) $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make test # build the CLI for multiple architectures using a container .PHONY: cross @@ -53,24 +53,26 @@ cross: build_cross_image .PHONY: watch watch: build_docker_image - docker run --rm $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make watch + docker run --rm $(ENVVARS) $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make watch # start container in interactive mode for in-container development .PHONY: dev dev: build_docker_image - docker run -ti $(MOUNTS) -v /var/run/docker.sock:/var/run/docker.sock $(DEV_DOCKER_IMAGE_NAME) ash + docker run -ti $(ENVVARS) $(MOUNTS) \ + -v /var/run/docker.sock:/var/run/docker.sock \ + $(DEV_DOCKER_IMAGE_NAME) ash shell: dev # run linters in a container .PHONY: lint lint: build_linter_image - docker run -ti $(MOUNTS) $(LINTER_IMAGE_NAME) + docker run -ti $(ENVVARS) $(MOUNTS) $(LINTER_IMAGE_NAME) # download dependencies (vendor/) listed in vendor.conf, using a container .PHONY: vendor vendor: build_docker_image vendor.conf - docker run -ti --rm $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make vendor + docker run -ti --rm $(ENVVARS) $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make vendor dynbinary: build_cross_image docker run -ti --rm $(ENVVARS) $(MOUNTS) $(CROSS_IMAGE_NAME) make dynbinary @@ -78,13 +80,13 @@ dynbinary: build_cross_image ## generate man pages from go source and markdown .PHONY: manpages manpages: build_docker_image - docker run -ti --rm $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make manpages + docker run -ti --rm $(ENVVARS) $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make manpages ## Generate documentation YAML files consumed by docs repo .PHONY: yamldocs yamldocs: build_docker_image - docker run -ti --rm $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make yamldocs + docker run -ti --rm $(ENVVARS) $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make yamldocs .PHONY: shellcheck shellcheck: build_shell_validate_image - docker run -ti --rm $(MOUNTS) $(VALIDATE_IMAGE_NAME) make shellcheck + docker run -ti --rm $(ENVVARS) $(MOUNTS) $(VALIDATE_IMAGE_NAME) make shellcheck diff --git a/scripts/warn-outside-container b/scripts/warn-outside-container new file mode 100755 index 0000000000..cb11b8fa8d --- /dev/null +++ b/scripts/warn-outside-container @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -eu + +target="${1:-}" + +if [[ -z "${DISABLE_WARN_OUTSIDE_CONTAINER:-}" ]]; then + ( + echo + echo + echo "WARNING: you are not in a container." + echo "Use \"make -f docker.Makefile $target\" or set" + echo "DISABLE_WARN_OUTSIDE_CONTAINER=1 to disable this warning." + echo + echo "Press Ctrl+C now to abort." + echo + ) >&2 + sleep 10 +fi