Merge pull request 'feat: add a flag to commit your changes before creating a tag' (#102) from knoflook/abra:recipe-release into main
continuous-integration/drone/push Build is passing Details

Reviewed-on: #102
This commit is contained in:
decentral1se 2021-09-29 20:24:55 +00:00
commit 75bdd59585
1 changed files with 64 additions and 11 deletions

View File

@ -10,6 +10,7 @@ import (
"coopcloud.tech/abra/pkg/config"
"coopcloud.tech/abra/pkg/recipe"
"coopcloud.tech/tagcmp"
"github.com/AlecAivazis/survey/v2"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
@ -56,6 +57,22 @@ var PatchFlag = &cli.BoolFlag{
Destination: &Patch,
}
var CommitMessage string
var CommitMessageFlag = &cli.StringFlag{
Name: "commit-message",
Usage: "commit message",
Aliases: []string{"cm"},
Destination: &CommitMessage,
}
var Commit bool
var CommitFlag = &cli.BoolFlag{
Name: "commit",
Value: false,
Aliases: []string{"c"},
Destination: &Commit,
}
var recipeReleaseCommand = &cli.Command{
Name: "release",
Usage: "tag a recipe",
@ -67,6 +84,8 @@ var recipeReleaseCommand = &cli.Command{
MinorFlag,
MajorFlag,
PushFlag,
CommitFlag,
CommitMessageFlag,
},
Action: func(c *cli.Context) error {
recipe := internal.ValidateRecipe(c)
@ -79,6 +98,36 @@ var recipeReleaseCommand = &cli.Command{
logrus.Fatal("Main app's version is empty.")
}
if tagstring != "" {
_, err := tagcmp.Parse(tagstring)
if err != nil {
logrus.Fatal("invalid tag specified")
}
}
if Commit || (CommitMessage != "") {
commitRepo, err := git.PlainOpen(directory)
if err != nil {
logrus.Fatal(err)
}
commitWorktree, err := commitRepo.Worktree()
if err != nil {
logrus.Fatal(err)
}
if CommitMessage == "" {
prompt := &survey.Input{
Message: "commit message",
}
survey.AskOne(prompt, &CommitMessage)
}
_, err = commitWorktree.Commit(CommitMessage, &git.CommitOptions{})
if err != nil {
logrus.Fatal(err)
}
logrus.Info("changes commited")
}
repo, err := git.PlainOpen(directory)
if err != nil {
logrus.Fatal(err)
@ -99,9 +148,21 @@ var recipeReleaseCommand = &cli.Command{
if tagstring != "" {
if bumpType > 0 {
logrus.Warn("User specified a version number and --major/--minor/--patch at the same time! Using version number.")
logrus.Warn("user specified a version number and --major/--minor/--patch at the same time! Using version number.")
}
tagstring = fmt.Sprintf("%s+%s", tagstring, mainAppVersion)
tag, err := tagcmp.Parse(tagstring)
if err != nil {
logrus.Fatal(err)
}
if tag.MissingMinor {
tag.Minor = "0"
tag.MissingMinor = false
}
if tag.MissingPatch {
tag.Patch = "0"
tag.MissingPatch = false
}
tagstring = fmt.Sprintf("%s+%s", tag.String(), mainAppVersion)
if Dry {
logrus.Info(fmt.Sprintf("Dry run only. NOT creating tag %s at %s", tagstring, head.Hash()))
return nil
@ -166,15 +227,7 @@ var recipeReleaseCommand = &cli.Command{
}
newTagString = newTag.String()
} else {
// calculate the new tag
var images = make(map[string]tagcmp.Tag)
for name, version := range imagesTmp {
t, err := tagcmp.Parse(version)
if err != nil {
logrus.Fatal(err)
}
images[name] = t
}
logrus.Fatal("we don't support auto tag generation yet. Specify a verion or use one of: --major --minor --patch")
}
newTagString = fmt.Sprintf("%s+%s", newTagString, mainAppVersion)