From 9b8ff1ddcd573b282e424603488963126d6bd3e8 Mon Sep 17 00:00:00 2001 From: cellarspoon Date: Fri, 24 Dec 2021 00:43:24 +0100 Subject: [PATCH] fix: get branch is now more robust --- cli/internal/deploy.go | 7 ++++++- pkg/catalogue/catalogue.go | 14 +++++--------- pkg/git/branch.go | 35 +++++++++++++++++++++++++++++++++++ pkg/recipe/recipe.go | 13 ++++--------- 4 files changed, 50 insertions(+), 19 deletions(-) create mode 100644 pkg/git/branch.go diff --git a/cli/internal/deploy.go b/cli/internal/deploy.go index 1acb93f6..cf6db9ec 100644 --- a/cli/internal/deploy.go +++ b/cli/internal/deploy.go @@ -9,6 +9,7 @@ import ( "coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/dns" + "coopcloud.tech/abra/pkg/git" "coopcloud.tech/abra/pkg/recipe" "coopcloud.tech/abra/pkg/upstream/stack" "github.com/AlecAivazis/survey/v2" @@ -58,7 +59,11 @@ func DeployAction(c *cli.Context) error { logrus.Fatal(err) } } else { - version = "latest commit" + head, err := git.GetRecipeHead(app.Type) + if err != nil { + logrus.Fatal(err) + } + version = head.String()[:8] logrus.Warn("no versions detected, using latest commit") if err := recipe.EnsureLatest(app.Type); err != nil { logrus.Fatal(err) diff --git a/pkg/catalogue/catalogue.go b/pkg/catalogue/catalogue.go index f14adac0..ec46c5fd 100644 --- a/pkg/catalogue/catalogue.go +++ b/pkg/catalogue/catalogue.go @@ -15,6 +15,7 @@ import ( "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/config" + gitPkg "coopcloud.tech/abra/pkg/git" "coopcloud.tech/abra/pkg/recipe" "coopcloud.tech/abra/pkg/web" "github.com/docker/distribution/reference" @@ -600,20 +601,15 @@ func GetRecipeVersions(recipeName string) (RecipeVersions, error) { return versions, err } - branch := "master" - if _, err := repo.Branch("master"); err != nil { - if _, err := repo.Branch("main"); err != nil { - logrus.Debugf("failed to select branch in %s", recipeDir) - logrus.Fatal(err) - } - branch = "main" + branch, err := gitPkg.GetCurrentBranch(repo) + if err != nil { + return versions, err } - refName := fmt.Sprintf("refs/heads/%s", branch) checkOutOpts := &git.CheckoutOptions{ Create: false, Force: true, - Branch: plumbing.ReferenceName(refName), + Branch: plumbing.ReferenceName(branch), } if err := worktree.Checkout(checkOutOpts); err != nil { logrus.Debugf("failed to check out %s in %s", branch, recipeDir) diff --git a/pkg/git/branch.go b/pkg/git/branch.go new file mode 100644 index 00000000..8c17f9c0 --- /dev/null +++ b/pkg/git/branch.go @@ -0,0 +1,35 @@ +package git + +import ( + "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" +) + +// GetCurrentBranch retrieves the current branch of a repository +func GetCurrentBranch(repository *git.Repository) (string, error) { + branchRefs, err := repository.Branches() + if err != nil { + return "", err + } + + headRef, err := repository.Head() + if err != nil { + return "", err + } + + var currentBranchName string + err = branchRefs.ForEach(func(branchRef *plumbing.Reference) error { + if branchRef.Hash() == headRef.Hash() { + currentBranchName = branchRef.Name().String() + + return nil + } + + return nil + }) + if err != nil { + return "", err + } + + return currentBranchName, nil +} diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go index 33d6bab8..4da3f800 100644 --- a/pkg/recipe/recipe.go +++ b/pkg/recipe/recipe.go @@ -213,20 +213,15 @@ func EnsureLatest(recipeName string) error { return err } - branch := "master" - if _, err := repo.Branch("master"); err != nil { - if _, err := repo.Branch("main"); err != nil { - logrus.Debugf("failed to select branch in %s", path.Join(config.APPS_DIR, recipeName)) - return err - } - branch = "main" + branch, err := gitPkg.GetCurrentBranch(repo) + if err != nil { + return err } - refName := fmt.Sprintf("refs/heads/%s", branch) checkOutOpts := &git.CheckoutOptions{ Create: false, Force: true, - Branch: plumbing.ReferenceName(refName), + Branch: plumbing.ReferenceName(branch), } if err := worktree.Checkout(checkOutOpts); err != nil {