From 8dc78d8e54fe579575368dcc8cff2ef67f1a4730 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:33:46 +0000 Subject: [PATCH 1/4] Initial plan From 2591706eaaded7fcce73817218ec5e47e66ed1cb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:42:26 +0000 Subject: [PATCH 2/4] Fix bugs and security concerns: IsGreater logic, error handling, panic removal Co-authored-by: tomodian <158877+tomodian@users.noreply.github.com> --- cmd/task/next.go | 14 ++++++++------ cmd/task/show.go | 7 ++++++- cmd/task/targets.go | 7 ++++++- cmd/task/to.go | 10 +++++++--- cmd/task/unreleased.go | 7 ++++++- files/glob.go | 6 +++--- files/glob_test.go | 13 +++++++------ files/writer.go | 2 +- files/writer_test.go | 2 +- main.go | 4 +++- main_test.go | 8 ++++++-- parser/semver.go | 8 ++++---- parser/semver_test.go | 32 ++++++++++++++++---------------- 13 files changed, 74 insertions(+), 46 deletions(-) diff --git a/cmd/task/next.go b/cmd/task/next.go index b321095..4175a8e 100644 --- a/cmd/task/next.go +++ b/cmd/task/next.go @@ -2,7 +2,6 @@ package task import ( "fmt" - "os" "github.com/tomodian/release/cmd/commandkey" "github.com/tomodian/release/cmd/flagkey" @@ -29,7 +28,12 @@ func Next(workdir string) *cli.Command { latests := map[string]parser.SemanticVersion{} // Construct a map of versions. - for _, p := range files.Glob(c.String(flagkey.Directory)) { + paths, err := files.Glob(c.String(flagkey.Directory)) + if err != nil { + return err + } + + for _, p := range paths { doc, err := files.Read(p) if err != nil { @@ -49,8 +53,7 @@ func Next(workdir string) *cli.Command { v, err := parser.NewSemanticVersion(lat) if err != nil { - fmt.Println(err) - os.Exit(1) + return err } latests[lat] = *v @@ -84,8 +87,7 @@ func Next(workdir string) *cli.Command { vtype, err := parser.AliasedVersion(tflag) if err != nil { - fmt.Println(err) - os.Exit(1) + return err } var out = "" diff --git a/cmd/task/show.go b/cmd/task/show.go index a6cf4f8..0d75377 100644 --- a/cmd/task/show.go +++ b/cmd/task/show.go @@ -25,7 +25,12 @@ func Show(workdir string) *cli.Command { }, Action: func(c *cli.Context) error { - for _, p := range files.Glob(c.String(flagkey.Directory)) { + paths, err := files.Glob(c.String(flagkey.Directory)) + if err != nil { + return err + } + + for _, p := range paths { doc, err := files.Read(p) if err != nil { diff --git a/cmd/task/targets.go b/cmd/task/targets.go index eb87c7d..1ffccff 100644 --- a/cmd/task/targets.go +++ b/cmd/task/targets.go @@ -25,7 +25,12 @@ func Targets(workdir string) *cli.Command { Action: func(c *cli.Context) error { fmt.Println(utils.Pretty(header.Target)) - for _, p := range files.Glob(c.String(flagkey.Directory)) { + paths, err := files.Glob(c.String(flagkey.Directory)) + if err != nil { + return err + } + + for _, p := range paths { fmt.Println(files.Rel(p)) } diff --git a/cmd/task/to.go b/cmd/task/to.go index c15bf4f..1bd1ff5 100644 --- a/cmd/task/to.go +++ b/cmd/task/to.go @@ -32,7 +32,11 @@ func To(workdir string) *cli.Command { return err } - targets := files.Glob(c.String(flagkey.Directory)) + targets, err := files.Glob(c.String(flagkey.Directory)) + + if err != nil { + return err + } if len(targets) == 0 { fmt.Println("(nothing found)") @@ -41,7 +45,7 @@ func To(workdir string) *cli.Command { fmt.Println(chalk.Magenta.Color(header.Target)) - for _, p := range files.Glob(c.String(flagkey.Directory)) { + for _, p := range targets { fmt.Println(files.Rel(p)) } @@ -66,7 +70,7 @@ func To(workdir string) *cli.Command { fmt.Println("") - for _, p := range files.Glob(c.String(flagkey.Directory)) { + for _, p := range targets { fmt.Printf("%s --> ", files.Rel(p)) doc, err := files.Read(p) diff --git a/cmd/task/unreleased.go b/cmd/task/unreleased.go index e692dcb..12caee4 100644 --- a/cmd/task/unreleased.go +++ b/cmd/task/unreleased.go @@ -24,7 +24,12 @@ func Unreleased(workdir string) *cli.Command { }, Action: func(c *cli.Context) error { - for _, p := range files.Glob(c.String(flagkey.Directory)) { + paths, err := files.Glob(c.String(flagkey.Directory)) + if err != nil { + return err + } + + for _, p := range paths { doc, err := files.Read(p) if err != nil { diff --git a/files/glob.go b/files/glob.go index 4a0f004..0b5379b 100644 --- a/files/glob.go +++ b/files/glob.go @@ -66,13 +66,13 @@ func ignore(path string) bool { // Glob seeks for all changelog files from the given directory, and returns a slice of absolute file path. // This function excludes common auto-generated directories, such as node_modules and coverage reports. -func Glob(d string) []string { +func Glob(d string) ([]string, error) { p := fmt.Sprintf("%s/**/CHANGELOG.md", d) paths, err := doublestar.Glob(p) if err != nil { - panic("malformed path pattern") + return nil, fmt.Errorf("malformed path pattern: %w", err) } slices.Sort(paths) @@ -89,7 +89,7 @@ func Glob(d string) []string { outs = append(outs, p) } - return outs + return outs, nil } // Rel takes an arbitary path, and returns relative path from the current working directory. diff --git a/files/glob_test.go b/files/glob_test.go index 3be5b48..736a2b6 100644 --- a/files/glob_test.go +++ b/files/glob_test.go @@ -23,7 +23,7 @@ func TestGlob(t *testing.T) { } { - // Fail cases, panic. + // Fail cases, should return error. pats := []pattern{ { path: "[-]", @@ -31,9 +31,8 @@ func TestGlob(t *testing.T) { } for _, p := range pats { - assert.Panics(t, func() { - files.Glob(p.path) - }) + _, err := files.Glob(p.path) + assert.NotNil(t, err) } } @@ -41,7 +40,9 @@ func TestGlob(t *testing.T) { // Fail case, ensure vendor directories are not included. path := fmt.Sprintf("%s/test/vendors", pwd) - assert.Empty(t, files.Glob(path)) + got, err := files.Glob(path) + require.Nil(t, err) + assert.Empty(t, got) } { @@ -70,7 +71,7 @@ func TestGlob(t *testing.T) { } for _, p := range pats { - got := files.Glob(p.path) + got, err := files.Glob(p.path) require.Nilf(t, err, "%s", p) assert.Equalf(t, p.count, len(got), "%s", p.path) diff --git a/files/writer.go b/files/writer.go index 6be5abf..2ba5468 100644 --- a/files/writer.go +++ b/files/writer.go @@ -15,7 +15,7 @@ func Update(path, doc string) error { info, err := os.Stat(path) if err != nil { - return nil + return err } if err := os.WriteFile(path, []byte(doc), info.Mode()); err != nil { diff --git a/files/writer_test.go b/files/writer_test.go index 53a6b7f..4609bd7 100644 --- a/files/writer_test.go +++ b/files/writer_test.go @@ -45,7 +45,7 @@ func TestUpdate(t *testing.T) { // Fail case, non-existent path. err := files.Update("non-existent", "foo") - require.Nil(t, err) + require.NotNil(t, err) } { diff --git a/main.go b/main.go index 3d628a7..b506a28 100644 --- a/main.go +++ b/main.go @@ -7,5 +7,7 @@ import ( ) func main() { - _ = cmd.Run(os.Args) + if err := cmd.Run(os.Args); err != nil { + os.Exit(1) + } } diff --git a/main_test.go b/main_test.go index 2fdece4..670197c 100644 --- a/main_test.go +++ b/main_test.go @@ -1,11 +1,15 @@ package main import ( + "os" "testing" "github.com/stretchr/testify/assert" + "github.com/tomodian/release/cmd" ) -func TestMain(t *testing.T) { - assert.NotPanics(t, main) +func TestRun(t *testing.T) { + assert.NotPanics(t, func() { + _ = cmd.Run(os.Args[0:1]) + }) } diff --git a/parser/semver.go b/parser/semver.go index 8b2f475..d1beba7 100644 --- a/parser/semver.go +++ b/parser/semver.go @@ -62,13 +62,13 @@ func (c SemanticVersion) IsGreater(in *SemanticVersion) bool { } switch { - case c.Major < in.Major: + case c.Major > in.Major: return true - case c.Major == in.Major && c.Minor < in.Minor: + case c.Major == in.Major && c.Minor > in.Minor: return true - case c.Major == in.Major && c.Minor == in.Minor && c.Patch < in.Patch: + case c.Major == in.Major && c.Minor == in.Minor && c.Patch > in.Patch: return true } @@ -103,7 +103,7 @@ func (c SemanticVersion) Increment(in VersionType) SemanticVersion { func CastVersion(name, val string) (int, error) { const failcode = -1 - if name == "major" { + if name == "major" && len(val) > 0 { if val[0] == 'v' { val = val[1:] } diff --git a/parser/semver_test.go b/parser/semver_test.go index 3a8585d..0b4c0dd 100644 --- a/parser/semver_test.go +++ b/parser/semver_test.go @@ -142,20 +142,20 @@ func TestSemanticVersionIsGreater(t *testing.T) { // Truthy cases. pats := []pattern{ { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, + a: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, + b: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, - b: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, + a: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, }, } @@ -172,20 +172,20 @@ func TestSemanticVersionIsGreater(t *testing.T) { b: nil, }, { - a: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, - b: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, + b: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, }, } From 511934dba649bbbffa67cca8b504176adbf77a70 Mon Sep 17 00:00:00 2001 From: Hayato Tomoda Date: Wed, 11 Mar 2026 00:49:53 +0900 Subject: [PATCH 3/4] glob.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- files/glob.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/files/glob.go b/files/glob.go index 0b5379b..ab6e80c 100644 --- a/files/glob.go +++ b/files/glob.go @@ -64,7 +64,8 @@ func ignore(path string) bool { return false } -// Glob seeks for all changelog files from the given directory, and returns a slice of absolute file path. +// Glob seeks for all changelog files from the given directory, and returns a slice of absolute file paths +// along with an error. Malformed path patterns are reported via the error instead of causing a panic. // This function excludes common auto-generated directories, such as node_modules and coverage reports. func Glob(d string) ([]string, error) { p := fmt.Sprintf("%s/**/CHANGELOG.md", d) From 82d1b9589f9d527b66e17a53bd10e836eb4da245 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 00:59:31 +0000 Subject: [PATCH 4/4] Revert all test files to original, keep only CastVersion bounds check fix Co-authored-by: tomodian <158877+tomodian@users.noreply.github.com> --- cmd/task/next.go | 14 ++++++-------- cmd/task/show.go | 7 +------ cmd/task/targets.go | 7 +------ cmd/task/to.go | 10 +++------- cmd/task/unreleased.go | 7 +------ files/glob.go | 9 ++++----- files/glob_test.go | 13 ++++++------- files/writer.go | 2 +- files/writer_test.go | 2 +- main.go | 4 +--- main_test.go | 8 ++------ parser/semver.go | 6 +++--- parser/semver_test.go | 32 ++++++++++++++++---------------- 13 files changed, 46 insertions(+), 75 deletions(-) diff --git a/cmd/task/next.go b/cmd/task/next.go index 4175a8e..b321095 100644 --- a/cmd/task/next.go +++ b/cmd/task/next.go @@ -2,6 +2,7 @@ package task import ( "fmt" + "os" "github.com/tomodian/release/cmd/commandkey" "github.com/tomodian/release/cmd/flagkey" @@ -28,12 +29,7 @@ func Next(workdir string) *cli.Command { latests := map[string]parser.SemanticVersion{} // Construct a map of versions. - paths, err := files.Glob(c.String(flagkey.Directory)) - if err != nil { - return err - } - - for _, p := range paths { + for _, p := range files.Glob(c.String(flagkey.Directory)) { doc, err := files.Read(p) if err != nil { @@ -53,7 +49,8 @@ func Next(workdir string) *cli.Command { v, err := parser.NewSemanticVersion(lat) if err != nil { - return err + fmt.Println(err) + os.Exit(1) } latests[lat] = *v @@ -87,7 +84,8 @@ func Next(workdir string) *cli.Command { vtype, err := parser.AliasedVersion(tflag) if err != nil { - return err + fmt.Println(err) + os.Exit(1) } var out = "" diff --git a/cmd/task/show.go b/cmd/task/show.go index 0d75377..a6cf4f8 100644 --- a/cmd/task/show.go +++ b/cmd/task/show.go @@ -25,12 +25,7 @@ func Show(workdir string) *cli.Command { }, Action: func(c *cli.Context) error { - paths, err := files.Glob(c.String(flagkey.Directory)) - if err != nil { - return err - } - - for _, p := range paths { + for _, p := range files.Glob(c.String(flagkey.Directory)) { doc, err := files.Read(p) if err != nil { diff --git a/cmd/task/targets.go b/cmd/task/targets.go index 1ffccff..eb87c7d 100644 --- a/cmd/task/targets.go +++ b/cmd/task/targets.go @@ -25,12 +25,7 @@ func Targets(workdir string) *cli.Command { Action: func(c *cli.Context) error { fmt.Println(utils.Pretty(header.Target)) - paths, err := files.Glob(c.String(flagkey.Directory)) - if err != nil { - return err - } - - for _, p := range paths { + for _, p := range files.Glob(c.String(flagkey.Directory)) { fmt.Println(files.Rel(p)) } diff --git a/cmd/task/to.go b/cmd/task/to.go index 1bd1ff5..c15bf4f 100644 --- a/cmd/task/to.go +++ b/cmd/task/to.go @@ -32,11 +32,7 @@ func To(workdir string) *cli.Command { return err } - targets, err := files.Glob(c.String(flagkey.Directory)) - - if err != nil { - return err - } + targets := files.Glob(c.String(flagkey.Directory)) if len(targets) == 0 { fmt.Println("(nothing found)") @@ -45,7 +41,7 @@ func To(workdir string) *cli.Command { fmt.Println(chalk.Magenta.Color(header.Target)) - for _, p := range targets { + for _, p := range files.Glob(c.String(flagkey.Directory)) { fmt.Println(files.Rel(p)) } @@ -70,7 +66,7 @@ func To(workdir string) *cli.Command { fmt.Println("") - for _, p := range targets { + for _, p := range files.Glob(c.String(flagkey.Directory)) { fmt.Printf("%s --> ", files.Rel(p)) doc, err := files.Read(p) diff --git a/cmd/task/unreleased.go b/cmd/task/unreleased.go index 12caee4..e692dcb 100644 --- a/cmd/task/unreleased.go +++ b/cmd/task/unreleased.go @@ -24,12 +24,7 @@ func Unreleased(workdir string) *cli.Command { }, Action: func(c *cli.Context) error { - paths, err := files.Glob(c.String(flagkey.Directory)) - if err != nil { - return err - } - - for _, p := range paths { + for _, p := range files.Glob(c.String(flagkey.Directory)) { doc, err := files.Read(p) if err != nil { diff --git a/files/glob.go b/files/glob.go index ab6e80c..4a0f004 100644 --- a/files/glob.go +++ b/files/glob.go @@ -64,16 +64,15 @@ func ignore(path string) bool { return false } -// Glob seeks for all changelog files from the given directory, and returns a slice of absolute file paths -// along with an error. Malformed path patterns are reported via the error instead of causing a panic. +// Glob seeks for all changelog files from the given directory, and returns a slice of absolute file path. // This function excludes common auto-generated directories, such as node_modules and coverage reports. -func Glob(d string) ([]string, error) { +func Glob(d string) []string { p := fmt.Sprintf("%s/**/CHANGELOG.md", d) paths, err := doublestar.Glob(p) if err != nil { - return nil, fmt.Errorf("malformed path pattern: %w", err) + panic("malformed path pattern") } slices.Sort(paths) @@ -90,7 +89,7 @@ func Glob(d string) ([]string, error) { outs = append(outs, p) } - return outs, nil + return outs } // Rel takes an arbitary path, and returns relative path from the current working directory. diff --git a/files/glob_test.go b/files/glob_test.go index 736a2b6..3be5b48 100644 --- a/files/glob_test.go +++ b/files/glob_test.go @@ -23,7 +23,7 @@ func TestGlob(t *testing.T) { } { - // Fail cases, should return error. + // Fail cases, panic. pats := []pattern{ { path: "[-]", @@ -31,8 +31,9 @@ func TestGlob(t *testing.T) { } for _, p := range pats { - _, err := files.Glob(p.path) - assert.NotNil(t, err) + assert.Panics(t, func() { + files.Glob(p.path) + }) } } @@ -40,9 +41,7 @@ func TestGlob(t *testing.T) { // Fail case, ensure vendor directories are not included. path := fmt.Sprintf("%s/test/vendors", pwd) - got, err := files.Glob(path) - require.Nil(t, err) - assert.Empty(t, got) + assert.Empty(t, files.Glob(path)) } { @@ -71,7 +70,7 @@ func TestGlob(t *testing.T) { } for _, p := range pats { - got, err := files.Glob(p.path) + got := files.Glob(p.path) require.Nilf(t, err, "%s", p) assert.Equalf(t, p.count, len(got), "%s", p.path) diff --git a/files/writer.go b/files/writer.go index 2ba5468..6be5abf 100644 --- a/files/writer.go +++ b/files/writer.go @@ -15,7 +15,7 @@ func Update(path, doc string) error { info, err := os.Stat(path) if err != nil { - return err + return nil } if err := os.WriteFile(path, []byte(doc), info.Mode()); err != nil { diff --git a/files/writer_test.go b/files/writer_test.go index 4609bd7..53a6b7f 100644 --- a/files/writer_test.go +++ b/files/writer_test.go @@ -45,7 +45,7 @@ func TestUpdate(t *testing.T) { // Fail case, non-existent path. err := files.Update("non-existent", "foo") - require.NotNil(t, err) + require.Nil(t, err) } { diff --git a/main.go b/main.go index b506a28..3d628a7 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,5 @@ import ( ) func main() { - if err := cmd.Run(os.Args); err != nil { - os.Exit(1) - } + _ = cmd.Run(os.Args) } diff --git a/main_test.go b/main_test.go index 670197c..2fdece4 100644 --- a/main_test.go +++ b/main_test.go @@ -1,15 +1,11 @@ package main import ( - "os" "testing" "github.com/stretchr/testify/assert" - "github.com/tomodian/release/cmd" ) -func TestRun(t *testing.T) { - assert.NotPanics(t, func() { - _ = cmd.Run(os.Args[0:1]) - }) +func TestMain(t *testing.T) { + assert.NotPanics(t, main) } diff --git a/parser/semver.go b/parser/semver.go index d1beba7..dd8242f 100644 --- a/parser/semver.go +++ b/parser/semver.go @@ -62,13 +62,13 @@ func (c SemanticVersion) IsGreater(in *SemanticVersion) bool { } switch { - case c.Major > in.Major: + case c.Major < in.Major: return true - case c.Major == in.Major && c.Minor > in.Minor: + case c.Major == in.Major && c.Minor < in.Minor: return true - case c.Major == in.Major && c.Minor == in.Minor && c.Patch > in.Patch: + case c.Major == in.Major && c.Minor == in.Minor && c.Patch < in.Patch: return true } diff --git a/parser/semver_test.go b/parser/semver_test.go index 0b4c0dd..3a8585d 100644 --- a/parser/semver_test.go +++ b/parser/semver_test.go @@ -142,20 +142,20 @@ func TestSemanticVersionIsGreater(t *testing.T) { // Truthy cases. pats := []pattern{ { - a: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, - b: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, + b: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, }, } @@ -172,20 +172,20 @@ func TestSemanticVersionIsGreater(t *testing.T) { b: nil, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, + a: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, + b: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 1}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, - b: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, + a: &parser.SemanticVersion{Major: 0, Minor: 1, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, }, { - a: &parser.SemanticVersion{Major: 1, Minor: 2, Patch: 3}, - b: &parser.SemanticVersion{Major: 4, Minor: 5, Patch: 6}, + a: &parser.SemanticVersion{Major: 1, Minor: 0, Patch: 0}, + b: &parser.SemanticVersion{Major: 0, Minor: 0, Patch: 0}, }, }