this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

semver-parse: preserve v prefix, nuke metadata on prerelease bump

+20 -18
+20 -18
semver-parse/main.go
··· 57 57 scanner := bufio.NewScanner(stdin) 58 58 for scanner.Scan() { 59 59 line := scanner.Text() 60 + 60 61 version, err := semver.NewVersion(line) 61 62 if err != nil { 62 63 fmt.Fprintf(stderr, "%v: %v\n", err, line) ··· 72 73 case "major": 73 74 newVersion = version.IncMajor() 74 75 case "prerelease": 75 - bumped, err := bumpPrerelease(version) 76 + bumped, err := bumpPrerelease(*version) 76 77 if err != nil { 77 78 fmt.Fprintf(stderr, "%v: %v\n", err, line) 78 79 continue ··· 80 81 newVersion = *bumped 81 82 } 82 83 83 - fmt.Fprintln(stdout, newVersion.String()) 84 + output := newVersion.Original() 85 + fmt.Fprintln(stdout, output) 84 86 } 85 87 86 88 return scanner.Err() ··· 112 114 return rootCmd.ParseAndRun(ctx, args[1:]) 113 115 } 114 116 115 - func bumpPrerelease(v *semver.Version) (*semver.Version, error) { 117 + func bumpPrerelease(v semver.Version) (*semver.Version, error) { 116 118 prerelease := v.Prerelease() 117 119 118 - if prerelease == "" && v.Metadata() == "" { 119 - // If no prerelease and no metadata, start a new prerelease cycle. 120 - // Increment patch and add -alpha.0. 121 - newVer := v.IncPatch() 122 - withPre, _ := newVer.SetPrerelease("alpha.0") 123 - return &withPre, nil 120 + if prerelease == "" { 121 + n := v.IncPatch() 122 + n, _ = n.SetPrerelease("alpha.0") 123 + return &n, nil 124 124 } 125 125 126 - if prerelease == "" { 127 - return nil, fmt.Errorf("version has metadata but no prerelease to bump") 126 + e, err := v.SetPrerelease("") 127 + if err != nil { 128 + return nil, fmt.Errorf("failed to reset prerelease: %w", err) 129 + } 130 + 131 + ee, err := e.SetMetadata("") 132 + if err != nil { 133 + return nil, fmt.Errorf("failed to reset metadata: %w", err) 128 134 } 129 135 130 136 re := regexp.MustCompile(`^(alpha|beta|rc)(\.)?(\d+)$`) 131 137 if matches := re.FindStringSubmatch(prerelease); matches != nil { 132 138 prefix := matches[1] 133 - separator := matches[2] // Will be "." or empty 139 + separator := matches[2] 134 140 num, _ := strconv.Atoi(matches[3]) 135 141 newPre := fmt.Sprintf("%s%s%d", prefix, separator, num+1) 136 - newVer, _ := semver.NewVersion(fmt.Sprintf("%d.%d.%d-%s", v.Major(), v.Minor(), v.Patch(), newPre)) 137 - if v.Metadata() != "" { 138 - withMeta, _ := newVer.SetMetadata(v.Metadata()) 139 - newVer = &withMeta 140 - } 141 - return newVer, nil 142 + nv, _ := semver.NewVersion(fmt.Sprintf("%s-%s", ee.Original(), newPre)) 143 + return nv, nil 142 144 } 143 145 144 146 return nil, fmt.Errorf("prerelease '%s' does not match convention (alpha.N, beta.N, rc.N, alphaN, betaN, or rcN)", prerelease)