Skip to content

Commit a37d38a

Browse files
committed
Set version and revision at linked time
Signed-off-by: CrazyMax <[email protected]>
1 parent 5124911 commit a37d38a

File tree

4 files changed

+39
-20
lines changed

4 files changed

+39
-20
lines changed

Dockerfile

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ RUN --mount=type=bind,target=. \
6060
FROM gobase AS version
6161
ARG PKG
6262
RUN --mount=target=. \
63-
VERSION=$(git describe --match 'v[0-9]*' --dirty='.m' --always --tags); \
64-
echo "-s -w -X ${PKG}/credentials.Version=${VERSION}" | tee /tmp/.ldflags; \
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; \
6565
echo -n "${VERSION}" | tee /tmp/.version;
6666

6767
FROM gobase AS base
@@ -93,6 +93,7 @@ FROM scratch AS test-coverage
9393
COPY --from=test /out /
9494

9595
FROM base AS build-linux
96+
ARG PKG
9697
ARG TARGETOS
9798
ARG TARGETARCH
9899
ARG TARGETVARIANT
@@ -102,13 +103,14 @@ RUN --mount=type=bind,target=. \
102103
--mount=type=bind,from=version,source=/tmp/.ldflags,target=/tmp/.ldflags <<EOT
103104
set -ex
104105
mkdir /out
105-
xx-go build -ldflags "$(cat /tmp/.ldflags)" -o /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT} ./pass/cmd/
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/
106107
xx-verify /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
107-
xx-go build -ldflags "$(cat /tmp/.ldflags)" -o /out/docker-credential-secretservice-${TARGETOS}-${TARGETARCH}${TARGETVARIANT} ./secretservice/cmd/
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/
108109
xx-verify /out/docker-credential-secretservice-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
109110
EOT
110111

111112
FROM base AS build-darwin
113+
ARG PKG
112114
ARG TARGETOS
113115
ARG TARGETARCH
114116
ARG TARGETVARIANT
@@ -120,14 +122,15 @@ RUN --mount=type=bind,target=. \
120122
set -ex
121123
mkdir /out
122124
xx-go install std
123-
xx-go build -ldflags "$(cat /tmp/.ldflags)" -o /out/docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT} ./osxkeychain/cmd/
125+
xx-go build -ldflags "$(cat /tmp/.ldflags) -X ${PKG}/credentials.Name=docker-credential-osxkeychain" -o /out/docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT} ./osxkeychain/cmd/
124126
xx-verify /out/docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT}
125127

126-
xx-go build -ldflags "$(cat /tmp/.ldflags)" -o /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT} ./pass/cmd/
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/
127129
xx-verify /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
128130
EOT
129131

130132
FROM base AS build-windows
133+
ARG PKG
131134
ARG TARGETARCH
132135
ARG TARGETVARIANT
133136
RUN --mount=type=bind,target=. \
@@ -136,7 +139,7 @@ RUN --mount=type=bind,target=. \
136139
--mount=type=bind,from=version,source=/tmp/.ldflags,target=/tmp/.ldflags <<EOT
137140
set -ex
138141
mkdir /out
139-
xx-go build -ldflags "$(cat /tmp/.ldflags)" -o /out/docker-credential-wincred-${TARGETARCH}${TARGETVARIANT}.exe ./wincred/cmd/
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/
140143
xx-verify /out/docker-credential-wincred-${TARGETARCH}${TARGETVARIANT}.exe
141144
EOT
142145

Makefile

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
.PHONY: all osxkeychain secretservice test lint validate-vendor fmt validate wincred pass deb vendor
22

3-
VERSION := $(shell grep 'const Version' credentials/version.go | awk -F'"' '{ print $$2 }')
3+
PKG := github.com/docker/docker-credential-helpers
4+
VERSION ?= $(shell git describe --match 'v[0-9]*' --dirty='.m' --always --tags)
5+
REVISION ?= $(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi)
6+
7+
LDFLAGS=-s -w -X ${PKG}/credentials.Version=${VERSION} -X ${PKG}/credentials.Revision=${REVISION} -X ${PKG}/credentials.Package=${PKG}
48

