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]

Reply via email to