Implement semver_minor and semver_patch
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user