feat: "app new" supports writing env files

And, automagically, chaos commit hashes.
This commit is contained in:
decentral1se 2024-07-17 01:45:19 +02:00
parent 56068362e8
commit 95c598d030
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/app"
appPkg "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app"
"coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/autocomplete"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
@ -28,6 +29,8 @@ deploy <domain>" to do so.
You can see what recipes are available (i.e. values for the <recipe> argument) You can see what recipes are available (i.e. values for the <recipe> argument)
by running "abra recipe ls". by running "abra recipe ls".
Recipe commit hashes are supported values for "[<version>]".
Passing the "--secrets/-S" flag will automatically generate secrets for your Passing the "--secrets/-S" flag will automatically generate secrets for your
app and store them encrypted at rest on the chosen target server. These app and store them encrypted at rest on the chosen target server. These
generated secrets are only visible at generation time, so please take care to generated secrets are only visible at generation time, so please take care to
@ -66,6 +69,7 @@ var appNewCommand = cli.Command{
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
recipe := internal.ValidateRecipe(c) recipe := internal.ValidateRecipe(c)
var version string
if !internal.Chaos { if !internal.Chaos {
if err := recipe.EnsureIsClean(); err != nil { if err := recipe.EnsureIsClean(); err != nil {
log.Fatal(err) log.Fatal(err)
@ -75,16 +79,13 @@ var appNewCommand = cli.Command{
log.Fatal(err) log.Fatal(err)
} }
} }
if c.Args().Get(1) == "" {
var version string
if c.Args().Get(1) == "" {
recipeVersions, err := recipe.GetRecipeVersions() recipeVersions, err := recipe.GetRecipeVersions()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
// NOTE(d1): determine whether recipe versions exist or not and check
// out the latest version or current HEAD
if len(recipeVersions) > 0 { if len(recipeVersions) > 0 {
latest := recipeVersions[len(recipeVersions)-1] latest := recipeVersions[len(recipeVersions)-1]
for tag := range latest { for tag := range latest {
@ -100,7 +101,8 @@ var appNewCommand = cli.Command{
} }
} }
} else { } else {
if _, err := recipe.EnsureVersion(c.Args().Get(1)); err != nil { version = c.Args().Get(1)
if _, err := recipe.EnsureVersion(version); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
@ -180,10 +182,10 @@ var appNewCommand = cli.Command{
log.Fatal(err) log.Fatal(err)
} }
headers := []string{"SERVER", "RECIPE", "DOMAIN"} headers := []string{"SERVER", "DOMAIN", "RECIPE", "VERSION"}
table.Headers(headers...) table.Headers(headers...)
table.Row(internal.NewAppServer, recipe.Name, internal.Domain) table.Row(internal.NewAppServer, internal.Domain, recipe.Name, version)
log.Infof("new app '%s' created 🌞", recipe.Name) log.Infof("new app '%s' created 🌞", recipe.Name)
@ -211,6 +213,16 @@ var appNewCommand = cli.Command{
) )
} }
app, err := app.Get(internal.Domain)
if err != nil {
log.Fatal(err)
}
log.Debugf("choosing %s as version to save to env file", version)
if err := app.WriteRecipeVersion(version); err != nil {
log.Fatalf("writing new recipe version in env file: %s", err)
}
return nil return nil
}, },
} }