golang-github-prometheus-promu/0001-do_not_discover_user_host_for_reproducible_builds.patch

75 lines
1.9 KiB
Diff

Index: promu-0.15.0/cmd/build.go
===================================================================
--- promu-0.15.0.orig/cmd/build.go
+++ promu-0.15.0/cmd/build.go
@@ -32,6 +32,10 @@ import (
"github.com/prometheus/promu/util/sh"
)
+const (
+ sourceDateEpoch = "SOURCE_DATE_EPOCH"
+)
+
var (
buildcmd = app.Command("build", "Build a Go project")
buildCgoFlagSet bool
@@ -155,7 +159,7 @@ func getLdflags(info repository.Info) st
tmplOutput = new(bytes.Buffer)
fnMap = template.FuncMap{
"date": buildDate.UTC().Format,
- "host": os.Hostname,
+ "host": HostFunc,
"repoPath": RepoPathFunc,
"user": UserFunc,
}
@@ -191,13 +195,13 @@ func getLdflags(info repository.Info) st
func getBuildDate() time.Time {
var buildDate time.Time
- sourceDate := os.Getenv("SOURCE_DATE_EPOCH")
+ sourceDate := os.Getenv(sourceDateEpoch)
if sourceDate == "" {
buildDate = time.Now()
} else {
unixBuildDate, err := strconv.ParseInt(sourceDate, 10, 64)
if err != nil {
- fatal(errors.Wrap(err, "Failed to parse SOURCE_DATE_EPOCH"))
+ fatal(errors.Wrap(err, "Failed to parse "+sourceDateEpoch))
} else {
buildDate = time.Unix(unixBuildDate, 0)
}
@@ -205,10 +209,31 @@ func getBuildDate() time.Time {
return buildDate
}
+func HostFunc() string {
+ if isReproducibleBuild() {
+ return "reproducible"
+ } else {
+ hostname, err := os.Hostname()
+ if err != nil {
+ return "unknown-host"
+ } else {
+ return hostname
+ }
+ }
+}
+
// UserFunc returns the current username.
func UserFunc() (interface{}, error) {
- // os/user.Current() doesn't always work without CGO
- return shellOutput("whoami"), nil
+ if isReproducibleBuild() {
+ return "reproducible", nil
+ } else {
+ // os/user.Current() doesn't always work without CGO
+ return shellOutput("whoami"), nil
+ }
+}
+
+func isReproducibleBuild() bool {
+ return os.Getenv(sourceDateEpoch) != ""
}
// RepoPathFunc returns the repository path.