59
all: test
610

@@ -10,7 +14,7 @@ clean:
1014

1115
osxkeychain:
1216
mkdir -p bin
13-
go build -ldflags -s -o bin/docker-credential-osxkeychain ./osxkeychain/cmd/
17+
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-osxkeychain" -o bin/docker-credential-osxkeychain ./osxkeychain/cmd/
1418

1519
osxcodesign: osxkeychain
1620
$(eval SIGNINGHASH = $(shell security find-identity -v -p codesigning | grep "Developer ID Application: Docker Inc" | cut -d ' ' -f 4))
@@ -19,29 +23,29 @@ osxcodesign: osxkeychain
1923

2024
secretservice:
2125
mkdir -p bin
22-
go build -o bin/docker-credential-secretservice ./secretservice/cmd/
26+
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-secretservice" -o bin/docker-credential-secretservice ./secretservice/cmd/
2327

2428
pass:
2529
mkdir -p bin
26-
go build -o bin/docker-credential-pass ./pass/cmd/
30+
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-pass" -o bin/docker-credential-pass ./pass/cmd/
2731

2832
wincred:
2933
mkdir -p bin
30-
go build -o bin/docker-credential-wincred.exe ./wincred/cmd/
34+
go build -ldflags="$(LDFLAGS) -X ${PKG}/credentials.Name=docker-credential-wincred" -o bin/docker-credential-wincred.exe ./wincred/cmd/
3135

3236
linuxrelease:
3337
mkdir -p release
34-
cd bin && tar cvfz ../release/docker-credential-pass-v$(VERSION)-amd64.tar.gz docker-credential-pass
35-
cd bin && tar cvfz ../release/docker-credential-secretservice-v$(VERSION)-amd64.tar.gz docker-credential-secretservice
38+
cd bin && tar cvfz ../release/docker-credential-pass-$(VERSION)-amd64.tar.gz docker-credential-pass
39+
cd bin && tar cvfz ../release/docker-credential-secretservice-$(VERSION)-amd64.tar.gz docker-credential-secretservice
3640

3741
osxrelease:
3842
mkdir -p release
39-
cd bin && tar cvfz ../release/docker-credential-osxkeychain-v$(VERSION)-amd64.tar.gz docker-credential-osxkeychain
40-
cd bin && tar cvfz ../release/docker-credential-pass-v$(VERSION)-darwin-amd64.tar.gz docker-credential-pass
43+
cd bin && tar cvfz ../release/docker-credential-osxkeychain-$(VERSION)-amd64.tar.gz docker-credential-osxkeychain
44+
cd bin && tar cvfz ../release/docker-credential-pass-$(VERSION)-darwin-amd64.tar.gz docker-credential-pass
4145

4246
winrelease:
4347
mkdir -p release
44-
cd bin && zip ../release/docker-credential-wincred-v$(VERSION)-amd64.zip docker-credential-wincred.exe
48+
cd bin && zip ../release/docker-credential-wincred-$(VERSION)-amd64.zip docker-credential-wincred.exe
4549

4650
test:
4751
# tests all packages except vendor

credentials/credentials.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,6 @@ func List(helper Helper, writer io.Writer) error {
181181

182182
// PrintVersion outputs the current version.
183183
func PrintVersion(writer io.Writer) error {
184-
fmt.Fprintln(writer, Version)
184+
fmt.Fprintf(writer, "%s (%s) %s\n", Name, Package, Version)
185185
return nil
186186
}

credentials/version.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
package credentials
22

3-
// Version holds a string describing the current version
4-
const Version = "0.6.4"
3+
var (
4+
// Name is filled at linking time
5+
Name = ""
6+
7+
// Package is filled at linking time
8+
Package = "github.com/docker/docker-credential-helpers"
9+
10+
// Version holds the complete version number. Filled in at linking time.
11+
Version = "v0.0.0+unknown"
12+
13+
// Revision is filled with the VCS (e.g. git) revision being used to build
14+
// the program at linking time.
15+
Revision = ""
16+
)

0 commit comments

Comments
 (0)