2020-09-22 12:13:00 +02:00
# Copyright 2020 Docker Compose CLI authors
2020-06-18 16:13:24 +02:00
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2020-04-06 16:40:40 +02:00
2020-04-22 10:04:11 +02:00
export DOCKER_BUILDKIT = 1
2020-04-06 17:54:01 +02:00
2020-06-13 01:29:41 +02:00
UNAME_S := $( shell uname -s)
i f e q ( $( UNAME_S ) , L i n u x )
2020-06-17 17:57:44 +02:00
MOBY_DOCKER = /usr/bin/docker
2020-06-13 01:29:41 +02:00
e n d i f
i f e q ( $( UNAME_S ) , D a r w i n )
2020-06-17 17:57:44 +02:00
MOBY_DOCKER = /Applications/Docker.app/Contents/Resources/bin/docker
2020-06-13 01:29:41 +02:00
e n d i f
2021-02-22 15:27:11 +01:00
BINARY_FOLDER = $( shell pwd ) /bin
2020-07-07 15:48:09 +02:00
GIT_TAG ?= $( shell git describe --tags --match "v[0-9]*" )
2020-08-06 15:40:36 +02:00
TEST_FLAGS ?=
E2E_TEST ?=
i f e q ( $( E 2E_TEST ) , )
e l s e
TEST_FLAGS = -run $( E2E_TEST)
e n d i f
2020-07-07 15:48:09 +02:00
2021-05-27 12:10:37 +02:00
all : cli compose -plugin
2020-04-06 16:40:40 +02:00
2020-05-04 22:31:59 +02:00
protos : ## Generate go code from .proto files
2020-05-29 11:30:12 +02:00
@docker build . --target protos \
2021-01-19 16:48:54 +01:00
--output ./cli/server/protos
2020-04-22 10:04:11 +02:00
2020-05-04 22:31:59 +02:00
cli : ## Compile the cli
2020-05-29 11:30:12 +02:00
@docker build . --target cli \
--platform local \
2021-01-19 11:49:50 +01:00
--build-arg BUILD_TAGS = e2e,kube \
2020-07-07 15:48:09 +02:00
--build-arg GIT_TAG = $( GIT_TAG) \
2020-06-02 11:53:13 +02:00
--output ./bin
2020-04-22 10:04:11 +02:00
2021-05-27 12:10:37 +02:00
compose-plugin : ## Compile the compose cli-plugin
@docker build . --target compose-plugin \
--platform local \
--build-arg BUILD_TAGS = e2e,kube \
--build-arg GIT_TAG = $( GIT_TAG) \
--output ./bin
2020-08-06 15:40:36 +02:00
e2e-local : ## Run End to end local tests. Set E2E_TEST=TestName to run a single test
2021-02-15 21:36:42 +01:00
gotestsum $( TEST_FLAGS) ./local/e2e/compose ./local/e2e/container ./local/e2e/cli-only -- -count= 1
2020-06-09 07:22:40 +02:00
2020-08-06 15:40:36 +02:00
e2e-win-ci : ## Run end to end local tests on Windows CI, no Docker for Linux containers available ATM. Set E2E_TEST=TestName to run a single test
2021-01-19 13:55:19 +01:00
go test -count= 1 -v $( TEST_FLAGS) ./local/e2e/cli-only
2020-05-04 15:10:28 +02:00
2021-02-01 12:08:40 +01:00
e2e-kube : ## Run End to end Kube tests. Set E2E_TEST=TestName to run a single test
go test -timeout 10m -count= 1 -v $( TEST_FLAGS) ./kube/e2e
2020-08-06 15:40:36 +02:00
e2e-aci : ## Run End to end ACI tests. Set E2E_TEST=TestName to run a single test
2021-02-01 09:48:30 +01:00
go test -timeout 15m -count= 1 -v $( TEST_FLAGS) ./aci/e2e
2020-05-05 17:55:53 +02:00
2020-08-18 17:06:47 +02:00
e2e-ecs : ## Run End to end ECS tests. Set E2E_TEST=TestName to run a single test
2021-01-19 13:55:19 +01:00
go test -timeout 20m -count= 1 -v $( TEST_FLAGS) ./ecs/e2e/ecs ./ecs/e2e/ecs-local
2020-08-18 17:06:47 +02:00
2020-05-04 22:31:59 +02:00
cross : ## Compile the CLI for linux, darwin and windows
2020-06-02 11:53:13 +02:00
@docker build . --target cross \
2020-06-15 17:41:59 +02:00
--build-arg BUILD_TAGS \
2020-07-07 15:48:09 +02:00
--build-arg GIT_TAG = $( GIT_TAG) \
2020-06-02 11:53:13 +02:00
--output ./bin \
2020-04-27 10:17:10 +02:00
2020-05-04 22:31:59 +02:00
test : ## Run unit tests
2021-01-26 17:35:21 +01:00
@docker build --progress= plain . \
--build-arg BUILD_TAGS = kube \
2020-07-07 15:48:09 +02:00
--build-arg GIT_TAG = $( GIT_TAG) \
2020-06-15 17:41:59 +02:00
--target test
2020-05-01 15:27:27 +02:00
2020-05-06 09:37:52 +02:00
cache-clear : ## Clear the builder cache
2020-05-01 15:27:27 +02:00
@docker builder prune --force --filter type = exec.cachemount --filter= unused-for= 24h
2020-04-24 18:04:32 +02:00
2020-05-04 23:00:21 +02:00
lint : ## run linter(s)
2020-07-07 15:48:09 +02:00
@docker build . \
2021-01-26 17:35:21 +01:00
--build-arg BUILD_TAGS = kube,e2e \
2020-07-07 15:48:09 +02:00
--build-arg GIT_TAG = $( GIT_TAG) \
--target lint
2020-05-04 23:00:21 +02:00
2020-08-26 09:54:01 +02:00
check-dependencies : ## check dependency updates
go list -u -m -f '{{if not .Indirect}}{{if .Update}}{{.}}{{end}}{{end}}' all
2020-08-18 16:10:34 +02:00
import-restrictions : ## run import-restrictions script
@docker build . \
--target import-restrictions
2020-06-13 01:37:42 +02:00
serve : cli ## start server
@./bin/docker serve --address unix:///tmp/backend.sock
2020-06-15 17:41:59 +02:00
2020-08-18 11:53:17 +02:00
moby-cli-link : ## Create com.docker.cli symlink if does not already exist
2020-06-17 17:57:44 +02:00
ln -s $( MOBY_DOCKER) /usr/local/bin/com.docker.cli
2020-05-19 21:46:44 +02:00
2021-02-22 15:27:11 +01:00
install : ## Link /usr/local/bin/ to current binary
ln -fs $( BINARY_FOLDER) /docker /usr/local/bin/docker
2020-08-18 11:53:17 +02:00
validate-headers : ## Check license header for all files
2020-08-17 15:18:47 +02:00
@docker build . --target check-license-headers
2020-12-04 17:48:15 +01:00
go-mod-tidy : ## Run go mod tidy in a container and output resulting go.mod and go.sum
@docker build . --target go-mod-tidy --output .
2020-08-18 11:53:17 +02:00
validate-go-mod : ## Validate go.mod and go.sum are up-to-date
@docker build . --target check-go-mod
validate : validate -go -mod validate -headers ## Validate sources
2020-11-23 22:37:13 +01:00
pre-commit : validate import -restrictions check -dependencies lint cli test e 2e -local
2020-10-09 10:07:13 +02:00
2020-10-28 17:19:12 +01:00
build-aci-sidecar : ## build aci sidecar image locally and tag it with make build-aci-sidecar tag=0.1
docker build -t docker/aci-hostnames-sidecar:$( tag) aci/etchosts
publish-aci-sidecar : build -aci -sidecar ## build & publish aci sidecar image with make publish-aci-sidecar tag=0.1
docker pull docker/aci-hostnames-sidecar:$( tag) && echo "Failure: Tag already exists" || docker push docker/aci-hostnames-sidecar:$( tag)
2020-10-30 18:35:28 +01:00
build-ecs-search-sidecar : ## build ecs search sidecar image locally and tag it with make build-ecs-search-sidecar tag=0.1
docker build -t docker/ecs-searchdomain-sidecar:$( tag) ecs/resolv
publish-ecs-search-sidecar : build -ecs -search -sidecar ## build & publish ecs search sidecar image with make publish-ecs-search-sidecar tag=0.1
docker pull docker/ecs-searchdomain-sidecar:$( tag) && echo "Failure: Tag already exists" || docker push docker/ecs-searchdomain-sidecar:$( tag)
2020-11-04 10:30:46 +01:00
build-ecs-secrets-sidecar : ## build ecs secrets sidecar image locally and tag it with make build-ecs-secrets-sidecar tag=0.1
docker build -t docker/ecs-secrets-sidecar:$( tag) ecs/secrets
publish-ecs-secrets-sidecar : build -ecs -secrets -sidecar ## build & publish ecs secrets sidecar image with make publish-ecs-secrets-sidecar tag=0.1
docker pull docker/ecs-secrets-sidecar:$( tag) && echo "Failure: Tag already exists" || docker push docker/ecs-secrets-sidecar:$( tag)
2020-10-09 10:07:13 +02:00
clean-aci-e2e : ## Make sure no ACI tests are currently runnnig in the CI when invoking this. Delete ACI E2E tests resources that might have leaked when ctrl-C E2E tests.
2020-11-02 09:40:15 +01:00
@ echo "Will delete resource groups: "
@ az group list | jq '.[].name' | grep -i E2E-Test
az group list | jq '.[].name' | grep -i E2E-Test | xargs -n1 az group delete -y --no-wait -g
2020-10-01 10:55:02 +02:00
2020-05-04 22:31:59 +02:00
help : ## Show help
@echo Please specify a build target. The choices are:
2020-05-06 09:37:52 +02:00
@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $( MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
2020-04-06 16:40:40 +02:00
2020-05-04 23:00:21 +02:00
FORCE :
2020-12-04 17:48:15 +01:00
.PHONY : all validate protos cli e 2e -local cross test cache -clear lint check -dependencies serve classic -link help clean -aci -e 2e go -mod -tidy