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)