diff --git a/Dockerfile b/Dockerfile index d81b8f0..d68d582 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,21 +10,26 @@ LABEL org.opencontainers.image.licenses=MIT+APACHE_2.0 ARG TARGETPLATFORM TARGETOS TARGETARCH ENV GOPATH /go +ENV GOCACHE /root/.cache/go-build ENV SRC_PATH $GOPATH/src/github.com/ipfs/rainbow ENV GO111MODULE on ENV GOPROXY https://proxy.golang.org COPY go.* $SRC_PATH/ WORKDIR $SRC_PATH -RUN go mod download +RUN --mount=type=cache,target=/go/pkg/mod \ + go mod download COPY . $SRC_PATH RUN git config --global --add safe.directory /go/src/github.com/ipfs/rainbow RUN --mount=target=. \ --mount=type=cache,target=/root/.cache/go-build \ - --mount=type=cache,target=/go/pkg \ - CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o $GOPATH/bin/rainbow + --mount=type=cache,target=/go/pkg/mod \ + CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \ + go build \ + -ldflags "-X main.gitTag=$(git describe --exact-match --tags HEAD 2>/dev/null || true)" \ + -o $GOPATH/bin/rainbow #------------------------------------------------------ FROM debian:bookworm-slim diff --git a/version.go b/version.go index ccda56b..c6ddc0d 100644 --- a/version.go +++ b/version.go @@ -5,9 +5,17 @@ import ( "time" ) -var name = "rainbow" -var version = buildVersion() -var userAgent = name + "/" + version +var ( + name = "rainbow" + version string + userAgent string + gitTag string +) + +func init() { + version = buildVersion() + userAgent = name + "/" + version +} func buildVersion() string { var revision string @@ -32,6 +40,12 @@ func buildVersion() string { if dirty { revision += "-dirty" } + if gitTag != "" { + if revision != "" { + gitTag += "/" + day + "-" + revision + } + return gitTag + } if revision != "" { return day + "-" + revision }