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-26 22:06:24 +02:00
PKG := github.com/docker/compose/v2
VERSION ?= $( shell git describe --match 'v[0-9]*' --dirty= '.m' --always --tags)
2023-02-27 23:27:08 +01:00
GO_LDFLAGS ?= -w -X ${ PKG } /internal.Version= ${ VERSION }
2023-01-09 12:37:55 +01:00
GO_BUILDTAGS ?= e2e
2023-05-31 09:33:09 +02:00
DRIVE_PREFIX ?=
2022-09-19 18:51:23 +02:00
i f e q ( $( OS ) , W i n d o w s _ N T )
DETECTED_OS = Windows
2023-05-31 09:33:09 +02:00
DRIVE_PREFIX = C:
2022-09-19 18:51:23 +02:00
e l s e
2022-09-21 16:19:00 +02:00
DETECTED_OS = $( shell uname -s)
2022-09-19 18:51:23 +02:00
e n d i f
2023-03-24 16:25:40 +01:00
2022-09-19 18:51:23 +02:00
i f e q ( $( DETECTED_OS ) , 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
2022-09-19 18:51:23 +02:00
i f e q ( $( DETECTED_OS ) , 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
2022-09-19 18:51:23 +02:00
i f e q ( $( DETECTED_OS ) , W i n d o w s )
BINARY_EXT = .exe
e n d i f
2020-06-13 01:29:41 +02:00
2023-02-09 23:23:29 +01:00
TEST_COVERAGE_FLAGS = -coverprofile= coverage.out -covermode= atomic
i f n e q ( $( DETECTED_OS ) , W i n d o w s )
# go race detector requires gcc on Windows so not used by default
# https://github.com/golang/go/issues/27089
TEST_COVERAGE_FLAGS += -race
e n d i f
2023-03-10 10:08:24 +01:00
BUILD_FLAGS ?=
2022-12-21 16:11:56 +01:00
TEST_FLAGS ?=
2020-08-06 15:40:36 +02:00
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
2022-08-26 22:06:24 +02:00
BUILDX_CMD ?= docker buildx
DESTDIR ?= ./bin/build
2020-04-22 10:04:11 +02:00
2022-08-26 22:06:24 +02:00
all : build
.PHONY : build ## Build the compose cli-plugin
build :
2023-03-10 10:08:24 +01:00
GO111MODULE = on go build $( BUILD_FLAGS) -trimpath -tags " $( GO_BUILDTAGS) " -ldflags " $( GO_LDFLAGS) " -o " $( DESTDIR) /docker-compose $( BINARY_EXT) " ./cmd
2022-08-26 22:06:24 +02:00
.PHONY : binary
binary :
2022-08-12 15:05:52 +02:00
$( BUILDX_CMD) bake binary
2023-03-10 10:08:24 +01:00
.PHONY : binary -with -coverage
binary-with-coverage :
$( BUILDX_CMD) bake binary-with-coverage
2022-08-12 15:05:52 +02:00
.PHONY : install
2022-08-26 22:06:24 +02:00
install : binary
2022-08-12 15:05:52 +02:00
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
2023-03-24 16:25:40 +01:00
go test $( TEST_FLAGS) -count= 1 ./pkg/e2e
2021-12-09 10:30:05 +01:00
.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
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-12-27 13:24:19 +01:00
.PHONY : test -cucumber
test-cucumber :
go test $( TEST_FLAGS) -v -count= 1 -parallel= 1 ./e2e
2022-07-04 15:53:08 +02:00
.PHONY : build -and -e 2e -compose
2022-08-26 22:06:24 +02:00
build-and-e2e-compose : build 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
2022-07-04 15:53:08 +02:00
.PHONY : build -and -e 2e -compose -standalone
2022-08-26 22:06:24 +02:00
build-and-e2e-compose-standalone : build 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-07-04 15:53:08 +02:00
2022-03-11 13:10:25 +01:00
.PHONY : mocks
mocks :
2022-12-05 23:11:45 +01:00
mockgen --version >/dev/null 2>& 1 || go install github.com/golang/mock/mockgen@v1.6.0
2022-03-11 13:10:25 +01:00
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
2022-08-26 22:06:24 +02:00
build-and-e2e : build 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-26 22:06:24 +02:00
$( BUILDX_CMD) bake binary-cross
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
2023-05-31 09:33:09 +02:00
cp -R " $( DRIVE_PREFIX) $( $@ _TMP_OUT) " /out/* ./docs/
rm -rf " $( DRIVE_PREFIX) $( $@ _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-12-08 18:45:47 +01:00
validate : validate -go -mod validate -headers validate -docs ## Validate sources
2020-08-18 11:53:17 +02:00
2022-08-26 22:06:24 +02:00
pre-commit : validate check -dependencies lint build 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}'