diff --git a/application/config.go b/application/config.go index e368036..63cb67f 100644 --- a/application/config.go +++ b/application/config.go @@ -8,8 +8,6 @@ import ( "time" "github.com/spf13/cobra" - - "git.flexabyte.io/flexabyte/go-kit/semver" ) type Config struct { @@ -99,8 +97,7 @@ func (c Config) Validate() error { return errors.New("logger is required") } - var err error - if _, err = semver.Parse(c.Version.Full); err != nil { + if !c.Version.IsValid() { return fmt.Errorf("invalid version: %s", c.Version) } return nil diff --git a/application/version.go b/application/version.go index a223e65..679198b 100644 --- a/application/version.go +++ b/application/version.go @@ -3,6 +3,7 @@ package application import ( "encoding/json" "fmt" + "regexp" "github.com/Oudwins/zog" "github.com/spf13/cobra" @@ -11,19 +12,25 @@ import ( ) const ( - versionName = "version" + versionFlagName = "version" versionFlagShortCode = "V" - versionUsage = "Show version information" + versionFlagUsage = "Show version information" + versionFlagDefault = false + + // https://semver.org/ && https://regex101.com/r/Ly7O1x/3/ + validSemVer = `^(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)(?:-(?P(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` ) var ( - versionFlag = flagzog.NewBoolFlag(versionName, zog.Bool(), versionUsage) + versionFlag = flagzog.NewBoolFlag(versionFlagName, zog.Bool(), versionFlagUsage) version Version versionCmd = &cobra.Command{ - Use: versionName, - Short: versionUsage, + Use: versionFlagName, + Short: versionFlagUsage, RunE: versionRunFuncE, } + + regexSemver = regexp.MustCompile(validSemVer) ) type Version struct { @@ -39,8 +46,12 @@ type Version struct { PreRelease string } +func (v Version) IsValid() bool { + return regexSemver.MatchString(v.Full) +} + func addVersionFlag(cmd *cobra.Command) { - cmd.PersistentFlags().BoolVarP(&versionFlag.Value, versionFlag.Name(), versionFlagShortCode, false, versionFlag.Usage()) + cmd.PersistentFlags().BoolVarP(&versionFlag.Value, versionFlag.Name(), versionFlagShortCode, versionFlagDefault, versionFlag.Usage()) } func configureVersionFlag(cmd *cobra.Command, v Version) {