refactor(recipe): use template for ssh url

This commit is contained in:
p4u1 2024-07-08 10:32:36 +02:00
parent 4cf6155fb8
commit 47013c63d6
2 changed files with 38 additions and 34 deletions

View File

@ -20,6 +20,7 @@ import (
"github.com/AlecAivazis/survey/v2" "github.com/AlecAivazis/survey/v2"
"github.com/distribution/reference" "github.com/distribution/reference"
"github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5"
"github.com/sirupsen/logrus"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@ -62,6 +63,7 @@ your SSH keys configured on your account.
BashComplete: autocomplete.RecipeNameComplete, BashComplete: autocomplete.RecipeNameComplete,
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
recipe := internal.ValidateRecipe(c) recipe := internal.ValidateRecipe(c)
r := recipePkg.Get2(recipe.Name)
imagesTmp, err := getImageVersions(recipe) imagesTmp, err := getImageVersions(recipe)
if err != nil { if err != nil {
@ -90,7 +92,7 @@ your SSH keys configured on your account.
} }
if tagString != "" { if tagString != "" {
if err := createReleaseFromTag(recipe, tagString, mainAppVersion); err != nil { if err := createReleaseFromTag(r, tagString, mainAppVersion); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
@ -121,14 +123,14 @@ your SSH keys configured on your account.
} }
if len(tags) > 0 { if len(tags) > 0 {
log.Warnf("previous git tags detected, assuming this is a new semver release") logrus.Warnf("previous git tags detected, assuming this is a new semver release")
if err := createReleaseFromPreviousTag(tagString, mainAppVersion, recipe, tags); err != nil { if err := createReleaseFromPreviousTag(tagString, mainAppVersion, r, tags); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} else { } else {
log.Warnf("no tag specified and no previous tag available for %s, assuming this is the initial release", recipe.Name) log.Warnf("no tag specified and no previous tag available for %s, assuming this is the initial release", recipe.Name)
if err := createReleaseFromTag(recipe, tagString, mainAppVersion); err != nil { if err := createReleaseFromTag(r, tagString, mainAppVersion); err != nil {
if cleanUpErr := cleanUpTag(tagString, recipe.Name); err != nil { if cleanUpErr := cleanUpTag(tagString, recipe.Name); err != nil {
log.Fatal(cleanUpErr) log.Fatal(cleanUpErr)
} }
@ -181,7 +183,7 @@ func getImageVersions(recipe recipe.Recipe) (map[string]string, error) {
} }
// createReleaseFromTag creates a new release based on a supplied recipe version string // createReleaseFromTag creates a new release based on a supplied recipe version string
func createReleaseFromTag(recipe recipe.Recipe, tagString, mainAppVersion string) error { func createReleaseFromTag(recipe recipe.Recipe2, tagString, mainAppVersion string) error {
var err error var err error
directory := path.Join(config.RECIPES_DIR, recipe.Name) directory := path.Join(config.RECIPES_DIR, recipe.Name)
@ -245,7 +247,7 @@ func getTagCreateOptions(tag string) (git.CreateTagOptions, error) {
// addReleaseNotes checks if the release/next release note exists and moves the // addReleaseNotes checks if the release/next release note exists and moves the
// file to release/<tag>. // file to release/<tag>.
func addReleaseNotes(recipe recipe.Recipe, tag string) error { func addReleaseNotes(recipe recipe.Recipe2, tag string) error {
repoPath := path.Join(config.RECIPES_DIR, recipe.Name) repoPath := path.Join(config.RECIPES_DIR, recipe.Name)
tagReleaseNotePath := path.Join(repoPath, "release", tag) tagReleaseNotePath := path.Join(repoPath, "release", tag)
if _, err := os.Stat(tagReleaseNotePath); err == nil { if _, err := os.Stat(tagReleaseNotePath); err == nil {
@ -319,20 +321,20 @@ func addReleaseNotes(recipe recipe.Recipe, tag string) error {
return nil return nil
} }
func commitRelease(recipe recipe.Recipe, tag string) error { func commitRelease(recipe recipe.Recipe2, tag string) error {
if internal.Dry { if internal.Dry {
log.Debugf("dry run: no changes committed") log.Debugf("dry run: no changes committed")
return nil return nil
} }
isClean, err := gitPkg.IsClean(recipe.Dir()) isClean, err := gitPkg.IsClean(recipe.Dir)
if err != nil { if err != nil {
return err return err
} }
if isClean { if isClean {
if !internal.Dry { if !internal.Dry {
return fmt.Errorf("no changes discovered in %s, nothing to publish?", recipe.Dir()) return fmt.Errorf("no changes discovered in %s, nothing to publish?", recipe.Dir)
} }
} }
@ -372,7 +374,7 @@ func tagRelease(tagString string, repo *git.Repository) error {
return nil return nil
} }
func pushRelease(recipe recipe.Recipe, tagString string) error { func pushRelease(recipe recipe.Recipe2, tagString string) error {
if internal.Dry { if internal.Dry {
log.Info("dry run: no changes published") log.Info("dry run: no changes published")
return nil return nil
@ -401,7 +403,7 @@ func pushRelease(recipe recipe.Recipe, tagString string) error {
return nil return nil
} }
func createReleaseFromPreviousTag(tagString, mainAppVersion string, recipe recipe.Recipe, tags []string) error { func createReleaseFromPreviousTag(tagString, mainAppVersion string, recipe recipe.Recipe2, tags []string) error {
directory := path.Join(config.RECIPES_DIR, recipe.Name) directory := path.Join(config.RECIPES_DIR, recipe.Name)
repo, err := git.PlainOpen(directory) repo, err := git.PlainOpen(directory)
if err != nil { if err != nil {

View File

@ -138,25 +138,6 @@ type Recipe struct {
Meta RecipeMeta Meta RecipeMeta
} }
// Push pushes the latest changes to a SSH URL remote. You need to have your
// local SSH configuration for git.coopcloud.tech working for this to work
func (r Recipe) Push(dryRun bool) error {
repo, err := git.PlainOpen(r.Dir())
if err != nil {
return err
}
if err := gitPkg.CreateRemote(repo, "origin-ssh", r.Meta.SSHURL, dryRun); err != nil {
return err
}
if err := gitPkg.Push(r.Dir(), "origin-ssh", true, dryRun); err != nil {
return err
}
return nil
}
// Dir retrieves the recipe repository path // Dir retrieves the recipe repository path
func (r Recipe) Dir() string { func (r Recipe) Dir() string {
return path.Join(config.RECIPES_DIR, r.Name) return path.Join(config.RECIPES_DIR, r.Name)
@ -268,14 +249,16 @@ func (r Recipe) SampleEnv() (map[string]string, error) {
func Get2(name string) Recipe2 { func Get2(name string) Recipe2 {
return Recipe2{ return Recipe2{
Name: name, Name: name,
Dir: path.Join(config.RECIPES_DIR, name), Dir: path.Join(config.RECIPES_DIR, name),
SSHURL: fmt.Sprintf(config.SSH_URL_TEMPLATE, name),
} }
} }
type Recipe2 struct { type Recipe2 struct {
Name string Name string
Dir string Dir string
SSHURL string
} }
// Ensure makes sure the recipe exists, is up to date and has the latest version checked out. // Ensure makes sure the recipe exists, is up to date and has the latest version checked out.
@ -508,6 +491,25 @@ func (r Recipe2) ChaosVersion() (string, error) {
return version, nil return version, nil
} }
// Push pushes the latest changes to a SSH URL remote. You need to have your
// local SSH configuration for git.coopcloud.tech working for this to work
func (r Recipe2) Push(dryRun bool) error {
repo, err := git.PlainOpen(r.Dir)
if err != nil {
return err
}
if err := gitPkg.CreateRemote(repo, "origin-ssh", r.SSHURL, dryRun); err != nil {
return err
}
if err := gitPkg.Push(r.Dir, "origin-ssh", true, dryRun); err != nil {
return err
}
return nil
}
// GetRecipesLocal retrieves all local recipe directories // GetRecipesLocal retrieves all local recipe directories
func GetRecipesLocal() ([]string, error) { func GetRecipesLocal() ([]string, error) {
var recipes []string var recipes []string