Skip to content

Commit

Permalink
cscli hub: handle freebsd pre-release version numbers (#3423)
Browse files Browse the repository at this point in the history
  • Loading branch information
mmetc authored Jan 23, 2025
1 parent 83cb3e9 commit 4935dc5
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 5 deletions.
2 changes: 1 addition & 1 deletion cmd/crowdsec-cli/require/branch.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
18 changes: 14 additions & 4 deletions pkg/cwversion/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package cwversion

import (
"fmt"
"regexp"
"strings"

"github.com/crowdsecurity/go-cs-lib/maptools"
Expand Down Expand Up @@ -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)
}
68 changes: 68 additions & 0 deletions pkg/cwversion/version_test.go
Original file line number Diff line number Diff line change
@@ -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)
})
}
}

0 comments on commit 4935dc5

Please sign in to comment.