| PACKAGE ?= github.com/docker/docker-credential-helpers |
| VERSION ?= $(shell ./hack/git-meta version) |
| REVISION ?= $(shell ./hack/git-meta revision) |
| |
| GO_PKG = github.com/docker/docker-credential-helpers |
| GO_LDFLAGS = -s -w -X ${GO_PKG}/credentials.Version=${VERSION} -X ${GO_PKG}/credentials.Revision=${REVISION} -X ${GO_PKG}/credentials.Package=${PACKAGE} |
| |
| BUILDX_CMD ?= docker buildx |
| DESTDIR ?= ./bin/build |
| COVERAGEDIR ?= ./bin/coverage |
| |
| # 10.11 is the minimum supported version for osxkeychain |
| export MACOSX_DEPLOYMENT_TARGET = 10.11 |
| ifeq "$(shell go env GOOS)" "darwin" |
| export CGO_CFLAGS = -Wno-atomic-alignment -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) |
| else |
| # prevent warnings; see https://github.com/docker/docker-credential-helpers/pull/340#issuecomment-2437593837 |
| # gcc_libinit.c:44:8: error: large atomic operation may incur significant performance penalty; the access size (4 bytes) exceeds the max lock-free size (0 bytes) [-Werror,-Watomic-alignment] |
| export CGO_CFLAGS = -Wno-atomic-alignment |
| endif |
| |
| ifeq "$(shell go env GOOS)/$(shell go env GOARCH)/$(shell go env GOARM)" "linux/arm/6" |
| # Neither the CGo compiler, nor the C toolchain automatically link to |
| # libatomic when the architecture doesn't support atomic intrinsics, as is |
| # the case for arm/v6. |
| # |
| # Here's the error we get when this is not done (see https://github.com/docker/docker-credential-helpers/pull/340#issuecomment-2437593837): |
| # |
| # gcc_libinit.c:44:8: error: large atomic operation may incur significant performance penalty; the access size (4 bytes) exceeds the max lock-free size (0 bytes) [-Werror,-Watomic-alignment] |
| export CGO_LDFLAGS=-latomic |
| endif |
| |
| .PHONY: all |
| all: cross |
| |
| .PHONY: clean |
| clean: |
| rm -rf bin |
| |
| .PHONY: build-% |
| build-%: # build, can be one of build-osxkeychain build-pass build-secretservice build-wincred |
| go build -trimpath -ldflags="$(GO_LDFLAGS) -X ${GO_PKG}/credentials.Name=docker-credential-$*" -o "$(DESTDIR)/docker-credential-$*" ./$*/cmd/ |
| |
| # aliases for build-* targets |
| .PHONY: osxkeychain secretservice pass wincred |
| osxkeychain: build-osxkeychain |
| secretservice: build-secretservice |
| pass: build-pass |
| wincred: build-wincred |
| |
| .PHONY: cross |
| cross: # cross build all supported credential helpers |
| $(BUILDX_CMD) bake binaries |
| |
| .PHONY: release |
| release: # create release |
| ./hack/release |
| |
| .PHONY: test |
| test: |
| mkdir -p $(COVERAGEDIR) |
| go test -short -v -coverprofile=$(COVERAGEDIR)/coverage.txt -covermode=atomic ./... |
| go tool cover -func=$(COVERAGEDIR)/coverage.txt |
| |
| .PHONY: lint |
| lint: |
| $(BUILDX_CMD) bake lint |
| |
| .PHONY: validate-vendor |
| validate-vendor: |
| $(BUILDX_CMD) bake vendor-validate |
| |
| .PHONY: fmt |
| fmt: |
| gofmt -s -l `ls **/*.go | grep -v vendor` |
| |
| .PHONY: validate |
| validate: lint validate-vendor fmt |
| |
| BUILDIMG:=docker-credential-secretservice-$(VERSION) |
| .PHONY: deb |
| deb: |
| mkdir -p release |
| docker build -f deb/Dockerfile \ |
| --build-arg VERSION=$(patsubst v%,%,$(VERSION)) \ |
| --build-arg REVISION=$(REVISION) \ |
| --tag $(BUILDIMG) \ |
| . |
| docker run --rm --net=none $(BUILDIMG) tar cf - /release | tar xf - |
| docker rmi $(BUILDIMG) |
| |
| .PHONY: vendor |
| vendor: |
| $(eval $@_TMP_OUT := $(shell mktemp -d -t docker-output.XXXXXXXXXX)) |
| $(BUILDX_CMD) bake --set "*.output=type=local,dest=$($@_TMP_OUT)" vendor |
| rm -rf ./vendor |
| cp -R "$($@_TMP_OUT)"/* . |
| rm -rf "$($@_TMP_OUT)" |
| |
| .PHONY: print-% |
| print-%: ; @echo $($*) |