Implement semver_minor and semver_patch

This commit is contained in:
2020-11-09 11:02:38 +01:00
parent 1e4001735f
commit 20aec7d527

View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"fmt"
"sort" "sort"
) )
@ -13,10 +14,10 @@ type VersioningMode interface {
ShouldUpdate(currentTag string, availableTags []Tag) *Tag ShouldUpdate(currentTag string, availableTags []Tag) *Tag
} }
type SameTag struct {} type SameTag struct{}
type SemVerMajor struct {} type SemVerMajor struct{}
type SemVerMinor struct {} type SemVerMinor struct{}
type SemVerPatch struct {} type SemVerPatch struct{}
var ( var (
AllModes = [...]VersioningMode{ AllModes = [...]VersioningMode{
@ -29,11 +30,11 @@ var (
func (SameTag) Label() string { return "same_tag" } func (SameTag) Label() string { return "same_tag" }
func (SameTag) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { func (SameTag) ShouldUpdate(currentTag string, availableTags []Tag) *Tag {
fmt.Println("Not implemented: 'same_tag' versioning mode")
return nil // TODO: implement me return nil // TODO: implement me
} }
func (SemVerMajor) Label() string { return "semver_major" } func semVerShouldUpdate(currentTag string, availableTags []Tag, isValid func(current, available SemVerTag) bool) *Tag {
func (SemVerMajor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag {
currentSemVer := parseTagAsSemVer(currentTag) currentSemVer := parseTagAsSemVer(currentTag)
if currentSemVer == nil { if currentSemVer == nil {
return nil return nil
@ -42,8 +43,8 @@ func (SemVerMajor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag {
semverTags := make([]Tag, 0) semverTags := make([]Tag, 0)
for _, tag := range availableTags { for _, tag := range availableTags {
if tag.SemVer != nil && currentSemVer.version.LessThan(tag.SemVer.version) { if tag.SemVer != nil && isValid(*currentSemVer, *tag.SemVer) {
semverTags = append(semverTags, tag); semverTags = append(semverTags, tag)
} }
} }
@ -60,17 +61,33 @@ func (SemVerMajor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag {
return &semverTags[0] 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) Label() string { return "semver_minor" }
func (SemVerMinor) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { 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) Label() string { return "semver_patch" }
func (SemVerPatch) ShouldUpdate(currentTag string, availableTags []Tag) *Tag { 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 { func ParseVersioningMode(input string) *VersioningMode {
for _, mode := range AllModes { for _, mode := range AllModes {
if mode.Label() == input { if mode.Label() == input {
@ -79,4 +96,3 @@ func ParseVersioningMode(input string) *VersioningMode {
} }
return nil return nil
} }