feat: skip git syncing on catalogue generation
This commit is contained in:
parent
b0834925a3
commit
9f70a69bbf
|
@ -66,6 +66,7 @@ var catalogueGenerateCommand = &cli.Command{
|
||||||
internal.CommitFlag,
|
internal.CommitFlag,
|
||||||
internal.CommitMessageFlag,
|
internal.CommitMessageFlag,
|
||||||
internal.DryFlag,
|
internal.DryFlag,
|
||||||
|
internal.SkipUpdatesFlag,
|
||||||
},
|
},
|
||||||
Description: `
|
Description: `
|
||||||
This command generates a new copy of the recipe catalogue which can be found on:
|
This command generates a new copy of the recipe catalogue which can be found on:
|
||||||
|
@ -112,51 +113,11 @@ A new catalogue copy can be published to the recipes repository by passing the
|
||||||
barLength = len(repos)
|
barLength = len(repos)
|
||||||
}
|
}
|
||||||
|
|
||||||
cloneLimiter := limit.New(10)
|
if !internal.SkipUpdates {
|
||||||
retrieveBar := formatter.CreateProgressbar(len(repos), "retrieving recipes from recipes.coopcloud.tech...")
|
logrus.Warnf("ensuring %v recipe(s) are up-to-date", barLength)
|
||||||
ch := make(chan string, barLength)
|
if err := updateRepositories(repos, recipeName); err != nil {
|
||||||
for _, repoMeta := range repos {
|
logrus.Fatal(err)
|
||||||
go func(rm catalogue.RepoMeta) {
|
}
|
||||||
cloneLimiter.Begin()
|
|
||||||
defer cloneLimiter.End()
|
|
||||||
|
|
||||||
if recipeName != "" && recipeName != rm.Name {
|
|
||||||
ch <- rm.Name
|
|
||||||
retrieveBar.Add(1)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if _, exists := CatalogueSkipList[rm.Name]; exists {
|
|
||||||
ch <- rm.Name
|
|
||||||
retrieveBar.Add(1)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
recipeDir := path.Join(config.RECIPES_DIR, rm.Name)
|
|
||||||
|
|
||||||
if err := gitPkg.Clone(recipeDir, rm.SSHURL); err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
isClean, err := gitPkg.IsClean(rm.Name)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !isClean {
|
|
||||||
logrus.Fatalf("%s has locally unstaged changes", rm.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := recipe.EnsureUpToDate(rm.Name); err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ch <- rm.Name
|
|
||||||
retrieveBar.Add(1)
|
|
||||||
}(repoMeta)
|
|
||||||
}
|
|
||||||
|
|
||||||
for range repos {
|
|
||||||
<-ch // wait for everything
|
|
||||||
}
|
}
|
||||||
|
|
||||||
catl := make(catalogue.RecipeCatalogue)
|
catl := make(catalogue.RecipeCatalogue)
|
||||||
|
@ -265,3 +226,62 @@ var CatalogueCommand = &cli.Command{
|
||||||
catalogueGenerateCommand,
|
catalogueGenerateCommand,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateRepositories(repos catalogue.RepoCatalogue, recipeName string) error {
|
||||||
|
var barLength int
|
||||||
|
if recipeName != "" {
|
||||||
|
barLength = 1
|
||||||
|
} else {
|
||||||
|
barLength = len(repos)
|
||||||
|
}
|
||||||
|
|
||||||
|
cloneLimiter := limit.New(10)
|
||||||
|
|
||||||
|
retrieveBar := formatter.CreateProgressbar(barLength, "retrieving recipes from recipes.coopcloud.tech...")
|
||||||
|
ch := make(chan string, barLength)
|
||||||
|
for _, repoMeta := range repos {
|
||||||
|
go func(rm catalogue.RepoMeta) {
|
||||||
|
cloneLimiter.Begin()
|
||||||
|
defer cloneLimiter.End()
|
||||||
|
|
||||||
|
if recipeName != "" && recipeName != rm.Name {
|
||||||
|
ch <- rm.Name
|
||||||
|
retrieveBar.Add(1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if _, exists := CatalogueSkipList[rm.Name]; exists {
|
||||||
|
ch <- rm.Name
|
||||||
|
retrieveBar.Add(1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
recipeDir := path.Join(config.RECIPES_DIR, rm.Name)
|
||||||
|
|
||||||
|
if err := gitPkg.Clone(recipeDir, rm.SSHURL); err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
isClean, err := gitPkg.IsClean(rm.Name)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isClean {
|
||||||
|
logrus.Fatalf("%s has locally unstaged changes", rm.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := catalogue.EnsureUpToDate(rm.Name); err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ch <- rm.Name
|
||||||
|
retrieveBar.Add(1)
|
||||||
|
}(repoMeta)
|
||||||
|
}
|
||||||
|
|
||||||
|
for range repos {
|
||||||
|
<-ch // wait for everything
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -446,6 +446,15 @@ var OnlyErrorFlag = &cli.BoolFlag{
|
||||||
Destination: &OnlyErrors,
|
Destination: &OnlyErrors,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var SkipUpdates bool
|
||||||
|
var SkipUpdatesFlag = &cli.BoolFlag{
|
||||||
|
Name: "skip-updates",
|
||||||
|
Aliases: []string{"s"},
|
||||||
|
Value: false,
|
||||||
|
Usage: "Skip updating git repositories",
|
||||||
|
Destination: &SkipUpdates,
|
||||||
|
}
|
||||||
|
|
||||||
// SSHFailMsg is a hopefully helpful SSH failure message
|
// SSHFailMsg is a hopefully helpful SSH failure message
|
||||||
var SSHFailMsg = `
|
var SSHFailMsg = `
|
||||||
Woops, Abra is unable to connect to connect to %s.
|
Woops, Abra is unable to connect to connect to %s.
|
||||||
|
|
Loading…
Reference in New Issue