Skip to content

Commit e50298d

Browse files
committed
Makefile: mutualize local and Dockerfile build opts
Signed-off-by: CrazyMax <[email protected]>
1 parent 2c31fa4 commit e50298d

File tree

4 files changed

+58
-57
lines changed

4 files changed

+58
-57
lines changed

.dockerignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
/bin
2-
/release

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
/bin
2-
/release

Dockerfile

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ARG XX_VERSION=1.1.2
55
ARG OSXCROSS_VERSION=11.3-r7-alpine
66
ARG GOLANGCI_LINT_VERSION=v1.47.3
77

8-
ARG PKG=github.com/docker/docker-credential-helpers
8+
ARG PACKAGE=github.com/docker/docker-credential-helpers
99

1010
# xx is a helper for cross-compilation
1111
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
@@ -15,7 +15,7 @@ FROM crazymax/osxcross:${OSXCROSS_VERSION} AS osxcross
1515

1616
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS gobase
1717
COPY --from=xx / /
18-
RUN apk add --no-cache clang file git lld llvm pkgconf rsync
18+
RUN apk add --no-cache clang file git lld llvm make pkgconf rsync
1919
ENV GOFLAGS="-mod=vendor"
2020
ENV CGO_ENABLED="1"
2121
WORKDIR /src
@@ -57,13 +57,6 @@ RUN --mount=type=bind,target=. \
5757
--mount=from=golangci-lint,source=/usr/bin/golangci-lint,target=/usr/bin/golangci-lint \
5858
golangci-lint run ./...
5959

60-
FROM gobase AS version
61-
ARG PKG
62-
RUN --mount=target=. \
63-
VERSION=$(git describe --match 'v[0-9]*' --dirty='.m' --always --tags) REVISION=$(git rev-parse HEAD)$(if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi); \
64-
echo "-s -w -X ${PKG}/credentials.Version=${VERSION} -X ${PKG}/credentials.Revision=${REVISION} -X ${PKG}/credentials.Package=${PKG}" | tee /tmp/.ldflags; \
65-
echo -n "${VERSION}" | tee /tmp/.version;
66-
6760
FROM gobase AS base
6861
ARG TARGETPLATFORM
6962
RUN xx-apk add musl-dev gcc libsecret-dev pass
@@ -93,53 +86,49 @@ FROM scratch AS test-coverage
9386
COPY --from=test /out /
9487

9588
FROM base AS build-linux
96-
ARG PKG
89+
ARG PACKAGE
9790
ARG TARGETOS
9891
ARG TARGETARCH
9992
ARG TARGETVARIANT
10093
RUN --mount=type=bind,target=. \
10194
--mount=type=cache,target=/root/.cache \
102-
--mount=type=cache,target=/go/pkg/mod \
103-
--mount=type=bind,from=version,source=/tmp/.ldflags,target=/tmp/.ldflags <<EOT
95+
--mount=type=cache,target=/go/pkg/mod <<EOT
10496
set -ex
105-
mkdir /out
106-
xx-go build -ldflags "$(cat /tmp/.ldflags) -X ${PKG}/credentials.Name=docker-credential-pass" -o /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT} ./pass/cmd/
97+
xx-go --wrap
98+
make build-pass PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
10799
xx-verify /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
108-
xx-go build -ldflags "$(cat /tmp/.ldflags) -X ${PKG}/credentials.Name=docker-credential-secretservice" -o /out/docker-credential-secretservice-${TARGETOS}-${TARGETARCH}${TARGETVARIANT} ./secretservice/cmd/
100+
make build-secretservice PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-secretservice-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
109101
xx-verify /out/docker-credential-secretservice-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
110102
EOT
111103

