diff --git a/Makefile b/Makefile index bda0c3a00..8369d9ac7 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ BUILDTAGS += $(EXTRA_BUILDTAGS) COMMIT := $(shell git describe --dirty --long --always) EXTRA_VERSION := -VERSION := $(shell cat ./VERSION)$(EXTRA_VERSION) -LDFLAGS_COMMON := -X main.gitCommit=$(COMMIT) -X main.version=$(VERSION) +LDFLAGS_COMMON := -X main.gitCommit=$(COMMIT) \ + $(if $(strip $(EXTRA_VERSION)),-X main.extraVersion=$(EXTRA_VERSION),) GOARCH := $(shell $(GO) env GOARCH) @@ -118,11 +118,11 @@ release: runcimage --rm -v $(CURDIR):/go/src/$(PROJECT) \ -e RELEASE_ARGS=$(RELEASE_ARGS) \ $(RUNC_IMAGE) make localrelease - script/release_sign.sh -S $(GPG_KEYID) -r release/$(VERSION) -v $(VERSION) + script/release_sign.sh -S $(GPG_KEYID) .PHONY: localrelease localrelease: verify-changelog - script/release_build.sh -r release/$(VERSION) -v $(VERSION) $(RELEASE_ARGS) + script/release_build.sh $(RELEASE_ARGS) .PHONY: dbuild dbuild: runcimage diff --git a/main.go b/main.go index b9b402c25..eb64ee9b3 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + _ "embed" "errors" "fmt" "io" @@ -19,14 +20,36 @@ import ( "github.com/urfave/cli" ) -// version must be set from the contents of VERSION file by go build's -// -X main.version= option in the Makefile. -var version = "unknown" +// version is set from the contents of VERSION file. +// +//go:embed VERSION +var version string + +// extraVersion is an optional suffix appended to runc version. +// It can be set via Makefile ("make EXTRA_VERSION=xxx") or by +// adding -X main.extraVersion=xxx option to the go build command. +var extraVersion = "" // gitCommit will be the hash that the binary was built from -// and will be populated by the Makefile +// and will be populated by the Makefile. var gitCommit = "" +func printVersion(c *cli.Context) { + w := c.App.Writer + + fmt.Fprintln(w, "runc version", c.App.Version) + if gitCommit != "" { + fmt.Fprintln(w, "commit:", gitCommit) + } + fmt.Fprintln(w, "spec:", specs.Version) + fmt.Fprintln(w, "go:", runtime.Version()) + + major, minor, micro := seccomp.Version() + if major+minor+micro > 0 { + fmt.Fprintf(w, "libseccomp: %d.%d.%d\n", major, minor, micro) + } +} + const ( specConfig = "config.json" usage = `Open Container Initiative runtime @@ -57,21 +80,10 @@ value for "bundle" is the current directory.` func main() { app := cli.NewApp() app.Name = "runc" + app.Version = strings.TrimSpace(version) + extraVersion app.Usage = usage - v := []string{version} - - if gitCommit != "" { - v = append(v, "commit: "+gitCommit) - } - v = append(v, "spec: "+specs.Version) - v = append(v, "go: "+runtime.Version()) - - major, minor, micro := seccomp.Version() - if major+minor+micro > 0 { - v = append(v, fmt.Sprintf("libseccomp: %d.%d.%d", major, minor, micro)) - } - app.Version = strings.Join(v, "\n") + cli.VersionPrinter = printVersion root := "/run/runc" xdgDirUsed := false