From ef4591709b5b408237a65481d7ac17c46b210128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Cerqueira?= Date: Mon, 22 Nov 2021 11:37:17 +0000 Subject: [PATCH] feat: support `v` prefix with `--v-prefix` flag (#34) --- cmd/gitsemver/gitsemver.go | 28 +++++++++++++++++++++------- pkg/gitsemver/project.go | 14 ++++++++++---- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/cmd/gitsemver/gitsemver.go b/cmd/gitsemver/gitsemver.go index 93b86d9..f7e2cc7 100644 --- a/cmd/gitsemver/gitsemver.go +++ b/cmd/gitsemver/gitsemver.go @@ -21,10 +21,11 @@ var bumpCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { project := newProjectOrPanic(cmd) versionFilenamesAndKeys := getVersionFilenamesAndKeysOrFail(cmd) + vPrefix := getVPrefixOrFail(cmd) username := getUsernameOrFail(cmd) password := getPasswordOrFail(cmd) latest := getLatestVersionOrFail(project) - next := getNextVersionOrFail(project) + next := getNextVersionOrFail(project, vPrefix) var auth gitsemver.AuthMethod = nil @@ -35,7 +36,7 @@ var bumpCmd = &cobra.Command{ } } - if err := project.Bump(versionFilenamesAndKeys, auth); err != nil { + if err := project.Bump(versionFilenamesAndKeys, auth, vPrefix); err != nil { log.Fatalln(err) } @@ -48,9 +49,10 @@ var nextCmd = &cobra.Command{ Short: "Outputs the next unreleased version", Run: func(cmd *cobra.Command, args []string) { project := newProjectOrPanic(cmd) - next := getNextVersionOrFail(project) + vPrefix := getVPrefixOrFail(cmd) + next := getNextVersionOrFail(project, vPrefix) - fmt.Println(next.String()) + fmt.Println(next.Original()) }, } @@ -61,7 +63,7 @@ var latestCmd = &cobra.Command{ project := newProjectOrPanic(cmd) latest := getLatestVersionOrFail(project) - fmt.Println(latest.String()) + fmt.Println(latest.Original()) }, } @@ -78,6 +80,9 @@ func init() { bumpCmd.Flags().StringArrayP("version-file", "f", make([]string, 0), "Specify version files to be updated with the new version in the format `filename:key` (i.e. `package.json:\"version\"`)") bumpCmd.Flags().StringP("username", "u", "", "Username to use in HTTP basic authentication") bumpCmd.Flags().StringP("password", "P", "", "Password to use in HTTP basic authentication") + bumpCmd.Flags().Bool("v-prefix", false, "Prefix the version with a `v`") + + nextCmd.Flags().Bool("v-prefix", false, "Prefix the version with a `v`") } func newProjectOrPanic(cmd *cobra.Command) *gitsemver.Project { @@ -108,8 +113,8 @@ func getLatestVersionOrFail(project *gitsemver.Project) *semver.Version { return latest } -func getNextVersionOrFail(project *gitsemver.Project) *semver.Version { - next, err := project.NextVersion() +func getNextVersionOrFail(project *gitsemver.Project, vPrefix bool) *semver.Version { + next, err := project.NextVersion(vPrefix) if err != nil { log.Fatalln(err) } @@ -143,3 +148,12 @@ func getPasswordOrFail(cmd *cobra.Command) string { return password } + +func getVPrefixOrFail(cmd *cobra.Command) bool { + vPrefix, err := cmd.Flags().GetBool("v-prefix") + if err != nil { + log.Fatalln(err) + } + + return vPrefix +} diff --git a/pkg/gitsemver/project.go b/pkg/gitsemver/project.go index 84e49c0..30d3554 100644 --- a/pkg/gitsemver/project.go +++ b/pkg/gitsemver/project.go @@ -107,7 +107,7 @@ func (p Project) Versions() ([]*semver.Version, error) { return versions, nil } -func (p Project) NextVersion() (*semver.Version, error) { +func (p Project) NextVersion(vPrefix bool) (*semver.Version, error) { versions, err := p.Versions() if err != nil { log.Fatal(err) @@ -120,7 +120,13 @@ func (p Project) NextVersion() (*semver.Version, error) { if versionsLen >= 0 { latestVersion = versions[versionsLen] } else { - latestVersion, err = semver.NewVersion("0.0.0") + latestVersionStr := "0.0.0" + + if vPrefix { + latestVersionStr = fmt.Sprintf("v%s", latestVersionStr) + } + + latestVersion, err = semver.NewVersion(latestVersionStr) if err != nil { return &semver.Version{}, err } @@ -209,13 +215,13 @@ func (p *Project) NextVersionIncrement() (Increment, error) { return increment, nil } -func (p *Project) Bump(versionFilenamesAndKeys []string, auth AuthMethod) error { +func (p *Project) Bump(versionFilenamesAndKeys []string, auth AuthMethod, vPrefix bool) error { latest, err := p.LatestVersion() if err != nil { return err } - next, err := p.NextVersion() + next, err := p.NextVersion(vPrefix) if err != nil { return err }