diff --git a/Makefile b/Makefile index d699f71504..8dd67d1e75 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,17 @@ all: binary _:=$(shell ./scripts/warn-outside-container $(MAKECMDGOALS)) +.PHONY: dev +dev: ## start a build container in interactive mode for in-container development + @if [ -n "${DISABLE_WARN_OUTSIDE_CONTAINER}" ]; then \ + echo "you are already in the dev container"; \ + else \ + $(MAKE) -f docker.Makefile dev; \ + fi + +.PHONY: shell +shell: dev ## alias for dev + .PHONY: clean clean: ## remove build artifacts rm -rf ./build/* man/man[1-9] docs/yaml @@ -34,7 +45,7 @@ shellcheck: ## run shellcheck validation find scripts/ contrib/completion/bash -type f | grep -v scripts/winresources | grep -v '.*.ps1' | xargs shellcheck .PHONY: fmt -fmt: +fmt: ## run gofmt go list -f {{.Dir}} ./... | xargs gofmt -w -s -d .PHONY: binary diff --git a/docker.Makefile b/docker.Makefile index 83df195156..562ef3757c 100644 --- a/docker.Makefile +++ b/docker.Makefile @@ -35,7 +35,7 @@ DOCKER_RUN_NAME_OPTION := $(if $(DOCKER_CLI_CONTAINER_NAME),--name $(DOCKER_CLI_ DOCKER_RUN := docker run --rm $(ENVVARS) $(DOCKER_CLI_MOUNTS) $(DOCKER_RUN_NAME_OPTION) .PHONY: binary -binary: +binary: ## build executable PACKAGER_NAME=$(PACKAGER_NAME) docker buildx bake binary build: binary ## alias for binary diff --git a/dockerfiles/Dockerfile.dev b/dockerfiles/Dockerfile.dev index 7bd74b8522..f284edab02 100644 --- a/dockerfiles/Dockerfile.dev +++ b/dockerfiles/Dockerfile.dev @@ -29,8 +29,12 @@ RUN apk add --no-cache \ ca-certificates \ coreutils \ curl \ - git + git \ + jq \ + nano +RUN echo -e "\nYou are now in a development container. Run '\e\033[1mmake help\e\033[0m' to learn about\navailable make targets.\n" > /etc/motd \ + && echo -e "cat /etc/motd\nPS1=\"\e[0;32m\u@docker-cli-dev\\$ \e[0m\"" >> /root/.bashrc CMD bash ENV DISABLE_WARN_OUTSIDE_CONTAINER=1 ENV PATH=$PATH:/go/src/github.com/docker/cli/build diff --git a/scripts/warn-outside-container b/scripts/warn-outside-container index ecbecc0ea2..b4ba8db235 100755 --- a/scripts/warn-outside-container +++ b/scripts/warn-outside-container @@ -3,16 +3,25 @@ set -eu target="${1:-}" -if [ "$target" != "help" ] && [ -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 +if [ -z "${DISABLE_WARN_OUTSIDE_CONTAINER:-}" ]; then + case $target in + clean|dev|help|shell) + # no warning needed for these targets + ;; + *) + ( + echo + echo "\033[1mWARNING\033[0m: you are not in a container." + echo + echo 'Use "\033[1mmake dev\033[0m" to start an interactive development container,' + echo "use \"\033[1mmake -f docker.Makefile $target\033[0m\" to execute this target" + echo "in a container, or set \033[1mDISABLE_WARN_OUTSIDE_CONTAINER=1\033[0m to" + echo "disable this warning." + echo + echo "Press \033[1mCtrl+C\033[0m now to abort, or wait for the script to continue.." + echo + ) >&2 + sleep 5 + ;; + esac fi