Skip to content

Commit

Permalink
Add commit ID to version output
Browse files Browse the repository at this point in the history
- use ldflags to injects the git commit ID at build time
- add the commit ID to the version output
- add the possibility to get the version and commit information in a
  JSON format

close redhat-certification#362

Signed-off-by: mgoerens <[email protected]>
  • Loading branch information
mgoerens committed Jul 11, 2023
1 parent 2acb686 commit 2f3418b
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
IMAGE_BUILDER?=podman
IMAGE_REPO?=quay.io/redhat-certification
COMMIT_ID=$(shell git rev-parse --short HEAD)
COMMIT_ID_LONG=$(shell git rev-parse HEAD)

default: bin

Expand Down Expand Up @@ -33,15 +34,19 @@ fmt: install.gofumpt

.PHONY: bin
bin:
CGO_ENABLED=0 go build -o ./out/chart-verifier main.go
CGO_ENABLED=0 go build \
-ldflags "-X 'github.com/redhat-certification/chart-verifier/cmd.CommitIDLong=$(COMMIT_ID_LONG)'" \
-o ./out/chart-verifier main.go

.PHONY: lint
lint: install.golangci-lint
$(GOLANGCI_LINT) run

.PHONY: bin_win
bin_win:
env GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -o .\out\chart-verifier.exe main.go
env GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build \
-ldflags "-X 'github.com/redhat-certification/chart-verifier/cmd.CommitIDLong=$(COMMIT_ID_LONG)'" \
-o .\out\chart-verifier.exe main.go

.PHONY: test
test:
Expand Down
30 changes: 29 additions & 1 deletion cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package cmd

import (
_ "embed"
"encoding/json"
"fmt"
"io"
"os"
Expand All @@ -11,10 +12,27 @@ import (
apiversion "github.com/redhat-certification/chart-verifier/pkg/chartverifier/version"
)

// Print version and commit ID as json blob
var asData bool

func init() {
rootCmd.AddCommand(NewVersionCmd())
}

// CommitIDLong contains the commit ID the binary was build on. It is populated at build time by ldflags.
// If you're running from a local debugger it will show an empty commit ID.
var CommitIDLong string = "unknown"

type VersionContext struct {
Version string `json:"version"`
Commit string `json:"commit"`
}

var Version = VersionContext{
Version: apiversion.GetVersion(),
Commit: CommitIDLong,
}

func NewVersionCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "version",
Expand All @@ -24,10 +42,20 @@ func NewVersionCmd() *cobra.Command {
return runVersion(os.Stdout)
},
}
cmd.Flags().BoolVar(&asData, "as-data", false, "output the version and commit ID information in JSON format")
return cmd
}

func runVersion(out io.Writer) error {
fmt.Fprintf(out, "v%s\n", apiversion.GetVersion())
if asData {
marshalledVersion, err := json.Marshal(Version)
if err != nil {
return err
}
fmt.Fprint(out, string(marshalledVersion))
return nil
}

fmt.Fprintf(out, "chart-verifier v%s <commit: %s>\n", apiversion.GetVersion(), CommitIDLong)
return nil
}

0 comments on commit 2f3418b

Please sign in to comment.