cscli hub: handle freebsd pre-release version numbers (#3423)

This commit is contained in:
mmetc 2025-01-23 09:29:29 +01:00 committed by GitHub
parent 83cb3e9ead
commit 4935dc536e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 83 additions and 5 deletions

View file

@ -69,7 +69,7 @@ func chooseBranch(ctx context.Context, cfg *csconfig.Config) string {
return "master"
}
csVersion := cwversion.VersionStrip()
csVersion := cwversion.BaseVersion()
if csVersion == "" {
log.Warning("Crowdsec version is not set, using hub branch 'master'")
return "master"

View file

@ -2,6 +2,7 @@ package cwversion
import (
"fmt"
"regexp"
"strings"
"github.com/crowdsecurity/go-cs-lib/maptools"
@ -57,10 +58,19 @@ func FullString() string {
return ret
}
// VersionStrip remove the tag from the version string, used to match with a hub branch
func VersionStrip() string {
ret := strings.Split(version.Version, "~")
ret = strings.Split(ret[0], "-")
// 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)
}

View file

@ -0,0 +1,68 @@
package cwversion
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestStripTags(t *testing.T) {
tests := []struct {
name string
input string
want string
}{
{
name: "no tag, valid version v1.2.3",
input: "v1.2.3",
want: "v1.2.3",
},
{
name: "tag appended with dash",
input: "v1.2.3-rc1",
want: "v1.2.3",
},
{
name: "tag appended with tilde",
input: "v1.2.3~foo3",
want: "v1.2.3",
},
{
name: "tag appended with dot",
input: "v1.2.3.r1",
want: "v1.2.3",
},
{
name: "tag appended directly",
input: "v1.2.3r1",
want: "v1.2.3",
},
{
name: "multiple digits in version",
input: "v10.20.30-rc2",
want: "v10.20.30",
},
{
name: "invalid version (no 'v' prefix)",
input: "1.2.3-tag",
want: "1.2.3-tag",
},
{
name: "random string",
input: "some-random-string",
want: "some-random-string",
},
{
name: "freebsd pre-release",
input: "v1.6.5.r1",
want: "v1.6.5",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := StripTags(tt.input)
require.Equal(t, tt.want, got)
})
}
}