package internal import ( "fmt" "strings" "coopcloud.tech/abra/pkg/recipe" "github.com/AlecAivazis/survey/v2" "github.com/docker/distribution/reference" "github.com/sirupsen/logrus" ) // PromptBumpType prompts for version bump type func PromptBumpType(tagString string) error { if (!Major && !Minor && !Patch) && tagString == "" { fmt.Printf(`semver cheat sheet (more via semver.org): major: new features/bug fixes, backwards incompatible minor: new features/bug fixes, backwards compatible patch: bug fixes, backwards compatible `) var chosenBumpType string prompt := &survey.Select{ Message: fmt.Sprintf("select recipe version increment type"), Options: []string{"major", "minor", "patch"}, } if err := survey.AskOne(prompt, &chosenBumpType); err != nil { return err } SetBumpType(chosenBumpType) } return nil } // GetBumpType figures out which bump type is specified func GetBumpType() string { var bumpType string if Major { bumpType = "major" } else if Minor { bumpType = "minor" } else if Patch { bumpType = "patch" } else { logrus.Fatal("no version bump type specififed?") } return bumpType } // SetBumpType figures out which bump type is specified func SetBumpType(bumpType string) { if bumpType == "major" { Major = true } else if bumpType == "minor" { Minor = true } else if bumpType == "patch" { Patch = true } else { logrus.Fatal("no version bump type specififed?") } } // GetMainAppImage retrieves the main 'app' image name func GetMainAppImage(recipe recipe.Recipe) (string, error) { var path string for _, service := range recipe.Config.Services { if service.Name == "app" { img, err := reference.ParseNormalizedNamed(service.Image) if err != nil { return "", err } path = reference.Path(img) if strings.Contains(path, "library") { path = strings.Split(path, "/")[1] } return path, nil } } if path == "" { return path, fmt.Errorf("%s has no main 'app' service?", recipe.Name) } return path, nil }