diff --git a/cmd/git-semver/git-semver.go b/cmd/gitsemver/gitsemver.go similarity index 59% rename from cmd/git-semver/git-semver.go rename to cmd/gitsemver/gitsemver.go index 68c5858..52406e3 100644 --- a/cmd/git-semver/git-semver.go +++ b/cmd/gitsemver/gitsemver.go @@ -1,4 +1,4 @@ -package git_semver +package gitsemver import ( "fmt" @@ -6,8 +6,7 @@ import ( "os" "github.com/Masterminds/semver" - "github.com/carlsberg/git-semver/internal/git" - git_semver "github.com/carlsberg/git-semver/internal/git-semver" + "github.com/carlsberg/git-semver/pkg/gitsemver" "github.com/spf13/cobra" ) @@ -25,25 +24,8 @@ var bumpCmd = &cobra.Command{ latest := getLatestVersionOrFail(project) next := getNextVersionOrFail(project) - if len(versionFilenamesAndKeys) > 0 { - for _, filenameAndKey := range versionFilenamesAndKeys { - updateVersionFileOrPanic(filenameAndKey, latest, next) - } - - if err := git.CreateCommit(project.Repo(), fmt.Sprintf("bump: %s -> %s", latest.String(), next.String())); err != nil { - log.Fatal(err) - } - } - - tagName := git_semver.TagNameFromProjectAndVersion(project, next) - tagMessage := fmt.Sprintf("Release %s", tagName) - - if err := git.CreateTag(project.Repo(), tagName, tagMessage); err != nil { - log.Fatal(err) - } - - if err := git.PushTagToRemotes(project.Repo(), tagName); err != nil { - log.Fatal(err) + if err := project.Bump(versionFilenamesAndKeys); err != nil { + log.Fatalln(err) } fmt.Printf("bump %s from %s to %s\n", project.Dir(), latest, next) @@ -85,50 +67,38 @@ 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\"`)") } -func newProjectOrPanic(cmd *cobra.Command) *git_semver.Project { +func newProjectOrPanic(cmd *cobra.Command) *gitsemver.Project { cwd, err := os.Getwd() if err != nil { - log.Fatal(err) + log.Fatalln(err) } dir, err := cmd.Flags().GetString("project") if err != nil { - log.Fatal(err) + log.Fatalln(err) } - project, err := git_semver.NewProject(cwd, dir) + project, err := gitsemver.NewProject(cwd, dir) if err != nil { - log.Fatal(err) + log.Fatalln(err) } return project } -func updateVersionFileOrPanic(filenameAndKey string, latest, next *semver.Version) { - vf, err := git_semver.NewVersionFile("./", filenameAndKey) - if err != nil { - log.Fatal(err) - } - - vf.UpdateVersion(latest, next) - if err != nil { - log.Fatal(err) - } -} - -func getLatestVersionOrFail(project *git_semver.Project) *semver.Version { +func getLatestVersionOrFail(project *gitsemver.Project) *semver.Version { latest, err := project.LatestVersion() if err != nil { - log.Fatal(err) + log.Fatalln(err) } return latest } -func getNextVersionOrFail(project *git_semver.Project) *semver.Version { +func getNextVersionOrFail(project *gitsemver.Project) *semver.Version { next, err := project.NextVersion() if err != nil { - log.Fatal(err) + log.Fatalln(err) } return next @@ -137,7 +107,7 @@ func getNextVersionOrFail(project *git_semver.Project) *semver.Version { func getVersionFilenamesAndKeysOrFail(cmd *cobra.Command) []string { versionFilenamesAndKeys, err := cmd.Flags().GetStringArray("version-file") if err != nil { - log.Fatal(err) + log.Fatalln(err) } return versionFilenamesAndKeys diff --git a/main.go b/main.go index eae47fd..f621384 100644 --- a/main.go +++ b/main.go @@ -1,10 +1,10 @@ package main import ( - git_semver "github.com/carlsberg/git-semver/cmd/git-semver" + "github.com/carlsberg/git-semver/cmd/gitsemver" "github.com/spf13/cobra" ) func main() { - cobra.CheckErr(git_semver.Execute()) + cobra.CheckErr(gitsemver.Execute()) } diff --git a/internal/git-semver/project.go b/pkg/gitsemver/project.go similarity index 81% rename from internal/git-semver/project.go rename to pkg/gitsemver/project.go index e0d047f..ff8ee61 100644 --- a/internal/git-semver/project.go +++ b/pkg/gitsemver/project.go @@ -1,4 +1,4 @@ -package git_semver +package gitsemver import ( "errors" @@ -216,6 +216,49 @@ func (p *Project) NextVersionIncrement() (Increment, error) { return increment, nil } +func (p *Project) Bump(versionFilenamesAndKeys []string) error { + latest, err := p.LatestVersion() + if err != nil { + return err + } + + next, err := p.NextVersion() + if err != nil { + return err + } + + if len(versionFilenamesAndKeys) > 0 { + for _, filenameAndKey := range versionFilenamesAndKeys { + vf, err := NewVersionFile("./", filenameAndKey) + if err != nil { + return err + } + + vf.UpdateVersion(latest, next) + if err != nil { + return err + } + } + + if err := git.CreateCommit(p.Repo(), fmt.Sprintf("bump: %s -> %s", latest.String(), next.String())); err != nil { + return err + } + } + + tagName := TagNameFromProjectAndVersion(p, next) + tagMessage := fmt.Sprintf("Release %s", tagName) + + if err := git.CreateTag(p.Repo(), tagName, tagMessage); err != nil { + return err + } + + if err := git.PushTagToRemotes(p.Repo(), tagName); err != nil { + return err + } + + return nil +} + func TagNameFromProjectAndVersion(p *Project, v *semver.Version) string { if p.IsSubProject() { return fmt.Sprintf("%s/%s", p.dir, v.Original()) diff --git a/internal/git-semver/version_file.go b/pkg/gitsemver/version_file.go similarity index 98% rename from internal/git-semver/version_file.go rename to pkg/gitsemver/version_file.go index 70bd4a1..a5d886a 100644 --- a/internal/git-semver/version_file.go +++ b/pkg/gitsemver/version_file.go @@ -1,4 +1,4 @@ -package git_semver +package gitsemver import ( "fmt"