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 ) , W i n d o w s )
BINARY_EXT = .exe
e n d i f
2020-06-13 01:29:41 +02:00
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 ?=
2023-11-15 17:19:27 +01:00
i f n e q ( $( E 2E_TEST ) , )
TEST_FLAGS:= $( TEST_FLAGS) -run '$(E2E_TEST)'
e n d i f
EXCLUDE_E2E_TESTS ?=
i f n e q ( $( EXCLUDE_E 2E_TESTS ) , )
TEST_FLAGS:= $( TEST_FLAGS) -skip '$(EXCLUDE_E2E_TESTS)'
2020-08-06 15:40:36 +02:00
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
2023-06-08 20:58:21 +02:00
# DESTDIR overrides the output path for binaries and other artifacts
# this is used by docker/docker-ce-packaging for the apt/rpm builds,
# so it's important that the resulting binary ends up EXACTLY at the
# path $DESTDIR/docker-compose when specified.
#
# See https://github.com/docker/docker-ce-packaging/blob/e43fbd37e48fde49d907b9195f23b13537521b94/rpm/SPECS/docker-compose-plugin.spec#L47
#
# By default, all artifacts go to subdirectories under ./bin/ in the
# repo root, e.g. ./bin/build, ./bin/coverage, ./bin/release.
DESTDIR ?=
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-06-08 20:58:21 +02:00
GO111MODULE = on go build $( BUILD_FLAGS) -trimpath -tags " $( GO_BUILDTAGS) " -ldflags " $( GO_LDFLAGS) " -o " $( or $( DESTDIR) ,./bin/build) /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
2023-06-08 20:58:21 +02:00
install $( or $( DESTDIR) ,./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-09-27 18:29:54 +02:00
go test -v $( 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-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 :
2023-12-13 14:01:36 +01:00
mockgen --version >/dev/null 2>& 1 || go install go.uber.org/mock/mockgen@v0.3.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}'