diff --git a/Makefile b/Makefile index c90a066235d..9a769eb9905 100644 --- a/Makefile +++ b/Makefile @@ -289,6 +289,8 @@ release: $(patsubst %,release/%, $(shell go env GOOS)-$(shell go env GOARCH)) # builds release packages for all target platforms release-all: $(patsubst %,release/%, $(RELEASE_PLATFORMS)) +release/%: GO_LDFLAGS=-X $(pkgmap.$(@F))/metadata.Version=$(PROJECT_VERSION) + release/windows-amd64: GOOS=windows release/windows-amd64: GO_TAGS+= nopkcs11 release/windows-amd64: $(patsubst %,release/windows-amd64/bin/%, $(RELEASE_PKGS)) release/windows-amd64/install diff --git a/common/tools/cryptogen/main.go b/common/tools/cryptogen/main.go index 89a8b8d4d37..88f86edb470 100644 --- a/common/tools/cryptogen/main.go +++ b/common/tools/cryptogen/main.go @@ -30,6 +30,7 @@ import ( "io/ioutil" "github.com/hyperledger/fabric/common/tools/cryptogen/ca" + "github.com/hyperledger/fabric/common/tools/cryptogen/metadata" "github.com/hyperledger/fabric/common/tools/cryptogen/msp" ) @@ -198,6 +199,8 @@ var ( configFile = gen.Flag("config", "The configuration template to use").File() showtemplate = app.Command("showtemplate", "Show the default configuration template") + + version = app.Command("version", "Show version information") ) func main() { @@ -212,6 +215,10 @@ func main() { case showtemplate.FullCommand(): fmt.Print(defaultConfig) os.Exit(0) + + // "version" command + case version.FullCommand(): + printVersion() } } @@ -537,3 +544,7 @@ func copyFile(src, dst string) error { } return cerr } + +func printVersion() { + fmt.Println(metadata.GetVersionInfo()) +} diff --git a/common/tools/cryptogen/metadata/metadata.go b/common/tools/cryptogen/metadata/metadata.go new file mode 100644 index 00000000000..67a91148bfb --- /dev/null +++ b/common/tools/cryptogen/metadata/metadata.go @@ -0,0 +1,32 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package metadata + +import ( + "fmt" + "runtime" +) + +// package-scoped variables + +// Package version +var Version string + +// package-scoped constants + +// Program name +const ProgramName = "cryptogen" + +func GetVersionInfo() string { + if Version == "" { + Version = "development build" + } + + return fmt.Sprintf("%s:\n Version: %s\n Go version: %s\n OS/Arch: %s", + ProgramName, Version, runtime.Version(), + fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)) +} diff --git a/common/tools/cryptogen/metadata/metadata_test.go b/common/tools/cryptogen/metadata/metadata_test.go new file mode 100644 index 00000000000..337a19a8d3d --- /dev/null +++ b/common/tools/cryptogen/metadata/metadata_test.go @@ -0,0 +1,26 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package metadata_test + +import ( + "fmt" + "runtime" + "testing" + + "github.com/hyperledger/fabric/common/tools/cryptogen/metadata" + "github.com/stretchr/testify/assert" +) + +func TestGetVersionInfo(t *testing.T) { + testVersion := "TestVersion" + metadata.Version = testVersion + + expected := fmt.Sprintf("%s:\n Version: %s\n Go version: %s\n OS/Arch: %s", + metadata.ProgramName, testVersion, runtime.Version(), + fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)) + assert.Equal(t, expected, metadata.GetVersionInfo()) +}