github.com/itscaro/cli@v0.0.0-20190705081621-c9db0fe93829/docker.Makefile (about) 1 # 2 # github.com/docker/cli 3 # 4 # Makefile for developing using Docker 5 # 6 7 # Overridable env vars 8 DOCKER_CLI_MOUNTS ?= -v "$(CURDIR)":/go/src/github.com/docker/cli 9 DOCKER_CLI_SHELL ?= ash 10 DOCKER_CLI_CONTAINER_NAME ?= 11 DOCKER_CLI_GO_BUILD_CACHE ?= y 12 13 DEV_DOCKER_IMAGE_NAME = docker-cli-dev$(IMAGE_TAG) 14 BINARY_NATIVE_IMAGE_NAME = docker-cli-native$(IMAGE_TAG) 15 LINTER_IMAGE_NAME = docker-cli-lint$(IMAGE_TAG) 16 CROSS_IMAGE_NAME = docker-cli-cross$(IMAGE_TAG) 17 VALIDATE_IMAGE_NAME = docker-cli-shell-validate$(IMAGE_TAG) 18 E2E_IMAGE_NAME = docker-cli-e2e$(IMAGE_TAG) 19 CACHE_VOLUME_NAME := docker-cli-dev-cache 20 ifeq ($(DOCKER_CLI_GO_BUILD_CACHE),y) 21 DOCKER_CLI_MOUNTS += -v "$(CACHE_VOLUME_NAME):/root/.cache/go-build" 22 endif 23 VERSION = $(shell cat VERSION) 24 ENVVARS = -e VERSION=$(VERSION) -e GITCOMMIT -e PLATFORM -e TESTFLAGS -e TESTDIRS -e GOOS -e GOARCH -e GOARM 25 26 # build docker image (dockerfiles/Dockerfile.build) 27 .PHONY: build_docker_image 28 build_docker_image: 29 # build dockerfile from stdin so that we don't send the build-context; source is bind-mounted in the development environment 30 cat ./dockerfiles/Dockerfile.dev | docker build ${DOCKER_BUILD_ARGS} -t $(DEV_DOCKER_IMAGE_NAME) - 31 32 # build docker image having the linting tools (dockerfiles/Dockerfile.lint) 33 .PHONY: build_linter_image 34 build_linter_image: 35 # build dockerfile from stdin so that we don't send the build-context; source is bind-mounted in the development environment 36 cat ./dockerfiles/Dockerfile.lint | docker build ${DOCKER_BUILD_ARGS} -t $(LINTER_IMAGE_NAME) - 37 38 .PHONY: build_cross_image 39 build_cross_image: 40 # build dockerfile from stdin so that we don't send the build-context; source is bind-mounted in the development environment 41 cat ./dockerfiles/Dockerfile.cross | docker build ${DOCKER_BUILD_ARGS} -t $(CROSS_IMAGE_NAME) - 42 43 .PHONY: build_shell_validate_image 44 build_shell_validate_image: 45 # build dockerfile from stdin so that we don't send the build-context; source is bind-mounted in the development environment 46 cat ./dockerfiles/Dockerfile.shellcheck | docker build -t $(VALIDATE_IMAGE_NAME) - 47 48 .PHONY: build_binary_native_image 49 build_binary_native_image: 50 # build dockerfile from stdin so that we don't send the build-context; source is bind-mounted in the development environment 51 cat ./dockerfiles/Dockerfile.binary-native | docker build -t $(BINARY_NATIVE_IMAGE_NAME) - 52 53 .PHONY: build_e2e_image 54 build_e2e_image: 55 docker build -t $(E2E_IMAGE_NAME) --build-arg VERSION=$(VERSION) --build-arg GITCOMMIT=$(GITCOMMIT) -f ./dockerfiles/Dockerfile.e2e . 56 57 DOCKER_RUN_NAME_OPTION := $(if $(DOCKER_CLI_CONTAINER_NAME),--name $(DOCKER_CLI_CONTAINER_NAME),) 58 DOCKER_RUN := docker run --rm $(ENVVARS) $(DOCKER_CLI_MOUNTS) $(DOCKER_RUN_NAME_OPTION) 59 60 binary: build_binary_native_image ## build the CLI 61 $(DOCKER_RUN) $(BINARY_NATIVE_IMAGE_NAME) 62 63 build: binary ## alias for binary 64 65 plugins: build_binary_native_image ## build the CLI plugin examples 66 $(DOCKER_RUN) $(BINARY_NATIVE_IMAGE_NAME) ./scripts/build/plugins 67 68 .PHONY: clean 69 clean: build_docker_image ## clean build artifacts 70 $(DOCKER_RUN) $(DEV_DOCKER_IMAGE_NAME) make clean 71 docker volume rm -f $(CACHE_VOLUME_NAME) 72 73 .PHONY: test-unit 74 test-unit: build_docker_image ## run unit tests (using go test) 75 $(DOCKER_RUN) $(DEV_DOCKER_IMAGE_NAME) make test-unit 76 77 .PHONY: test ## run unit and e2e tests 78 test: test-unit test-e2e 79 80 .PHONY: cross 81 cross: build_cross_image ## build the CLI for macOS and Windows 82 $(DOCKER_RUN) $(CROSS_IMAGE_NAME) make cross 83 84 .PHONY: binary-windows 85 binary-windows: build_cross_image ## build the CLI for Windows 86 $(DOCKER_RUN) $(CROSS_IMAGE_NAME) make $@ 87 88 .PHONY: plugins-windows 89 plugins-windows: build_cross_image ## build the example CLI plugins for Windows 90 $(DOCKER_RUN) $(CROSS_IMAGE_NAME) make $@ 91 92 .PHONY: binary-osx 93 binary-osx: build_cross_image ## build the CLI for macOS 94 $(DOCKER_RUN) $(CROSS_IMAGE_NAME) make $@ 95 96 .PHONY: plugins-osx 97 plugins-osx: build_cross_image ## build the example CLI plugins for macOS 98 $(DOCKER_RUN) $(CROSS_IMAGE_NAME) make $@ 99 100 .PHONY: dev 101 dev: build_docker_image ## start a build container in interactive mode for in-container development 102 $(DOCKER_RUN) -it \ 103 -v /var/run/docker.sock:/var/run/docker.sock \ 104 $(DEV_DOCKER_IMAGE_NAME) $(DOCKER_CLI_SHELL) 105 106 shell: dev ## alias for dev 107 108 .PHONY: lint 109 lint: build_linter_image ## run linters 110 $(DOCKER_RUN) -it $(LINTER_IMAGE_NAME) 111 112 .PHONY: fmt 113 fmt: ## run gofmt 114 $(DOCKER_RUN) $(DEV_DOCKER_IMAGE_NAME) make fmt 115 116 .PHONY: vendor 117 vendor: build_docker_image vendor.conf ## download dependencies (vendor/) listed in vendor.conf 118 $(DOCKER_RUN) -it $(DEV_DOCKER_IMAGE_NAME) make vendor 119 120 dynbinary: build_cross_image ## build the CLI dynamically linked 121 $(DOCKER_RUN) -it $(CROSS_IMAGE_NAME) make dynbinary 122 123 .PHONY: authors 124 authors: ## generate AUTHORS file from git history 125 $(DOCKER_RUN) -it $(DEV_DOCKER_IMAGE_NAME) make authors 126 127 .PHONY: manpages 128 manpages: build_docker_image ## generate man pages from go source and markdown 129 $(DOCKER_RUN) -it $(DEV_DOCKER_IMAGE_NAME) make manpages 130 131 .PHONY: yamldocs 132 yamldocs: build_docker_image ## generate documentation YAML files consumed by docs repo 133 $(DOCKER_RUN) -it $(DEV_DOCKER_IMAGE_NAME) make yamldocs 134 135 .PHONY: shellcheck 136 shellcheck: build_shell_validate_image ## run shellcheck validation 137 $(DOCKER_RUN) -it $(VALIDATE_IMAGE_NAME) make shellcheck 138 139 .PHONY: test-e2e 140 test-e2e: test-e2e-non-experimental test-e2e-experimental test-e2e-connhelper-ssh ## run all e2e tests 141 142 .PHONY: test-e2e-experimental 143 test-e2e-experimental: build_e2e_image # run experimental e2e tests 144 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock $(ENVVARS) -e DOCKERD_EXPERIMENTAL=1 $(E2E_IMAGE_NAME) 145 146 .PHONY: test-e2e-non-experimental 147 test-e2e-non-experimental: build_e2e_image # run non-experimental e2e tests 148 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock $(ENVVARS) $(E2E_IMAGE_NAME) 149 150 .PHONY: test-e2e-connhelper-ssh 151 test-e2e-connhelper-ssh: build_e2e_image # run experimental SSH-connection helper e2e tests 152 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock $(ENVVARS) -e DOCKERD_EXPERIMENTAL=1 -e TEST_CONNHELPER=ssh $(E2E_IMAGE_NAME) 153 154 .PHONY: help 155 help: ## print this help 156 @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {gsub("\\\\n",sprintf("\n%22c",""), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)