diff options
| author | Max Resnick <max@ofmax.li> | 2024-01-27 16:18:38 -0800 |
|---|---|---|
| committer | Max Resnick <max@ofmax.li> | 2024-02-25 08:42:58 -0800 |
| commit | 4b6a22c3e0b3a3eece007fd1abbcf2be7ac5aa39 (patch) | |
| tree | 4776853fbcebbde37dc03246b49932b01b362277 | |
| parent | 8e365468cec859da974a5e617ab3eb8d0a59df63 (diff) | |
| download | go-bumpver-4b6a22c3e0b3a3eece007fd1abbcf2be7ac5aa39.tar.gz | |
fix: not validated
Diffstat (limited to '')
| -rw-r--r-- | main.go | 57 | ||||
| -rw-r--r-- | main_test.go | 82 |
2 files changed, 126 insertions, 13 deletions
@@ -19,6 +19,31 @@ import ( "github.com/Masterminds/semver/v3" ) +var ( + cmdExamples = ` +**stdin** +❯ echo "1.1.1\n1.2.1" | bumpver patch - +1.2.2 + +**file** +❯ echo v0.1.0 > VERSION +❯ bumpver patch VERSION +0.1.1 + +**a minor** +❯ bumpver minor <(git tag -l) +3.4.0 + +**a major** +❯ bumpver major <(git tag -l) +4.0.0 + +**create new prerelease** +❯ echo "0.1.0" | bumpver patch --prerelease --prerelease-fmt 'rc.$BumpInt' - +0.1.1-rc.0 +` +) + // FmtPart format keywords type FmtPart string @@ -59,8 +84,10 @@ func (prf *preReleaseVersion) incPreRelease() (semver.Version, error) { // current int ++ currentVerStrPart := currentPreReleaseParts[idx] currentVerPart, err := strconv.Atoi(currentVerStrPart) + // the current part is not an int, make it one if err != nil { - return semver.Version{}, err + newPreReleaseParts = append(newPreReleaseParts, "0") + continue } newPreReleaseParts = append(newPreReleaseParts, strconv.Itoa(currentVerPart+1)) case string(KeyArg): @@ -107,10 +134,11 @@ var ( preReleaseFmtArgs = make(map[string]string) preRelease bool rootCmd = &cobra.Command{ - Use: "bumpver part [major|minor|patch] file [-|file]", - Short: "A tool for bumping semver git tags.", - Args: cobra.MatchAll(cobra.ExactArgs(2)), - Long: `Inspired by the python bump2version tool.`, + Use: "bumpver part [major|minor|patch] file [-|file]", + Short: "A tool for bumping semver git tags.", + Example: cmdExamples, + Args: cobra.MatchAll(cobra.ExactArgs(2)), + Long: `Inspired by the python bump2version tool.`, RunE: func(cmd *cobra.Command, argz []string) error { part := argz[0] var err error @@ -157,9 +185,13 @@ var ( case "patch": nextVersion = lastVersion.IncPatch() case "prerelease": + parsedFmt, err := parseFmtString(preReleaseFmtString) + if err != nil { + return err + } preRelVersion := preReleaseVersion{ // []string{"PR", "$KeyArg PR_NUM"}, - parseFmtString(preReleaseFmtString), + parsedFmt, preReleaseFmtArgs, lastVersion, versionPart, @@ -207,8 +239,17 @@ func checkArgPart(arg string) error { return nil } -func parseFmtString(toSplit string) []string { - return strings.Split(toSplit, ".") +func parseFmtString(toSplit string) ([]string, error) { + splitted := strings.Split(toSplit, ".") + for _, section := range splitted { + keyWord := strings.Split(section, " ") + if keyWord[0] == string(KeyArg) { + if len(keyWord) != 2 { + return []string{}, errors.New("$KeyArg expected to find an argument") + } + } + } + return strings.Split(toSplit, "."), nil } func main() { diff --git a/main_test.go b/main_test.go index 248f6e6..440cb6b 100644 --- a/main_test.go +++ b/main_test.go @@ -3,6 +3,7 @@ package main import ( "bytes" "log" + "slices" "strings" "testing" @@ -197,8 +198,8 @@ func TestIncPreRelease(t *testing.T) { versionPart: "patch", }, startVersion: "1.0.1-PR.jjj.j", - expectedResult: "1.0.1-PR.11.2", - hasError: true, + expectedResult: "1.0.1-PR.11.0", + hasError: false, }, { name: "test fmt arg change", @@ -208,8 +209,8 @@ func TestIncPreRelease(t *testing.T) { versionPart: "patch", }, startVersion: "1.0.1-stuff.jjj.j", - expectedResult: "1.0.1-PR.11.2", - hasError: true, + expectedResult: "1.0.1-PR.11.0", + hasError: false, }, { name: "test creating a new pre-release", @@ -233,6 +234,17 @@ func TestIncPreRelease(t *testing.T) { expectedResult: "2.0.0-PR.11.0", hasError: false, }, + { + name: "test creating a new major prerelease", + prf: preReleaseVersion{ + Fmt: []string{"PR", "$KeyArg PR_NUM", "$BumpInt"}, + KeyArgs: map[string]string{"PR_NUM": "11"}, + versionPart: "major", + }, + startVersion: "1.8.1-PR.GG.GG", + expectedResult: "1.8.1-PR.11.0", + hasError: false, + }, } for _, test := range tests { @@ -249,7 +261,7 @@ func TestIncPreRelease(t *testing.T) { t.Fatal(err) } if test.hasError && err == nil { - t.Fatalf("found %s expected %s", nv, test.expectedResult) + t.Fatal("expected to find error found none") } // its an error and we expect it if test.hasError && err != nil { @@ -262,3 +274,63 @@ func TestIncPreRelease(t *testing.T) { }) } } + +func TestParseFmtString(t *testing.T) { + tests := []struct { + name string + fmtString string + hasErr bool + expected []string + // * for nil cases + }{ + { + name: "parsing should return 2 elements, with $KeyArg", + fmtString: "rc.$KeyArg FOOBAR", + hasErr: false, + expected: []string{"rc", "$KeyArg FOOBAR"}, + }, + { + name: "$KeyArg should have an arg and will fail if it doesn't", + fmtString: "rc.$KeyArg", + hasErr: true, + expected: []string{}, + }, + { + name: "$BumpInt should be returned", + fmtString: "rc.$BumpInt", + hasErr: false, + expected: []string{"rc", "$BumpInt"}, + }, + { + name: "$BumpInt and $KeyArg should returned", + fmtString: "rc.$BumpInt.$KeyArg FOOBAR", + hasErr: false, + expected: []string{"rc", "$BumpInt", "$KeyArg FOOBAR"}, + }, + { + name: "$BumpInt and $KeyArg should returned", + fmtString: "rc.$BumpInt.$KeyArg", + hasErr: true, + expected: []string{}, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + result, err := parseFmtString(test.fmtString) + if err != nil && test.hasErr { + return + } else if err != nil && !test.hasErr { + t.Fatalf("%s didn't expect error but found %s", test.name, err) + return + } else if test.hasErr && err == nil { + t.Fatal("Expected error found none") + } + if !slices.Equal(result, test.expected) { + t.Fatalf("Expected %s, found %s", strings.Join(test.expected, " "), strings.Join(result, " ")) + + } + }) + + } + +} |