112104
FROM base AS build-darwin
113-
ARG PKG
105+
ARG PACKAGE
114106
ARG TARGETOS
115107
ARG TARGETARCH
116108
ARG TARGETVARIANT
117109
RUN --mount=type=bind,target=. \
118110
--mount=type=cache,target=/root/.cache \
119111
--mount=type=cache,target=/go/pkg/mod \
120-
--mount=type=bind,from=osxcross,src=/osxsdk,target=/xx-sdk \
121-
--mount=type=bind,from=version,source=/tmp/.ldflags,target=/tmp/.ldflags <<EOT
112+
--mount=type=bind,from=osxcross,src=/osxsdk,target=/xx-sdk <<EOT
122113
set -ex
123-
mkdir /out
124-
xx-go install std
125-
xx-go build -ldflags "$(cat /tmp/.ldflags) -X ${PKG}/credentials.Name=docker-credential-osxkeychain" -o /out/docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT} ./osxkeychain/cmd/
114+
xx-go --wrap
115+
go install std
116+
make build-osxkeychain PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT}
126117
xx-verify /out/docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT}
127-
128-
xx-go build -ldflags "$(cat /tmp/.ldflags) -X ${PKG}/credentials.Name=docker-credential-pass" -o /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT} ./pass/cmd/
118+
make build-pass PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
129119
xx-verify /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
130120
EOT
131121

132122
FROM base AS build-windows
133-
ARG PKG
123+
ARG PACKAGE
134124
ARG TARGETARCH
135125
ARG TARGETVARIANT
136126
RUN --mount=type=bind,target=. \
137127
--mount=type=cache,target=/root/.cache \
138-
--mount=type=cache,target=/go/pkg/mod \
139-
--mount=type=bind,from=version,source=/tmp/.ldflags,target=/tmp/.ldflags <<EOT
128+
--mount=type=cache,target=/go/pkg/mod <<EOT
140129
set -ex
141-
mkdir /out
142-
xx-go build -ldflags "$(cat /tmp/.ldflags) -X ${PKG}/credentials.Name=docker-credential-wincred" -o /out/docker-credential-wincred-${TARGETARCH}${TARGETVARIANT}.exe ./wincred/cmd/
130+
xx-go --wrap
131+
make build-wincred PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-wincred-${TARGETARCH}${TARGETVARIANT}.exe
143132
xx-verify /out/docker-credential-wincred-${TARGETARCH}${TARGETVARIANT}.exe
144133
EOT
145134

Makefile

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,81 @@
1-
.PHONY: all osxkeychain secretservice test lint validate-vendor fmt validate wincred pass deb vendor
2-
3-
PKG := github.com/docker/docker-credential-helpers
1+
PACKAGE ?= github.com/docker/docker-credential-helpers
42
VERSION ?= $(shell git describe --match 'v[0-9]*' --dirty='.m' --always --tags)
53
REVISION ?= $(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi)
64

7-
LDFLAGS=-s -w -X ${PKG}/credentials.Version=${VERSION} -X ${PKG}/credentials.Revision=${REVISION} -X ${PKG}/credentials.Package=${PKG}
5+
GO_PKG = github.com/docker/docker-credential-helpers
6+
GO_LDFLAGS = -s -w -X ${GO_PKG}/credentials.Version=${VERSION} -X ${GO_PKG}/credentials.Revision=${REVISION} -X ${GO_PKG}/credentials.Package=${PACKAGE}
7+
8+
BUILDX_CMD ?= docker buildx
9+
DESTDIR ?= ./bin/build
810

9-
all: test
11+
.PHONY: all
12+
all: cross
1013

14+
.PHONY: clean
1115
clean:
1216
rm -rf bin
13-
rm -rf release
1417

15-
osxkeychain:
16-
mkdir -p bin
17-
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-osxkeychain" -o bin/docker-credential-osxkeychain ./osxkeychain/cmd/
18-
19-
osxcodesign: osxkeychain
20-
$(eval SIGNINGHASH = $(shell security find-identity -v -p codesigning | grep "Developer ID Application: Docker Inc" | cut -d ' ' -f 4))
21-
xcrun -log codesign -s $(SIGNINGHASH) --force --verbose bin/docker-credential-osxkeychain
22-
xcrun codesign --verify --deep --strict --verbose=2 --display bin/docker-credential-osxkeychain
18+
.PHONY: build-%
19+
build-%: # build, can be one of build-osxkeychain build-pass build-secretservice build-wincred
20+
$(eval BINNAME := docker-credential-$*)
21+
go build -trimpath -ldflags="$(GO_LDFLAGS) -X ${GO_PKG}/credentials.Name=docker-credential-$*" -o $(DESTDIR)/$(BINNAME) ./$*/cmd/
2322

