Skip to content

Commit

Permalink
Merge pull request #164 from nicholasSUSE/auto-bump-improvement-v2
Browse files Browse the repository at this point in the history
Auto bump improvement
  • Loading branch information
nicholasSUSE authored Feb 3, 2025
2 parents dc0b5de + 7cf7ece commit ba19e21
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 70 deletions.
20 changes: 2 additions & 18 deletions pkg/auto/release.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,9 +135,8 @@ func (r *Release) UpdateReleaseYaml() error {
return err
}

// Append new version and remove duplicates if any
releaseVersions[r.Chart] = append(releaseVersions[r.Chart], r.ChartVersion)
releaseVersions[r.Chart] = removeDuplicates(releaseVersions[r.Chart])
// Overwrite with the target version Bump only
releaseVersions[r.Chart] = []string{r.ChartVersion}

// Since we opened and read the file before we can truncate it.
outputFile, err := os.Create(r.ReleaseYamlPath)
Expand All @@ -154,18 +153,3 @@ func (r *Release) UpdateReleaseYaml() error {

return nil
}

// removeDuplicates takes a slice of strings and returns a new slice with duplicates removed.
func removeDuplicates(slice []string) []string {
seen := make(map[string]struct{}) // map to keep track of seen strings
var result []string // slice to hold the results

for _, val := range slice {
if _, ok := seen[val]; !ok {
seen[val] = struct{}{} // mark string as seen
result = append(result, val) // append to result if not seen before
}
}

return result
}
110 changes: 58 additions & 52 deletions pkg/auto/release_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package auto

import (
"log"
"os"
"testing"

"gopkg.in/yaml.v3"
)

func Test_UpdateReleaseYaml(t *testing.T) {
Expand Down Expand Up @@ -44,7 +47,7 @@ func Test_UpdateReleaseYaml(t *testing.T) {
},
ex: expected{
ReleaseVersions: map[string][]string{
"chart1": {"1.0.0", "2.0.0"},
"chart1": {"2.0.0"},
},
},
},
Expand All @@ -59,7 +62,7 @@ func Test_UpdateReleaseYaml(t *testing.T) {
},
ex: expected{
ReleaseVersions: map[string][]string{
"chart1": {"1.0.0", "2.0.0", "3.0.0"},
"chart1": {"3.0.0"},
},
},
},
Expand Down Expand Up @@ -98,22 +101,65 @@ func Test_UpdateReleaseYaml(t *testing.T) {
},
},
},
// Test for RC versions
{
name: "Test #6",
i: input{
ReleaseVersions: map[string][]string{
"chart1": {"1.0.0", "2.0.0-rc.1", "2.0.0"},
},
ChartVersion: "2.0.0",
Chart: "chart1",
},
ex: expected{
ReleaseVersions: map[string][]string{
"chart1": {"2.0.0"},
},
},
},
{
name: "Test #7",
i: input{
ReleaseVersions: map[string][]string{
"chart1": {"1.0.0", "2.0.0", "2.0.1"},
},
ChartVersion: "2.0.1-rc.1",
Chart: "chart1",
},
ex: expected{
ReleaseVersions: map[string][]string{
"chart1": {"2.0.1-rc.1"},
},
},
},
}

tempDir, err := os.MkdirTemp("", "unit-test-tmp")
if err != nil {
t.Fatalf("failed to create temp dir: %v", err)
}
defer os.RemoveAll(tempDir)
tempReleaseYamlFunc := func(releaseVersions map[string][]string) string {
tempDir, err := os.MkdirTemp("", "unit-test-tmp")
if err != nil {
t.Fatalf("failed to create temp dir: %v", err)
}
// Create a release.yaml file
output, err := os.Create(tempDir + "/release.yaml")

// Create a release.yaml file
if _, err := os.Create(tempDir + "/release.yaml"); err != nil {
t.Fatalf("failed to create release.yaml file: %v", err)
if err != nil {
t.Fatalf("failed to create release.yaml file: %v", err)
}

encoder := yaml.NewEncoder(output)
encoder.SetIndent(2)
if err := encoder.Encode(releaseVersions); err != nil {
log.Fatalf("failed to encode releaseVersions: %v", err)
}

return tempDir
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {

tempDir := tempReleaseYamlFunc(tt.i.ReleaseVersions)

r := &Release{
ChartVersion: tt.i.ChartVersion,
Chart: tt.i.Chart,
Expand Down Expand Up @@ -143,6 +189,8 @@ func Test_UpdateReleaseYaml(t *testing.T) {
}
}
}
// reset before next test
os.RemoveAll(tempDir)
})
}

Expand Down Expand Up @@ -187,45 +235,3 @@ func Test_mountAssetVersionPath(t *testing.T) {
})
}
}

func Test_removeDuplicates(t *testing.T) {
type input struct {
versions []string
}
inputs := []input{
{[]string{"1.0.0", "1.0.0", "1.0.0"}},
{[]string{"1.0.0", "1.0.0", "2.0.0", "2.0.0", "3.0.0"}},
}
type output struct {
uniqueVersions []string
}
outputs := []output{
{[]string{"1.0.0"}},
{[]string{"1.0.0", "2.0.0", "3.0.0"}},
}

type test struct {
name string
input input
output output
}

tests := []test{
{"#1", inputs[0], outputs[0]},
{"#2", inputs[1], outputs[1]},
}

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
uniqueVersions := removeDuplicates(test.input.versions)
if len(uniqueVersions) != len(test.output.uniqueVersions) {
t.Errorf("expected %v, got %v", test.output.uniqueVersions, uniqueVersions)
}
for i := range uniqueVersions {
if uniqueVersions[i] != test.output.uniqueVersions[i] {
t.Errorf("expected %v, got %v", test.output.uniqueVersions, uniqueVersions)
}
}
})
}
}

0 comments on commit ba19e21

Please sign in to comment.