#
# github.com/docker/cli
#

# Sets the name of the company that produced the windows binary.
PACKAGER_NAME ?=

# The repository doesn't have a go.mod, but "go list", and "gotestsum"
# expect to be run from a module.
GO111MODULE=auto
export GO111MODULE

all: binary

_:=$(shell ./scripts/warn-outside-container $(MAKECMDGOALS))

.PHONY: dev
dev: ## start a build container in interactive mode for in-container development
	@if [ -n "${DISABLE_WARN_OUTSIDE_CONTAINER}" ]; then \
		echo "you are already in the dev container"; \
	else \
		$(MAKE) -f docker.Makefile dev; \
	fi

.PHONY: shell
shell: dev ## alias for dev

.PHONY: clean
clean: ## remove build artifacts
	rm -rf ./build/* man/man[1-9] docs/yaml

.PHONY: test
test: test-unit ## run tests

.PHONY: test-unit
test-unit: ## run unit tests, to change the output format use: GOTESTSUM_FORMAT=(dots|short|standard-quiet|short-verbose|standard-verbose) make test-unit
	gotestsum -- $${TESTDIRS:-$(shell go list ./... | grep -vE '/vendor/|/e2e/|/cmd/docker-trust')} $(TESTFLAGS)

.PHONY: test-coverage
test-coverage: ## run test coverage
	mkdir -p $(CURDIR)/build/coverage
	gotestsum -- $(shell go list ./... | grep -vE '/vendor/|/e2e/|/cmd/docker-trust') -coverprofile=$(CURDIR)/build/coverage/coverage.txt

.PHONY: lint
lint: ## run all the lint tools
	golangci-lint run

.PHONY: shellcheck
shellcheck: ## run shellcheck validation
	find scripts/ contrib/completion/bash -type f | grep -v scripts/winresources | grep -v '.*.ps1' | xargs shellcheck

.PHONY: fmt
fmt: ## run gofumpt (if present) or gofmt
	@if command -v gofumpt > /dev/null; then \
		gofumpt -w -d -lang=1.24 . ; \
	else \
		go list -f {{.Dir}} ./... | xargs gofmt -w -s -d ; \
	fi

.PHONY: binary
binary: ## build executable for Linux
	./scripts/build/binary

.PHONY: dynbinary
dynbinary: ## build dynamically linked binary
	GO_LINKMODE=dynamic ./scripts/build/binary

.PHONY: plugins
plugins: ## build example CLI plugins
	scripts/build/plugins

.PHONY: trust-plugin
trust-plugin: ## build docker-trust CLI plugins
	scripts/build/trust-plugin

.PHONY: install-trust-plugin
install-trust-plugin: trust-plugin
install-trust-plugin: ## install docker-trust CLI plugins
	install -D -m 0755 "$$(readlink -f build/docker-trust)" /usr/libexec/docker/cli-plugins/docker-trust

.PHONY: vendor
vendor: ## update vendor with go modules
	rm -rf vendor
	scripts/with-go-mod.sh scripts/vendor update

.PHONY: validate-vendor
validate-vendor: ## validate vendor
	scripts/with-go-mod.sh scripts/vendor validate

.PHONY: mod-outdated
mod-outdated: ## check outdated dependencies
	scripts/with-go-mod.sh scripts/vendor outdated

.PHONY: authors
authors: ## generate AUTHORS file from git history
	scripts/docs/generate-authors.sh

.PHONY: completion
completion: shell-completion
completion: ## generate and install the shell-completion scripts
# Note: this uses system-wide paths, and so may overwrite completion
# scripts installed as part of deb/rpm packages.
#
# Given that this target is intended to debug/test updated versions, we could
# consider installing in per-user (~/.config, XDG_DATA_DIR) paths instead, but
# this will add more complexity.
#
# See https://github.com/docker/cli/pull/5770#discussion_r1927772710
	install -D -p -m 0644 ./build/completion/bash/docker /usr/share/bash-completion/completions/docker
	install -D -p -m 0644 ./build/completion/fish/docker.fish debian/docker-ce-cli/usr/share/fish/vendor_completions.d/docker.fish
	install -D -p -m 0644 ./build/completion/zsh/_docker debian/docker-ce-cli/usr/share/zsh/vendor-completions/_docker


build/docker:
# This target is used by the "shell-completion" target, which requires either
# "binary" or "dynbinary" to have been built. We don't want to trigger those
# to prevent replacing a static binary with a dynamic one, or vice-versa.
	@echo "Run 'make binary' or 'make dynbinary' first" && exit 1

.PHONY: shell-completion
shell-completion: build/docker # requires either "binary" or "dynbinary" to be built.
shell-completion: ## generate shell-completion scripts
	@ ./scripts/build/shell-completion

.PHONY: manpages
manpages: ## generate man pages from go source and markdown
	scripts/with-go-mod.sh scripts/docs/generate-man.sh

.PHONY: mddocs
mddocs: ## generate markdown files from go source
	scripts/with-go-mod.sh scripts/docs/generate-md.sh

.PHONY: yamldocs
yamldocs: ## generate documentation YAML files consumed by docs repo
	scripts/with-go-mod.sh scripts/docs/generate-yaml.sh

.PHONY: help
help: ## print this help
	@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)