24-
secretservice:
25-
mkdir -p bin
26-
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-secretservice" -o bin/docker-credential-secretservice ./secretservice/cmd/
23+
# aliases for build-* targets
24+
.PHONY: osxkeychain secretservice pass wincred
25+
osxkeychain: build-osxkeychain
26+
secretservice: build-secretservice
27+
pass: build-pass
28+
wincred: build-wincred
2729

28-
pass:
29-
mkdir -p bin
30-
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-pass" -o bin/docker-credential-pass ./pass/cmd/
31-
32-
wincred:
33-
mkdir -p bin
34-
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-wincred" -o bin/docker-credential-wincred.exe ./wincred/cmd/
30+
.PHONY: osxcodesign
31+
osxcodesign: build-osxkeychain
32+
$(eval SIGNINGHASH = $(shell security find-identity -v -p codesigning | grep "Developer ID Application: Docker Inc" | cut -d ' ' -f 4))
33+
xcrun -log codesign -s $(SIGNINGHASH) --force --verbose bin/build/docker-credential-osxkeychain
34+
xcrun codesign --verify --deep --strict --verbose=2 --display bin/build/docker-credential-osxkeychain
3535

36+
.PHONY: linuxrelease
3637
linuxrelease:
3738
mkdir -p release
3839
cd bin && tar cvfz ../release/docker-credential-pass-$(VERSION)-amd64.tar.gz docker-credential-pass
3940
cd bin && tar cvfz ../release/docker-credential-secretservice-$(VERSION)-amd64.tar.gz docker-credential-secretservice
4041

42+
.PHONY: osxrelease
4143
osxrelease:
4244
mkdir -p release
4345
cd bin && tar cvfz ../release/docker-credential-osxkeychain-$(VERSION)-amd64.tar.gz docker-credential-osxkeychain
4446
cd bin && tar cvfz ../release/docker-credential-pass-$(VERSION)-darwin-amd64.tar.gz docker-credential-pass
4547

48+
.PHONY: winrelease
4649
winrelease:
4750
mkdir -p release
4851
cd bin && zip ../release/docker-credential-wincred-$(VERSION)-amd64.zip docker-credential-wincred.exe
4952

53+
.PHONY: cross
54+
cross: # cross build all supported credential helpers
55+
$(BUILDX_CMD) bake cross
56+
57+
.PHONY: test
5058
test:
5159
# tests all packages except vendor
5260
go test -v `go list ./... | grep -v /vendor/`
5361

62+
.PHONY: lint
5463
lint:
55-
docker buildx bake lint
64+
$(BUILDX_CMD) bake lint
5665

66+
.PHONY: validate-vendor
5767
validate-vendor:
58-
docker buildx bake vendor-validate
68+
$(BUILDX_CMD) bake vendor-validate
5969

70+
.PHONY: fmt
6071
fmt:
6172
gofmt -s -l `ls **/*.go | grep -v vendor`
6273

74+
.PHONY: validate
6375
validate: lint validate-vendor fmt
6476

6577
BUILDIMG:=docker-credential-secretservice-$(VERSION)
78+
.PHONY: deb
6679
deb:
6780
mkdir -p release
6881
docker build -f deb/Dockerfile \
@@ -73,9 +86,10 @@ deb:
7386
docker run --rm --net=none $(BUILDIMG) tar cf - /release | tar xf -
7487
docker rmi $(BUILDIMG)
7588

89+
.PHONY: vendor
7690
vendor:
7791
$(eval $@_TMP_OUT := $(shell mktemp -d -t docker-output.XXXXXXXXXX))
78-
docker buildx bake --set "*.output=type=local,dest=$($@_TMP_OUT)" vendor
92+
$(BUILDX_CMD) bake --set "*.output=type=local,dest=$($@_TMP_OUT)" vendor
7993
rm -rf ./vendor
8094
cp -R "$($@_TMP_OUT)"/* .
8195
rm -rf "$($@_TMP_OUT)"

0 commit comments

Comments
 (0)