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 #362

Signed-off-by: mgoerens <[email protected]>
  • Loading branch information
mgoerens committed Jul 11, 2023
1 parent 2acb686 commit a5cea56
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 6 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
}
19 changes: 16 additions & 3 deletions tests/tests/functional/chart_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,14 +226,27 @@ def run_report_docker_image(verifier_image_name,verifier_image_tag,profile_type,
def run_version_tarball_image(tarball_name):
tar = tarfile.open(tarball_name, "r:gz")
tar.extractall(path="./test_verifier")
out = subprocess.run(["./test_verifier/chart-verifier","version"],capture_output=True)
return normalize_version(out.stdout.decode("utf-8"))
out = subprocess.run(["./test_verifier/chart-verifier","version --as-data"],capture_output=True)
return extract_version(out.stdout.decode("utf-8"))

def extract_version(version):
"""Extract normalized version from JSON data
Parameters:
version (string): the version and commit ID in JSON
Returns:
string: a normalized semver like 0.0.0.
"""
print(f'version input to normalize_version function is: {version}')
version_dict = json.loads(version)
return version_dict["version"]

def normalize_version(version):
"""Trim trailing newlines and leading v from semantic versions.
Parameters:
version (string): a semver string like v0.0.0\n
version (string): a semver string like v0.0.0
Returns:
string: a normalized semver like 0.0.0.
Expand Down

0 comments on commit a5cea56

Please sign in to comment.