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
2022-08-12 15:05:52 +02:00
i f n e q ( , $( BUILDX_BIN ) )
export BUILDX_CMD = $( BUILDX_BIN)
e l s e i f n e q ( , $( shell docker buildx version ) )
export BUILDX_CMD = docker buildx
e l s e i f n e q ( , $( shell which buildx ) )
export BUILDX_CMD = $( which buildx)
e l s e
$( error "Buildx is required: https://github.com/docker/buildx#installing" )
e n d i f
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-08-31 18:53:24 +02:00
all : compose -plugin
2020-04-22 10:04:11 +02:00
2021-08-31 18:53:24 +02:00
.PHONY : compose -plugin
2021-05-27 12:10:37 +02:00
compose-plugin : ## Compile the compose cli-plugin
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake binary
.PHONY : install
install : compose -plugin
mkdir -p ~/.docker/cli-plugins
install bin/build/docker-compose ~/.docker/cli-plugins/docker-compose
2021-05-27 12:10:37 +02:00
2021-08-31 18:53:24 +02:00
.PHONY : e 2e -compose
2021-12-09 10:30:05 +01:00
e2e-compose : ## Run end to end local tests in plugin mode. Set E2E_TEST=TestName to run a single test
2021-12-14 10:48:57 +01:00
docker compose version
2021-12-09 10:30:05 +01:00
go test $( TEST_FLAGS) -count= 1 ./pkg/e2e
.PHONY : e 2e -compose -standalone
e2e-compose-standalone : ## Run End to end local tests in standalone mode. Set E2E_TEST=TestName to run a single test
2021-12-14 10:48:57 +01:00
docker-compose version
2022-03-28 14:38:27 +02:00
go test $( TEST_FLAGS) -v -count= 1 -parallel= 1 --tags= standalone ./pkg/e2e
2021-12-09 10:30:05 +01:00
2022-07-04 15:53:08 +02:00
.PHONY : build -and -e 2e -compose
build-and-e2e-compose : compose -plugin e 2e -compose ## Compile the compose cli-plugin and run end to end local tests in plugin mode. Set E2E_TEST=TestName to run a single test
.PHONY : build -and -e 2e -compose -standalone
build-and-e2e-compose-standalone : compose -plugin e 2e -compose -standalone ## Compile the compose cli-plugin and run End to end local tests in standalone mode. Set E2E_TEST=TestName to run a single test
2022-03-11 13:10:25 +01:00
.PHONY : mocks
mocks :
mockgen -destination pkg/mocks/mock_docker_cli.go -package mocks github.com/docker/cli/cli/command Cli
mockgen -destination pkg/mocks/mock_docker_api.go -package mocks github.com/docker/docker/client APIClient
2022-06-08 00:09:06 +02:00
mockgen -destination pkg/mocks/mock_docker_compose_api.go -package mocks -source= ./pkg/api/api.go Service
2021-12-09 10:30:05 +01:00
.PHONY : e 2e
e2e : e 2e -compose e 2e -compose -standalone ## Run end to end local tests in both modes. Set E2E_TEST=TestName to run a single test
2022-07-04 15:53:08 +02:00
.PHONY : build -and -e 2e
build-and-e2e : compose -plugin e 2e -compose e 2e -compose -standalone ## Compile the compose cli-plugin and run end to end local tests in both modes. Set E2E_TEST=TestName to run a single test
2021-06-25 17:08:40 +02:00
2021-08-31 18:53:24 +02:00
.PHONY : cross
2020-05-04 22:31:59 +02:00
cross : ## Compile the CLI for linux, darwin and windows
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake binary
2020-04-27 10:17:10 +02:00
2021-08-31 18:53:24 +02:00
.PHONY : test
2020-05-04 22:31:59 +02:00
test : ## Run unit tests
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake test
2020-05-01 15:27:27 +02:00
2021-08-31 18:53:24 +02:00
.PHONY : cache -clear
2020-05-06 09:37:52 +02:00
cache-clear : ## Clear the builder cache
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) prune --force --filter type = exec.cachemount --filter= unused-for= 24h
2020-04-24 18:04:32 +02:00
2021-08-31 18:53:24 +02:00
.PHONY : lint
2020-05-04 23:00:21 +02:00
lint : ## run linter(s)
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake lint
2020-05-04 23:00:21 +02:00
2022-03-16 22:59:03 +01:00
.PHONY : docs
docs : ## generate documentation
2022-08-12 15:05:52 +02:00
$( eval $@ _TMP_OUT := $( shell mktemp -d -t compose-output.XXXXXXXXXX) )
$( BUILDX_CMD) bake --set " *.output=type=local,dest= $( $@ _TMP_OUT) " docs-update
2022-03-17 14:47:26 +01:00
rm -rf ./docs/internal
cp -R " $( $@ _TMP_OUT) " /out/* ./docs/
rm -rf " $( $@ _TMP_OUT) " /*
2022-03-16 22:59:03 +01:00
.PHONY : validate -docs
validate-docs : ## validate the doc does not change
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake docs-validate
2022-03-16 22:59:03 +01:00
2021-08-31 18:53:24 +02:00
.PHONY : check -dependencies
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
2021-08-31 18:53:24 +02:00
.PHONY : validate -headers
2020-08-18 11:53:17 +02:00
validate-headers : ## Check license header for all files
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake license-validate
2020-08-17 15:18:47 +02:00
2021-08-31 18:53:24 +02:00
.PHONY : go -mod -tidy
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
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake vendor-update
2020-12-04 17:48:15 +01:00
2021-08-31 18:53:24 +02:00
.PHONY : validate -go -mod
2020-08-18 11:53:17 +02:00
validate-go-mod : ## Validate go.mod and go.sum are up-to-date
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake vendor-validate
2020-08-18 11:53:17 +02:00
2022-03-16 22:59:03 +01:00
validate : validate -go -mod validate -headers validate -docs ## Validate sources
2020-08-18 11:53:17 +02:00
2021-08-31 18:53:24 +02:00
pre-commit : validate check -dependencies lint compose -plugin test e 2e -compose
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}'