Skip to content

Commit

Permalink
Use revision etc. from debug.BuildInfo
Browse files Browse the repository at this point in the history
  • Loading branch information
bep committed Mar 17, 2022
1 parent 004bec2 commit a107e4e
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 22 deletions.
69 changes: 60 additions & 9 deletions common/hugo/hugo.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"runtime/debug"
"sort"
"strings"
"sync"
"time"

"github.com/gohugoio/hugo/hugofs/files"
Expand All @@ -37,13 +38,6 @@ const (
)

var (
// commitHash contains the current Git revision.
// Use mage to build to make sure this gets set.
commitHash string

// buildDate contains the date of the current build.
buildDate string

// vendorInfo contains vendor notes about the current build.
vendorInfo string
)
Expand Down Expand Up @@ -90,6 +84,17 @@ func NewInfo(environment string, deps []*Dependency) Info {
if environment == "" {
environment = EnvironmentProduction
}
var (
commitHash string
buildDate string
)

bi := getBuildInfo()
if bi != nil {
commitHash = bi.Revision
buildDate = bi.RevisionTime
}

return Info{
CommitHash: commitHash,
BuildDate: buildDate,
Expand Down Expand Up @@ -125,6 +130,52 @@ func GetExecEnviron(workDir string, cfg config.Provider, fs afero.Fs) []string {
return env
}

type buildInfo struct {
VersionControlSystem string
Revision string
RevisionTime string
Modified bool

GoOS string
GoArch string

*debug.BuildInfo
}

var bInfo *buildInfo
var bInfoInit sync.Once

func getBuildInfo() *buildInfo {
bInfoInit.Do(func() {
bi, ok := debug.ReadBuildInfo()
if !ok {
return
}

bInfo = &buildInfo{BuildInfo: bi}

for _, s := range bInfo.Settings {
switch s.Key {
case "vcs":
bInfo.VersionControlSystem = s.Value
case "vcs.revision":
bInfo.Revision = s.Value
case "vcs.time":
bInfo.RevisionTime = s.Value
case "vcs.modified":
bInfo.Modified = s.Value == "true"
case "GOOS":
bInfo.GoOS = s.Value
case "GOARCH":
bInfo.GoArch = s.Value
}
}

})

return bInfo
}

// GetDependencyList returns a sorted dependency list on the format package="version".
// It includes both Go dependencies and (a manually maintained) list of C(++) dependencies.
func GetDependencyList() []string {
Expand All @@ -143,8 +194,8 @@ func GetDependencyList() []string {
)
}

bi, ok := debug.ReadBuildInfo()
if !ok {
bi := getBuildInfo()
if bi == nil {
return deps
}

Expand Down
8 changes: 6 additions & 2 deletions common/hugo/hugo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,12 @@ func TestHugoInfo(t *testing.T) {

c.Assert(hugoInfo.Version(), qt.Equals, CurrentVersion.Version())
c.Assert(fmt.Sprintf("%T", VersionString("")), qt.Equals, fmt.Sprintf("%T", hugoInfo.Version()))
c.Assert(hugoInfo.CommitHash, qt.Equals, commitHash)
c.Assert(hugoInfo.BuildDate, qt.Equals, buildDate)

bi := getBuildInfo()
if bi != nil {
c.Assert(hugoInfo.CommitHash, qt.Equals, bi.Revision)
c.Assert(hugoInfo.BuildDate, qt.Equals, bi.RevisionTime)
}
c.Assert(hugoInfo.Environment, qt.Equals, "production")
c.Assert(string(hugoInfo.Generator()), qt.Contains, fmt.Sprintf("Hugo %s", hugoInfo.Version()))
c.Assert(hugoInfo.IsProduction(), qt.Equals, true)
Expand Down
13 changes: 9 additions & 4 deletions common/hugo/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,16 +131,21 @@ func BuildVersionString() string {
program := "hugo"

version := "v" + CurrentVersion.String()
if commitHash != "" {
version += "-" + strings.ToUpper(commitHash)

bi := getBuildInfo()
if bi == nil {
return version
}
if bi.Revision != "" {
version += "-" + bi.Revision
}
if IsExtended {
version += "+extended"
}

osArch := runtime.GOOS + "/" + runtime.GOARCH
osArch := bi.GoOS + "/" + bi.GoArch

date := buildDate
date := bi.RevisionTime
if date == "" {
date = "unknown"
}
Expand Down
10 changes: 5 additions & 5 deletions goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ builds:
-
binary: hugo
id: hugo
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.buildDate={{.Date}} -X github.com/gohugoio/hugo/common/hugo.commitHash={{ .ShortCommit }} -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
env:
- CGO_ENABLED=0
flags:
Expand All @@ -32,7 +32,7 @@ builds:
-
binary: hugo
id: hugo_unix
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.buildDate={{.Date}} -X github.com/gohugoio/hugo/common/hugo.commitHash={{ .ShortCommit }} -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
env:
- CGO_ENABLED=0
flags:
Expand All @@ -49,7 +49,7 @@ builds:
binary: hugo
id: hugo_extended_windows
ldflags:
- -s -w -X github.com/gohugoio/hugo/common/hugo.buildDate={{.Date}} -X github.com/gohugoio/hugo/common/hugo.commitHash={{ .ShortCommit }} -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
- -s -w -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
- "-extldflags '-static'"
env:
- CGO_ENABLED=1
Expand All @@ -66,7 +66,7 @@ builds:
- amd64
- binary: hugo
id: hugo_extended_darwin
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.buildDate={{.Date}} -X github.com/gohugoio/hugo/common/hugo.commitHash={{ .ShortCommit }} -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
env:
- CGO_ENABLED=1
- CC=o64-clang
Expand All @@ -83,7 +83,7 @@ builds:
- arm64
- binary: hugo
id: hugo_extended_linux
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.buildDate={{.Date}} -X github.com/gohugoio/hugo/common/hugo.commitHash={{ .ShortCommit }} -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.vendorInfo=gohugoio
env:
- CGO_ENABLED=1
flags:
Expand Down
4 changes: 2 additions & 2 deletions magefile.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ import (

const (
packageName = "github.com/gohugoio/hugo"
noGitLdflags = "-X $PACKAGE/common/hugo.buildDate=$BUILD_DATE"
noGitLdflags = "-X github.com/gohugoio/hugo/common/hugo.vendorInfo=mage"
)

var ldflags = "-X $PACKAGE/common/hugo.commitHash=$COMMIT_HASH -X $PACKAGE/common/hugo.buildDate=$BUILD_DATE"
var ldflags = noGitLdflags

// allow user to override go executable by running as GOEXE=xxx make ... on unix-like systems
var goexe = "go"
Expand Down

0 comments on commit a107e4e

Please sign in to comment.