refactor(recipe): use template for ssh url
This commit is contained in:
parent
4cf6155fb8
commit
47013c63d6
@ -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 {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user