This is an automated email from the ASF dual-hosted git repository.
ccondit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-k8shim.git
The following commit(s) were added to refs/heads/master by this push:
new 112c083a [YUNIKORN-2420] Shim: create reproducible binaries (#790)
112c083a is described below
commit 112c083ac06c0293f5636b8ed8777171ce1b6453
Author: Craig Condit <[email protected]>
AuthorDate: Thu Feb 15 13:33:20 2024 -0600
[YUNIKORN-2420] Shim: create reproducible binaries (#790)
Ensure that binaries produced in the shim use consistent build ID
and build date so that builds are reproducible.
Closes: #790
Signed-off-by: Craig Condit <[email protected]>
---
.gitignore | 1 +
Makefile | 26 ++++++++++++++++++--------
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/.gitignore b/.gitignore
index 0b9c893d..6e05738d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
*.crt
*.key
*.test
+/build.date
diff --git a/Makefile b/Makefile
index 0f6d0dee..c7afa191 100644
--- a/Makefile
+++ b/Makefile
@@ -74,8 +74,18 @@ else
PLUGIN_OPTS :=
endif
+# Build date - Use git commit, then cached build.date, finally current date
+# This allows for reproducible builds as long as release tarball contains the
build.date file.
+DATE := $(shell TZ=UTC0 git --no-pager log -1 --date=iso8601-strict-local
--format=%cd 2>/dev/null || true)
+ifeq ($(DATE),)
+DATE := $(shell cat "$(BASE_DIR)/build.date" 2>/dev/null || true)
+endif
+ifeq ($(DATE),)
+DATE := $(shell date +%FT%T%z)
+endif
+DATE := $(shell echo "$(DATE)" > "$(BASE_DIR)/build.date" ; cat
"$(BASE_DIR)/build.date")
+
# Version parameters
-DATE=$(shell date +%FT%T%z)
ifeq ($(VERSION),)
VERSION := latest
endif
@@ -326,7 +336,7 @@ $(DEV_BIN_DIR)/$(SCHEDULER_BINARY): go.mod go.sum $(shell
find pkg)
"$(GO)" build \
-o=${DEV_BIN_DIR}/${SCHEDULER_BINARY} \
-race \
- -ldflags '-X ${FLAG_PREFIX}.buildVersion=${VERSION} -X
${FLAG_PREFIX}.buildDate=${DATE} -X ${FLAG_PREFIX}.isPluginVersion=false -X
${FLAG_PREFIX}.goVersion=${GO_VERSION} -X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X
${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X ${FLAG_PREFIX}.siSHA=${SI_SHA} -X
${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
+ -ldflags '-buildid= -X ${FLAG_PREFIX}.buildVersion=${VERSION} -X
${FLAG_PREFIX}.buildDate=${DATE} -X ${FLAG_PREFIX}.isPluginVersion=false -X
${FLAG_PREFIX}.goVersion=${GO_VERSION} -X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X
${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X ${FLAG_PREFIX}.siSHA=${SI_SHA} -X
${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
./pkg/cmd/shim/
.PHONY: build_plugin
@@ -338,7 +348,7 @@ $(DEV_BIN_DIR)/$(PLUGIN_BINARY): go.mod go.sum $(shell find
pkg)
"$(GO)" build \
-o=${DEV_BIN_DIR}/${PLUGIN_BINARY} \
-race \
- -ldflags '-X ${FLAG_PREFIX}.buildVersion=${VERSION} -X
${FLAG_PREFIX}.buildDate=${DATE} -X ${FLAG_PREFIX}.isPluginVersion=true -X
${FLAG_PREFIX}.goVersion=${GO_VERSION} -X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X
${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X ${FLAG_PREFIX}.siSHA=${SI_SHA} -X
${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
+ -ldflags '-buildid= -X ${FLAG_PREFIX}.buildVersion=${VERSION} -X
${FLAG_PREFIX}.buildDate=${DATE} -X ${FLAG_PREFIX}.isPluginVersion=true -X
${FLAG_PREFIX}.goVersion=${GO_VERSION} -X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X
${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X ${FLAG_PREFIX}.siSHA=${SI_SHA} -X
${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
./pkg/cmd/schedulerplugin/
# Build scheduler binary in a production ready version
@@ -352,7 +362,7 @@ $(RELEASE_BIN_DIR)/$(SCHEDULER_BINARY): go.mod go.sum
$(shell find pkg)
-a \
-o=${RELEASE_BIN_DIR}/${SCHEDULER_BINARY} \
-trimpath \
- -ldflags '-extldflags "-static" -X
${FLAG_PREFIX}.buildVersion=${VERSION} -X ${FLAG_PREFIX}.buildDate=${DATE} -X
${FLAG_PREFIX}.isPluginVersion=false -X ${FLAG_PREFIX}.goVersion=${GO_VERSION}
-X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X ${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X
${FLAG_PREFIX}.siSHA=${SI_SHA} -X ${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
+ -ldflags '-buildid= -extldflags "-static" -X
${FLAG_PREFIX}.buildVersion=${VERSION} -X ${FLAG_PREFIX}.buildDate=${DATE} -X
${FLAG_PREFIX}.isPluginVersion=false -X ${FLAG_PREFIX}.goVersion=${GO_VERSION}
-X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X ${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X
${FLAG_PREFIX}.siSHA=${SI_SHA} -X ${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
-tags netgo \
-installsuffix netgo \
./pkg/cmd/shim/
@@ -368,7 +378,7 @@ $(RELEASE_BIN_DIR)/$(PLUGIN_BINARY): go.mod go.sum $(shell
find pkg)
-a \
-o=${RELEASE_BIN_DIR}/${PLUGIN_BINARY} \
-trimpath \
- -ldflags '-extldflags "-static" -X
${FLAG_PREFIX}.buildVersion=${VERSION} -X ${FLAG_PREFIX}.buildDate=${DATE} -X
${FLAG_PREFIX}.isPluginVersion=true -X ${FLAG_PREFIX}.goVersion=${GO_VERSION}
-X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X ${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X
${FLAG_PREFIX}.siSHA=${SI_SHA} -X ${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
+ -ldflags '-buildid= -extldflags "-static" -X
${FLAG_PREFIX}.buildVersion=${VERSION} -X ${FLAG_PREFIX}.buildDate=${DATE} -X
${FLAG_PREFIX}.isPluginVersion=true -X ${FLAG_PREFIX}.goVersion=${GO_VERSION}
-X ${FLAG_PREFIX}.arch=${EXEC_ARCH} -X ${FLAG_PREFIX}.coreSHA=${CORE_SHA} -X
${FLAG_PREFIX}.siSHA=${SI_SHA} -X ${FLAG_PREFIX}.shimSHA=${SHIM_SHA}' \
-tags netgo \
-installsuffix netgo \
./pkg/cmd/schedulerplugin/
@@ -423,7 +433,7 @@ $(RELEASE_BIN_DIR)/$(ADMISSION_CONTROLLER_BINARY): go.mod
go.sum $(shell find pk
-a \
-o=$(RELEASE_BIN_DIR)/$(ADMISSION_CONTROLLER_BINARY) \
-trimpath \
- -ldflags '-extldflags "-static" -X
${FLAG_PREFIX}.buildVersion=${VERSION} -X ${FLAG_PREFIX}.buildDate=${DATE} -X
${FLAG_PREFIX}.goVersion=${GO_VERSION} -X ${FLAG_PREFIX}.arch=${EXEC_ARCH}' \
+ -ldflags '-buildid= -extldflags "-static" -X
${FLAG_PREFIX}.buildVersion=${VERSION} -X ${FLAG_PREFIX}.buildDate=${DATE} -X
${FLAG_PREFIX}.goVersion=${GO_VERSION} -X ${FLAG_PREFIX}.arch=${EXEC_ARCH}' \
-tags netgo \
-installsuffix netgo \
./pkg/cmd/admissioncontroller
@@ -473,7 +483,7 @@ $(DEV_BIN_DIR)/$(TEST_SERVER_BINARY): go.mod go.sum $(shell
find pkg)
"$(GO)" build \
-o="$(DEV_BIN_DIR)/$(TEST_SERVER_BINARY)" \
-race \
- -ldflags '-X main.version=${VERSION} -X main.date=${DATE} -X
main.goVersion=${GO_VERSION} -X main.arch=${EXEC_ARCH}' \
+ -ldflags '-buildid= -X main.version=${VERSION} -X main.date=${DATE} -X
main.goVersion=${GO_VERSION} -X main.arch=${EXEC_ARCH}' \
./pkg/cmd/webtest/
.PHONY: build_web_test_server_prod
@@ -484,7 +494,7 @@ $(RELEASE_BIN_DIR)/$(TEST_SERVER_BINARY): go.mod go.sum
$(shell find pkg)
CGO_ENABLED=0 GOOS=linux GOARCH="${EXEC_ARCH}" "$(GO)" build \
-a \
-o="$(RELEASE_BIN_DIR)/$(TEST_SERVER_BINARY)" \
- -ldflags '-extldflags "-static" -X main.version=${VERSION} -X
main.date=${DATE} -X main.goVersion=${GO_VERSION} -X main.arch=${EXEC_ARCH}' \
+ -ldflags '-buildid= -extldflags "-static" -X main.version=${VERSION} -X
main.date=${DATE} -X main.goVersion=${GO_VERSION} -X main.arch=${EXEC_ARCH}' \
-tags netgo \
-installsuffix netgo \
./pkg/cmd/webtest/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]