forked from toolshed/abra
@ -233,16 +233,18 @@ func GetRecipesLocal() ([]string, error) {
|
||||
return recipes, nil
|
||||
}
|
||||
|
||||
func GetRecipeFeaturesAndCategory(r Recipe) (Features, string, error) {
|
||||
feat := Features{}
|
||||
func GetRecipeFeaturesAndCategory(r Recipe) (Features, string, []string, error) {
|
||||
var (
|
||||
category string
|
||||
warnMsgs []string
|
||||
feat = Features{}
|
||||
)
|
||||
|
||||
var category string
|
||||
|
||||
log.Debugf("attempting to open %s for recipe metadata parsing", r.ReadmePath)
|
||||
log.Debugf("%s: attempt recipe metadata parse", r.ReadmePath)
|
||||
|
||||
readmeFS, err := ioutil.ReadFile(r.ReadmePath)
|
||||
if err != nil {
|
||||
return feat, category, err
|
||||
return feat, category, warnMsgs, err
|
||||
}
|
||||
|
||||
readmeMetadata, err := GetStringInBetween( // Find text between delimiters
|
||||
@ -251,7 +253,7 @@ func GetRecipeFeaturesAndCategory(r Recipe) (Features, string, error) {
|
||||
"<!-- metadata -->", "<!-- endmetadata -->",
|
||||
)
|
||||
if err != nil {
|
||||
return feat, category, err
|
||||
return feat, category, warnMsgs, err
|
||||
}
|
||||
|
||||
readmeLines := strings.Split( // Array item from lines
|
||||
@ -295,20 +297,25 @@ func GetRecipeFeaturesAndCategory(r Recipe) (Features, string, error) {
|
||||
)
|
||||
}
|
||||
if strings.Contains(val, "**Image**") {
|
||||
imageMetadata, err := GetImageMetadata(strings.TrimSpace(
|
||||
imageMetadata, warnings, err := GetImageMetadata(strings.TrimSpace(
|
||||
strings.TrimPrefix(val, "* **Image**:"),
|
||||
), r.Name)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if len(warnings) > 0 {
|
||||
warnMsgs = append(warnMsgs, warnings...)
|
||||
}
|
||||
feat.Image = imageMetadata
|
||||
}
|
||||
}
|
||||
|
||||
return feat, category, nil
|
||||
return feat, category, warnMsgs, nil
|
||||
}
|
||||
|
||||
func GetImageMetadata(imageRowString, recipeName string) (Image, error) {
|
||||
func GetImageMetadata(imageRowString, recipeName string) (Image, []string, error) {
|
||||
var warnMsgs []string
|
||||
|
||||
img := Image{}
|
||||
|
||||
imgFields := strings.Split(imageRowString, ",")
|
||||
@ -319,11 +326,18 @@ func GetImageMetadata(imageRowString, recipeName string) (Image, error) {
|
||||
|
||||
if len(imgFields) < 3 {
|
||||
if imageRowString != "" {
|
||||
log.Warnf("%s image meta has incorrect format: %s", recipeName, imageRowString)
|
||||
warnMsgs = append(
|
||||
warnMsgs,
|
||||
fmt.Sprintf("%s: image meta has incorrect format: %s", recipeName, imageRowString),
|
||||
)
|
||||
} else {
|
||||
log.Warnf("%s image meta is empty?", recipeName)
|
||||
warnMsgs = append(
|
||||
warnMsgs,
|
||||
fmt.Sprintf("%s: image meta is empty?", recipeName),
|
||||
)
|
||||
}
|
||||
return img, nil
|
||||
|
||||
return img, warnMsgs, nil
|
||||
}
|
||||
|
||||
img.Rating = imgFields[1]
|
||||
@ -333,17 +347,17 @@ func GetImageMetadata(imageRowString, recipeName string) (Image, error) {
|
||||
|
||||
imageName, err := GetStringInBetween(recipeName, imgString, "[", "]")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return img, warnMsgs, err
|
||||
}
|
||||
img.Image = strings.ReplaceAll(imageName, "`", "")
|
||||
|
||||
imageURL, err := GetStringInBetween(recipeName, imgString, "(", ")")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return img, warnMsgs, err
|
||||
}
|
||||
img.URL = imageURL
|
||||
|
||||
return img, nil
|
||||
return img, warnMsgs, nil
|
||||
}
|
||||
|
||||
// GetStringInBetween returns empty string if no start or end string found
|
||||
@ -534,11 +548,11 @@ type InternalTracker struct {
|
||||
type RepoCatalogue map[string]RepoMeta
|
||||
|
||||
// ReadReposMetadata retrieves coop-cloud/... repo metadata from Gitea.
|
||||
func ReadReposMetadata() (RepoCatalogue, error) {
|
||||
func ReadReposMetadata(debug bool) (RepoCatalogue, error) {
|
||||
reposMeta := make(RepoCatalogue)
|
||||
|
||||
pageIdx := 1
|
||||
bar := formatter.CreateProgressbar(-1, "retrieving recipe repos list from git.coopcloud.tech...")
|
||||
bar := formatter.CreateProgressbar(-1, "collecting recipe listing")
|
||||
for {
|
||||
var reposList []RepoMeta
|
||||
|
||||
@ -551,19 +565,32 @@ func ReadReposMetadata() (RepoCatalogue, error) {
|
||||
}
|
||||
|
||||
if len(reposList) == 0 {
|
||||
bar.Add(1)
|
||||
if !debug {
|
||||
bar.Add(1)
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
for idx, repo := range reposList {
|
||||
// NOTE(d1): the "example" recipe is a temporary special case
|
||||
// https://git.coopcloud.tech/toolshed/organising/issues/666
|
||||
if repo.Name == "example" {
|
||||
continue
|
||||
}
|
||||
|
||||
reposMeta[repo.Name] = reposList[idx]
|
||||
}
|
||||
|
||||
pageIdx++
|
||||
bar.Add(1)
|
||||
|
||||
if !debug {
|
||||
bar.Add(1)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println() // newline for spinner
|
||||
if err := bar.Close(); err != nil {
|
||||
return reposMeta, err
|
||||
}
|
||||
|
||||
return reposMeta, nil
|
||||
}
|
||||
@ -625,7 +652,7 @@ func GetRecipeCatalogueVersions(recipeName string, catl RecipeCatalogue) ([]stri
|
||||
}
|
||||
|
||||
// UpdateRepositories clones and updates all recipe repositories locally.
|
||||
func UpdateRepositories(repos RepoCatalogue, recipeName string) error {
|
||||
func UpdateRepositories(repos RepoCatalogue, recipeName string, debug bool) error {
|
||||
var barLength int
|
||||
if recipeName != "" {
|
||||
barLength = 1
|
||||
@ -633,9 +660,9 @@ func UpdateRepositories(repos RepoCatalogue, recipeName string) error {
|
||||
barLength = len(repos)
|
||||
}
|
||||
|
||||
cloneLimiter := limit.New(10)
|
||||
cloneLimiter := limit.New(3)
|
||||
|
||||
retrieveBar := formatter.CreateProgressbar(barLength, "ensuring recipes are cloned & up-to-date...")
|
||||
retrieveBar := formatter.CreateProgressbar(barLength, "retrieving recipes")
|
||||
ch := make(chan string, barLength)
|
||||
for _, repoMeta := range repos {
|
||||
go func(rm RepoMeta) {
|
||||
@ -644,7 +671,9 @@ func UpdateRepositories(repos RepoCatalogue, recipeName string) error {
|
||||
|
||||
if recipeName != "" && recipeName != rm.Name {
|
||||
ch <- rm.Name
|
||||
retrieveBar.Add(1)
|
||||
if !debug {
|
||||
retrieveBar.Add(1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@ -653,7 +682,9 @@ func UpdateRepositories(repos RepoCatalogue, recipeName string) error {
|
||||
}
|
||||
|
||||
ch <- rm.Name
|
||||
retrieveBar.Add(1)
|
||||
if !debug {
|
||||
retrieveBar.Add(1)
|
||||
}
|
||||
}(repoMeta)
|
||||
}
|
||||
|
||||
@ -661,6 +692,10 @@ func UpdateRepositories(repos RepoCatalogue, recipeName string) error {
|
||||
<-ch // wait for everything
|
||||
}
|
||||
|
||||
if err := retrieveBar.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user