main: --version includes git commit
Include the commit of the build (if available in the build environment), also include the version of `images` in the build; if available. Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
This commit is contained in:
parent
f52041ab67
commit
3021afb9f7
3 changed files with 71 additions and 5 deletions
2
Makefile
2
Makefile
|
|
@ -98,7 +98,7 @@ $(BUILDDIR)/%/:
|
||||||
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build: $(BUILDDIR)/bin/ ## build the binary from source
|
build: $(BUILDDIR)/bin/ ## build the binary from source
|
||||||
go build -ldflags="-X main.BuildVersion=${VERSION}" -o $<image-builder ./cmd/image-builder/
|
go build -ldflags="-X main.version=${VERSION}" -o $<image-builder ./cmd/image-builder/
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean: ## Remove all built binaries
|
clean: ## Remove all built binaries
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
osStdout io.Writer = os.Stdout
|
osStdout io.Writer = os.Stdout
|
||||||
osStderr io.Writer = os.Stderr
|
osStderr io.Writer = os.Stderr
|
||||||
BuildVersion = "DEVEL"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// basenameFor returns the basename for directory and filenames
|
// basenameFor returns the basename for directory and filenames
|
||||||
|
|
@ -423,11 +422,13 @@ image-type and blueprint.
|
||||||
Image-builder builds operating system images for a range of predefined
|
Image-builder builds operating system images for a range of predefined
|
||||||
operating systems like Fedora, CentOS and RHEL with easy customizations support.`,
|
operating systems like Fedora, CentOS and RHEL with easy customizations support.`,
|
||||||
SilenceErrors: true,
|
SilenceErrors: true,
|
||||||
Version: BuildVersion,
|
Version: prettyVersion(),
|
||||||
CompletionOptions: cobra.CompletionOptions{
|
CompletionOptions: cobra.CompletionOptions{
|
||||||
HiddenDefaultCmd: true,
|
HiddenDefaultCmd: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
rootCmd.SetVersionTemplate(prettyVersion())
|
||||||
|
|
||||||
rootCmd.PersistentFlags().String("data-dir", "", `Override the default data directory for e.g. custom repositories/*.json data`)
|
rootCmd.PersistentFlags().String("data-dir", "", `Override the default data directory for e.g. custom repositories/*.json data`)
|
||||||
rootCmd.PersistentFlags().StringArray("extra-repo", nil, `Add an extra repository during build (will *not* be gpg checked and not be part of the final image)`)
|
rootCmd.PersistentFlags().StringArray("extra-repo", nil, `Add an extra repository during build (will *not* be gpg checked and not be part of the final image)`)
|
||||||
rootCmd.PersistentFlags().StringArray("force-repo", nil, `Override the base repositories during build (these will not be part of the final image)`)
|
rootCmd.PersistentFlags().StringArray("force-repo", nil, `Override the base repositories during build (these will not be part of the final image)`)
|
||||||
|
|
|
||||||
65
cmd/image-builder/version.go
Normal file
65
cmd/image-builder/version.go
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"runtime/debug"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Usually set by whatever is building the binary with a `-x main.version=22`, for example
|
||||||
|
// in `make build`.
|
||||||
|
var version = "unknown"
|
||||||
|
|
||||||
|
type versionDescription struct {
|
||||||
|
ImageBuilder struct {
|
||||||
|
Version string `yaml:"version"`
|
||||||
|
Commit string `yaml:"commit"`
|
||||||
|
Dependencies struct {
|
||||||
|
Images string `yaml:"images"`
|
||||||
|
} `yaml:"dependencies"`
|
||||||
|
} `yaml:"image-builder"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func readVersionFromBinary() *versionDescription {
|
||||||
|
// We'll be getting these values from the build info if they're available, otherwise
|
||||||
|
// they will always be set to unknown. Note that `version` is set globally so it can
|
||||||
|
// be defined by whatever is building this project.
|
||||||
|
commit := "unknown"
|
||||||
|
images := "unknown"
|
||||||
|
|
||||||
|
if bi, ok := debug.ReadBuildInfo(); ok {
|
||||||
|
for _, bs := range bi.Settings {
|
||||||
|
switch bs.Key {
|
||||||
|
case "vcs.revision":
|
||||||
|
commit = bs.Value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, dep := range bi.Deps {
|
||||||
|
if dep.Path == "github.com/osbuild/images" {
|
||||||
|
images = dep.Version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vd := &versionDescription{}
|
||||||
|
|
||||||
|
vd.ImageBuilder.Version = version
|
||||||
|
vd.ImageBuilder.Commit = commit
|
||||||
|
|
||||||
|
vd.ImageBuilder.Dependencies.Images = images
|
||||||
|
|
||||||
|
return vd
|
||||||
|
}
|
||||||
|
|
||||||
|
func prettyVersion() string {
|
||||||
|
var b strings.Builder
|
||||||
|
|
||||||
|
enc := yaml.NewEncoder(&b)
|
||||||
|
enc.SetIndent(2)
|
||||||
|
|
||||||
|
enc.Encode(readVersionFromBinary())
|
||||||
|
|
||||||
|
return b.String()
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue