Enhance parseHelmVersion to support version strings without v prefix
- Modified parseHelmVersion function to handle version strings that don't have a "v" prefix - Added fallback parsing logic that tries direct semver.NewVersion when chartify.FindSemVerInfo fails - Added additional fallback that adds "v" prefix if needed - Added comprehensive test cases for version strings without "v" prefix - Updated test comparison logic to use semantic version equality instead of structural equality - All existing functionality remains unchanged and backward compatible Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
This commit is contained in:
parent
f7c92625d3
commit
30b6cbd2cd
|
|
@ -72,6 +72,23 @@ func parseHelmVersion(versionStr string) (*semver.Version, error) {
|
||||||
v, err := chartify.FindSemVerInfo(versionStr)
|
v, err := chartify.FindSemVerInfo(versionStr)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// If chartify.FindSemVerInfo fails, try parsing the version string directly
|
||||||
|
// This handles cases where the version string doesn't have a "v" prefix
|
||||||
|
// or is in a simple format that semver can parse directly
|
||||||
|
ver, directErr := semver.NewVersion(versionStr)
|
||||||
|
if directErr == nil {
|
||||||
|
return ver, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// If direct parsing failed and the version doesn't start with "v", try adding "v" prefix
|
||||||
|
if len(versionStr) > 0 && versionStr[0] != 'v' {
|
||||||
|
vWithPrefix := "v" + versionStr
|
||||||
|
ver, prefixErr := semver.NewVersion(vWithPrefix)
|
||||||
|
if prefixErr == nil {
|
||||||
|
return ver, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil, fmt.Errorf("error find helm srmver version '%s': %w", versionStr, err)
|
return nil, fmt.Errorf("error find helm srmver version '%s': %w", versionStr, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1128,6 +1128,24 @@ func TestParseHelmVersion(t *testing.T) {
|
||||||
want: semver.MustParse("v3.7.1+7.el8"),
|
want: semver.MustParse("v3.7.1+7.el8"),
|
||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "version without v prefix - simple",
|
||||||
|
version: "3.8.0",
|
||||||
|
want: semver.MustParse("v3.8.0"),
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "version without v prefix with build info",
|
||||||
|
version: "3.8.0+abcd",
|
||||||
|
want: semver.MustParse("v3.8.0+abcd"),
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "version without v prefix with prerelease",
|
||||||
|
version: "3.8.0-rc1",
|
||||||
|
want: semver.MustParse("v3.8.0-rc1"),
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "empty version",
|
name: "empty version",
|
||||||
version: "",
|
version: "",
|
||||||
|
|
@ -1149,7 +1167,14 @@ func TestParseHelmVersion(t *testing.T) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(got, tt.want) {
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
t.Errorf("parseHelmVersion() = %v, want %v", got, tt.want)
|
// For semantic versions, we need to check if they're semantically equal
|
||||||
|
// rather than structurally equal, as versions with and without "v" prefix
|
||||||
|
// may have different internal representations but be semantically equivalent
|
||||||
|
if got != nil && tt.want != nil && got.Equal(tt.want) {
|
||||||
|
// They are semantically equal, this is fine
|
||||||
|
} else {
|
||||||
|
t.Errorf("parseHelmVersion() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue