Skip to content

Commit

Permalink
new flags for creating and pushing git tags
Browse files Browse the repository at this point in the history
  • Loading branch information
Tobias Meinhardt committed Feb 24, 2019
1 parent 2432575 commit 10b8de4
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 3 deletions.
63 changes: 60 additions & 3 deletions cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cmd
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"log"
"os"
Expand All @@ -11,19 +12,25 @@ import (
"strings"

"github.com/spf13/cobra"
"gopkg.in/src-d/go-git.v4"
"gopkg.in/src-d/go-git.v4/plumbing"
)

var versionCmdOptions struct {
RepoPath string
VersionFile string
DryRun bool
CreateTag bool
PushTag bool
}

func init() {
rootCmd.AddCommand(versionCmd)
versionCmd.Flags().StringVarP(&versionCmdOptions.RepoPath, "path", "p", ".", "path to git repository")
versionCmd.Flags().StringVarP(&versionCmdOptions.VersionFile, "outfile", "o", "semver.json", "name of version file")
versionCmd.Flags().BoolVarP(&versionCmdOptions.DryRun, "dryrun", "d", false, "only log how version number would change")
versionCmd.Flags().BoolVarP(&versionCmdOptions.CreateTag, "tag", "t", false, "create a git tag")
versionCmd.Flags().BoolVarP(&versionCmdOptions.PushTag, "push", "P", false, "push git tag")
}

var versionCmd = &cobra.Command{
Expand Down Expand Up @@ -72,9 +79,23 @@ var versionCmd = &cobra.Command{
jsonContent["version"] = nextVersion
}

log.Println("new version: ", jsonContent["version"])
if !versionCmdOptions.DryRun {
writeVersionFile(jsonContent)
nextVersion := jsonContent["version"].(string)
log.Println("new version: ", nextVersion)
if versionCmdOptions.DryRun {
log.Println("dry run finished...")
os.Exit(1)
}

writeVersionFile(jsonContent)

if versionCmdOptions.CreateTag {
err = makeGitTag(versionCmdOptions.RepoPath, nextVersion)

if versionCmdOptions.PushTag && err == nil {
if err = pushGitTag(versionCmdOptions.RepoPath); err != nil {
log.Fatalf("cannot push tag: %s", err.Error())
}
}
}
},
}
Expand Down Expand Up @@ -110,3 +131,39 @@ func writeVersionFile(jsonContent map[string]interface{}) {
log.Fatalf("error writing %s: %s", versionCmdOptions.VersionFile, err.Error())
}
}

func makeGitTag(repoPath, version string) error {
r, err := git.PlainOpen(repoPath)
if err != nil {
log.Println("this is no valid git repository")
return err
} else {
headRef, err := r.Head()
if err != nil {
return err
}

tag := fmt.Sprintf("refs/tags/v%s", version)
ref := plumbing.NewHashReference(plumbing.ReferenceName(tag), headRef.Hash())

err = r.Storer.SetReference(ref)
if err != nil {
return err
}
}
return nil
}

func pushGitTag(repoPath string) error {
r, err := git.PlainOpen(repoPath)
if err != nil {
log.Println("this is no valid git repository")
return err
} else {
err = r.Push(&git.PushOptions{})
if err != nil {
return err
}
}
return nil
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ require (
github.com/meinto/glow v0.8.2
github.com/spf13/cobra v0.0.3
github.com/spf13/viper v1.3.1
gopkg.in/src-d/go-git.v4 v4.10.0
)

0 comments on commit 10b8de4

Please sign in to comment.