Skip to content

Commit

Permalink
Merge pull request #159 from nicholasSUSE/bug-fixes-1.3.4
Browse files Browse the repository at this point in the history
Bug fixes 1.3.4
  • Loading branch information
nicholasSUSE authored Jan 16, 2025
2 parents 9e42f7e + ba02e12 commit f40823c
Show file tree
Hide file tree
Showing 3 changed files with 189 additions and 28 deletions.
12 changes: 9 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ const (
defaultGHTokenEnvironmentVariable = "GH_TOKEN"
// defaultPRNumberEnvironmentVariable is the default environment variable that indicates the PR number
defaultPRNumberEnvironmentVariable = "PR_NUMBER"
// defaultSkipEnvironmentVariable is the default environment variable that indicates whether to skip execution
defaultSkipEnvironmentVariable = "SKIP"
)

var (
Expand Down Expand Up @@ -85,6 +87,8 @@ var (
PullRequest = ""
// GithubToken represents the Github Auth token
GithubToken string
// Skip indicates whether to skip execution
Skip bool
)

func main() {
Expand Down Expand Up @@ -230,8 +234,10 @@ func main() {
Destination: &PullRequest,
}
skipFlag := cli.BoolFlag{
Name: "skip",
Usage: "Skip the execution and return success",
Name: "skip",
Usage: "Skip the execution and return success",
EnvVar: defaultSkipEnvironmentVariable,
Destination: &Skip,
}

// Commands
Expand Down Expand Up @@ -804,7 +810,7 @@ func release(c *cli.Context) {
}

func validateRelease(c *cli.Context) {
if c.Bool("skip") {
if Skip {
fmt.Println("skipping execution...")
return
}
Expand Down
43 changes: 39 additions & 4 deletions pkg/auto/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ func (v *validation) validateReleaseYaml(releaseOpts options.ReleaseOptions) err
if len(releasedVersions) <= 1 {
continue // net-new chart
}
latestReleasedVersion := releasedVersions[1].Version
if err := v.checkMinorPatchVersion(version, latestReleasedVersion); err != nil {

if err := v.checkMinorPatchVersion(version, releasedVersions); err != nil {
return err
}
}
Expand All @@ -124,7 +124,14 @@ func (v *validation) validateReleaseYaml(releaseOpts options.ReleaseOptions) err
}

// checkMinorPatchVersion will check if the chart version is exactly 1 more patch/minor version than the previous chart version or if the chart is being released. If the chart is being forward-ported, this validation is skipped.
func (v *validation) checkMinorPatchVersion(version string, latestReleasedVersion string) error {
func (v *validation) checkMinorPatchVersion(version string, releasedVersions []lifecycle.Asset) error {
var latestReleasedVersion string
if len(releasedVersions) > 1 {
latestReleasedVersion = releasedVersions[len(releasedVersions)-1].Version
} else {
latestReleasedVersion = releasedVersions[0].Version
}

// check if the chart version is being released or forward-ported
release, err := v.dep.VR.CheckChartVersionToRelease(version)
if err != nil {
Expand All @@ -140,18 +147,46 @@ func (v *validation) checkMinorPatchVersion(version string, latestReleasedVersio
if err != nil {
return err
}

newVer, err := semver.NewVersion(version)
if err != nil {
return err
}

if newVer.Minor() < latestVer.Minor() {
fmt.Println()
// get the latest version that will be the 1 minor version below the new version
// var maxPatch int64 = 0
for _, releasedVersion := range releasedVersions {
releasedSemver, err := semver.NewVersion(releasedVersion.Version)
if err != nil {
continue
}
if newVer.Minor() > releasedSemver.Minor() {
continue
}
if releasedSemver.Patch() == newVer.Patch() &&
releasedSemver.Minor() == newVer.Minor() &&
releasedSemver.Major() == newVer.Major() {
continue
}
if newVer.Minor() == releasedSemver.Minor() {
if newVer.Patch() == releasedSemver.Patch()+1 {
latestVer = releasedSemver
break
}
}

}
}

// calculate the version bumps
minorDiff := newVer.Minor() - latestVer.Minor()
patchDiff := newVer.Patch() - latestVer.Patch()

// the version bump must be exactly 1 more patch or minor version than the previous chart version
if minorDiff > 1 || patchDiff > 1 || minorDiff > 0 && patchDiff > 0 {
return fmt.Errorf("%w; version: %s; latest version: %s", errMinorPatchVersion, version, latestReleasedVersion)
return fmt.Errorf("%w: version: %s", errMinorPatchVersion, version)
}

return nil
Expand Down
162 changes: 141 additions & 21 deletions pkg/auto/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -326,9 +326,9 @@ func Test_checkMinorPatchVersion(t *testing.T) {
}

type input struct {
validation validation
version string
latestReleasedVersion string
validation validation
version string
releasedVersions []lifecycle.Asset
}
type expected struct {
err error
Expand All @@ -341,35 +341,155 @@ func Test_checkMinorPatchVersion(t *testing.T) {

tests := []test{
{
name: "Test #1 [patch update] : Expected NIL",
name: "Test #1.0 [patch update] : Expected NIL",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.0.1",
latestReleasedVersion: "104.0.0",
version: "104.0.1",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}},
},
ex: expected{
err: nil,
},
},
{
name: "Test #2 [minor update] : Expected NIL",
name: "Test #1.1 [minor update] : Expected NIL",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.1.0",
latestReleasedVersion: "104.0.0",
version: "104.1.0",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}},
},
ex: expected{
err: nil,
},
},
{
name: "Test #1.2 [minor update && > 1 released chart] : Expected NIL",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.2.0",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}},
},
ex: expected{
err: nil,
},
},
{
name: "Test #1.3 [patch update && > 1 released chart] : Expected NIL",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.2.1",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}, {Version: "104.2.0"}},
},
ex: expected{
err: nil,
},
},
{
name: "Test #1.4 [patch update (old chart) && > 1 released chart] : Expected NIL",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.1.1",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}, {Version: "104.2.0"}},
},
ex: expected{
err: nil,
},
},
{
name: "Test #1.5 [patch update (old chart) && > 1 released chart] : Expected NIL",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.0.1",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}, {Version: "104.2.0"}},
},
ex: expected{
err: nil,
},
},
{
name: "Test #2.0 [patch update (old chart) && > 1 released chart] : Expected ERR",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.0.2",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}, {Version: "104.2.0"}},
},
ex: expected{
err: fmt.Errorf("%w: version: %s", errMinorPatchVersion, "104.0.2"),
},
},
{
name: "Test #2.1 [patch update (old chart) && > 1 released chart] : Expected ERR",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.1.2",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}, {Version: "104.2.0"}},
},
ex: expected{
err: fmt.Errorf("%w: version: %s", errMinorPatchVersion, "104.1.2"),
},
},
{
name: "Test #2.2 [patch update (new chart) && > 1 released chart] : Expected ERR",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.2.2",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}, {Version: "104.2.0"}},
},
ex: expected{
err: fmt.Errorf("%w: version: %s", errMinorPatchVersion, "104.2.2"),
},
},
{
name: "Test #2.3 [minor/patch update (new chart) && > 1 released chart] : Expected ERR",
i: input{
validation: validation{
dep: &lifecycle.Dependencies{
VR: vr,
},
},
version: "104.3.1",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}, {Version: "104.1.0"}, {Version: "104.2.0"}},
},
ex: expected{
err: fmt.Errorf("%w: version: %s", errMinorPatchVersion, "104.3.1"),
},
},
{
name: "Test #3 [minor/patch update] : Expected Error",
i: input{
Expand All @@ -378,11 +498,11 @@ func Test_checkMinorPatchVersion(t *testing.T) {
VR: vr,
},
},
version: "104.1.1",
latestReleasedVersion: "104.0.0",
version: "104.1.1",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}},
},
ex: expected{
err: fmt.Errorf("%w; version: %s; latest version: %s", errMinorPatchVersion, "104.1.1", "104.0.0"),
err: fmt.Errorf("%w: version: %s", errMinorPatchVersion, "104.1.1"),
},
},
{
Expand All @@ -393,11 +513,11 @@ func Test_checkMinorPatchVersion(t *testing.T) {
VR: vr,
},
},
version: "104.0.2",
latestReleasedVersion: "104.0.0",
version: "104.0.2",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}},
},
ex: expected{
err: fmt.Errorf("%w; version: %s; latest version: %s", errMinorPatchVersion, "104.0.2", "104.0.0"),
err: fmt.Errorf("%w: version: %s", errMinorPatchVersion, "104.0.2"),
},
},
{
Expand All @@ -408,11 +528,11 @@ func Test_checkMinorPatchVersion(t *testing.T) {
VR: vr,
},
},
version: "104.3.0",
latestReleasedVersion: "104.0.0",
version: "104.3.0",
releasedVersions: []lifecycle.Asset{{Version: "104.0.0"}},
},
ex: expected{
err: fmt.Errorf("%w; version: %s; latest version: %s", errMinorPatchVersion, "104.3.0", "104.0.0"),
err: fmt.Errorf("%w: version: %s", errMinorPatchVersion, "104.3.0"),
},
},
{
Expand All @@ -423,8 +543,8 @@ func Test_checkMinorPatchVersion(t *testing.T) {
VR: vr,
},
},
version: "103.1.5",
latestReleasedVersion: "104.1.2",
version: "103.1.5",
releasedVersions: []lifecycle.Asset{{Version: "104.1.2"}},
},
ex: expected{
err: nil,
Expand All @@ -434,7 +554,7 @@ func Test_checkMinorPatchVersion(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.i.validation.checkMinorPatchVersion(tt.i.version, tt.i.latestReleasedVersion)
err := tt.i.validation.checkMinorPatchVersion(tt.i.version, tt.i.releasedVersions)
if tt.ex.err == nil {
assert.Nil(t, err, "expected nil error")
} else {
Expand Down

0 comments on commit f40823c

Please sign in to comment.