0
0
forked from toolshed/abra

Compare commits

..

12 Commits

Author SHA1 Message Date
4b688825e0 feat: create docker context when server folder does exist 2025-11-03 17:29:04 +01:00
b0cf2a1f8e chore: make i18n 2025-11-02 10:44:34 +00:00
6b7020d457 test: env version to .config.env 2025-11-02 10:44:34 +00:00
efdac610bd fix: skip local server on it's own 2025-11-02 10:44:34 +00:00
cd6021f116 fix: expose new version
See toolshed/abra#713
2025-11-02 10:44:34 +00:00
ee8de8ef5c chore: update translation files
Updated by "Update PO files to match POT (msgmerge)" add-on in Weblate.

Translation: Co-op Cloud/abra
Translate-URL: https://translate.coopcloud.tech/projects/co-op-cloud/abra/
2025-10-31 20:38:18 +00:00
e5a653c002 chore: make i18n 2025-10-31 21:38:01 +01:00
2cca04de90 fix(move): does not error when secret already exists on new server
See toolshed/abra#709
2025-10-31 21:37:55 +01:00
f2f79e2df8 chore: update translation files
Updated by "Update PO files to match POT (msgmerge)" add-on in Weblate.

Translation: Co-op Cloud/abra
Translate-URL: https://translate.coopcloud.tech/projects/co-op-cloud/abra/
2025-10-31 20:33:36 +00:00
dd83741a9f chore: i18n 2025-10-31 21:31:49 +01:00
dc2cd85d91 feat!: abra app env pull
`abra app env` -> `abra app env list`.

See toolshed/abra#497
2025-10-31 21:31:43 +01:00
96e59cf196 test: adjust to match new reality [ci skip] 2025-10-31 14:35:57 +01:00
17 changed files with 1087 additions and 485 deletions

View File

@ -152,7 +152,6 @@ checkout as-is. Recipe commit hashes are also supported as values for
log.Fatal(err) log.Fatal(err)
} }
appPkg.ExposeAllEnv(stackName, compose, app.Env)
appPkg.SetRecipeLabel(compose, stackName, app.Recipe.Name) appPkg.SetRecipeLabel(compose, stackName, app.Recipe.Name)
appPkg.SetChaosLabel(compose, stackName, internal.Chaos) appPkg.SetChaosLabel(compose, stackName, internal.Chaos)
if internal.Chaos { if internal.Chaos {
@ -171,6 +170,9 @@ checkout as-is. Recipe commit hashes are also supported as values for
} }
appPkg.SetVersionLabel(compose, stackName, versionLabel) appPkg.SetVersionLabel(compose, stackName, versionLabel)
newRecipeWithDeployVersion := fmt.Sprintf("%s:%s", app.Recipe.Name, toDeployVersion)
appPkg.ExposeAllEnv(stackName, compose, app.Env, newRecipeWithDeployVersion)
envVars, err := appPkg.CheckEnv(app) envVars, err := appPkg.CheckEnv(app)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)

View File

