From c4c76f484826691ae5107b6d3402180dbfe2f2d8 Mon Sep 17 00:00:00 2001 From: knoflook Date: Wed, 29 Sep 2021 16:06:43 +0200 Subject: [PATCH 1/2] feat: add a flag to commit your changes before creating a tag --- cli/recipe/release.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/cli/recipe/release.go b/cli/recipe/release.go index 64ae37cee..b908f9e14 100644 --- a/cli/recipe/release.go +++ b/cli/recipe/release.go @@ -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,29 @@ var recipeReleaseCommand = &cli.Command{ logrus.Fatal("Main app's version is empty.") } + 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) From 96bb1459817a762152c0bb887f6c4da6ed2a872a Mon Sep 17 00:00:00 2001 From: knoflook Date: Wed, 29 Sep 2021 16:25:39 +0200 Subject: [PATCH 2/2] feat: check and sanitize user-specified tag --- cli/recipe/release.go | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/cli/recipe/release.go b/cli/recipe/release.go index b908f9e14..d9e36396e 100644 --- a/cli/recipe/release.go +++ b/cli/recipe/release.go @@ -98,6 +98,13 @@ 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 { @@ -141,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 @@ -208,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)