Files
coop-cloud-wizard/api/utils.go
2026-03-11 15:15:13 -04:00

89 lines
2.0 KiB
Go

package api
import (
"fmt"
"errors"
"log"
"coopcloud.tech/abra/pkg/upstream/stack"
appPkg "coopcloud.tech/abra/pkg/app"
formatter "coopcloud.tech/abra/pkg/formatter"
secret "coopcloud.tech/abra/pkg/secret"
dockerClient "github.com/docker/docker/client"
"coop-cloud-backend/internal"
)
func getDeployVersion(deployMeta stack.DeployMeta, app appPkg.App) (string, error) {
if internal.Chaos {
v, err := app.Recipe.ChaosVersion()
if err != nil {
return "", err
}
log.Printf("version: taking chaos version: %s", v)
return v, nil
}
v, err := getLatestVersionOrCommit(app)
log.Printf("version: taking new recipe version: %s", v)
if err != nil {
return "", err
}
return v, nil
}
func getLatestVersionOrCommit(app appPkg.App) (string, error) {
recipeVersions, warnings, err := app.Recipe.GetRecipeVersions()
if err != nil {
return "", err
}
for _, warning := range warnings {
log.Printf(warning)
}
if len(recipeVersions) > 0 && !internal.Chaos {
latest := recipeVersions[len(recipeVersions)-1]
for tag := range latest {
log.Printf("selected latest recipe version: %s (from %d available versions)", tag, len(recipeVersions))
return tag, nil
}
}
head, err := app.Recipe.Head()
if err != nil {
return "", err
}
return formatter.SmallSHA(head.String()), nil
}
func validateSecrets(cl *dockerClient.Client, app appPkg.App) error {
composeFiles, err := app.Recipe.GetComposeFiles(app.Env)
if err != nil {
return err
}
secretsConfig, err := secret.ReadSecretsConfig(app.Path, composeFiles, app.StackName())
if err != nil {
return err
}
secStats, err := secret.PollSecretsStatus(cl, app)
if err != nil {
return err
}
for _, secStat := range secStats {
if !secStat.CreatedOnRemote {
secretConfig := secretsConfig[secStat.LocalName]
if secretConfig.SkipGenerate {
return errors.New(fmt.Sprintf("secret not inserted (#generate=false): %s", secStat.LocalName))
}
return errors.New(fmt.Sprintf("secret not generated: %s", secStat.LocalName))
}
}
return nil
}