@ -1,28 +1,50 @@
package app package app
import ( import (
"context"
"fmt" "fmt"
"os"
"path"
"path/filepath"
"regexp"
"sort" "sort"
"strings" "strings"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"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/config"
containerPkg "coopcloud.tech/abra/pkg/container"
contextPkg "coopcloud.tech/abra/pkg/context"
"coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/formatter"
"coopcloud.tech/abra/pkg/i18n" "coopcloud.tech/abra/pkg/i18n"
"coopcloud.tech/abra/pkg/log"
"coopcloud.tech/abra/pkg/upstream/stack"
"github.com/docker/docker/api/types/filters"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
// translators: `abra app env` aliases. use a comma separated list of aliases with // translators: `abra app env` aliases. use a comma separated list of aliases
// no spaces in between // with no spaces in between
var appEnvAliases = i18n.G("e") var appEnvAliases = i18n.G("e")
var AppEnvCommand = &cobra.Command{ // translators: `abra app env list` aliases. use a comma separated list of
// translators: `app env` command // aliases with no spaces in between
Use: i18n.G("env <domain> [flags]"), var appEnvListAliases = i18n.G("l,ls")
Aliases: strings.Split(appEnvAliases, ","),
// translators: Short description for `app env` command // translators: `abra app env pull` aliases. use a comma separated list of
Short: i18n.G("Show app .env values"), // aliases with no spaces in between
Example: i18n.G(" abra app env 1312.net"), var appEnvPullAliases = i18n.G("pl,p")
var AppEnvListCommand = &cobra.Command{
// translators: `app env list` command
Use: i18n.G("list <domain> [flags]"),
Aliases: strings.Split(appEnvListAliases, ","),
// translators: Short description for `app env list` command
Short: i18n.G("List all app environment values"),
Example: i18n.G(" abra app env list 1312.net"),
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
ValidArgsFunction: func( ValidArgsFunction: func(
cmd *cobra.Command, cmd *cobra.Command,
@ -49,3 +71,274 @@ var AppEnvCommand = &cobra.Command{
fmt.Println(overview) fmt.Println(overview)
}, },
} }
var AppEnvPullCommand = &cobra.Command{
// translators: `app pull` command
Use: i18n.G("pull <domain> [flags]"),
Aliases: strings.Split(appEnvPullAliases, ","),
// translators: Short description for `app env pull` command
Short: i18n.G("Pull app environment values from a deployed app"),
Long: i18n.G(`Pull app environment values from a deploymed app.
A convenient command for when you've lost your app environment file or want to
synchronize your local app environment values with what is deployed live.`),
Example: i18n.G(` # pull existing .env file and overwrite local values
abra app env pull 1312.net --force
# pull lost app .env file
abra app env pull my.gitea.net --server 1312.net`),
Args: cobra.MaximumNArgs(2),
ValidArgsFunction: func(
cmd *cobra.Command,
args []string,
toComplete string) ([]string, cobra.ShellCompDirective) {
return autocomplete.AppNameComplete()
},
Run: func(cmd *cobra.Command, args []string) {
appName := args[0]
appEnvPath := path.Join(config.ABRA_DIR, "servers", server, fmt.Sprintf("%s.env", appName))
if _, err := os.Stat(appEnvPath); !os.IsNotExist(err) {
log.Fatal(i18n.G("%s already exists?", appEnvPath))
}
if server == "" {
log.Fatal(i18n.G("unable to determine server of app %s, please pass --server/-s", appName))
}
serverDir := filepath.Join(config.SERVERS_DIR, server)
if _, err := os.Stat(serverDir); os.IsNotExist(err) {
log.Fatal(i18n.G("unknown server %s, run \"abra server add %s\"?", server, server))
}
store := contextPkg.NewDefaultDockerContextStore()
contexts, err := store.Store.List()
if err != nil {
log.Fatal(i18n.G("unable to look up server context for %s: %s", server, err))
}
var contextCreated bool
if server == "default" {
contextCreated = true
}
for _, context := range contexts {
if context.Name == server {
contextCreated = true
}
}
if !contextCreated {
log.Fatal(i18n.G("%s missing context, run \"abra server add %s\"?", server, server))
}
cl, err := client.New(server)
if err != nil {
log.Fatal(err)
}
deployMeta, err := stack.IsDeployed(context.Background(), cl, appPkg.StackName(appName))
if err != nil {
log.Fatal(err)
}
if !deployMeta.IsDeployed {
log.Fatal(i18n.G("%s is not deployed?", appName))
}
filters := filters.NewArgs()
filters.Add("name", fmt.Sprintf("^%s_%s", app.StackName(appName), "app"))
targetContainer, err := containerPkg.GetContainer(context.Background(), cl, filters, internal.NoInput)
if err != nil {
log.Fatal(i18n.G("unable to retrieve container for %s: %s", appName, err))
}
inspectResult, err := cl.ContainerInspect(context.Background(), targetContainer.ID)
if err != nil {
log.Fatal(i18n.G("unable to inspect container for %s: %s", appName, err))
}
deploymentEnv := make(map[string]string)
for _, envVar := range inspectResult.Config.Env {
split := strings.SplitN(envVar, "=", 2)
if len(split) != 2 {
log.Debug(i18n.G("no value attached to %s", envVar))
continue
}
key, val := split[0], split[1]
deploymentEnv[key] = val
}
log.Debug(i18n.G("pulled env values from %s deployment: %s", appName, deploymentEnv))
var (
recipeEnvVar string
recipeKey string
)
if r, ok := deploymentEnv["TYPE"]; ok {
recipeKey = "TYPE"
recipeEnvVar = r
}
if r, ok := deploymentEnv["RECIPE"]; ok {
recipeKey = "RECIPE"
recipeEnvVar = r
}
if recipeEnvVar == "" {
log.Fatal(i18n.G("unable to determine recipe type from %s, env: %v", appName, inspectResult.Config.Env))
}
var recipeName = recipeEnvVar
if strings.Contains(recipeEnvVar, ":") {
split := strings.Split(recipeEnvVar, ":")
recipeName = split[0]
}
recipe := internal.ValidateRecipe(
[]string{recipeName},
cmd.Name(),
)
version := deployMeta.Version
if deployMeta.IsChaos {
version = deployMeta.ChaosVersion
}
if _, err := recipe.EnsureVersion(version); err != nil {
log.Fatal(err)
}
mergedEnv, err := recipe.SampleEnv()
if err != nil {
log.Fatal(err)
}
log.Debug(i18n.G("retrieved env values from .env.sample of %s: %s", recipe.Name, mergedEnv))
for k, v := range deploymentEnv {
mergedEnv[k] = v
}
if !strings.Contains(recipeEnvVar, ":") {
mergedEnv[recipeKey] = fmt.Sprintf("%s:%s", mergedEnv[recipeKey], version)
}
log.Debug(i18n.G("final merged env values for %s are: %s", appName, mergedEnv))
envSample, err := os.ReadFile(recipe.SampleEnvPath)
if err != nil {
log.Fatal(err)
}
err = os.WriteFile(appEnvPath, envSample, 0o664)
if err != nil {
log.Fatal(i18n.G("unable to write new env %s: %s", appEnvPath, err))
}
read, err := os.ReadFile(appEnvPath)
if err != nil {
log.Fatal(i18n.G("unable to read new env %s: %s", appEnvPath, err))
}
sampleEnv, err := recipe.SampleEnv()
if err != nil {
log.Fatal(err)
}
var composeFileUpdated bool
newContents := string(read)
for key, val := range mergedEnv {
if sampleEnv[key] == val {
continue
}
if key == "COMPOSE_FILE" {
composeFileUpdated = true
continue
}
if m, _ := regexp.MatchString(fmt.Sprintf(`#%s=`, key), newContents); m {
log.Debug(i18n.G("uncommenting %s", key))
re := regexp.MustCompile(fmt.Sprintf(`#%s=`, key))
newContents = re.ReplaceAllString(newContents, fmt.Sprintf("%s=", key))
}
if m, _ := regexp.MatchString(fmt.Sprintf(`# %s=`, key), newContents); m {
log.Debug(i18n.G("uncommenting %s", key))
re := regexp.MustCompile(fmt.Sprintf(`# %s=`, key))
newContents = re.ReplaceAllString(newContents, fmt.Sprintf("%s=", key))
}
if m, _ := regexp.MatchString(fmt.Sprintf(`%s=".*"`, key), newContents); m {
log.Debug(i18n.G(`inserting %s="%s" (double quotes)`, key, val))
re := regexp.MustCompile(fmt.Sprintf(`%s=".*"`, key))
newContents = re.ReplaceAllString(newContents, fmt.Sprintf(`%s="%s"`, key, val))
continue
}
if m, _ := regexp.MatchString(fmt.Sprintf(`%s='.*'`, key), newContents); m {
log.Debug(i18n.G(`inserting %s='%s' (single quotes)`, key, val))
re := regexp.MustCompile(fmt.Sprintf(`%s='.*'`, key))
newContents = re.ReplaceAllString(newContents, fmt.Sprintf(`%s='%s'`, key, val))
continue
}
if m, _ := regexp.MatchString(fmt.Sprintf("%s=.*", key), newContents); m {
log.Debug(i18n.G("inserting %s=%s (no quotes)", key, val))
re := regexp.MustCompile(fmt.Sprintf("%s=.*", key))
newContents = re.ReplaceAllString(newContents, fmt.Sprintf("%s=%s", key, val))
}
}
err = os.WriteFile(appEnvPath, []byte(newContents), 0)
if err != nil {
log.Fatal(i18n.G("unable to write new env %s: %s", appEnvPath, err))
}
log.Info(i18n.G("%s successfully created", appEnvPath))
if composeFileUpdated {
log.Warn(i18n.G("manual update required: COMPOSE_FILE=\"%s\"", mergedEnv["COMPOSE_FILE"]))
}
},
}
var AppEnvCommand = &cobra.Command{
// translators: `app env` command group
Use: i18n.G("env [cmd] [args] [flags]"),
Aliases: strings.Split(appEnvAliases, ","),
// translators: Short description for `app env` command group
Short: i18n.G("Manage app environment values"),
}
var (
server string
)
func init() {
AppEnvPullCommand.Flags().BoolVarP(
&internal.Force,
i18n.G("force"),
i18n.G("f"),
false,
i18n.G("perform action without further prompt"),
)
AppEnvPullCommand.Flags().StringVarP(
&server,
i18n.G("server"),
i18n.G("s"),
"",
i18n.G("server associated with deployed app"),
)
AppEnvPullCommand.RegisterFlagCompletionFunc(
i18n.G("server"),
func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return autocomplete.ServerNameComplete()
},
)
}

View File

@ -2,6 +2,7 @@ package app
import ( import (
"errors" "errors"
"fmt"
"strings" "strings"
appPkg "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app"
@ -177,7 +178,9 @@ beforehand. See "abra app backup" for more.`),
log.Fatal(err) log.Fatal(err)
} }
appPkg.ExposeAllEnv(stackName, compose, app.Env) newRecipeWithDowngradeVersion := fmt.Sprintf("%s:%s", app.Recipe.Name, chosenDowngrade)
appPkg.ExposeAllEnv(stackName, compose, app.Env, newRecipeWithDowngradeVersion)
appPkg.SetRecipeLabel(compose, stackName, app.Recipe.Name) appPkg.SetRecipeLabel(compose, stackName, app.Recipe.Name)
appPkg.SetChaosLabel(compose, stackName, internal.Chaos) appPkg.SetChaosLabel(compose, stackName, internal.Chaos)
if internal.Chaos { if internal.Chaos {

View File

@ -28,6 +28,7 @@ var AppUndeployCommand = &cobra.Command{
Use: i18n.G("undeploy <domain> [flags]"), Use: i18n.G("undeploy <domain> [flags]"),
// translators: Short description for `app undeploy` command // translators: Short description for `app undeploy` command
Aliases: strings.Split(appUndeployAliases, ","), Aliases: strings.Split(appUndeployAliases, ","),
Short: i18n.G("Undeploy a deployed app"),
Long: i18n.G(`This does not destroy any application data. Long: i18n.G(`This does not destroy any application data.
However, you should remain vigilant, as your swarm installation will consider However, you should remain vigilant, as your swarm installation will consider

View File

@ -190,7 +190,9 @@ beforehand. See "abra app backup" for more.`),
log.Fatal(err) log.Fatal(err)
} }
appPkg.ExposeAllEnv(stackName, compose, app.Env) newRecipeWithUpgradeVersion := fmt.Sprintf("%s:%s", app.Recipe.Name, chosenUpgrade)
appPkg.ExposeAllEnv(stackName, compose, app.Env, newRecipeWithUpgradeVersion)
appPkg.SetRecipeLabel(compose, stackName, app.Recipe.Name) appPkg.SetRecipeLabel(compose, stackName, app.Recipe.Name)
appPkg.SetChaosLabel(compose, stackName, internal.Chaos) appPkg.SetChaosLabel(compose, stackName, internal.Chaos)
if internal.Chaos { if internal.Chaos {

View File

@ -283,6 +283,11 @@ Config:
app.AppBackupSnapshotsCommand, app.AppBackupSnapshotsCommand,
) )
app.AppEnvCommand.AddCommand(
app.AppEnvListCommand,
app.AppEnvPullCommand,
)
app.AppCommand.AddCommand( app.AppCommand.AddCommand(
app.AppBackupCommand, app.AppBackupCommand,
app.AppCheckCommand, app.AppCheckCommand,

View File

@ -502,7 +502,11 @@ func GetAppComposeConfig(recipe string, opts stack.Deploy, appEnv envfile.AppEnv
} }
// ExposeAllEnv exposes all env variables to the app container // ExposeAllEnv exposes all env variables to the app container
func ExposeAllEnv(stackName string, compose *composetypes.Config, appEnv envfile.AppEnv) { func ExposeAllEnv(
stackName string,
compose *composetypes.Config,
appEnv envfile.AppEnv,
toDeployVersion string) {
for _, service := range compose.Services { for _, service := range compose.Services {
if service.Name == "app" { if service.Name == "app" {
log.Debug(i18n.G("adding env vars to %s service config", stackName)) log.Debug(i18n.G("adding env vars to %s service config", stackName))
@ -510,6 +514,11 @@ func ExposeAllEnv(stackName string, compose *composetypes.Config, appEnv envfile
_, exists := service.Environment[k] _, exists := service.Environment[k]
if !exists { if !exists {
value := v value := v
if k == "TYPE" || k == "RECIPE" {
// NOTE(d1): don't use the wrong version from the app env
// since we are deploying a new version
value = toDeployVersion
}
service.Environment[k] = &value service.Environment[k] = &value
log.Debug(i18n.G("%s: %s: %s", stackName, k, value)) log.Debug(i18n.G("%s: %s: %s", stackName, k, value))
} }

View File

@ -44,11 +44,21 @@ func New(serverName string, opts ...Opt) (*client.Client, error) {
ctx, err := GetContext(serverName) ctx, err := GetContext(serverName)
if err != nil { if err != nil {
serverDir := path.Join(config.SERVERS_DIR, serverName) serverDir := path.Join(config.SERVERS_DIR, serverName)
if _, err := os.Stat(serverDir); err == nil { if _, err := os.Stat(serverDir); err != nil {
return nil, errors.New(i18n.G("server missing context, run \"abra server add %s\"?", serverName)) return nil, errors.New(i18n.G("server missing, run \"abra server add %s\"?", serverName))
} }
return nil, errors.New(i18n.G("unknown server, run \"abra server add %s\"?", serverName)) // When the docker context does not exist but the server folder is
// there, let's create a new docker context.
err = CreateContext(serverName)
if err != nil {
return nil, errors.New(i18n.G("server missing context, context creation failed: %s", err))
}
ctx, err = GetContext(serverName)
if err != nil {
return nil, errors.New(i18n.G("server missing context, run \"abra server add %s\"?", serverName))
}
} }
ctxEndpoint, err := contextPkg.GetContextEndpoint(ctx) ctxEndpoint, err := contextPkg.GetContextEndpoint(ctx)

View File

@ -7,13 +7,13 @@
msgid "" msgid ""
msgstr "Project-Id-Version: \n" msgstr "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n" "Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2025-10-31 19:25+0100\n" "POT-Creation-Date: 2025-11-02 11:41+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n" "Language: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ./cli/app/cp.go:38 #: ./cli/app/cp.go:38
@ -92,6 +92,14 @@ msgid " # pass <cmd> args/flags without \"--\"\n"
" abra app cmd 1312.net my_cmd --local" " abra app cmd 1312.net my_cmd --local"
msgstr "" msgstr ""
#: ./cli/app/env.go:85
msgid " # pull existing .env file and overwrite local values\n"
" abra app env pull 1312.net --force\n"
"\n"
" # pull lost app .env file\n"
" abra app env pull my.gitea.net --server 1312.net"
msgstr ""
#: ./cli/app/restart.go:36 #: ./cli/app/restart.go:36
msgid " # restart a single app service\n" msgid " # restart a single app service\n"
" abra app restart 1312.net app\n" " abra app restart 1312.net app\n"
@ -125,8 +133,8 @@ msgid " # standard deployment\n"
" abra app deploy 1312.net 886db76d" " abra app deploy 1312.net 886db76d"
msgstr "" msgstr ""
#: ./cli/app/env.go:25 #: ./cli/app/env.go:47
msgid " abra app env 1312.net" msgid " abra app env list 1312.net"
msgstr "" msgstr ""
#: ./cli/app/remove.go:45 #: ./cli/app/remove.go:45
@ -149,7 +157,7 @@ msgstr ""
msgid " abra upgrade --rc" msgid " abra upgrade --rc"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:48 #: ./cli/app/rollback.go:49
msgid " # standard rollback\n" msgid " # standard rollback\n"
" abra app rollback 1312.net\n" " abra app rollback 1312.net\n"
"\n" "\n"
@ -201,7 +209,7 @@ msgstr ""
msgid "%s already exists" msgid "%s already exists"
msgstr "" msgstr ""
#: ./pkg/app/app.go:380 #: ./cli/app/env.go:102 ./pkg/app/app.go:380
#, c-format #, c-format
msgid "%s already exists?" msgid "%s already exists?"
msgstr "" msgstr ""
@ -331,17 +339,17 @@ msgstr ""
msgid "%s is missing the TYPE env var?" msgid "%s is missing the TYPE env var?"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:305 ./cli/app/rollback.go:309 #: ./cli/app/rollback.go:308 ./cli/app/rollback.go:312
#, c-format #, c-format
msgid "%s is not a downgrade for %s?" msgid "%s is not a downgrade for %s?"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:426 ./cli/app/upgrade.go:430 #: ./cli/app/upgrade.go:428 ./cli/app/upgrade.go:432
#, c-format #, c-format
msgid "%s is not an upgrade for %s?" msgid "%s is not an upgrade for %s?"
msgstr "" msgstr ""
#: ./cli/app/logs.go:65 ./cli/app/ps.go:62 ./cli/app/restart.go:100 ./cli/app/services.go:55 ./cli/app/undeploy.go:65 ./cli/app/upgrade.go:447 #: ./cli/app/env.go:146 ./cli/app/logs.go:65 ./cli/app/ps.go:62 ./cli/app/restart.go:100 ./cli/app/services.go:55 ./cli/app/undeploy.go:66 ./cli/app/upgrade.go:449
#, c-format #, c-format
msgid "%s is not deployed?" msgid "%s is not deployed?"
msgstr "" msgstr ""
@ -356,7 +364,12 @@ msgstr ""
msgid "%s is still deployed. Run \"abra app undeploy %s\"" msgid "%s is still deployed. Run \"abra app undeploy %s\""
msgstr "" msgstr ""
#: ./cli/app/deploy.go:182 ./cli/app/upgrade.go:208 #: ./cli/app/env.go:132
#, c-format
msgid "%s missing context, run \"abra server add %s\"?"
msgstr ""
#: ./cli/app/deploy.go:184 ./cli/app/upgrade.go:210
#, c-format #, c-format
msgid "%s missing from %s.env" msgid "%s missing from %s.env"
msgstr "" msgstr ""
@ -421,6 +434,11 @@ msgstr ""
msgid "%s successfully added" msgid "%s successfully added"
msgstr "" msgstr ""
#: ./cli/app/env.go:301
#, c-format
msgid "%s successfully created"
msgstr ""
#: ./cli/app/secret.go:254 #: ./cli/app/secret.go:254
#, c-format #, c-format
msgid "%s successfully stored on server" msgid "%s successfully stored on server"
@ -466,7 +484,7 @@ msgstr ""
msgid "%s: %s → %s" msgid "%s: %s → %s"
msgstr "" msgstr ""
#: ./pkg/app/app.go:514 #: ./pkg/app/app.go:523
#, c-format #, c-format
msgid "%s: %s: %s" msgid "%s: %s: %s"
msgstr "" msgstr ""
@ -531,12 +549,12 @@ msgstr ""
msgid "%s: waiting %d seconds before next retry" msgid "%s: waiting %d seconds before next retry"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:421 #: ./cli/app/upgrade.go:423
#, c-format #, c-format
msgid "'%s' is not a known version" msgid "'%s' is not a known version"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:300 ./cli/app/upgrade.go:416 #: ./cli/app/rollback.go:303 ./cli/app/upgrade.go:418
#, c-format #, c-format
msgid "'%s' is not a known version for %s" msgid "'%s' is not a known version for %s"
msgstr "" msgstr ""
@ -603,7 +621,7 @@ msgstr ""
msgid "Both local recipe and live deployment labels are shown." msgid "Both local recipe and live deployment labels are shown."
msgstr "" msgstr ""
#: ./cli/app/backup.go:319 ./cli/app/backup.go:335 ./cli/app/check.go:95 ./cli/app/cmd.go:285 ./cli/app/cp.go:385 ./cli/app/deploy.go:393 ./cli/app/labels.go:143 ./cli/app/new.go:397 ./cli/app/ps.go:213 ./cli/app/restart.go:162 ./cli/app/restore.go:138 ./cli/app/secret.go:569 ./cli/app/secret.go:609 ./cli/app/secret.go:633 ./cli/app/secret.go:641 ./cli/catalogue/catalogue.go:318 ./cli/recipe/lint.go:137 #: ./cli/app/backup.go:319 ./cli/app/backup.go:335 ./cli/app/check.go:95 ./cli/app/cmd.go:285 ./cli/app/cp.go:385 ./cli/app/deploy.go:395 ./cli/app/labels.go:143 ./cli/app/new.go:397 ./cli/app/ps.go:213 ./cli/app/restart.go:162 ./cli/app/restore.go:138 ./cli/app/secret.go:569 ./cli/app/secret.go:609 ./cli/app/secret.go:633 ./cli/app/secret.go:641 ./cli/catalogue/catalogue.go:318 ./cli/recipe/lint.go:137
msgid "C" msgid "C"
msgstr "" msgstr ""
@ -744,7 +762,7 @@ msgid "Creates a new app from a default recipe.\n"
"on your $PATH." "on your $PATH."
msgstr "" msgstr ""
#: ./cli/app/deploy.go:409 ./cli/app/new.go:373 ./cli/app/rollback.go:357 ./cli/app/upgrade.go:467 #: ./cli/app/deploy.go:411 ./cli/app/new.go:373 ./cli/app/rollback.go:360 ./cli/app/upgrade.go:469
msgid "D" msgid "D"
msgstr "" msgstr ""
@ -794,7 +812,7 @@ msgid "Downloads a backup.tar.gz to the current working directory.\n"
"\"backupbot.backup.path\" labels." "\"backupbot.backup.path\" labels."
msgstr "" msgstr ""
#: ./cli/app/env.go:48 #: ./cli/app/env.go:70
msgid "ENV OVERVIEW" msgid "ENV OVERVIEW"
msgstr "" msgstr ""
@ -939,6 +957,11 @@ msgstr ""
msgid "Lint a recipe" msgid "Lint a recipe"
msgstr "" msgstr ""
#. translators: Short description for `app env list` command
#: ./cli/app/env.go:46
msgid "List all app environment values"
msgstr ""
#. translators: Short description for `app cmd list` command #. translators: Short description for `app cmd list` command
#: ./cli/app/cmd.go:210 #: ./cli/app/cmd.go:210
msgid "List all available commands" msgid "List all available commands"
@ -993,6 +1016,11 @@ msgstr ""
msgid "Manage app backups" msgid "Manage app backups"
msgstr "" msgstr ""
#. translators: Short description for `app env` command group
#: ./cli/app/env.go:314
msgid "Manage app environment values"
msgstr ""
#. translators: Short description for `app secret` command group #. translators: Short description for `app secret` command group
#: ./cli/app/secret.go:537 #: ./cli/app/secret.go:537
msgid "Manage app secrets" msgid "Manage app secrets"
@ -1099,6 +1127,18 @@ msgid "Prunes unused containers, networks, and dangling images.\n"
"app. This can result in unwanted data loss if not used carefully." "app. This can result in unwanted data loss if not used carefully."
msgstr "" msgstr ""
#. translators: Short description for `app env pull` command
#: ./cli/app/env.go:80
msgid "Pull app environment values from a deployed app"
msgstr ""
#: ./cli/app/env.go:81
msgid "Pull app environment values from a deploymed app.\n"
"\n"
"A convenient command for when you've lost your app environment file or want to\n"
"synchronize your local app environment values with what is deployed live."
msgstr ""
#: ./pkg/lint/recipe.go:110 #: ./pkg/lint/recipe.go:110
msgid "README.md metadata filled in" msgid "README.md metadata filled in"
msgstr "" msgstr ""
@ -1192,7 +1232,7 @@ msgid "Restore a snapshot"
msgstr "" msgstr ""
#. translators: Short description for `app rollback` command #. translators: Short description for `app rollback` command
#: ./cli/app/rollback.go:33 #: ./cli/app/rollback.go:34
msgid "Roll an app back to a previous version" msgid "Roll an app back to a previous version"
msgstr "" msgstr ""
@ -1268,11 +1308,6 @@ msgstr ""
msgid "Select recipe" msgid "Select recipe"
msgstr "" msgstr ""
#. translators: Short description for `app env` command
#: ./cli/app/env.go:24
msgid "Show app .env values"
msgstr ""
#. translators: Short description for `app labels` command #. translators: Short description for `app labels` command
#: ./cli/app/labels.go:32 #: ./cli/app/labels.go:32
msgid "Show deployment labels" msgid "Show deployment labels"
@ -1370,7 +1405,7 @@ msgid "This command restarts services within a deployed app.\n"
"Pass \"--all-services/-a\" to restart all services." "Pass \"--all-services/-a\" to restart all services."
msgstr "" msgstr ""
#: ./cli/app/rollback.go:34 #: ./cli/app/rollback.go:35
msgid "This command rolls an app back to a previous version.\n" msgid "This command rolls an app back to a previous version.\n"
"\n" "\n"
"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" "Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n"
@ -1387,7 +1422,7 @@ msgid "This command rolls an app back to a previous version.\n"
"beforehand. See \"abra app backup\" for more." "beforehand. See \"abra app backup\" for more."
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:31 #: ./cli/app/undeploy.go:32
msgid "This does not destroy any application data.\n" msgid "This does not destroy any application data.\n"
"\n" "\n"
"However, you should remain vigilant, as your swarm installation will consider\n" "However, you should remain vigilant, as your swarm installation will consider\n"
@ -1434,7 +1469,7 @@ msgid "To load completions:\n"
" # and source this file from your PowerShell profile." " # and source this file from your PowerShell profile."
msgstr "" msgstr ""
#: ./cli/app/deploy.go:433 ./cli/app/rollback.go:373 ./cli/app/upgrade.go:491 #: ./cli/app/deploy.go:435 ./cli/app/rollback.go:376 ./cli/app/upgrade.go:493
msgid "U" msgid "U"
msgstr "" msgstr ""
@ -1450,6 +1485,10 @@ msgstr ""
msgid "UPGRADE" msgid "UPGRADE"
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:31
msgid "Undeploy a deployed app"
msgstr ""
#: ./cli/recipe/upgrade.go:50 #: ./cli/recipe/upgrade.go:50
msgid "Upgrade a given <recipe> configuration.\n" msgid "Upgrade a given <recipe> configuration.\n"
"\n" "\n"
@ -1721,7 +1760,7 @@ msgstr ""
msgid "add release note? (leave empty to skip)" msgid "add release note? (leave empty to skip)"
msgstr "" msgstr ""
#: ./pkg/app/app.go:508 #: ./pkg/app/app.go:512
#, c-format #, c-format
msgid "adding env vars to %s service config" msgid "adding env vars to %s service config"
msgstr "" msgstr ""
@ -1805,7 +1844,7 @@ msgstr ""
msgid "attempting to run %s" msgid "attempting to run %s"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:270 ./cli/app/upgrade.go:293 #: ./cli/app/deploy.go:272 ./cli/app/upgrade.go:295
#, c-format #, c-format
msgid "attempting to run post deploy commands, saw: %s" msgid "attempting to run post deploy commands, saw: %s"
msgstr "" msgstr ""
@ -1830,7 +1869,7 @@ msgstr ""
msgid "autocomplete [bash|zsh|fish|powershell]" msgid "autocomplete [bash|zsh|fish|powershell]"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:65 ./cli/app/logs.go:39 ./cli/app/rollback.go:64 ./cli/app/secret.go:49 ./cli/app/secret.go:191 ./cli/app/secret.go:360 ./cli/app/upgrade.go:63 ./pkg/autocomplete/autocomplete.go:18 ./pkg/autocomplete/autocomplete.go:33 ./pkg/autocomplete/autocomplete.go:44 ./pkg/autocomplete/autocomplete.go:50 ./pkg/autocomplete/autocomplete.go:70 ./pkg/autocomplete/autocomplete.go:88 ./pkg/autocomplete/autocomplete.go:104 ./pkg/autocomplete/autocomplete.go:110 ./pkg/autocomplete/autocomplete.go:125 #: ./cli/app/deploy.go:65 ./cli/app/logs.go:39 ./cli/app/rollback.go:65 ./cli/app/secret.go:49 ./cli/app/secret.go:191 ./cli/app/secret.go:360 ./cli/app/upgrade.go:63 ./pkg/autocomplete/autocomplete.go:18 ./pkg/autocomplete/autocomplete.go:33 ./pkg/autocomplete/autocomplete.go:44 ./pkg/autocomplete/autocomplete.go:50 ./pkg/autocomplete/autocomplete.go:70 ./pkg/autocomplete/autocomplete.go:88 ./pkg/autocomplete/autocomplete.go:104 ./pkg/autocomplete/autocomplete.go:110 ./pkg/autocomplete/autocomplete.go:125
#, c-format #, c-format
msgid "autocomplete failed: %s" msgid "autocomplete failed: %s"
msgstr "" msgstr ""
@ -1885,7 +1924,7 @@ msgstr ""
#. no spaces in between #. no spaces in between
#. translators: `abra app cp` aliases. use a comma separated list of aliases with #. translators: `abra app cp` aliases. use a comma separated list of aliases with
#. no spaces in between #. no spaces in between
#: ./cli/app/backup.go:148 ./cli/app/cp.go:30 ./cli/app/deploy.go:417 ./cli/app/rollback.go:365 ./cli/app/upgrade.go:475 #: ./cli/app/backup.go:148 ./cli/app/cp.go:30 ./cli/app/deploy.go:419 ./cli/app/rollback.go:368 ./cli/app/upgrade.go:477
msgid "c" msgid "c"
msgstr "" msgstr ""
@ -1941,7 +1980,7 @@ msgstr ""
msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:367 #: ./cli/app/deploy.go:369
#, c-format #, c-format
msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?\n" msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?\n"
" to return to a regular release, specify a release tag, commit SHA or use \"--latest\"" " to return to a regular release, specify a release tag, commit SHA or use \"--latest\""
@ -1960,7 +1999,7 @@ msgstr ""
msgid "cannot use '[secret] [version]' and '--all' together" msgid "cannot use '[secret] [version]' and '--all' together"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:309 #: ./cli/app/deploy.go:311
msgid "cannot use --chaos and --latest together" msgid "cannot use --chaos and --latest together"
msgstr "" msgstr ""
@ -1984,11 +2023,11 @@ msgstr ""
msgid "cannot use [service] and --all-services/-a together" msgid "cannot use [service] and --all-services/-a together"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:301 ./cli/app/new.go:76 #: ./cli/app/deploy.go:303 ./cli/app/new.go:76
msgid "cannot use [version] and --chaos together" msgid "cannot use [version] and --chaos together"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:305 #: ./cli/app/deploy.go:307
msgid "cannot use [version] and --latest together" msgid "cannot use [version] and --latest together"
msgstr "" msgstr ""
@ -2020,7 +2059,7 @@ msgstr ""
msgid "cfg" msgid "cfg"
msgstr "" msgstr ""
#: ./cli/app/backup.go:318 ./cli/app/backup.go:334 ./cli/app/check.go:94 ./cli/app/cmd.go:284 ./cli/app/cp.go:384 ./cli/app/deploy.go:392 ./cli/app/labels.go:142 ./cli/app/new.go:396 ./cli/app/ps.go:212 ./cli/app/restart.go:161 ./cli/app/restore.go:137 ./cli/app/secret.go:568 ./cli/app/secret.go:608 ./cli/app/secret.go:632 ./cli/app/secret.go:640 ./cli/catalogue/catalogue.go:317 ./cli/recipe/lint.go:136 #: ./cli/app/backup.go:318 ./cli/app/backup.go:334 ./cli/app/check.go:94 ./cli/app/cmd.go:284 ./cli/app/cp.go:384 ./cli/app/deploy.go:394 ./cli/app/labels.go:142 ./cli/app/new.go:396 ./cli/app/ps.go:212 ./cli/app/restart.go:161 ./cli/app/restore.go:137 ./cli/app/secret.go:568 ./cli/app/secret.go:608 ./cli/app/secret.go:632 ./cli/app/secret.go:640 ./cli/catalogue/catalogue.go:317 ./cli/recipe/lint.go:136
msgid "chaos" msgid "chaos"
msgstr "" msgstr ""
@ -2029,7 +2068,7 @@ msgstr ""
msgid "check <domain> [flags]" msgid "check <domain> [flags]"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:94 ./cli/app/undeploy.go:57 ./cli/app/upgrade.go:439 #: ./cli/app/deploy.go:94 ./cli/app/undeploy.go:58 ./cli/app/upgrade.go:441
#, c-format #, c-format
msgid "checking whether %s is already deployed" msgid "checking whether %s is already deployed"
msgstr "" msgstr ""
@ -2050,7 +2089,7 @@ msgstr ""
msgid "choosing %s as new version for %s" msgid "choosing %s as new version for %s"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:151 #: ./cli/app/rollback.go:152
#, c-format #, c-format
msgid "choosing %s as version to rollback" msgid "choosing %s as version to rollback"
msgstr "" msgstr ""
@ -2180,7 +2219,7 @@ msgstr ""
msgid "considering %s config(s) for tag update" msgid "considering %s config(s) for tag update"
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:140 ./cli/server/prune.go:53 #: ./cli/app/undeploy.go:141 ./cli/server/prune.go:53
#, c-format #, c-format
msgid "containers pruned: %d; space reclaimed: %s" msgid "containers pruned: %d; space reclaimed: %s"
msgstr "" msgstr ""
@ -2311,7 +2350,7 @@ msgstr ""
msgid "critical errors present in %s config" msgid "critical errors present in %s config"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:295 #: ./cli/app/rollback.go:298
#, c-format #, c-format
msgid "current deployment '%s' is not a known version for %s" msgid "current deployment '%s' is not a known version for %s"
msgstr "" msgstr ""
@ -2363,7 +2402,7 @@ msgstr ""
msgid "deploy labels stanza present" msgid "deploy labels stanza present"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:427 #: ./cli/app/deploy.go:429
msgid "deploy latest recipe version" msgid "deploy latest recipe version"
msgstr "" msgstr ""
@ -2465,11 +2504,11 @@ msgstr ""
msgid "dirty: %v, " msgid "dirty: %v, "
msgstr "" msgstr ""
#: ./cli/app/deploy.go:419 ./cli/app/rollback.go:367 ./cli/app/upgrade.go:477 #: ./cli/app/deploy.go:421 ./cli/app/rollback.go:370 ./cli/app/upgrade.go:479
msgid "disable converge logic checks" msgid "disable converge logic checks"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:411 ./cli/app/rollback.go:359 ./cli/app/upgrade.go:469 #: ./cli/app/deploy.go:413 ./cli/app/rollback.go:362 ./cli/app/upgrade.go:471
msgid "disable public DNS checks" msgid "disable public DNS checks"
msgstr "" msgstr ""
@ -2567,9 +2606,9 @@ msgstr ""
msgid "duplicate secret target for %s not allowed" msgid "duplicate secret target for %s not allowed"
msgstr "" msgstr ""
#. translators: `abra app env` aliases. use a comma separated list of aliases with #. translators: `abra app env` aliases. use a comma separated list of aliases
#. no spaces in between #. with no spaces in between
#: ./cli/app/env.go:17 ./cli/recipe/lint.go:145 ./cli/recipe/new.go:131 #: ./cli/app/env.go:31 ./cli/recipe/lint.go:145 ./cli/recipe/new.go:131
msgid "e" msgid "e"
msgstr "" msgstr ""
@ -2608,9 +2647,9 @@ msgstr ""
msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled" msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled"
msgstr "" msgstr ""
#. translators: `app env` command #. translators: `app env` command group
#: ./cli/app/env.go:21 #: ./cli/app/env.go:311
msgid "env <domain> [flags]" msgid "env [cmd] [args] [flags]"
msgstr "" msgstr ""
#: ./pkg/app/app.go:248 #: ./pkg/app/app.go:248
@ -2687,7 +2726,7 @@ msgstr ""
#. translators: `abra recipe fetch` aliases. use a comma separated list of aliases #. translators: `abra recipe fetch` aliases. use a comma separated list of aliases
#. with no spaces in between #. with no spaces in between
#: ./cli/app/deploy.go:401 ./cli/app/remove.go:163 ./cli/app/rollback.go:349 ./cli/app/secret.go:593 ./cli/app/upgrade.go:459 ./cli/app/volume.go:217 ./cli/recipe/fetch.go:20 ./cli/recipe/fetch.go:138 #: ./cli/app/deploy.go:403 ./cli/app/env.go:325 ./cli/app/remove.go:163 ./cli/app/rollback.go:352 ./cli/app/secret.go:593 ./cli/app/upgrade.go:461 ./cli/app/volume.go:217 ./cli/recipe/fetch.go:20 ./cli/recipe/fetch.go:138
msgid "f" msgid "f"
msgstr "" msgstr ""
@ -2913,7 +2952,12 @@ msgstr ""
msgid "filter by recipe" msgid "filter by recipe"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:400 ./cli/app/remove.go:162 ./cli/app/rollback.go:348 ./cli/app/upgrade.go:458 ./cli/app/volume.go:216 ./cli/recipe/fetch.go:137 #: ./cli/app/env.go:229
#, c-format
msgid "final merged env values for %s are: %s"
msgstr ""
#: ./cli/app/deploy.go:402 ./cli/app/env.go:324 ./cli/app/remove.go:162 ./cli/app/rollback.go:351 ./cli/app/upgrade.go:460 ./cli/app/volume.go:216 ./cli/recipe/fetch.go:137
msgid "force" msgid "force"
msgstr "" msgstr ""
@ -3127,11 +3171,11 @@ msgstr ""
msgid "id: %s, " msgid "id: %s, "
msgstr "" msgstr ""
#: ./cli/app/backup.go:321 ./cli/app/backup.go:337 ./cli/app/check.go:97 ./cli/app/cmd.go:287 ./cli/app/cp.go:387 ./cli/app/deploy.go:395 ./cli/app/labels.go:145 ./cli/app/new.go:399 ./cli/app/ps.go:215 ./cli/app/restart.go:164 ./cli/app/restore.go:140 ./cli/app/secret.go:571 ./cli/app/secret.go:611 ./cli/app/secret.go:635 ./cli/app/secret.go:643 ./cli/catalogue/catalogue.go:320 ./cli/recipe/lint.go:139 #: ./cli/app/backup.go:321 ./cli/app/backup.go:337 ./cli/app/check.go:97 ./cli/app/cmd.go:287 ./cli/app/cp.go:387 ./cli/app/deploy.go:397 ./cli/app/labels.go:145 ./cli/app/new.go:399 ./cli/app/ps.go:215 ./cli/app/restart.go:164 ./cli/app/restore.go:140 ./cli/app/secret.go:571 ./cli/app/secret.go:611 ./cli/app/secret.go:635 ./cli/app/secret.go:643 ./cli/catalogue/catalogue.go:320 ./cli/recipe/lint.go:139
msgid "ignore uncommitted recipes changes" msgid "ignore uncommitted recipes changes"
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:155 ./cli/server/prune.go:74 #: ./cli/app/undeploy.go:156 ./cli/server/prune.go:74
#, c-format #, c-format
msgid "images pruned: %d; space reclaimed: %s" msgid "images pruned: %d; space reclaimed: %s"
msgstr "" msgstr ""
@ -3251,6 +3295,21 @@ msgstr ""
msgid "insert <domain> <secret> <version> [<data>] [flags]" msgid "insert <domain> <secret> <version> [<data>] [flags]"
msgstr "" msgstr ""
#: ./cli/app/env.go:290
#, c-format
msgid "inserting %s=%s (no quotes)"
msgstr ""
#: ./cli/app/env.go:283
#, c-format
msgid "inserting %s='%s' (single quotes)"
msgstr ""
#: ./cli/app/env.go:276
#, c-format
msgid "inserting %s=\"%s\" (double quotes)"
msgstr ""
#: ./cli/upgrade.go:62 #: ./cli/upgrade.go:62
msgid "install release candidate (may contain bugs)" msgid "install release candidate (may contain bugs)"
msgstr "" msgstr ""
@ -3310,16 +3369,22 @@ msgstr ""
#. no spaces in between #. no spaces in between
#. translators: `abra recipe lint` aliases. use a comma separated list of #. translators: `abra recipe lint` aliases. use a comma separated list of
#. aliases with no spaces in between #. aliases with no spaces in between
#: ./cli/app/cmd.go:261 ./cli/app/deploy.go:425 ./cli/app/logs.go:20 ./cli/recipe/lint.go:17 ./cli/server/add.go:207 #: ./cli/app/cmd.go:261 ./cli/app/deploy.go:427 ./cli/app/logs.go:20 ./cli/recipe/lint.go:17 ./cli/server/add.go:207
msgid "l" msgid "l"
msgstr "" msgstr ""
#. translators: `abra app env list` aliases. use a comma separated list of
#. aliases with no spaces in between
#: ./cli/app/env.go:35
msgid "l,ls"
msgstr ""
#. translators: `app labels` command #. translators: `app labels` command
#: ./cli/app/labels.go:29 #: ./cli/app/labels.go:29
msgid "labels <domain> [flags]" msgid "labels <domain> [flags]"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:424 ./cli/app/list.go:182 #: ./cli/app/deploy.go:426 ./cli/app/list.go:182
msgid "latest" msgid "latest"
msgstr "" msgstr ""
@ -3361,8 +3426,9 @@ msgstr ""
#. translators: `app backup list` command #. translators: `app backup list` command
#. translators: `app cmd list` command #. translators: `app cmd list` command
#. translators: `app env list` command
#. translators: `app volume list` command #. translators: `app volume list` command
#: ./cli/app/backup.go:21 ./cli/app/cmd.go:207 ./cli/app/volume.go:25 #: ./cli/app/backup.go:21 ./cli/app/cmd.go:207 ./cli/app/env.go:43 ./cli/app/volume.go:25
msgid "list <domain> [flags]" msgid "list <domain> [flags]"
msgstr "" msgstr ""
@ -3474,6 +3540,11 @@ msgstr ""
msgid "man [flags]" msgid "man [flags]"
msgstr "" msgstr ""
#: ./cli/app/env.go:304
#, c-format
msgid "manual update required: COMPOSE_FILE=\"%s\""
msgstr ""
#: ./cli/app/move.go:204 #: ./cli/app/move.go:204
#, c-format #, c-format
msgid "migrating app config from %s to %s" msgid "migrating app config from %s to %s"
@ -3553,7 +3624,7 @@ msgstr ""
msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\""
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:147 ./cli/server/prune.go:60 #: ./cli/app/undeploy.go:148 ./cli/server/prune.go:60
#, c-format #, c-format
msgid "networks pruned: %d" msgid "networks pruned: %d"
msgstr "" msgstr ""
@ -3621,7 +3692,7 @@ msgstr ""
msgid "no app provided" msgid "no app provided"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:126 #: ./cli/app/rollback.go:127
msgid "no available downgrades" msgid "no available downgrades"
msgstr "" msgstr ""
@ -3744,6 +3815,11 @@ msgstr ""
msgid "no unstable tags" msgid "no unstable tags"
msgstr "" msgstr ""
#: ./cli/app/env.go:165
#, c-format
msgid "no value attached to %s"
msgstr ""
#: ./cli/internal/recipe.go:72 ./cli/internal/recipe.go:87 #: ./cli/internal/recipe.go:72 ./cli/internal/recipe.go:87
msgid "no version bump type specififed?" msgid "no version bump type specififed?"
msgstr "" msgstr ""
@ -3766,11 +3842,11 @@ msgstr ""
msgid "no volumes to remove" msgid "no volumes to remove"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:416 ./cli/app/rollback.go:364 ./cli/app/upgrade.go:474 #: ./cli/app/deploy.go:418 ./cli/app/rollback.go:367 ./cli/app/upgrade.go:476
msgid "no-converge-checks" msgid "no-converge-checks"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:408 ./cli/app/rollback.go:356 ./cli/app/upgrade.go:466 #: ./cli/app/deploy.go:410 ./cli/app/rollback.go:359 ./cli/app/upgrade.go:468
msgid "no-domain-checks" msgid "no-domain-checks"
msgstr "" msgstr ""
@ -3826,7 +3902,7 @@ msgstr ""
msgid "only show errors" msgid "only show errors"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:485 #: ./cli/app/upgrade.go:487
msgid "only show release notes" msgid "only show release notes"
msgstr "" msgstr ""
@ -3838,7 +3914,7 @@ msgstr ""
#. with no spaces in between #. with no spaces in between
#. translators: `abra server prune` aliases. use a comma separated list of #. translators: `abra server prune` aliases. use a comma separated list of
#. aliases with no spaces in between #. aliases with no spaces in between
#: ./cli/app/backup.go:295 ./cli/app/new.go:381 ./cli/app/ps.go:29 ./cli/app/secret.go:561 ./cli/app/secret.go:585 ./cli/app/secret.go:625 ./cli/app/undeploy.go:168 ./cli/catalogue/catalogue.go:294 ./cli/recipe/list.go:112 ./cli/recipe/release.go:681 ./cli/server/prune.go:18 #: ./cli/app/backup.go:295 ./cli/app/new.go:381 ./cli/app/ps.go:29 ./cli/app/secret.go:561 ./cli/app/secret.go:585 ./cli/app/secret.go:625 ./cli/app/undeploy.go:169 ./cli/catalogue/catalogue.go:294 ./cli/recipe/list.go:112 ./cli/recipe/release.go:681 ./cli/server/prune.go:18
msgid "p" msgid "p"
msgstr "" msgstr ""
@ -3857,22 +3933,22 @@ msgstr ""
msgid "parsed following command arguments: %s" msgid "parsed following command arguments: %s"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:342 #: ./cli/app/upgrade.go:344
#, c-format #, c-format
msgid "parsing chosen upgrade version failed: %s" msgid "parsing chosen upgrade version failed: %s"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:386 #: ./cli/app/upgrade.go:388
#, c-format #, c-format
msgid "parsing deployed version failed: %s" msgid "parsing deployed version failed: %s"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:347 #: ./cli/app/upgrade.go:349
#, c-format #, c-format
msgid "parsing deployment version failed: %s" msgid "parsing deployment version failed: %s"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:353 ./cli/app/upgrade.go:392 #: ./cli/app/upgrade.go:355 ./cli/app/upgrade.go:394
#, c-format #, c-format
msgid "parsing recipe version failed: %s" msgid "parsing recipe version failed: %s"
msgstr "" msgstr ""
@ -3897,31 +3973,37 @@ msgstr ""
msgid "pattern" msgid "pattern"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:403 ./cli/app/remove.go:165 ./cli/app/rollback.go:351 ./cli/app/upgrade.go:461 ./cli/app/volume.go:219 #: ./cli/app/deploy.go:405 ./cli/app/env.go:327 ./cli/app/remove.go:165 ./cli/app/rollback.go:354 ./cli/app/upgrade.go:463 ./cli/app/volume.go:219
msgid "perform action without further prompt" msgid "perform action without further prompt"
msgstr "" msgstr ""
#. translators: `abra app env pull` aliases. use a comma separated list of
#. aliases with no spaces in between
#: ./cli/app/env.go:39
msgid "pl,p"
msgstr ""
#: ./cli/recipe/release.go:634 #: ./cli/recipe/release.go:634
#, c-format #, c-format
msgid "please fix your synced label for %s and re-run this command" msgid "please fix your synced label for %s and re-run this command"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:263 #: ./cli/app/rollback.go:266
#, c-format #, c-format
msgid "please select a downgrade (version: %s):" msgid "please select a downgrade (version: %s):"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:268 #: ./cli/app/rollback.go:271
#, c-format #, c-format
msgid "please select a downgrade (version: %s, chaos: %s):" msgid "please select a downgrade (version: %s, chaos: %s):"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:309 #: ./cli/app/upgrade.go:311
#, c-format #, c-format
msgid "please select an upgrade (version: %s):" msgid "please select an upgrade (version: %s):"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:314 #: ./cli/app/upgrade.go:316
#, c-format #, c-format
msgid "please select an upgrade (version: %s, chaos: %s):" msgid "please select an upgrade (version: %s, chaos: %s):"
msgstr "" msgstr ""
@ -3960,7 +4042,7 @@ msgstr ""
msgid "proposed images: %v" msgid "proposed images: %v"
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:167 #: ./cli/app/undeploy.go:168
msgid "prune" msgid "prune"
msgstr "" msgstr ""
@ -3969,7 +4051,7 @@ msgstr ""
msgid "prune <server> [flags]" msgid "prune <server> [flags]"
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:170 #: ./cli/app/undeploy.go:171
msgid "prune unused containers, networks, and dangling images" msgid "prune unused containers, networks, and dangling images"
msgstr "" msgstr ""
@ -3994,6 +4076,16 @@ msgstr ""
msgid "publish new release?" msgid "publish new release?"
msgstr "" msgstr ""
#. translators: `app pull` command
#: ./cli/app/env.go:77
msgid "pull <domain> [flags]"
msgstr ""
#: ./cli/app/env.go:173
#, c-format
msgid "pulled env values from %s deployment: %s"
msgstr ""
#: ./pkg/app/app.go:429 #: ./pkg/app/app.go:429
msgid "querying remote servers..." msgid "querying remote servers..."
msgstr "" msgstr ""
@ -4002,7 +4094,7 @@ msgstr ""
#. with no spaces in between #. with no spaces in between
#. translators: `abra recipe` aliases. use a comma separated list of aliases #. translators: `abra recipe` aliases. use a comma separated list of aliases
#. with no spaces in between #. with no spaces in between
#: ./cli/app/backup.go:327 ./cli/app/list.go:300 ./cli/app/move.go:350 ./cli/app/run.go:23 ./cli/app/upgrade.go:483 ./cli/catalogue/catalogue.go:302 ./cli/recipe/recipe.go:12 ./cli/recipe/release.go:649 ./cli/recipe/sync.go:272 #: ./cli/app/backup.go:327 ./cli/app/list.go:300 ./cli/app/move.go:350 ./cli/app/run.go:23 ./cli/app/upgrade.go:485 ./cli/catalogue/catalogue.go:302 ./cli/recipe/recipe.go:12 ./cli/recipe/release.go:649 ./cli/recipe/sync.go:272
msgid "r" msgid "r"
msgstr "" msgstr ""
@ -4017,12 +4109,12 @@ msgstr ""
msgid "read %s as tags for recipe %s" msgid "read %s as tags for recipe %s"
msgstr "" msgstr ""
#: ./pkg/app/app.go:575 ./pkg/config/env.go:50 ./pkg/envfile/envfile.go:42 ./pkg/envfile/envfile.go:80 #: ./pkg/app/app.go:584 ./pkg/config/env.go:50 ./pkg/envfile/envfile.go:42 ./pkg/envfile/envfile.go:80
#, c-format #, c-format
msgid "read %s from %s" msgid "read %s from %s"
msgstr "" msgstr ""
#: ./pkg/app/app.go:577 #: ./pkg/app/app.go:586
#, c-format #, c-format
msgid "read 0 command names from %s" msgid "read 0 command names from %s"
msgstr "" msgstr ""
@ -4118,7 +4210,7 @@ msgstr ""
msgid "release <recipe> [version] [flags]" msgid "release <recipe> [version] [flags]"
msgstr "" msgstr ""
#: ./cli/app/upgrade.go:482 #: ./cli/app/upgrade.go:484
msgid "releasenotes" msgid "releasenotes"
msgstr "" msgstr ""
@ -4340,6 +4432,11 @@ msgstr ""
msgid "retrieved app statuses: %s" msgid "retrieved app statuses: %s"
msgstr "" msgstr ""
#: ./cli/app/env.go:219
#, c-format
msgid "retrieved env values from .env.sample of %s: %s"
msgstr ""
#: ./cli/recipe/version.go:46 #: ./cli/recipe/version.go:46
msgid "retrieved versions from local recipe repository" msgid "retrieved versions from local recipe repository"
msgstr "" msgstr ""
@ -4357,7 +4454,7 @@ msgstr ""
#. aliases with no spaces in between #. aliases with no spaces in between
#. translators: `abra recipe release` aliases. use a comma separated list of #. translators: `abra recipe release` aliases. use a comma separated list of
#. aliases with no spaces in between #. aliases with no spaces in between
#: ./cli/app/rollback.go:26 ./cli/recipe/release.go:28 #: ./cli/app/rollback.go:27 ./cli/recipe/release.go:28
msgid "rl" msgid "rl"
msgstr "" msgstr ""
@ -4374,7 +4471,7 @@ msgid "rm"
msgstr "" msgstr ""
#. translators: `app rollback` command #. translators: `app rollback` command
#: ./cli/app/rollback.go:30 #: ./cli/app/rollback.go:31
msgid "rollback <domain> [version] [flags]" msgid "rollback <domain> [version] [flags]"
msgstr "" msgstr ""
@ -4417,7 +4514,7 @@ msgstr ""
msgid "run command locally" msgid "run command locally"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:268 ./cli/app/upgrade.go:290 #: ./cli/app/deploy.go:270 ./cli/app/upgrade.go:292
#, c-format #, c-format
msgid "run the following post-deploy commands: %s" msgid "run the following post-deploy commands: %s"
msgstr "" msgstr ""
@ -4460,7 +4557,7 @@ msgstr ""
#. aliases with no spaces in between #. aliases with no spaces in between
#. translators: `abra server` aliases. use a comma separated list of aliases #. translators: `abra server` aliases. use a comma separated list of aliases
#. with no spaces in between #. with no spaces in between
#: ./cli/app/backup.go:198 ./cli/app/backup.go:263 ./cli/app/backup.go:287 ./cli/app/list.go:323 ./cli/app/logs.go:101 ./cli/app/new.go:358 ./cli/app/restore.go:114 ./cli/app/secret.go:535 ./cli/catalogue/catalogue.go:27 ./cli/catalogue/catalogue.go:310 ./cli/recipe/fetch.go:130 ./cli/recipe/sync.go:24 ./cli/server/server.go:12 #: ./cli/app/backup.go:198 ./cli/app/backup.go:263 ./cli/app/backup.go:287 ./cli/app/env.go:333 ./cli/app/list.go:323 ./cli/app/logs.go:101 ./cli/app/new.go:358 ./cli/app/restore.go:114 ./cli/app/secret.go:535 ./cli/catalogue/catalogue.go:27 ./cli/catalogue/catalogue.go:310 ./cli/recipe/fetch.go:130 ./cli/recipe/sync.go:24 ./cli/server/server.go:12
msgid "s" msgid "s"
msgstr "" msgstr ""
@ -4502,12 +4599,12 @@ msgstr ""
msgid "secret not found: %s" msgid "secret not found: %s"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:337 #: ./cli/app/deploy.go:339
#, c-format #, c-format
msgid "secret not generated: %s" msgid "secret not generated: %s"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:335 #: ./cli/app/deploy.go:337
#, c-format #, c-format
msgid "secret not inserted (#generate=false): %s" msgid "secret not inserted (#generate=false): %s"
msgstr "" msgstr ""
@ -4527,7 +4624,7 @@ msgid "secrets are %s shown again, please save them %s"
msgstr "" msgstr ""
#. translators: `abra server` command for autocompletion #. translators: `abra server` command for autocompletion
#: ./cli/app/list.go:322 ./cli/app/list.go:329 ./cli/app/new.go:357 ./cli/app/new.go:364 ./cli/run.go:101 #: ./cli/app/env.go:332 ./cli/app/env.go:339 ./cli/app/list.go:322 ./cli/app/list.go:329 ./cli/app/new.go:357 ./cli/app/new.go:364 ./cli/run.go:101
msgid "server" msgid "server"
msgstr "" msgstr ""
@ -4541,6 +4638,10 @@ msgstr ""
msgid "server [cmd] [args] [flags]" msgid "server [cmd] [args] [flags]"
msgstr "" msgstr ""
#: ./cli/app/env.go:335
msgid "server associated with deployed app"
msgstr ""
#: ./cli/server/add.go:191 #: ./cli/server/add.go:191
#, c-format #, c-format
msgid "server dir for %s already created" msgid "server dir for %s already created"
@ -4627,7 +4728,7 @@ msgstr ""
msgid "severity" msgid "severity"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:435 ./cli/app/rollback.go:375 ./cli/app/upgrade.go:493 #: ./cli/app/deploy.go:437 ./cli/app/rollback.go:378 ./cli/app/upgrade.go:495
msgid "show all configs & images, including unchanged ones" msgid "show all configs & images, including unchanged ones"
msgstr "" msgstr ""
@ -4651,7 +4752,7 @@ msgstr ""
msgid "show debug messages" msgid "show debug messages"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:432 ./cli/app/rollback.go:372 ./cli/app/upgrade.go:490 #: ./cli/app/deploy.go:434 ./cli/app/rollback.go:375 ./cli/app/upgrade.go:492
msgid "show-unchanged" msgid "show-unchanged"
msgstr "" msgstr ""
@ -4699,11 +4800,11 @@ msgstr ""
msgid "skipping converge logic checks" msgid "skipping converge logic checks"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:196 #: ./cli/app/deploy.go:198
msgid "skipping domain checks" msgid "skipping domain checks"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:193 #: ./cli/app/deploy.go:195
msgid "skipping domain checks, no DOMAIN=... configured" msgid "skipping domain checks, no DOMAIN=... configured"
msgstr "" msgstr ""
@ -4717,12 +4818,12 @@ msgstr ""
msgid "skipping secret (because it already exists) on %s: %s" msgid "skipping secret (because it already exists) on %s: %s"
msgstr "" msgstr ""
#: ./pkg/app/app.go:683 #: ./pkg/app/app.go:692
#, c-format #, c-format
msgid "skipping version %s write as already exists in %s.env" msgid "skipping version %s write as already exists in %s.env"
msgstr "" msgstr ""
#: ./pkg/app/app.go:677 #: ./pkg/app/app.go:686
#, c-format #, c-format
msgid "skipping writing version %s because dry run" msgid "skipping writing version %s because dry run"
msgstr "" msgstr ""
@ -5034,6 +5135,16 @@ msgstr ""
msgid "unable to delete tag %s: %s" msgid "unable to delete tag %s: %s"
msgstr "" msgstr ""
#: ./cli/app/env.go:191
#, c-format
msgid "unable to determine recipe type from %s, env: %v"
msgstr ""
#: ./cli/app/env.go:106
#, c-format
msgid "unable to determine server of app %s, please pass --server/-s"
msgstr ""
#: ./cli/recipe/upgrade.go:253 #: ./cli/recipe/upgrade.go:253
#, c-format #, c-format
msgid "unable to determine versioning semantics of %s, listing all tags" msgid "unable to determine versioning semantics of %s, listing all tags"
@ -5064,6 +5175,11 @@ msgstr ""
msgid "unable to git pull in %s: %s" msgid "unable to git pull in %s: %s"
msgstr "" msgstr ""
#: ./cli/app/env.go:158
#, c-format
msgid "unable to inspect container for %s: %s"
msgstr ""
#: ./pkg/lint/recipe.go:496 #: ./pkg/lint/recipe.go:496
#, c-format #, c-format
msgid "unable to list local tags for %s" msgid "unable to list local tags for %s"
@ -5073,6 +5189,11 @@ msgstr ""
msgid "unable to locate git command, cannot output diff" msgid "unable to locate git command, cannot output diff"
msgstr "" msgstr ""
#: ./cli/app/env.go:117
#, c-format
msgid "unable to look up server context for %s: %s"
msgstr ""
#: ./cli/recipe/fetch.go:77 ./pkg/git/read.go:26 ./pkg/lint/recipe.go:491 ./pkg/recipe/git.go:236 #: ./cli/recipe/fetch.go:77 ./pkg/git/read.go:26 ./pkg/lint/recipe.go:491 ./pkg/recipe/git.go:236
#, c-format #, c-format
msgid "unable to open %s: %s" msgid "unable to open %s: %s"
@ -5128,6 +5249,11 @@ msgstr ""
msgid "unable to query status of %s: %s" msgid "unable to query status of %s: %s"
msgstr "" msgstr ""
#: ./cli/app/env.go:243
#, c-format
msgid "unable to read new env %s: %s"
msgstr ""
#: ./pkg/recipe/git.go:241 #: ./pkg/recipe/git.go:241
#, c-format #, c-format
msgid "unable to read remotes in %s: %s" msgid "unable to read remotes in %s: %s"
@ -5178,6 +5304,11 @@ msgstr ""
msgid "unable to retrieve %s resources on %s: %s" msgid "unable to retrieve %s resources on %s: %s"
msgstr "" msgstr ""
#: ./cli/app/env.go:153
#, c-format
msgid "unable to retrieve container for %s: %s"
msgstr ""
#: ./cli/app/list.go:153 #: ./cli/app/list.go:153
#, c-format #, c-format
msgid "unable to retrieve tags for %s: %s" msgid "unable to retrieve tags for %s: %s"
@ -5208,6 +5339,16 @@ msgstr ""
msgid "unable to validate recipe: %s" msgid "unable to validate recipe: %s"
msgstr "" msgstr ""
#: ./cli/app/env.go:238 ./cli/app/env.go:298
#, c-format
msgid "unable to write new env %s: %s"
msgstr ""
#: ./cli/app/env.go:264 ./cli/app/env.go:270
#, c-format
msgid "uncommenting %s"
msgstr ""
#: ./pkg/upstream/convert/service.go:462 #: ./pkg/upstream/convert/service.go:462
#, c-format #, c-format
msgid "undefined config %q" msgid "undefined config %q"
@ -5233,7 +5374,7 @@ msgstr ""
msgid "undeploy <domain> [flags]" msgid "undeploy <domain> [flags]"
msgstr "" msgstr ""
#: ./cli/app/undeploy.go:116 #: ./cli/app/undeploy.go:117
msgid "undeploy succeeded 🟢" msgid "undeploy succeeded 🟢"
msgstr "" msgstr ""
@ -5266,7 +5407,7 @@ msgstr ""
msgid "unknown" msgid "unknown"
msgstr "" msgstr ""
#: ./cli/app/rollback.go:148 #: ./cli/app/rollback.go:149
msgid "unknown deployed version, unable to downgrade" msgid "unknown deployed version, unable to downgrade"
msgstr "" msgstr ""
@ -5289,6 +5430,11 @@ msgstr ""
msgid "unknown restart policy: %s" msgid "unknown restart policy: %s"
msgstr "" msgstr ""
#: ./cli/app/env.go:111
#, c-format
msgid "unknown server %s, run \"abra server add %s\"?"
msgstr ""
#: ./pkg/client/client.go:51 #: ./pkg/client/client.go:51
#, c-format #, c-format
msgid "unknown server, run \"abra server add %s\"?" msgid "unknown server, run \"abra server add %s\"?"
@ -5417,7 +5563,7 @@ msgstr ""
msgid "version" msgid "version"
msgstr "" msgstr ""
#: ./pkg/app/app.go:681 #: ./pkg/app/app.go:690
#, c-format #, c-format
msgid "version %s saved to %s.env" msgid "version %s saved to %s.env"
msgstr "" msgstr ""
@ -5441,32 +5587,32 @@ msgstr ""
msgid "version seems invalid: %s" msgid "version seems invalid: %s"
msgstr "" msgstr ""
#: ./pkg/app/app.go:620 #: ./pkg/app/app.go:629
#, c-format #, c-format
msgid "version wiped from %s.env" msgid "version wiped from %s.env"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:351 #: ./cli/app/deploy.go:353
#, c-format #, c-format
msgid "version: taking chaos version: %s" msgid "version: taking chaos version: %s"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:377 #: ./cli/app/deploy.go:379
#, c-format #, c-format
msgid "version: taking deployed version: %s" msgid "version: taking deployed version: %s"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:382 #: ./cli/app/deploy.go:384
#, c-format #, c-format
msgid "version: taking new recipe version: %s" msgid "version: taking new recipe version: %s"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:371 #: ./cli/app/deploy.go:373
#, c-format #, c-format
msgid "version: taking version from .env file: %s" msgid "version: taking version from .env file: %s"
msgstr "" msgstr ""
#: ./cli/app/deploy.go:357 #: ./cli/app/deploy.go:359
#, c-format #, c-format
msgid "version: taking version from cli arg: %s" msgid "version: taking version from cli arg: %s"
msgstr "" msgstr ""
@ -5589,7 +5735,7 @@ msgstr ""
msgid "writer: %v, " msgid "writer: %v, "
msgstr "" msgstr ""
#: ./cli/app/deploy.go:275 ./cli/app/new.go:241 ./cli/app/rollback.go:252 ./cli/app/undeploy.go:119 ./cli/app/upgrade.go:298 #: ./cli/app/deploy.go:277 ./cli/app/new.go:241 ./cli/app/rollback.go:255 ./cli/app/undeploy.go:120 ./cli/app/upgrade.go:300
#, c-format #, c-format
msgid "writing recipe version failed: %s" msgid "writing recipe version failed: %s"
msgstr "" msgstr ""

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -127,3 +127,14 @@ teardown(){
"$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success assert_success
} }
# bats test_tags=slow
@test "new env version written to container env" {
run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input
assert_success
run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \
$(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q)
assert_success
assert_output --partial "$TEST_RECIIPE:0.1.0+1.20.0"
}

View File

@ -28,17 +28,17 @@ teardown(){
} }
@test "validate app argument" { @test "validate app argument" {
run $ABRA app env run $ABRA app env list
assert_failure assert_failure
run $ABRA app env DOESNTEXIST run $ABRA app env list DOESNTEXIST
assert_failure assert_failure
} }
@test "show env version" { @test "show env version" {
latestRelease=$(_latest_release) latestRelease=$(_latest_release)
run $ABRA app env "$TEST_APP_DOMAIN" run $ABRA app env list "$TEST_APP_DOMAIN"
assert_success assert_success
assert_output --partial "$latestRelease" assert_output --partial "$latestRelease"
} }
@ -48,7 +48,7 @@ teardown(){
assert_success assert_success
assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo" assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
run $ABRA app env "$TEST_APP_DOMAIN" run $ABRA app env list "$TEST_APP_DOMAIN"
assert_success assert_success
assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo" assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
@ -57,3 +57,44 @@ teardown(){
run rm -rf "$ABRA_DIR/recipes/$TEST_RECIPE/foo" run rm -rf "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
assert_not_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo" assert_not_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
} }
@test "app env pull explodes when no deployed app" {
run $ABRA app env pull "$TEST_APP_DOMAIN" -s "$TEST_SERVER"
assert_failure
}
# bats test_tags=slow
@test "app env pull recreates app env when missing" {
run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input
assert_success
run rm -rf "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success
assert_not_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
run $ABRA app env pull "$TEST_APP_DOMAIN" -s "$TEST_SERVER"
assert_success
assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
}
# bats test_tags=slow
@test "app env pull recreates correct version" {
run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input
assert_success
run grep -q "TYPE=$TEST_RECIPE:0.1.0+1.20.0" \
"$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success
run rm -rf "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success
assert_not_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
run $ABRA app env pull "$TEST_APP_DOMAIN" -s "$TEST_SERVER"
assert_success
assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
run grep -q "TYPE=$TEST_RECIPE:0.1.0+1.20.0" \
"$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success
}

View File

@ -33,10 +33,29 @@ teardown(){
assert_success assert_success
run $ABRA app rollback "$TEST_APP_DOMAIN" "0.1.0+1.20.0" \ run $ABRA app rollback "$TEST_APP_DOMAIN" "0.1.0+1.20.0" \
--no-input --no-converge-checks --debug --no-input --no-converge-checks
assert_success assert_success
run grep -q "TYPE=abra-test-recipe:0.1.0+1.20.0" \ run grep -q "TYPE=abra-test-recipe:0.1.0+1.20.0" \
"$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success assert_success
} }
# bats test_tags=slow
@test "new env version written to container env" {
run $ABRA app deploy "$TEST_APP_DOMAIN" "0.2.0+1.21.0" --no-input
assert_success
run grep -q "TYPE=abra-test-recipe:0.2.0+1.21.0" \
"$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success
run $ABRA app rollback "$TEST_APP_DOMAIN" "0.1.0+1.20.0" \
--no-input
assert_success
run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \
$(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q)
assert_success
assert_output --partial "$TEST_RECIIPE:0.1.0+1.20.0"
}

View File

@ -256,7 +256,7 @@ teardown(){
} }
# bats test_tags=slow # bats test_tags=slow
@test "commit deploy upgrade is possible" { @test "specific version upgrade after chaos deploy" {
tagHash=$(_get_tag_hash "0.1.0+1.20.0") tagHash=$(_get_tag_hash "0.1.0+1.20.0")
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$tagHash" run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$tagHash"
assert_success assert_success
@ -269,17 +269,26 @@ teardown(){
assert_success assert_success
assert_output --regexp "CURRENT DEPLOYMENT.*${tagHash:0:8}" assert_output --regexp "CURRENT DEPLOYMENT.*${tagHash:0:8}"
assert_output --regexp "ENV VERSION.*${tagHash:0:8}" assert_output --regexp "ENV VERSION.*${tagHash:0:8}"
assert_output --regexp "NEW DEPLOYMENT.*0\.1\.1\+1\.20\.2"
} }
@test "chaos commit upgrade is possible" { # bats test_tags=slow
run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input --no-converge-checks @test "upgrade to latest after chaos deploy" {
assert_success latestRelease=$(_latest_release)
assert_output --partial '0.1.0+1.20.0'
tagHash=$(_get_tag_hash "0.2.0+1.21.0") tagHash=$(_get_tag_hash "0.1.0+1.20.0")
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$tagHash"
run $ABRA app upgrade "$TEST_APP_DOMAIN" "$tagHash" --no-input --no-converge-checks
assert_success assert_success
run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input --no-converge-checks --chaos
assert_success
assert_output --partial "${tagHash:0:8}"
run $ABRA app upgrade "$TEST_APP_DOMAIN" --no-input --no-converge-checks
assert_success
assert_output --regexp "CURRENT DEPLOYMENT.*${tagHash:0:8}"
assert_output --regexp "ENV VERSION.*${tagHash:0:8}"
assert_output --partial "${latestRelease}"
} }
# bats test_tags=slow # bats test_tags=slow

View File

@ -40,3 +40,21 @@ teardown(){
"$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success assert_success
} }
# bats test_tags=slow
@test "new env version written to container env" {
run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input
assert_success
run grep -q "TYPE=abra-test-recipe:0.1.0+1.20.0" \
"$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
assert_success
run $ABRA app upgrade "$TEST_APP_DOMAIN" "0.2.0+1.21.0" --no-input
assert_success
run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \
$(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q)
assert_success
assert_output --partial "$TEST_RECIIPE:0.2.0+1.21.0"
}

View File

@ -101,6 +101,9 @@ teardown() {
assert_success assert_success
assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo" assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
run $ABRA recipe sync "$TEST_RECIPE" --no-input --patch
assert_success
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
assert_success assert_success
assert_output --partial 'no -p/--publish passed, not publishing' assert_output --partial 'no -p/--publish passed, not publishing'
@ -119,6 +122,9 @@ teardown() {
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" commit -m "added some release notes" run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" commit -m "added some release notes"
assert_success assert_success
run $ABRA recipe sync "$TEST_RECIPE" --no-input --patch
assert_success
run $ABRA recipe release "$TEST_RECIPE" --no-input --minor run $ABRA recipe release "$TEST_RECIPE" --no-input --minor
assert_success assert_success
assert_output --partial 'no -p/--publish passed, not publishing' assert_output --partial 'no -p/--publish passed, not publishing'