diff --git a/versioning_mode.go b/versioning_mode.go index 0adf14f..0881d07 100644 --- a/versioning_mode.go +++ b/versioning_mode.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "sort" ) @@ -13,10 +14,10 @@ type VersioningMode interface { ShouldUpdate(currentTag string, availableTags []Tag) *Tag } -type SameTag struct {} -type SemVerMajor struct {} -type SemVerMinor struct {} -type SemVerPatch struct {} +type SameTag struct{} +type SemVerMajor struct{} +type SemVerMinor struct{} +type SemVerPatch struct{} var ( AllModes = [...]VersioningMode{ @@ -29,11 +30,11 @@ var ( func (SameTag) Label() string { return "same_tag" } func (SameTag) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { + fmt.Println("Not implemented: 'same_tag' versioning mode") return nil // TODO: implement me } -func (SemVerMajor) Label() string { return "semver_major" } -func (SemVerMajor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { +func semVerShouldUpdate(currentTag string, availableTags []Tag, isValid func(current, available SemVerTag) bool) *Tag { currentSemVer := parseTagAsSemVer(currentTag) if currentSemVer == nil { return nil @@ -42,8 +43,8 @@ func (SemVerMajor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { semverTags := make([]Tag, 0) for _, tag := range availableTags { - if tag.SemVer != nil && currentSemVer.version.LessThan(tag.SemVer.version) { - semverTags = append(semverTags, tag); + if tag.SemVer != nil && isValid(*currentSemVer, *tag.SemVer) { + semverTags = append(semverTags, tag) } } @@ -60,17 +61,33 @@ func (SemVerMajor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { return &semverTags[0] } +func (SemVerMajor) Label() string { return "semver_major" } +func (SemVerMajor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { + return semVerShouldUpdate(currentTag, availableTags, func(current, available SemVerTag) bool { + // The new version should be greater + return current.version.LessThan(available.version) + }) +} + func (SemVerMinor) Label() string { return "semver_minor" } func (SemVerMinor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { - return nil // TODO: implement me + return semVerShouldUpdate(currentTag, availableTags, func(current, available SemVerTag) bool { + // The new version should be greater, but still the same major number + return current.version.LessThan(available.version) && + current.version.Major == available.version.Major + }) } func (SemVerPatch) Label() string { return "semver_patch" } func (SemVerPatch) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { - return nil // TODO: implement me + return semVerShouldUpdate(currentTag, availableTags, func(current, available SemVerTag) bool { + // The new version should be greater, but still the same major & minor number + return current.version.LessThan(available.version) && + current.version.Major == available.version.Major && + current.version.Minor == available.version.Minor + }) } - func ParseVersioningMode(input string) *VersioningMode { for _, mode := range AllModes { if mode.Label() == input { @@ -79,4 +96,3 @@ func ParseVersioningMode(input string) *VersioningMode { } return nil } -