crowdsec/pkg/cwversion/version.go

76 lines
2 KiB
Go

package cwversion
import (
"fmt"
"regexp"
"strings"
"github.com/crowdsecurity/go-cs-lib/maptools"
"github.com/crowdsecurity/go-cs-lib/version"
"github.com/crowdsecurity/crowdsec/pkg/apiclient/useragent"
"github.com/crowdsecurity/crowdsec/pkg/cwversion/component"
"github.com/crowdsecurity/crowdsec/pkg/cwversion/constraint"
)
var (
Codename string // = "SoumSoum"
Libre2 = "WebAssembly"
)
func FullString() string {
dsBuilt := map[string]struct{}{}
dsExcluded := map[string]struct{}{}
for ds, built := range component.Built {
if built {
dsBuilt[ds] = struct{}{}
continue
}
dsExcluded[ds] = struct{}{}
}
ret := fmt.Sprintf("version: %s\n", version.String())
ret += fmt.Sprintf("Codename: %s\n", Codename)
ret += fmt.Sprintf("BuildDate: %s\n", version.BuildDate)
ret += fmt.Sprintf("GoVersion: %s\n", version.GoVersion)
ret += fmt.Sprintf("Platform: %s\n", version.System)
ret += fmt.Sprintf("libre2: %s\n", Libre2)
ret += fmt.Sprintf("User-Agent: %s\n", useragent.Default())
ret += fmt.Sprintf("Constraint_parser: %s\n", constraint.Parser)
ret += fmt.Sprintf("Constraint_scenario: %s\n", constraint.Scenario)
ret += fmt.Sprintf("Constraint_api: %s\n", constraint.API)
ret += fmt.Sprintf("Constraint_acquis: %s\n", constraint.Acquis)
built := "(none)"
if len(dsBuilt) > 0 {
built = strings.Join(maptools.SortedKeys(dsBuilt), ", ")
}
ret += fmt.Sprintf("Built-in optional components: %s\n", built)
if len(dsExcluded) > 0 {
ret += fmt.Sprintf("Excluded components: %s\n", strings.Join(maptools.SortedKeys(dsExcluded), ", "))
}
return ret
}
// StripTags removes any tag (-rc, ~foo3, .r1, etc) from a version string
func StripTags(version string) string {
reVersion := regexp.MustCompile(`^v(\d+)\.(\d+)\.(\d+)`)
ret := reVersion.FindStringSubmatch(version)
if len(ret) == 0 {
return version
}
return ret[0]
}
// BaseVersion returns the version number used to match a hub branch.
func BaseVersion() string {
return StripTags(version.Version)
}