diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 0ff13bd2..fa0c14be 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -6,14 +6,13 @@ import ( "strings" "coopcloud.tech/abra/cli/internal" - "coopcloud.tech/abra/pkg/app" "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/config" - "coopcloud.tech/abra/pkg/envfile" "coopcloud.tech/abra/pkg/secret" appPkg "coopcloud.tech/abra/pkg/app" "coopcloud.tech/abra/pkg/client" + "coopcloud.tech/abra/pkg/deploy" "coopcloud.tech/abra/pkg/dns" "coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/i18n" @@ -129,13 +128,9 @@ checkout as-is. Recipe commit hashes are also supported as values for log.Fatal(err) } - abraShEnv, err := envfile.ReadAbraShEnvVars(app.Recipe.AbraShPath) - if err != nil { + if err := deploy.MergeAbraShEnv(app.Recipe, app.Env); err != nil { log.Fatal(err) } - for k, v := range abraShEnv { - app.Env[k] = v - } composeFiles, err := app.Recipe.GetComposeFiles(app.Env) if err != nil { @@ -194,12 +189,34 @@ checkout as-is. Recipe commit hashes are also supported as values for deployedVersion = deployMeta.Version } + // Gather secrets + secretInfo, err := deploy.GatherSecretsForDeploy(cl, app) + if err != nil { + log.Fatal(err) + } + + // Gather configs + configInfo, err := deploy.GatherConfigsForDeploy(cl, app, compose, app.Env, internal.ShowUnchanged) + if err != nil { + log.Fatal(err) + } + + // Gather images + imageInfo, err := deploy.GatherImagesForDeploy(cl, app, compose, internal.ShowUnchanged) + if err != nil { + log.Fatal(err) + } + + // Show deploy overview if err := internal.DeployOverview( app, deployedVersion, toDeployVersion, "", deployWarnMessages, + secretInfo, + configInfo, + imageInfo, ); err != nil { log.Fatal(err) } @@ -245,7 +262,7 @@ checkout as-is. Recipe commit hashes are also supported as values for }, } -func getLatestVersionOrCommit(app app.App) (string, error) { +func getLatestVersionOrCommit(app appPkg.App) (string, error) { versions, err := app.Recipe.Tags() if err != nil { return "", err @@ -280,7 +297,7 @@ func validateArgsAndFlags(args []string) error { return nil } -func validateSecrets(cl *dockerClient.Client, app app.App) error { +func validateSecrets(cl *dockerClient.Client, app appPkg.App) error { secStats, err := secret.PollSecretsStatus(cl, app) if err != nil { return err @@ -295,7 +312,7 @@ func validateSecrets(cl *dockerClient.Client, app app.App) error { return nil } -func getDeployVersion(cliArgs []string, deployMeta stack.DeployMeta, app app.App) (string, error) { +func getDeployVersion(cliArgs []string, deployMeta stack.DeployMeta, app appPkg.App) (string, error) { // Chaos mode overrides everything if internal.Chaos { v, err := app.Recipe.ChaosVersion() @@ -375,4 +392,12 @@ func init() { false, i18n.G("deploy latest recipe version"), ) + + AppDeployCommand.Flags().BoolVarP( + &internal.ShowUnchanged, + i18n.G("show-unchanged"), + i18n.G("U"), + false, + i18n.G("show all configs & images, including unchanged ones"), + ) } diff --git a/cli/app/rollback.go b/cli/app/rollback.go index a9575676..dfff8807 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -4,11 +4,10 @@ import ( "errors" "strings" - "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app" "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/config" - "coopcloud.tech/abra/pkg/envfile" + "coopcloud.tech/abra/pkg/deploy" "coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/i18n" "coopcloud.tech/abra/pkg/lint" @@ -155,13 +154,9 @@ beforehand. See "abra app backup" for more.`), log.Fatal(err) } - abraShEnv, err := envfile.ReadAbraShEnvVars(app.Recipe.AbraShPath) - if err != nil { + if err := deploy.MergeAbraShEnv(app.Recipe, app.Env); err != nil { log.Fatal(err) } - for k, v := range abraShEnv { - app.Env[k] = v - } composeFiles, err := app.Recipe.GetComposeFiles(app.Env) if err != nil { @@ -190,6 +185,24 @@ beforehand. See "abra app backup" for more.`), } appPkg.SetUpdateLabel(compose, stackName, app.Env) + // Gather secrets + secretInfo, err := deploy.GatherSecretsForDeploy(cl, app) + if err != nil { + log.Fatal(err) + } + + // Gather configs + configInfo, err := deploy.GatherConfigsForDeploy(cl, app, compose, app.Env, internal.ShowUnchanged) + if err != nil { + log.Fatal(err) + } + + // Gather images + imageInfo, err := deploy.GatherImagesForDeploy(cl, app, compose, internal.ShowUnchanged) + if err != nil { + log.Fatal(err) + } + // NOTE(d1): no release notes implemeneted for rolling back if err := internal.DeployOverview( app, @@ -197,6 +210,9 @@ beforehand. See "abra app backup" for more.`), chosenDowngrade, "", downgradeWarnMessages, + secretInfo, + configInfo, + imageInfo, ); err != nil { log.Fatal(err) } @@ -267,7 +283,7 @@ func chooseDowngrade( // validateDownpgradeVersionArg validates the specific version. func validateDowngradeVersionArg( specificVersion string, - app app.App, + app appPkg.App, deployMeta stack.DeployMeta, ) error { parsedDeployedVersion, err := tagcmp.Parse(deployMeta.Version) @@ -346,4 +362,12 @@ func init() { false, i18n.G("disable converge logic checks"), ) + + AppRollbackCommand.Flags().BoolVarP( + &internal.ShowUnchanged, + i18n.G("show-unchanged"), + i18n.G("U"), + false, + i18n.G("show all configs & images, including unchanged ones"), + ) } diff --git a/cli/app/undeploy.go b/cli/app/undeploy.go index 021e1f77..97f458a7 100644 --- a/cli/app/undeploy.go +++ b/cli/app/undeploy.go @@ -71,6 +71,9 @@ Passing "--prune/-p" does not remove those volumes.`), config.NO_DOMAIN_DEFAULT, "", nil, + nil, + nil, + nil, ); err != nil { log.Fatal(err) } diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index 65611016..718ea6de 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -7,12 +7,11 @@ import ( "strings" "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/client" "coopcloud.tech/abra/pkg/config" - "coopcloud.tech/abra/pkg/envfile" + "coopcloud.tech/abra/pkg/deploy" "coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/i18n" "coopcloud.tech/abra/pkg/lint" @@ -168,13 +167,9 @@ beforehand. See "abra app backup" for more.`), log.Fatal(err) } - abraShEnv, err := envfile.ReadAbraShEnvVars(app.Recipe.AbraShPath) - if err != nil { + if err := deploy.MergeAbraShEnv(app.Recipe, app.Env); err != nil { log.Fatal(err) } - for k, v := range abraShEnv { - app.Env[k] = v - } composeFiles, err := app.Recipe.GetComposeFiles(app.Env) if err != nil { @@ -216,6 +211,24 @@ beforehand. See "abra app backup" for more.`), } } + // Gather secrets + secretInfo, err := deploy.GatherSecretsForDeploy(cl, app) + if err != nil { + log.Fatal(err) + } + + // Gather configs + configInfo, err := deploy.GatherConfigsForDeploy(cl, app, compose, app.Env, internal.ShowUnchanged) + if err != nil { + log.Fatal(err) + } + + // Gather images + imageInfo, err := deploy.GatherImagesForDeploy(cl, app, compose, internal.ShowUnchanged) + if err != nil { + log.Fatal(err) + } + if showReleaseNotes { fmt.Print(upgradeReleaseNotes) return @@ -234,6 +247,9 @@ beforehand. See "abra app backup" for more.`), chosenUpgrade, upgradeReleaseNotes, upgradeWarnMessages, + secretInfo, + configInfo, + imageInfo, ); err != nil { log.Fatal(err) } @@ -311,7 +327,7 @@ func chooseUpgrade( } func getReleaseNotes( - app app.App, + app appPkg.App, versions []string, chosenUpgrade string, deployMeta stack.DeployMeta, @@ -356,7 +372,7 @@ func getReleaseNotes( // ensureUpgradesAvailable ensures that there are available upgrades. func ensureUpgradesAvailable( - app app.App, + app appPkg.App, versions []string, availableUpgrades *[]string, deployMeta stack.DeployMeta, @@ -388,7 +404,7 @@ func ensureUpgradesAvailable( // validateUpgradeVersionArg validates the specific version. func validateUpgradeVersionArg( specificVersion string, - app app.App, + app appPkg.App, deployMeta stack.DeployMeta, ) error { parsedSpecificVersion, err := tagcmp.Parse(specificVersion) @@ -415,7 +431,7 @@ func validateUpgradeVersionArg( // ensureDeployed ensures the app is deployed and if so, returns deployment // meta info. -func ensureDeployed(cl *dockerClient.Client, app app.App) (stack.DeployMeta, error) { +func ensureDeployed(cl *dockerClient.Client, app appPkg.App) (stack.DeployMeta, error) { log.Debug(i18n.G("checking whether %s is already deployed", app.StackName())) deployMeta, err := stack.IsDeployed(context.Background(), cl, app.StackName()) @@ -464,4 +480,12 @@ func init() { false, i18n.G("only show release notes"), ) + + AppUpgradeCommand.Flags().BoolVarP( + &internal.ShowUnchanged, + i18n.G("show-unchanged"), + i18n.G("U"), + false, + i18n.G("show all configs & images, including unchanged ones"), + ) } diff --git a/cli/internal/cli.go b/cli/internal/cli.go index 3e8844d2..1d32b475 100644 --- a/cli/internal/cli.go +++ b/cli/internal/cli.go @@ -19,4 +19,5 @@ var ( Minor bool NoDomainChecks bool Patch bool + ShowUnchanged bool ) diff --git a/cli/internal/deploy.go b/cli/internal/deploy.go index 4f816804..00d8650b 100644 --- a/cli/internal/deploy.go +++ b/cli/internal/deploy.go @@ -50,6 +50,9 @@ func DeployOverview( toDeployVersion string, releaseNotes string, warnMessages []string, + secrets []string, + configs []string, + images []string, ) error { deployConfig := "compose.yml" if composeFiles, ok := app.Env["COMPOSE_FILE"]; ok { @@ -80,6 +83,24 @@ func DeployOverview( {i18n.G("CURRENT DEPLOYMENT"), formatter.BoldDirtyDefault(deployedVersion)}, {i18n.G("ENV VERSION"), formatter.BoldDirtyDefault(envVersion)}, {i18n.G("NEW DEPLOYMENT"), formatter.BoldDirtyDefault(toDeployVersion)}, + {"", ""}, + {i18n.G("IMAGES"), strings.Join(images, "\n")}, + } + + if len(secrets) > 0 { + secretsRows := [][]string{ + {"", ""}, + {i18n.G("SECRETS"), strings.Join(secrets, "\n")}, + } + rows = append(rows, secretsRows...) + } + + if len(configs) > 0 { + configsRows := [][]string{ + {"", ""}, + {i18n.G("CONFIGS"), strings.Join(configs, "\n")}, + } + rows = append(rows, configsRows...) } deployType := getDeployType(deployedVersion, toDeployVersion) diff --git a/cli/updater/updater.go b/cli/updater/updater.go index 18332754..6f28216e 100644 --- a/cli/updater/updater.go +++ b/cli/updater/updater.go @@ -11,6 +11,7 @@ import ( "coopcloud.tech/abra/cli/internal" appPkg "coopcloud.tech/abra/pkg/app" "coopcloud.tech/abra/pkg/client" + "coopcloud.tech/abra/pkg/deploy" "coopcloud.tech/abra/pkg/envfile" "coopcloud.tech/abra/pkg/i18n" "coopcloud.tech/abra/pkg/lint" @@ -335,21 +336,6 @@ func processRecipeRepoVersion(r recipe.Recipe, version string) error { return nil } -// mergeAbraShEnv merges abra.sh env vars into the app env vars. -func mergeAbraShEnv(recipe recipe.Recipe, env envfile.AppEnv) error { - abraShEnv, err := envfile.ReadAbraShEnvVars(recipe.AbraShPath) - if err != nil { - return err - } - - for k, v := range abraShEnv { - log.Debugf("read v:%s k: %s", v, k) - env[k] = v - } - - return nil -} - // createDeployConfig merges and enriches the compose config for the deployment. func createDeployConfig(r recipe.Recipe, stackName string, env envfile.AppEnv) (*composetypes.Config, stack.Deploy, error) { env["STACK_NAME"] = stackName @@ -444,7 +430,7 @@ func upgrade(cl *dockerclient.Client, stackName, recipeName, upgradeVersion stri return err } - if err = mergeAbraShEnv(app.Recipe, app.Env); err != nil { + if err = deploy.MergeAbraShEnv(app.Recipe, app.Env); err != nil { return err } diff --git a/pkg/client/configs.go b/pkg/client/configs.go index 2a2a0eeb..406a32ad 100644 --- a/pkg/client/configs.go +++ b/pkg/client/configs.go @@ -3,6 +3,7 @@ package client import ( "context" "errors" + "strings" "coopcloud.tech/abra/pkg/i18n" "github.com/docker/docker/api/types/filters" @@ -37,3 +38,12 @@ func RemoveConfigs(cl *client.Client, ctx context.Context, configNames []string, } return nil } + +// GetConfigNameAndVersion parses a full config name like `app_example_com_someconf_v1` to extract name and version, ("someconf", "v1") +func GetConfigNameAndVersion(fullName string, stackName string) (string, string, error) { + name := strings.TrimPrefix(fullName, stackName+"_") + if lastUnderscore := strings.LastIndex(name, "_"); lastUnderscore != -1 { + return name[0:lastUnderscore], name[lastUnderscore+1:], nil + } + return "", "", errors.New(i18n.G("can't parse version from config '%s'", fullName)) +} diff --git a/pkg/client/configs_test.go b/pkg/client/configs_test.go new file mode 100644 index 00000000..51e8a6b5 --- /dev/null +++ b/pkg/client/configs_test.go @@ -0,0 +1,89 @@ +package client + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetConfigNameAndVersion(t *testing.T) { + tests := []struct { + name string + fullName string + stackName string + expected string + expectedVer string + expectError bool + }{ + { + name: "valid config with version", + fullName: "myapp_database_v2", + stackName: "myapp", + expected: "database", + expectedVer: "v2", + expectError: false, + }, + { + name: "valid config with numeric version", + fullName: "myapp_redis_1", + stackName: "myapp", + expected: "redis", + expectedVer: "1", + expectError: false, + }, + { + name: "config without underscore in name", + fullName: "myapp_db_v1", + stackName: "myapp", + expected: "db", + expectedVer: "v1", + expectError: false, + }, + { + name: "config with multiple underscores", + fullName: "myapp_my_database_v3", + stackName: "myapp", + expected: "my_database", + expectedVer: "v3", + expectError: false, + }, + { + name: "invalid config - no version", + fullName: "myapp_database", + stackName: "myapp", + expectError: true, + }, + { + name: "empty config name", + fullName: "myapp__v1", + stackName: "myapp", + expected: "", + expectedVer: "v1", + expectError: false, + }, + { + name: "wrong stack prefix", + fullName: "otherapp_database_v1", + stackName: "myapp", + expected: "otherapp_database", + expectedVer: "v1", + expectError: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + name, version, err := GetConfigNameAndVersion(tt.fullName, tt.stackName) + + if tt.expectError { + assert.Error(t, err) + assert.Empty(t, name) + assert.Empty(t, version) + } else { + assert.NoError(t, err) + assert.Equal(t, tt.expected, name) + assert.Equal(t, tt.expectedVer, version) + } + }) + } +} diff --git a/pkg/client/secret.go b/pkg/client/secret.go index 1d095467..f0a19f54 100644 --- a/pkg/client/secret.go +++ b/pkg/client/secret.go @@ -17,3 +17,11 @@ func StoreSecret(cl *client.Client, secretName, secretValue string) error { return nil } + +func GetSecretNames(secrets []swarm.Secret) []string { + var secretNames []string + for _, secret := range secrets { + secretNames = append(secretNames, secret.Spec.Name) + } + return secretNames +} diff --git a/pkg/client/secret_test.go b/pkg/client/secret_test.go new file mode 100644 index 00000000..4636a2d3 --- /dev/null +++ b/pkg/client/secret_test.go @@ -0,0 +1,58 @@ +package client + +import ( + "testing" + + "github.com/docker/docker/api/types/swarm" + "github.com/stretchr/testify/assert" +) + +func TestGetSecretNames(t *testing.T) { + tests := []struct { + name string + secrets []swarm.Secret + expected []string + description string + }{ + { + name: "empty secrets list", + secrets: []swarm.Secret{}, + expected: nil, + description: "should return nil for empty input", + }, + { + name: "single secret", + secrets: []swarm.Secret{ + {Spec: swarm.SecretSpec{Annotations: swarm.Annotations{Name: "database_password"}}}, + }, + expected: []string{"database_password"}, + description: "should return single secret name", + }, + { + name: "multiple secrets", + secrets: []swarm.Secret{ + {Spec: swarm.SecretSpec{Annotations: swarm.Annotations{Name: "db_password"}}}, + {Spec: swarm.SecretSpec{Annotations: swarm.Annotations{Name: "api_key"}}}, + {Spec: swarm.SecretSpec{Annotations: swarm.Annotations{Name: "ssl_cert"}}}, + }, + expected: []string{"db_password", "api_key", "ssl_cert"}, + description: "should return all secret names in order", + }, + { + name: "secrets with empty names", + secrets: []swarm.Secret{ + {Spec: swarm.SecretSpec{Annotations: swarm.Annotations{Name: ""}}}, + {Spec: swarm.SecretSpec{Annotations: swarm.Annotations{Name: "valid_name"}}}, + }, + expected: []string{"", "valid_name"}, + description: "should include empty names if present", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := GetSecretNames(tt.secrets) + assert.Equal(t, tt.expected, result, tt.description) + }) + } +} diff --git a/pkg/deploy/utils.go b/pkg/deploy/utils.go new file mode 100644 index 00000000..bfe333a2 --- /dev/null +++ b/pkg/deploy/utils.go @@ -0,0 +1,239 @@ +package deploy + +import ( + "context" + "fmt" + "sort" + "strings" + + appPkg "coopcloud.tech/abra/pkg/app" + "coopcloud.tech/abra/pkg/client" + "coopcloud.tech/abra/pkg/envfile" + "coopcloud.tech/abra/pkg/formatter" + "coopcloud.tech/abra/pkg/i18n" + "coopcloud.tech/abra/pkg/log" + "coopcloud.tech/abra/pkg/recipe" + "coopcloud.tech/abra/pkg/secret" + + "github.com/distribution/reference" + composetypes "github.com/docker/cli/cli/compose/types" + "github.com/docker/docker/api/types/swarm" + dockerClient "github.com/docker/docker/client" +) + +// MergeAbraShEnv merges abra.sh env vars into the app env vars. +func MergeAbraShEnv(recipe recipe.Recipe, env envfile.AppEnv) error { + abraShEnv, err := envfile.ReadAbraShEnvVars(recipe.AbraShPath) + if err != nil { + return err + } + + for k, v := range abraShEnv { + log.Debugf("read v:%s k: %s", v, k) + env[k] = v + } + + return nil +} + +// GetConfigsForStack retrieves all Docker configs attached to services in a given stack. +func GetConfigsForStack(cl *dockerClient.Client, app appPkg.App) (map[string]string, error) { + filters, err := app.Filters(false, false) + if err != nil { + return nil, err + } + + // List all services in the stack + services, err := cl.ServiceList(context.Background(), swarm.ServiceListOptions{ + Filters: filters, + }) + if err != nil { + return nil, err + } + + // Collect unique config names with versions + configs := make(map[string]string) + for _, service := range services { + if service.Spec.TaskTemplate.ContainerSpec != nil { + for _, configRef := range service.Spec.TaskTemplate.ContainerSpec.Configs { + configName := configRef.ConfigName + if configName == "" { + continue + } + configBaseName, configVersion, err := client.GetConfigNameAndVersion(configName, app.StackName()) + if err != nil { + log.Warn(err) + continue + } + + existingConfigVersion, ok := configs[configBaseName] + if !ok { + // First time seeing this, add to map + configs[configBaseName] = configVersion + } else { + // Just make sure the versions are the same.. + if existingConfigVersion != configVersion { + log.Warnf(i18n.G("different versions for config '%s', '%s' and %s'", configBaseName, existingConfigVersion, configVersion)) + } + } + } + } + } + + return configs, nil +} + +// GetImagesForStack retrieves all Docker images for services in a given stack. +func GetImagesForStack(cl *dockerClient.Client, app appPkg.App) (map[string]string, error) { + filters, err := app.Filters(false, false) + if err != nil { + return nil, err + } + + // List all services in the stack + services, err := cl.ServiceList(context.Background(), swarm.ServiceListOptions{ + Filters: filters, + }) + if err != nil { + return nil, err + } + + // Collect unique image names with versions + images := make(map[string]string) + for _, service := range services { + if service.Spec.TaskTemplate.ContainerSpec != nil { + imageName := service.Spec.TaskTemplate.ContainerSpec.Image + + imageParsed, err := reference.ParseNormalizedNamed(imageName) + if err != nil { + log.Warn(err) + continue + } + + imageBaseName := reference.Path(imageParsed) + imageTag := imageParsed.(reference.NamedTagged).Tag() + + existingImageVersion, ok := images[imageBaseName] + if !ok { + // First time seeing this, add to map + images[imageBaseName] = imageTag + } else { + // Just make sure the versions are the same.. + if existingImageVersion != imageTag { + log.Warnf(i18n.G("different versions for image '%s', '%s' and %s'", imageBaseName, existingImageVersion, imageTag)) + } + } + } + } + + return images, nil +} + +func GatherSecretsForDeploy(cl *dockerClient.Client, app appPkg.App) ([]string, error) { + secStats, err := secret.PollSecretsStatus(cl, app) + if err != nil { + return nil, err + } + + var secretInfo []string + + // Sort secrets to ensure reproducible output + sort.Slice(secStats, func(i, j int) bool { + return secStats[i].LocalName < secStats[j].LocalName + }) + for _, secStat := range secStats { + secretInfo = append(secretInfo, fmt.Sprintf("%s: %s", secStat.LocalName, secStat.Version)) + } + return secretInfo, nil +} + +func GatherConfigsForDeploy(cl *dockerClient.Client, app appPkg.App, compose *composetypes.Config, abraShEnv map[string]string, showUnchanged bool) ([]string, error) { + // Get current configs from existing deployment + currentConfigs, err := GetConfigsForStack(cl, app) + if err != nil { + return nil, err + } + + log.Debugf(i18n.G("deployed config names: %v", currentConfigs)) + + // Get new configs from the compose specification + newConfigs := compose.Configs + + var configInfo []string + for configName := range newConfigs { + log.Debugf(i18n.G("searching abra.sh for version for %s", configName)) + versionKey := strings.ToUpper(configName) + "_VERSION" + newVersion, exists := abraShEnv[versionKey] + if !exists { + log.Warnf(i18n.G("no version found for config %s", configName)) + configInfo = append(configInfo, i18n.G("%s: ? (missing version)", configName)) + continue + } + + if currentVersion, exists := currentConfigs[configName]; exists { + if currentVersion == newVersion { + if showUnchanged { + configInfo = append(configInfo, i18n.G("%s: %s (unchanged)", configName, newVersion)) + } + } else { + configInfo = append(configInfo, i18n.G("%s: %s → %s", configName, currentVersion, newVersion)) + } + } else { + configInfo = append(configInfo, i18n.G("%s: %s (new)", configName, newVersion)) + } + } + + return configInfo, nil +} + +func GatherImagesForDeploy(cl *dockerClient.Client, app appPkg.App, compose *composetypes.Config, showUnchanged bool) ([]string, error) { + // Get current images from existing deployment + currentImages, err := GetImagesForStack(cl, app) + if err != nil { + return nil, err + } + + log.Debugf(i18n.G("deployed images: %v", currentImages)) + + // Proposed new images from the compose files + newImages := make(map[string]string) + + for _, service := range compose.Services { + imageParsed, err := reference.ParseNormalizedNamed(service.Image) + imageBaseName := reference.Path(imageParsed) + imageTag := imageParsed.(reference.NamedTagged).Tag() + + if err != nil { + log.Warn(err) + continue + } + existingImageVersion, ok := newImages[imageBaseName] + if !ok { + // First time seeing this, add to map + newImages[imageBaseName] = imageTag + } else { + // Just make sure the versions are the same.. + if existingImageVersion != imageTag { + log.Warnf(i18n.G("different versions for image '%s', '%s' and %s'", imageBaseName, existingImageVersion, imageTag)) + } + } + } + log.Debugf(i18n.G("proposed images: %v", newImages)) + + var imageInfo []string + for newImageName, newImageVersion := range newImages { + if currentVersion, exists := currentImages[newImageName]; exists { + if currentVersion == newImageVersion { + if showUnchanged { + imageInfo = append(imageInfo, i18n.G("%s: %s (unchanged)", formatter.StripTagMeta(newImageName), newImageVersion)) + } + } else { + imageInfo = append(imageInfo, i18n.G("%s: %s → %s", formatter.StripTagMeta(newImageName), currentVersion, newImageVersion)) + } + } else { + imageInfo = append(imageInfo, i18n.G("%s: %s (new)", formatter.StripTagMeta(newImageName), newImageVersion)) + } + } + + return imageInfo, nil +} diff --git a/pkg/i18n/locales/abra.pot b/pkg/i18n/locales/abra.pot index 84f27786..c2b27dd8 100644 --- a/pkg/i18n/locales/abra.pot +++ b/pkg/i18n/locales/abra.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" - "POT-Creation-Date: 2025-09-06 08:28+0200\n" + "POT-Creation-Date: 2025-09-09 13:19-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -111,7 +111,7 @@ msgid " # run with args/flags\n" " abra app run 1312.net app --user nobody -- ls -lha" msgstr "" -#: ./cli/app/deploy.go:42 +#: ./cli/app/deploy.go:41 msgid " # standard deployment\n" " abra app deploy 1312.net\n" "\n" @@ -149,7 +149,7 @@ msgstr "" msgid " abra upgrade --rc" msgstr "" -#: ./cli/app/rollback.go:49 +#: ./cli/app/rollback.go:48 msgid " # standard rollback\n" " abra app rollback 1312.net\n" "\n" @@ -181,7 +181,7 @@ msgstr "" msgid "%d volumes removed successfully" msgstr "" -#: ./cli/updater/updater.go:243 +#: ./cli/updater/updater.go:244 #, c-format msgid "%s (%s) can be upgraded from version %s to %s" msgstr "" @@ -196,7 +196,7 @@ msgstr "" msgid "%s (created %v)" msgstr "" -#: ./cli/internal/deploy.go:86 +#: ./cli/internal/deploy.go:107 #, c-format msgid "%s OVERVIEW" msgstr "" @@ -226,7 +226,7 @@ msgstr "" msgid "%s does not exist for %s, use /bin/sh as fallback" msgstr "" -#: ./cli/app/cmd.go:114 ./cli/internal/deploy.go:214 +#: ./cli/app/cmd.go:114 ./cli/internal/deploy.go:235 #, c-format msgid "%s does not exist for %s?" msgstr "" @@ -311,7 +311,7 @@ msgstr "" msgid "%s inserted into pass store" msgstr "" -#: ./cli/app/deploy.go:102 +#: ./cli/app/deploy.go:101 #, c-format msgid "%s is already deployed" msgstr "" @@ -336,17 +336,17 @@ msgstr "" msgid "%s is missing the TYPE env var?" msgstr "" -#: ./cli/app/rollback.go:285 ./cli/app/rollback.go:289 +#: ./cli/app/rollback.go:301 ./cli/app/rollback.go:305 #, c-format msgid "%s is not a downgrade for %s?" msgstr "" -#: ./cli/app/upgrade.go:406 ./cli/app/upgrade.go:410 +#: ./cli/app/upgrade.go:422 ./cli/app/upgrade.go:426 #, c-format msgid "%s is not an upgrade for %s?" 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:427 ./cli/updater/updater.go:259 +#: ./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:443 ./cli/updater/updater.go:260 #, c-format msgid "%s is not deployed?" msgstr "" @@ -361,7 +361,7 @@ msgstr "" msgid "%s is still deployed. Run \"abra app undeploy %s\"" msgstr "" -#: ./cli/app/deploy.go:175 ./cli/app/upgrade.go:214 +#: ./cli/app/deploy.go:170 ./cli/app/upgrade.go:209 #, c-format msgid "%s missing from %s.env" msgstr "" @@ -441,16 +441,36 @@ msgstr "" msgid "%s: %s" msgstr "" +#: ./pkg/deploy/utils.go:182 ./pkg/deploy/utils.go:234 +#, c-format +msgid "%s: %s (new)" +msgstr "" + #: ./pkg/ui/deploy.go:344 #, c-format msgid "%s: %s (retries: %v, healthcheck: %s)" msgstr "" +#: ./pkg/deploy/utils.go:176 ./pkg/deploy/utils.go:228 +#, c-format +msgid "%s: %s (unchanged)" +msgstr "" + +#: ./pkg/deploy/utils.go:179 ./pkg/deploy/utils.go:231 +#, c-format +msgid "%s: %s → %s" +msgstr "" + #: ./pkg/app/app.go:521 #, c-format msgid "%s: %s: %s" msgstr "" +#: ./pkg/deploy/utils.go:169 +#, c-format +msgid "%s: ? (missing version)" +msgstr "" + #: ./pkg/recipe/recipe.go:237 #, c-format msgid "%s: attempt recipe metadata parse" @@ -506,12 +526,12 @@ msgstr "" msgid "%s: waiting %d seconds before next retry" msgstr "" -#: ./cli/app/upgrade.go:401 +#: ./cli/app/upgrade.go:417 #, c-format msgid "'%s' is not a known version" msgstr "" -#: ./cli/app/rollback.go:280 ./cli/app/upgrade.go:396 +#: ./cli/app/rollback.go:296 ./cli/app/upgrade.go:412 #, c-format msgid "'%s' is not a known version for %s" msgstr "" @@ -582,7 +602,7 @@ msgstr "" msgid "Both local recipe and live deployment labels are shown." 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:342 ./cli/app/labels.go:143 ./cli/app/new.go:377 ./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/updater/updater.go:552 +#: ./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:359 ./cli/app/labels.go:143 ./cli/app/new.go:377 ./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/updater/updater.go:538 msgid "C" msgstr "" @@ -590,7 +610,7 @@ msgstr "" msgid "CHAOS" msgstr "" -#: ./cli/internal/deploy.go:120 +#: ./cli/internal/deploy.go:141 msgid "CHAOS DEPLOY" msgstr "" @@ -609,15 +629,19 @@ msgstr "" msgid "COMPOSE_FILE detected, loading %s" msgstr "" -#: ./cli/internal/deploy.go:78 +#: ./cli/internal/deploy.go:81 msgid "CONFIG" msgstr "" +#: ./cli/internal/deploy.go:101 +msgid "CONFIGS" +msgstr "" + #: ./cli/app/secret.go:481 msgid "CREATED ON SERVER" msgstr "" -#: ./cli/internal/deploy.go:80 +#: ./cli/internal/deploy.go:83 msgid "CURRENT DEPLOYMENT" msgstr "" @@ -627,7 +651,7 @@ msgid "Check app deployment status" msgstr "" #. translators: Short description for `notify` command -#: ./cli/updater/updater.go:43 +#: ./cli/updater/updater.go:44 msgid "Check for available upgrades" msgstr "" @@ -724,11 +748,11 @@ msgid "Creates a new app from a default recipe.\n" "on your $PATH." msgstr "" -#: ./cli/app/deploy.go:358 ./cli/app/new.go:353 ./cli/app/rollback.go:337 ./cli/app/upgrade.go:447 +#: ./cli/app/deploy.go:375 ./cli/app/new.go:353 ./cli/app/rollback.go:353 ./cli/app/upgrade.go:463 msgid "D" msgstr "" -#: ./cli/internal/deploy.go:133 ./cli/internal/deploy.go:137 +#: ./cli/internal/deploy.go:154 ./cli/internal/deploy.go:158 msgid "DEPLOY" msgstr "" @@ -736,20 +760,20 @@ msgstr "" msgid "DEPLOYED LABELS" msgstr "" -#: ./cli/app/list.go:222 ./cli/internal/deploy.go:75 ./cli/internal/deploy.go:173 +#: ./cli/app/list.go:222 ./cli/internal/deploy.go:78 ./cli/internal/deploy.go:194 msgid "DOMAIN" msgstr "" -#: ./cli/internal/deploy.go:142 +#: ./cli/internal/deploy.go:163 msgid "DOWNGRADE" msgstr "" #. translators: Short description for `app deploy` command -#: ./cli/app/deploy.go:36 +#: ./cli/app/deploy.go:35 msgid "Deploy an app" msgstr "" -#: ./cli/app/deploy.go:37 +#: ./cli/app/deploy.go:36 msgid "Deploy an app.\n" "\n" "This command supports chaos operations. Use \"--chaos/-C\" to deploy your recipe\n" @@ -778,7 +802,7 @@ msgstr "" msgid "ENV OVERVIEW" msgstr "" -#: ./cli/internal/deploy.go:81 +#: ./cli/internal/deploy.go:84 msgid "ENV VERSION" msgstr "" @@ -901,6 +925,10 @@ msgstr "" msgid "IMAGE" msgstr "" +#: ./cli/internal/deploy.go:87 +msgid "IMAGES" +msgstr "" + #. translators: Short description for `app secret insert` command #: ./cli/app/secret.go:162 msgid "Insert secret" @@ -960,7 +988,7 @@ msgstr "" msgid "List volumes associated with an app" msgstr "" -#: ./cli/internal/deploy.go:181 +#: ./cli/internal/deploy.go:202 msgid "MOVE OVERVIEW" msgstr "" @@ -1031,15 +1059,15 @@ msgstr "" msgid "NAME" msgstr "" -#: ./cli/internal/deploy.go:129 +#: ./cli/internal/deploy.go:150 msgid "NEW DEPLOY" msgstr "" -#: ./cli/internal/deploy.go:82 +#: ./cli/internal/deploy.go:85 msgid "NEW DEPLOYMENT" msgstr "" -#: ./cli/internal/deploy.go:176 +#: ./cli/internal/deploy.go:197 msgid "NEW SERVER" msgstr "" @@ -1051,7 +1079,7 @@ msgstr "" msgid "NOW" msgstr "" -#: ./cli/updater/updater.go:44 +#: ./cli/updater/updater.go:45 msgid "Notify on new versions for deployed apps.\n" "\n" "If a new patch/minor version is available, a notification is printed.\n" @@ -1059,7 +1087,7 @@ msgid "Notify on new versions for deployed apps.\n" "Use \"--major/-m\" to include new major versions." msgstr "" -#: ./cli/internal/deploy.go:175 +#: ./cli/internal/deploy.go:196 msgid "OLD SERVER" msgstr "" @@ -1087,7 +1115,7 @@ msgstr "" msgid "README.md metadata filled in" msgstr "" -#: ./cli/app/list.go:222 ./cli/internal/deploy.go:76 ./cli/internal/deploy.go:174 +#: ./cli/app/list.go:222 ./cli/internal/deploy.go:79 ./cli/internal/deploy.go:195 msgid "RECIPE" msgstr "" @@ -1176,7 +1204,7 @@ msgid "Restore a snapshot" msgstr "" #. translators: Short description for `app rollback` command -#: ./cli/app/rollback.go:34 +#: ./cli/app/rollback.go:33 msgid "Roll an app back to a previous version" msgstr "" @@ -1207,7 +1235,7 @@ msgstr "" msgid "S" msgstr "" -#: ./cli/internal/deploy.go:177 +#: ./cli/internal/deploy.go:93 ./cli/internal/deploy.go:198 msgid "SECRETS" msgstr "" @@ -1215,7 +1243,7 @@ msgstr "" msgid "SECRETS OVERVIEW" msgstr "" -#: ./cli/app/list.go:222 ./cli/internal/deploy.go:77 +#: ./cli/app/list.go:222 ./cli/internal/deploy.go:80 msgid "SERVER" msgstr "" @@ -1309,7 +1337,7 @@ msgid "Tail app logs" msgstr "" #. translators: Short description for `kababra` binary -#: ./cli/updater/updater.go:487 +#: ./cli/updater/updater.go:473 msgid "The Co-op Cloud auto-updater 🤖 🚀" msgstr "" @@ -1359,7 +1387,7 @@ msgid "This command restarts services within a deployed app.\n" "Pass \"--all-services/-a\" to restart all services." msgstr "" -#: ./cli/app/rollback.go:35 +#: ./cli/app/rollback.go:34 msgid "This command rolls an app back to a previous version.\n" "\n" "Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" @@ -1423,15 +1451,19 @@ msgid "To load completions:\n" " # and source this file from your PowerShell profile." msgstr "" -#: ./cli/internal/deploy.go:123 +#: ./cli/app/deploy.go:399 ./cli/app/rollback.go:369 ./cli/app/upgrade.go:487 +msgid "U" +msgstr "" + +#: ./cli/internal/deploy.go:144 msgid "UNCHAOS DEPLOY" msgstr "" -#: ./cli/internal/deploy.go:117 +#: ./cli/internal/deploy.go:138 msgid "UNDEPLOY" msgstr "" -#: ./cli/app/list.go:228 ./cli/internal/deploy.go:140 +#: ./cli/app/list.go:228 ./cli/internal/deploy.go:161 msgid "UPGRADE" msgstr "" @@ -1467,11 +1499,11 @@ msgid "Upgrade abra in-place with the latest stable or release candidate.\n" msgstr "" #. translators: Short description for `app upgrade` command -#: ./cli/app/upgrade.go:37 +#: ./cli/app/upgrade.go:36 msgid "Upgrade an app" msgstr "" -#: ./cli/updater/updater.go:89 +#: ./cli/updater/updater.go:90 msgid "Upgrade an app by specifying stack name and recipe. \n" "\n" "Use \"--all\" to upgrade every deployed app.\n" @@ -1486,7 +1518,7 @@ msgid "Upgrade an app by specifying stack name and recipe. \n" "with care." msgstr "" -#: ./cli/app/upgrade.go:38 +#: ./cli/app/upgrade.go:37 msgid "Upgrade an app.\n" "\n" "Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" @@ -1504,7 +1536,7 @@ msgid "Upgrade an app.\n" msgstr "" #. translators: Short description for `app upgrade` command -#: ./cli/updater/updater.go:88 +#: ./cli/updater/updater.go:89 msgid "Upgrade apps" msgstr "" @@ -1557,7 +1589,7 @@ msgstr "" msgid "VERSION" msgstr "" -#: ./cli/internal/deploy.go:178 +#: ./cli/internal/deploy.go:199 msgid "VOLUMES" msgstr "" @@ -1638,7 +1670,7 @@ msgstr "" #. no spaces in between #. translators: `abra server add` aliases. use a comma separated list of #. aliases with no spaces in between -#: ./cli/app/app.go:12 ./cli/app/backup.go:271 ./cli/app/restart.go:169 ./cli/app/secret.go:577 ./cli/app/secret.go:617 ./cli/recipe/fetch.go:122 ./cli/recipe/upgrade.go:384 ./cli/server/add.go:23 ./cli/server/prune.go:99 ./cli/updater/updater.go:568 +#: ./cli/app/app.go:12 ./cli/app/backup.go:271 ./cli/app/restart.go:169 ./cli/app/secret.go:577 ./cli/app/secret.go:617 ./cli/recipe/fetch.go:122 ./cli/recipe/upgrade.go:384 ./cli/server/add.go:23 ./cli/server/prune.go:99 ./cli/updater/updater.go:554 msgid "a" msgstr "" @@ -1694,7 +1726,7 @@ msgstr "" msgid "adding env vars to %s service config" msgstr "" -#: ./cli/app/backup.go:270 ./cli/app/secret.go:576 ./cli/app/secret.go:616 ./cli/recipe/fetch.go:121 ./cli/server/prune.go:98 ./cli/updater/updater.go:567 +#: ./cli/app/backup.go:270 ./cli/app/secret.go:576 ./cli/app/secret.go:616 ./cli/recipe/fetch.go:121 ./cli/server/prune.go:98 ./cli/updater/updater.go:553 msgid "all" msgstr "" @@ -1773,7 +1805,7 @@ msgstr "" msgid "attempting to run %s" msgstr "" -#: ./cli/app/deploy.go:238 ./cli/app/upgrade.go:273 +#: ./cli/app/deploy.go:255 ./cli/app/upgrade.go:289 #, c-format msgid "attempting to run post deploy commands, saw: %s" msgstr "" @@ -1798,7 +1830,7 @@ msgstr "" msgid "autocomplete [bash|zsh|fish|powershell]" msgstr "" -#: ./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:64 ./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:64 ./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 #, c-format msgid "autocomplete failed: %s" msgstr "" @@ -1811,7 +1843,7 @@ msgstr "" msgid "automatically set ssh remote" msgstr "" -#: ./cli/updater/updater.go:311 +#: ./cli/updater/updater.go:312 #, c-format msgid "available updates for %s: %s" msgstr "" @@ -1849,7 +1881,7 @@ msgstr "" msgid "bind options are incompatible with type volume" msgstr "" -#: ./cli/updater/updater.go:188 +#: ./cli/updater/updater.go:189 #, c-format msgid "boolean label %s could not be found for %s, set default to false." msgstr "" @@ -1863,7 +1895,7 @@ msgstr "" #. no spaces in between #. translators: `abra app cp` aliases. use a comma separated list of aliases with #. no spaces in between -#: ./cli/app/backup.go:148 ./cli/app/cp.go:30 ./cli/app/deploy.go:366 ./cli/app/rollback.go:345 ./cli/app/upgrade.go:455 +#: ./cli/app/backup.go:148 ./cli/app/cp.go:30 ./cli/app/deploy.go:383 ./cli/app/rollback.go:361 ./cli/app/upgrade.go:471 msgid "c" msgstr "" @@ -1885,17 +1917,22 @@ msgstr "" msgid "can't copy dir to file" msgstr "" +#: ./pkg/client/configs.go:48 +#, c-format +msgid "can't parse version from config '%s'" +msgstr "" + #: ./cli/internal/validate.go:35 #, c-format msgid "can't read local recipes: %s" msgstr "" -#: ./cli/updater/updater.go:209 +#: ./cli/updater/updater.go:210 #, c-format msgid "can't separate key from value: %s (this variable is probably unset)" msgstr "" -#: ./cli/internal/deploy.go:202 +#: ./cli/internal/deploy.go:223 msgid "cancelled" msgstr "" @@ -1932,7 +1969,7 @@ msgstr "" msgid "cannot use '[secret] [version]' and '--all' together" msgstr "" -#: ./cli/app/deploy.go:277 +#: ./cli/app/deploy.go:294 msgid "cannot use --chaos and --latest together" msgstr "" @@ -1956,11 +1993,11 @@ msgstr "" msgid "cannot use [service] and --all-services/-a together" msgstr "" -#: ./cli/app/deploy.go:269 ./cli/app/new.go:76 +#: ./cli/app/deploy.go:286 ./cli/app/new.go:76 msgid "cannot use [version] and --chaos together" msgstr "" -#: ./cli/app/deploy.go:273 +#: ./cli/app/deploy.go:290 msgid "cannot use [version] and --latest together" msgstr "" @@ -1992,7 +2029,7 @@ msgstr "" msgid "cfg" 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:341 ./cli/app/labels.go:142 ./cli/app/new.go:376 ./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/updater/updater.go:551 +#: ./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:358 ./cli/app/labels.go:142 ./cli/app/new.go:376 ./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/updater/updater.go:537 msgid "chaos" msgstr "" @@ -2001,11 +2038,11 @@ msgstr "" msgid "check [flags]" msgstr "" -#: ./cli/updater/updater.go:562 +#: ./cli/updater/updater.go:548 msgid "check for major updates" msgstr "" -#: ./cli/app/deploy.go:94 ./cli/app/undeploy.go:57 ./cli/app/upgrade.go:419 +#: ./cli/app/deploy.go:93 ./cli/app/undeploy.go:57 ./cli/app/upgrade.go:435 #, c-format msgid "checking whether %s is already deployed" msgstr "" @@ -2026,12 +2063,12 @@ msgstr "" msgid "choosing %s as new version for %s" msgstr "" -#: ./cli/app/rollback.go:152 +#: ./cli/app/rollback.go:151 #, c-format msgid "choosing %s as version to rollback" msgstr "" -#: ./cli/app/upgrade.go:158 +#: ./cli/app/upgrade.go:157 #, c-format msgid "choosing %s as version to upgrade" msgstr "" @@ -2117,7 +2154,7 @@ msgstr "" msgid "compose: %s, " msgstr "" -#: ./pkg/client/configs.go:35 +#: ./pkg/client/configs.go:36 #, c-format msgid "conf %s: %s" msgstr "" @@ -2156,7 +2193,7 @@ msgstr "" msgid "considering %s config(s) for tag update" msgstr "" -#: ./cli/app/undeploy.go:132 ./cli/server/prune.go:53 +#: ./cli/app/undeploy.go:135 ./cli/server/prune.go:53 #, c-format msgid "containers pruned: %d; space reclaimed: %s" msgstr "" @@ -2287,7 +2324,7 @@ msgstr "" msgid "critical errors present in %s config" msgstr "" -#: ./cli/app/rollback.go:275 +#: ./cli/app/rollback.go:291 #, c-format msgid "current deployment '%s' is not a known version for %s" msgstr "" @@ -2303,11 +2340,11 @@ msgstr "" #. no spaces in between #. translators: `abra recipe diff` aliases. use a comma separated list of aliases #. with no spaces in between -#: ./cli/app/backup.go:73 ./cli/app/deploy.go:29 ./cli/recipe/diff.go:16 ./cli/updater/updater.go:505 +#: ./cli/app/backup.go:73 ./cli/app/deploy.go:28 ./cli/recipe/diff.go:16 ./cli/updater/updater.go:491 msgid "d" msgstr "" -#: ./cli/updater/updater.go:504 +#: ./cli/updater/updater.go:490 msgid "debug" msgstr "" @@ -2322,7 +2359,7 @@ msgid "deleted %s successfully from server" msgstr "" #. translators: `app deploy` command -#: ./cli/app/deploy.go:33 +#: ./cli/app/deploy.go:32 msgid "deploy [version] [flags]" msgstr "" @@ -2338,7 +2375,7 @@ msgstr "" msgid "deploy labels stanza present" msgstr "" -#: ./cli/app/deploy.go:376 +#: ./cli/app/deploy.go:393 msgid "deploy latest recipe version" msgstr "" @@ -2350,7 +2387,17 @@ msgstr "" msgid "deploy timed out 🟠" msgstr "" -#: ./cli/internal/deploy.go:109 +#: ./pkg/deploy/utils.go:157 +#, c-format +msgid "deployed config names: %v" +msgstr "" + +#: ./pkg/deploy/utils.go:196 +#, c-format +msgid "deployed images: %v" +msgstr "" + +#: ./cli/internal/deploy.go:130 msgid "deployment cancelled" msgstr "" @@ -2400,6 +2447,16 @@ msgstr "" msgid "diff [flags]" msgstr "" +#: ./pkg/deploy/utils.go:76 +#, c-format +msgid "different versions for config '%s', '%s' and %s'" +msgstr "" + +#: ./pkg/deploy/utils.go:123 ./pkg/deploy/utils.go:217 +#, c-format +msgid "different versions for image '%s', '%s' and %s'" +msgstr "" + #: ./pkg/recipe/recipe.go:202 #, c-format msgid "dir: %s, " @@ -2415,11 +2472,11 @@ msgstr "" msgid "dirty: %v, " msgstr "" -#: ./cli/app/deploy.go:368 ./cli/app/rollback.go:347 ./cli/app/upgrade.go:457 +#: ./cli/app/deploy.go:385 ./cli/app/rollback.go:363 ./cli/app/upgrade.go:473 msgid "disable converge logic checks" msgstr "" -#: ./cli/app/deploy.go:360 ./cli/app/rollback.go:339 ./cli/app/upgrade.go:449 +#: ./cli/app/deploy.go:377 ./cli/app/rollback.go:355 ./cli/app/upgrade.go:465 msgid "disable public DNS checks" msgstr "" @@ -2452,22 +2509,22 @@ msgstr "" msgid "don't forget to run 'sudo mandb'" msgstr "" -#: ./cli/updater/updater.go:398 +#: ./cli/updater/updater.go:384 #, c-format msgid "don't update %s due to chaos deployment" msgstr "" -#: ./cli/updater/updater.go:408 +#: ./cli/updater/updater.go:394 #, c-format msgid "don't update %s due to disabled auto updates or missing ENABLE_AUTO_UPDATE env" msgstr "" -#: ./cli/updater/updater.go:388 +#: ./cli/updater/updater.go:374 #, c-format msgid "don't update %s due to missing recipe name" msgstr "" -#: ./cli/updater/updater.go:418 +#: ./cli/updater/updater.go:404 #, c-format msgid "don't update %s due to no new version" msgstr "" @@ -2477,7 +2534,7 @@ msgstr "" msgid "download [flags]" msgstr "" -#: ./cli/internal/deploy.go:192 +#: ./cli/internal/deploy.go:213 msgid "dry run" msgstr "" @@ -2564,7 +2621,7 @@ msgstr "" msgid "ensure \"image: ...\" set on all services" msgstr "" -#: ./cli/app/deploy.go:113 +#: ./cli/app/deploy.go:112 #, c-format msgid "ensure recipe: %s" msgstr "" @@ -2657,7 +2714,7 @@ msgstr "" #. translators: `abra recipe fetch` aliases. use a comma separated list of aliases #. with no spaces in between -#: ./cli/app/deploy.go:350 ./cli/app/remove.go:163 ./cli/app/rollback.go:329 ./cli/app/secret.go:593 ./cli/app/upgrade.go:439 ./cli/app/volume.go:217 ./cli/recipe/fetch.go:20 ./cli/recipe/fetch.go:138 +#: ./cli/app/deploy.go:367 ./cli/app/remove.go:163 ./cli/app/rollback.go:345 ./cli/app/secret.go:593 ./cli/app/upgrade.go:455 ./cli/app/volume.go:217 ./cli/recipe/fetch.go:20 ./cli/recipe/fetch.go:138 msgid "f" msgstr "" @@ -2716,7 +2773,7 @@ msgstr "" msgid "failed to create volume %s on %s: %s" msgstr "" -#: ./cli/updater/updater.go:263 +#: ./cli/updater/updater.go:264 #, c-format msgid "failed to determine deployed version of %s" msgstr "" @@ -2888,12 +2945,12 @@ msgstr "" msgid "filter by recipe" msgstr "" -#: ./cli/updater/updater.go:214 +#: ./cli/updater/updater.go:215 #, c-format msgid "for %s read env %s with value: %s from docker service" msgstr "" -#: ./cli/app/deploy.go:349 ./cli/app/remove.go:162 ./cli/app/rollback.go:328 ./cli/app/upgrade.go:438 ./cli/app/volume.go:216 ./cli/recipe/fetch.go:137 +#: ./cli/app/deploy.go:366 ./cli/app/remove.go:162 ./cli/app/rollback.go:344 ./cli/app/upgrade.go:454 ./cli/app/volume.go:216 ./cli/recipe/fetch.go:137 msgid "force" msgstr "" @@ -2952,7 +3009,7 @@ msgstr "" msgid "generated secrets %s shown again, please take note of them %s" msgstr "" -#: ./cli/app/deploy.go:107 +#: ./cli/app/deploy.go:106 #, c-format msgid "get deploy version: %s" msgstr "" @@ -3112,11 +3169,11 @@ msgstr "" msgid "id: %s, " 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:344 ./cli/app/labels.go:145 ./cli/app/new.go:379 ./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/updater/updater.go:554 +#: ./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:361 ./cli/app/labels.go:145 ./cli/app/new.go:379 ./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/updater/updater.go:540 msgid "ignore uncommitted recipes changes" msgstr "" -#: ./cli/app/undeploy.go:147 ./cli/server/prune.go:74 +#: ./cli/app/undeploy.go:150 ./cli/server/prune.go:74 #, c-format msgid "images pruned: %d; space reclaimed: %s" msgstr "" @@ -3292,11 +3349,11 @@ msgid "invalid version %s specified" msgstr "" #. translators: `kadabra` binary name -#: ./cli/updater/updater.go:484 +#: ./cli/updater/updater.go:470 msgid "kadabra [cmd] [flags]" msgstr "" -#: ./cli/updater/updater.go:498 +#: ./cli/updater/updater.go:484 #, c-format msgid "kadabra version %s, commit %s" msgstr "" @@ -3305,7 +3362,7 @@ msgstr "" #. no spaces in between #. translators: `abra recipe lint` aliases. use a comma separated list of #. aliases with no spaces in between -#: ./cli/app/cmd.go:261 ./cli/app/deploy.go:374 ./cli/app/logs.go:20 ./cli/recipe/lint.go:17 ./cli/server/add.go:207 +#: ./cli/app/cmd.go:261 ./cli/app/deploy.go:391 ./cli/app/logs.go:20 ./cli/recipe/lint.go:17 ./cli/server/add.go:207 msgid "l" msgstr "" @@ -3314,7 +3371,7 @@ msgstr "" msgid "labels [flags]" msgstr "" -#: ./cli/app/deploy.go:373 ./cli/app/list.go:183 +#: ./cli/app/deploy.go:390 ./cli/app/list.go:183 msgid "latest" msgstr "" @@ -3437,7 +3494,7 @@ msgstr "" #. with no spaces in between #. translators: `abra man` aliases. use a comma separated list of aliases #. with no spaces in between -#: ./cli/app/list.go:318 ./cli/app/move.go:34 ./cli/app/ps.go:205 ./cli/app/secret.go:553 ./cli/app/secret.go:649 ./cli/recipe/list.go:104 ./cli/recipe/upgrade.go:376 ./cli/recipe/version.go:139 ./cli/run.go:152 ./cli/server/list.go:106 ./cli/updater/updater.go:560 +#: ./cli/app/list.go:318 ./cli/app/move.go:34 ./cli/app/ps.go:205 ./cli/app/secret.go:553 ./cli/app/secret.go:649 ./cli/recipe/list.go:104 ./cli/recipe/upgrade.go:376 ./cli/recipe/version.go:139 ./cli/run.go:152 ./cli/server/list.go:106 ./cli/updater/updater.go:546 msgid "m" msgstr "" @@ -3450,7 +3507,7 @@ msgstr "" msgid "main app service version for %s is empty?" msgstr "" -#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:66 ./cli/internal/recipe.go:80 ./cli/recipe/release.go:647 ./cli/recipe/sync.go:277 ./cli/recipe/upgrade.go:351 ./cli/updater/updater.go:559 +#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:66 ./cli/internal/recipe.go:80 ./cli/recipe/release.go:647 ./cli/recipe/sync.go:277 ./cli/recipe/upgrade.go:351 ./cli/updater/updater.go:545 msgid "major" msgstr "" @@ -3494,7 +3551,7 @@ msgstr "" msgid "missing arguments [secret]/[version] or '--all'" msgstr "" -#: ./cli/updater/updater.go:115 +#: ./cli/updater/updater.go:116 msgid "missing arguments or --all/-a flag" msgstr "" @@ -3523,7 +3580,7 @@ msgstr "" #. aliases with no spaces in between #. translators: `kadabra notify` aliases. use a comma separated list of aliases #. with no spaces in between -#: ./cli/app/new.go:48 ./cli/recipe/new.go:36 ./cli/updater/updater.go:35 ./cli/updater/updater.go:513 +#: ./cli/app/new.go:48 ./cli/recipe/new.go:36 ./cli/updater/updater.go:36 ./cli/updater/updater.go:499 msgid "n" msgstr "" @@ -3554,7 +3611,7 @@ msgstr "" msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" msgstr "" -#: ./cli/app/undeploy.go:139 ./cli/server/prune.go:60 +#: ./cli/app/undeploy.go:142 ./cli/server/prune.go:60 #, c-format msgid "networks pruned: %d" msgstr "" @@ -3594,7 +3651,7 @@ msgstr "" msgid "no %s exists, skipping reading gitignore paths" msgstr "" -#: ./cli/updater/updater.go:167 ./pkg/app/compose.go:87 +#: ./cli/updater/updater.go:168 ./pkg/app/compose.go:87 #, c-format msgid "no %s label found for %s" msgstr "" @@ -3617,15 +3674,15 @@ msgstr "" msgid "no app provided" msgstr "" -#: ./cli/app/rollback.go:127 +#: ./cli/app/rollback.go:126 msgid "no available downgrades" msgstr "" -#: ./cli/app/upgrade.go:133 +#: ./cli/app/upgrade.go:132 msgid "no available upgrades" msgstr "" -#: ./cli/updater/updater.go:236 +#: ./cli/updater/updater.go:237 #, c-format msgid "no available upgrades for %s" msgstr "" @@ -3674,7 +3731,7 @@ msgstr "" msgid "no new versions available for %s, assuming %s is the latest (use -a/--all-tags to see all anyway)" msgstr "" -#: ./cli/updater/updater.go:285 +#: ./cli/updater/updater.go:286 #, c-format msgid "no published releases for %s in the recipe catalogue?" msgstr "" @@ -3754,6 +3811,11 @@ msgstr "" msgid "no version bump type specififed?" msgstr "" +#: ./pkg/deploy/utils.go:168 +#, c-format +msgid "no version found for config %s" +msgstr "" + #: ./cli/app/volume.go:78 #, c-format msgid "no volumes created for %s" @@ -3767,15 +3829,15 @@ msgstr "" msgid "no volumes to remove" msgstr "" -#: ./cli/app/deploy.go:365 ./cli/app/rollback.go:344 ./cli/app/upgrade.go:454 +#: ./cli/app/deploy.go:382 ./cli/app/rollback.go:360 ./cli/app/upgrade.go:470 msgid "no-converge-checks" msgstr "" -#: ./cli/app/deploy.go:357 ./cli/app/rollback.go:336 ./cli/app/upgrade.go:446 +#: ./cli/app/deploy.go:374 ./cli/app/rollback.go:352 ./cli/app/upgrade.go:462 msgid "no-domain-checks" msgstr "" -#: ./cli/updater/updater.go:512 +#: ./cli/updater/updater.go:498 msgid "no-input" msgstr "" @@ -3783,7 +3845,7 @@ msgstr "" msgid "no-tty" msgstr "" -#: ./cli/internal/deploy.go:222 +#: ./cli/internal/deploy.go:243 #, c-format msgid "not enough arguments: %s" msgstr "" @@ -3812,7 +3874,7 @@ msgid "nothing found in stack: %s" msgstr "" #. translators: `notify` command -#: ./cli/updater/updater.go:40 +#: ./cli/updater/updater.go:41 msgid "notify [flags]" msgstr "" @@ -3836,7 +3898,7 @@ msgstr "" msgid "only show errors" msgstr "" -#: ./cli/app/upgrade.go:465 +#: ./cli/app/upgrade.go:481 msgid "only show release notes" msgstr "" @@ -3848,7 +3910,7 @@ msgstr "" #. with no spaces in between #. translators: `abra server prune` aliases. use a comma separated list of #. aliases with no spaces in between -#: ./cli/app/backup.go:295 ./cli/app/new.go:361 ./cli/app/ps.go:29 ./cli/app/secret.go:561 ./cli/app/secret.go:585 ./cli/app/secret.go:625 ./cli/app/undeploy.go:160 ./cli/catalogue/catalogue.go:294 ./cli/recipe/list.go:112 ./cli/recipe/release.go:672 ./cli/server/prune.go:18 +#: ./cli/app/backup.go:295 ./cli/app/new.go:361 ./cli/app/ps.go:29 ./cli/app/secret.go:561 ./cli/app/secret.go:585 ./cli/app/secret.go:625 ./cli/app/undeploy.go:163 ./cli/catalogue/catalogue.go:294 ./cli/recipe/list.go:112 ./cli/recipe/release.go:672 ./cli/server/prune.go:18 msgid "p" msgstr "" @@ -3867,22 +3929,22 @@ msgstr "" msgid "parsed following command arguments: %s" msgstr "" -#: ./cli/app/upgrade.go:322 +#: ./cli/app/upgrade.go:338 #, c-format msgid "parsing chosen upgrade version failed: %s" msgstr "" -#: ./cli/app/upgrade.go:366 +#: ./cli/app/upgrade.go:382 #, c-format msgid "parsing deployed version failed: %s" msgstr "" -#: ./cli/app/upgrade.go:327 +#: ./cli/app/upgrade.go:343 #, c-format msgid "parsing deployment version failed: %s" msgstr "" -#: ./cli/app/upgrade.go:333 ./cli/app/upgrade.go:372 +#: ./cli/app/upgrade.go:349 ./cli/app/upgrade.go:388 #, c-format msgid "parsing recipe version failed: %s" msgstr "" @@ -3907,7 +3969,7 @@ msgstr "" msgid "pattern" msgstr "" -#: ./cli/app/deploy.go:352 ./cli/app/remove.go:165 ./cli/app/rollback.go:331 ./cli/app/upgrade.go:441 ./cli/app/volume.go:219 +#: ./cli/app/deploy.go:369 ./cli/app/remove.go:165 ./cli/app/rollback.go:347 ./cli/app/upgrade.go:457 ./cli/app/volume.go:219 msgid "perform action without further prompt" msgstr "" @@ -3916,22 +3978,22 @@ msgstr "" msgid "please fix your synced label for %s and re-run this command" msgstr "" -#: ./cli/app/rollback.go:243 +#: ./cli/app/rollback.go:259 #, c-format msgid "please select a downgrade (version: %s):" msgstr "" -#: ./cli/app/rollback.go:248 +#: ./cli/app/rollback.go:264 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" msgstr "" -#: ./cli/app/upgrade.go:289 +#: ./cli/app/upgrade.go:305 #, c-format msgid "please select an upgrade (version: %s):" msgstr "" -#: ./cli/app/upgrade.go:294 +#: ./cli/app/upgrade.go:310 #, c-format msgid "please select an upgrade (version: %s, chaos: %s):" msgstr "" @@ -3956,7 +4018,7 @@ msgstr "" msgid "print machine-readable output" msgstr "" -#: ./cli/internal/deploy.go:196 +#: ./cli/internal/deploy.go:217 msgid "proceed?" msgstr "" @@ -3965,7 +4027,12 @@ msgstr "" msgid "processing %s for %s" msgstr "" -#: ./cli/app/undeploy.go:159 +#: ./pkg/deploy/utils.go:221 +#, c-format +msgid "proposed images: %v" +msgstr "" + +#: ./cli/app/undeploy.go:162 msgid "prune" msgstr "" @@ -3974,7 +4041,7 @@ msgstr "" msgid "prune [flags]" msgstr "" -#: ./cli/app/undeploy.go:162 +#: ./cli/app/undeploy.go:165 msgid "prune unused containers, networks, and dangling images" msgstr "" @@ -4007,7 +4074,7 @@ msgstr "" #. with no spaces in between #. translators: `abra recipe` aliases. use a comma separated list of aliases #. with no spaces in between -#: ./cli/app/backup.go:327 ./cli/app/list.go:303 ./cli/app/move.go:346 ./cli/app/run.go:23 ./cli/app/upgrade.go:463 ./cli/catalogue/catalogue.go:302 ./cli/recipe/recipe.go:12 ./cli/recipe/release.go:640 ./cli/recipe/sync.go:270 +#: ./cli/app/backup.go:327 ./cli/app/list.go:303 ./cli/app/move.go:346 ./cli/app/run.go:23 ./cli/app/upgrade.go:479 ./cli/catalogue/catalogue.go:302 ./cli/recipe/recipe.go:12 ./cli/recipe/release.go:640 ./cli/recipe/sync.go:270 msgid "r" msgstr "" @@ -4118,7 +4185,7 @@ msgstr "" msgid "release [version] [flags]" msgstr "" -#: ./cli/app/upgrade.go:462 +#: ./cli/app/upgrade.go:478 msgid "releasenotes" msgstr "" @@ -4305,7 +4372,7 @@ msgstr "" msgid "retries" msgstr "" -#: ./cli/updater/updater.go:251 +#: ./cli/updater/updater.go:252 #, c-format msgid "retrieve deployed version whether %s is already deployed" msgstr "" @@ -4362,7 +4429,7 @@ msgstr "" #. aliases with no spaces in between #. translators: `abra recipe release` aliases. use a comma separated list of #. aliases with no spaces in between -#: ./cli/app/rollback.go:27 ./cli/recipe/release.go:28 +#: ./cli/app/rollback.go:26 ./cli/recipe/release.go:28 msgid "rl" msgstr "" @@ -4379,7 +4446,7 @@ msgid "rm" msgstr "" #. translators: `app rollback` command -#: ./cli/app/rollback.go:31 +#: ./cli/app/rollback.go:30 msgid "rollback [version] [flags]" msgstr "" @@ -4422,7 +4489,7 @@ msgstr "" msgid "run command locally" msgstr "" -#: ./cli/app/deploy.go:236 ./cli/app/upgrade.go:270 +#: ./cli/app/deploy.go:253 ./cli/app/upgrade.go:286 #, c-format msgid "run the following post-deploy commands: %s" msgstr "" @@ -4432,7 +4499,7 @@ msgstr "" msgid "running backup %s on %s with exec config %v" msgstr "" -#: ./cli/internal/deploy.go:252 +#: ./cli/internal/deploy.go:273 #, c-format msgid "running command %s %s within the context of %s_%s" msgstr "" @@ -4452,7 +4519,7 @@ msgstr "" msgid "running command: %s" msgstr "" -#: ./cli/internal/deploy.go:230 +#: ./cli/internal/deploy.go:251 #, c-format msgid "running post-command '%s %s' in container %s" msgstr "" @@ -4478,6 +4545,11 @@ msgstr "" msgid "satisfied" msgstr "" +#: ./pkg/deploy/utils.go:164 +#, c-format +msgid "searching abra.sh for version for %s" +msgstr "" + #: ./pkg/secret/secret.go:139 #, c-format msgid "secret %s is > %d chars when combined with %s" @@ -4502,7 +4574,7 @@ msgstr "" msgid "secret not found: %s" msgstr "" -#: ./cli/app/deploy.go:291 +#: ./cli/app/deploy.go:308 #, c-format msgid "secret not generated: %s" msgstr "" @@ -4622,6 +4694,10 @@ msgstr "" msgid "severity" msgstr "" +#: ./cli/app/deploy.go:401 ./cli/app/rollback.go:371 ./cli/app/upgrade.go:489 +msgid "show all configs & images, including unchanged ones" +msgstr "" + #: ./cli/app/backup.go:273 msgid "show all paths" msgstr "" @@ -4638,10 +4714,14 @@ msgstr "" msgid "show apps of a specific server" msgstr "" -#: ./cli/run.go:193 ./cli/updater/updater.go:507 +#: ./cli/run.go:193 ./cli/updater/updater.go:493 msgid "show debug messages" msgstr "" +#: ./cli/app/deploy.go:398 ./cli/app/rollback.go:368 ./cli/app/upgrade.go:486 +msgid "show-unchanged" +msgstr "" + #: ./cli/app/logs.go:108 msgid "since" msgstr "" @@ -4686,11 +4766,11 @@ msgstr "" msgid "skipping converge logic checks" msgstr "" -#: ./cli/app/deploy.go:189 +#: ./cli/app/deploy.go:184 msgid "skipping domain checks" msgstr "" -#: ./cli/app/deploy.go:186 +#: ./cli/app/deploy.go:181 msgid "skipping domain checks, no DOMAIN=... configured" msgstr "" @@ -4919,7 +4999,7 @@ msgstr "" msgid "tmpfs options are incompatible with type volume" msgstr "" -#: ./cli/run.go:201 ./cli/updater/updater.go:515 +#: ./cli/run.go:201 ./cli/updater/updater.go:501 msgid "toggle non-interactive mode" msgstr "" @@ -4954,7 +5034,7 @@ msgstr "" #. no spaces in between #. translators: `abra upgrade` aliases. use a comma separated list of aliases with #. no spaces in between -#: ./cli/app/cmd.go:269 ./cli/app/run.go:118 ./cli/recipe/upgrade.go:42 ./cli/updater/updater.go:80 ./cli/upgrade.go:17 +#: ./cli/app/cmd.go:269 ./cli/app/run.go:118 ./cli/recipe/upgrade.go:42 ./cli/updater/updater.go:81 ./cli/upgrade.go:17 msgid "u" msgstr "" @@ -5212,7 +5292,7 @@ msgstr "" msgid "undeploy [flags]" msgstr "" -#: ./cli/app/undeploy.go:108 +#: ./cli/app/undeploy.go:111 msgid "undeploy succeeded 🟢" msgstr "" @@ -5245,11 +5325,11 @@ msgstr "" msgid "unknown" msgstr "" -#: ./cli/app/rollback.go:149 +#: ./cli/app/rollback.go:148 msgid "unknown deployed version, unable to downgrade" msgstr "" -#: ./cli/app/upgrade.go:155 +#: ./cli/app/upgrade.go:154 msgid "unknown deployed version, unable to upgrade" msgstr "" @@ -5280,11 +5360,11 @@ msgstr "" #. translators: `abra app upgrade` aliases. use a comma separated list of aliases with #. no spaces in between -#: ./cli/app/upgrade.go:30 +#: ./cli/app/upgrade.go:29 msgid "up" msgstr "" -#: ./cli/updater/updater.go:570 +#: ./cli/updater/updater.go:556 msgid "update all deployed apps" msgstr "" @@ -5303,13 +5383,13 @@ msgstr "" msgid "upgrade" msgstr "" -#: ./cli/updater/updater.go:456 +#: ./cli/updater/updater.go:442 #, c-format msgid "upgrade %s (%s) to version %s" msgstr "" #. translators: `app upgrade` command -#: ./cli/app/upgrade.go:34 +#: ./cli/app/upgrade.go:33 msgid "upgrade [version] [flags]" msgstr "" @@ -5319,7 +5399,7 @@ msgid "upgrade [flags]" msgstr "" #. translators: `app upgrade` command -#: ./cli/updater/updater.go:85 +#: ./cli/updater/updater.go:86 msgid "upgrade [[stack] [recipe] | --all] [flags]" msgstr "" @@ -5411,7 +5491,7 @@ msgstr "" msgid "version %s saved to %s.env" msgstr "" -#: ./cli/app/deploy.go:116 +#: ./cli/app/deploy.go:115 #, c-format msgid "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" msgstr "" @@ -5435,32 +5515,32 @@ msgstr "" msgid "version wiped from %s.env" msgstr "" -#: ./cli/app/deploy.go:318 +#: ./cli/app/deploy.go:335 #, c-format msgid "version: can not redeploy chaos version %s" msgstr "" -#: ./cli/app/deploy.go:305 +#: ./cli/app/deploy.go:322 #, c-format msgid "version: taking chaos version: %s" msgstr "" -#: ./cli/app/deploy.go:326 +#: ./cli/app/deploy.go:343 #, c-format msgid "version: taking deployed version: %s" msgstr "" -#: ./cli/app/deploy.go:331 +#: ./cli/app/deploy.go:348 #, c-format msgid "version: taking new recipe version: %s" msgstr "" -#: ./cli/app/deploy.go:320 +#: ./cli/app/deploy.go:337 #, c-format msgid "version: taking version from .env file: %s" msgstr "" -#: ./cli/app/deploy.go:311 +#: ./cli/app/deploy.go:328 #, c-format msgid "version: taking version from cli arg: %s" msgstr "" @@ -5583,7 +5663,7 @@ msgstr "" msgid "writer: %v, " msgstr "" -#: ./cli/app/deploy.go:243 ./cli/app/new.go:221 ./cli/app/rollback.go:232 ./cli/app/undeploy.go:111 ./cli/app/upgrade.go:278 +#: ./cli/app/deploy.go:260 ./cli/app/new.go:221 ./cli/app/rollback.go:248 ./cli/app/undeploy.go:114 ./cli/app/upgrade.go:294 #, c-format msgid "writing recipe version failed: %s" msgstr "" diff --git a/pkg/i18n/locales/es.po b/pkg/i18n/locales/es.po index 206e9d5b..819457b0 100644 --- a/pkg/i18n/locales/es.po +++ b/pkg/i18n/locales/es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" -"POT-Creation-Date: 2025-09-06 08:28+0200\n" +"POT-Creation-Date: 2025-09-09 13:19-0400\n" "PO-Revision-Date: 2025-09-04 08:14+0000\n" "Last-Translator: chasqui \n" "Language-Team: Spanish [flags]" msgstr "verificar [flags]" -#: cli/updater/updater.go:562 +#: cli/updater/updater.go:548 msgid "check for major updates" msgstr "" -#: cli/app/deploy.go:94 cli/app/undeploy.go:57 cli/app/upgrade.go:419 +#: cli/app/deploy.go:93 cli/app/undeploy.go:57 cli/app/upgrade.go:435 #, c-format msgid "checking whether %s is already deployed" msgstr "" @@ -2204,12 +2241,12 @@ msgstr "" msgid "choosing %s as new version for %s" msgstr "" -#: cli/app/rollback.go:152 +#: cli/app/rollback.go:151 #, c-format msgid "choosing %s as version to rollback" msgstr "" -#: cli/app/upgrade.go:158 +#: cli/app/upgrade.go:157 #, c-format msgid "choosing %s as version to upgrade" msgstr "" @@ -2301,7 +2338,7 @@ msgstr "" msgid "compose: %s, " msgstr "" -#: pkg/client/configs.go:35 +#: pkg/client/configs.go:36 #, c-format msgid "conf %s: %s" msgstr "" @@ -2340,7 +2377,7 @@ msgstr "" msgid "considering %s config(s) for tag update" msgstr "" -#: cli/app/undeploy.go:132 cli/server/prune.go:53 +#: cli/app/undeploy.go:135 cli/server/prune.go:53 #, c-format msgid "containers pruned: %d; space reclaimed: %s" msgstr "" @@ -2471,7 +2508,7 @@ msgstr "" msgid "critical errors present in %s config" msgstr "" -#: cli/app/rollback.go:275 +#: cli/app/rollback.go:291 #, c-format msgid "current deployment '%s' is not a known version for %s" msgstr "" @@ -2487,12 +2524,12 @@ msgstr "" #. no spaces in between #. translators: `abra recipe diff` aliases. use a comma separated list of aliases #. with no spaces in between -#: cli/app/backup.go:73 cli/app/deploy.go:29 cli/recipe/diff.go:16 -#: cli/updater/updater.go:505 +#: cli/app/backup.go:73 cli/app/deploy.go:28 cli/recipe/diff.go:16 +#: cli/updater/updater.go:491 msgid "d" msgstr "" -#: cli/updater/updater.go:504 +#: cli/updater/updater.go:490 msgid "debug" msgstr "" @@ -2507,7 +2544,7 @@ msgid "deleted %s successfully from server" msgstr "" #. translators: `app deploy` command -#: cli/app/deploy.go:33 +#: cli/app/deploy.go:32 msgid "deploy [version] [flags]" msgstr "desplegar [version] [flags]" @@ -2523,7 +2560,7 @@ msgstr "" msgid "deploy labels stanza present" msgstr "" -#: cli/app/deploy.go:376 +#: cli/app/deploy.go:393 #, fuzzy msgid "deploy latest recipe version" msgstr "Publicar una nueva versión de una receta" @@ -2536,7 +2573,17 @@ msgstr "" msgid "deploy timed out 🟠" msgstr "" -#: cli/internal/deploy.go:109 +#: pkg/deploy/utils.go:157 +#, c-format +msgid "deployed config names: %v" +msgstr "" + +#: pkg/deploy/utils.go:196 +#, c-format +msgid "deployed images: %v" +msgstr "" + +#: cli/internal/deploy.go:130 msgid "deployment cancelled" msgstr "" @@ -2586,6 +2633,16 @@ msgstr "" msgid "diff [flags]" msgstr "comparar [flags]" +#: pkg/deploy/utils.go:76 +#, c-format +msgid "different versions for config '%s', '%s' and %s'" +msgstr "" + +#: pkg/deploy/utils.go:123 pkg/deploy/utils.go:217 +#, c-format +msgid "different versions for image '%s', '%s' and %s'" +msgstr "" + #: pkg/recipe/recipe.go:202 #, c-format msgid "dir: %s, " @@ -2601,11 +2658,11 @@ msgstr "" msgid "dirty: %v, " msgstr "" -#: cli/app/deploy.go:368 cli/app/rollback.go:347 cli/app/upgrade.go:457 +#: cli/app/deploy.go:385 cli/app/rollback.go:363 cli/app/upgrade.go:473 msgid "disable converge logic checks" msgstr "" -#: cli/app/deploy.go:360 cli/app/rollback.go:339 cli/app/upgrade.go:449 +#: cli/app/deploy.go:377 cli/app/rollback.go:355 cli/app/upgrade.go:465 msgid "disable public DNS checks" msgstr "" @@ -2638,24 +2695,24 @@ msgstr "" msgid "don't forget to run 'sudo mandb'" msgstr "" -#: cli/updater/updater.go:398 +#: cli/updater/updater.go:384 #, c-format msgid "don't update %s due to chaos deployment" msgstr "" -#: cli/updater/updater.go:408 +#: cli/updater/updater.go:394 #, c-format msgid "" "don't update %s due to disabled auto updates or missing ENABLE_AUTO_UPDATE " "env" msgstr "" -#: cli/updater/updater.go:388 +#: cli/updater/updater.go:374 #, c-format msgid "don't update %s due to missing recipe name" msgstr "" -#: cli/updater/updater.go:418 +#: cli/updater/updater.go:404 #, c-format msgid "don't update %s due to no new version" msgstr "" @@ -2665,7 +2722,7 @@ msgstr "" msgid "download [flags]" msgstr "descargar [flags]" -#: cli/internal/deploy.go:192 +#: cli/internal/deploy.go:213 msgid "dry run" msgstr "" @@ -2753,7 +2810,7 @@ msgstr "" msgid "ensure \"image: ...\" set on all services" msgstr "" -#: cli/app/deploy.go:113 +#: cli/app/deploy.go:112 #, c-format msgid "ensure recipe: %s" msgstr "" @@ -2850,8 +2907,8 @@ msgstr "" #. translators: `abra recipe fetch` aliases. use a comma separated list of aliases #. with no spaces in between -#: cli/app/deploy.go:350 cli/app/remove.go:163 cli/app/rollback.go:329 -#: cli/app/secret.go:593 cli/app/upgrade.go:439 cli/app/volume.go:217 +#: cli/app/deploy.go:367 cli/app/remove.go:163 cli/app/rollback.go:345 +#: cli/app/secret.go:593 cli/app/upgrade.go:455 cli/app/volume.go:217 #: cli/recipe/fetch.go:20 cli/recipe/fetch.go:138 msgid "f" msgstr "" @@ -2911,7 +2968,7 @@ msgstr "" msgid "failed to create volume %s on %s: %s" msgstr "🥷 Genera secretos (contraseñas) automáticamente 🤖" -#: cli/updater/updater.go:263 +#: cli/updater/updater.go:264 #, c-format msgid "failed to determine deployed version of %s" msgstr "" @@ -3083,13 +3140,13 @@ msgstr "" msgid "filter by recipe" msgstr "" -#: cli/updater/updater.go:214 +#: cli/updater/updater.go:215 #, c-format msgid "for %s read env %s with value: %s from docker service" msgstr "" -#: cli/app/deploy.go:349 cli/app/remove.go:162 cli/app/rollback.go:328 -#: cli/app/upgrade.go:438 cli/app/volume.go:216 cli/recipe/fetch.go:137 +#: cli/app/deploy.go:366 cli/app/remove.go:162 cli/app/rollback.go:344 +#: cli/app/upgrade.go:454 cli/app/volume.go:216 cli/recipe/fetch.go:137 msgid "force" msgstr "" @@ -3148,7 +3205,7 @@ msgstr "" msgid "generated secrets %s shown again, please take note of them %s" msgstr "" -#: cli/app/deploy.go:107 +#: cli/app/deploy.go:106 #, c-format msgid "get deploy version: %s" msgstr "" @@ -3310,16 +3367,16 @@ msgid "id: %s, " 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:344 +#: cli/app/cmd.go:287 cli/app/cp.go:387 cli/app/deploy.go:361 #: cli/app/labels.go:145 cli/app/new.go:379 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/updater/updater.go:554 +#: cli/updater/updater.go:540 msgid "ignore uncommitted recipes changes" msgstr "" -#: cli/app/undeploy.go:147 cli/server/prune.go:74 +#: cli/app/undeploy.go:150 cli/server/prune.go:74 #, c-format msgid "images pruned: %d; space reclaimed: %s" msgstr "" @@ -3497,11 +3554,11 @@ msgid "invalid version %s specified" msgstr "" #. translators: `kadabra` binary name -#: cli/updater/updater.go:484 +#: cli/updater/updater.go:470 msgid "kadabra [cmd] [flags]" msgstr "" -#: cli/updater/updater.go:498 +#: cli/updater/updater.go:484 #, c-format msgid "kadabra version %s, commit %s" msgstr "" @@ -3510,7 +3567,7 @@ msgstr "" #. no spaces in between #. translators: `abra recipe lint` aliases. use a comma separated list of #. aliases with no spaces in between -#: cli/app/cmd.go:261 cli/app/deploy.go:374 cli/app/logs.go:20 +#: cli/app/cmd.go:261 cli/app/deploy.go:391 cli/app/logs.go:20 #: cli/recipe/lint.go:17 cli/server/add.go:207 msgid "l" msgstr "" @@ -3520,7 +3577,7 @@ msgstr "" msgid "labels [flags]" msgstr "etiquetas [flags]" -#: cli/app/deploy.go:373 cli/app/list.go:183 +#: cli/app/deploy.go:390 cli/app/list.go:183 msgid "latest" msgstr "" @@ -3648,7 +3705,7 @@ msgstr "plataformas" #: cli/app/list.go:318 cli/app/move.go:34 cli/app/ps.go:205 #: cli/app/secret.go:553 cli/app/secret.go:649 cli/recipe/list.go:104 #: cli/recipe/upgrade.go:376 cli/recipe/version.go:139 cli/run.go:152 -#: cli/server/list.go:106 cli/updater/updater.go:560 +#: cli/server/list.go:106 cli/updater/updater.go:546 msgid "m" msgstr "" @@ -3665,7 +3722,7 @@ msgstr "" #: cli/internal/recipe.go:48 cli/internal/recipe.go:66 #: cli/internal/recipe.go:80 cli/recipe/release.go:647 cli/recipe/sync.go:277 -#: cli/recipe/upgrade.go:351 cli/updater/updater.go:559 +#: cli/recipe/upgrade.go:351 cli/updater/updater.go:545 msgid "major" msgstr "" @@ -3711,7 +3768,7 @@ msgstr "" msgid "missing arguments [secret]/[version] or '--all'" msgstr "" -#: cli/updater/updater.go:115 +#: cli/updater/updater.go:116 msgid "missing arguments or --all/-a flag" msgstr "" @@ -3740,8 +3797,8 @@ msgstr "" #. aliases with no spaces in between #. translators: `kadabra notify` aliases. use a comma separated list of aliases #. with no spaces in between -#: cli/app/new.go:48 cli/recipe/new.go:36 cli/updater/updater.go:35 -#: cli/updater/updater.go:513 +#: cli/app/new.go:48 cli/recipe/new.go:36 cli/updater/updater.go:36 +#: cli/updater/updater.go:499 msgid "n" msgstr "n" @@ -3777,7 +3834,7 @@ msgid "" "instead of \"swarm\"" msgstr "" -#: cli/app/undeploy.go:139 cli/server/prune.go:60 +#: cli/app/undeploy.go:142 cli/server/prune.go:60 #, c-format msgid "networks pruned: %d" msgstr "" @@ -3817,7 +3874,7 @@ msgstr "" msgid "no %s exists, skipping reading gitignore paths" msgstr "" -#: cli/updater/updater.go:167 pkg/app/compose.go:87 +#: cli/updater/updater.go:168 pkg/app/compose.go:87 #, c-format msgid "no %s label found for %s" msgstr "" @@ -3840,15 +3897,15 @@ msgstr "" msgid "no app provided" msgstr "" -#: cli/app/rollback.go:127 +#: cli/app/rollback.go:126 msgid "no available downgrades" msgstr "" -#: cli/app/upgrade.go:133 +#: cli/app/upgrade.go:132 msgid "no available upgrades" msgstr "" -#: cli/updater/updater.go:236 +#: cli/updater/updater.go:237 #, c-format msgid "no available upgrades for %s" msgstr "" @@ -3899,7 +3956,7 @@ msgid "" "tags to see all anyway)" msgstr "" -#: cli/updater/updater.go:285 +#: cli/updater/updater.go:286 #, fuzzy, c-format msgid "no published releases for %s in the recipe catalogue?" msgstr "TRANSLATE THIS FUCKING SHIT ALREADY" @@ -3981,6 +4038,11 @@ msgstr "" msgid "no version bump type specififed?" msgstr "" +#: pkg/deploy/utils.go:168 +#, c-format +msgid "no version found for config %s" +msgstr "" + #: cli/app/volume.go:78 #, c-format msgid "no volumes created for %s" @@ -3994,15 +4056,15 @@ msgstr "" msgid "no volumes to remove" msgstr "" -#: cli/app/deploy.go:365 cli/app/rollback.go:344 cli/app/upgrade.go:454 +#: cli/app/deploy.go:382 cli/app/rollback.go:360 cli/app/upgrade.go:470 msgid "no-converge-checks" msgstr "" -#: cli/app/deploy.go:357 cli/app/rollback.go:336 cli/app/upgrade.go:446 +#: cli/app/deploy.go:374 cli/app/rollback.go:352 cli/app/upgrade.go:462 msgid "no-domain-checks" msgstr "" -#: cli/updater/updater.go:512 +#: cli/updater/updater.go:498 msgid "no-input" msgstr "" @@ -4010,7 +4072,7 @@ msgstr "" msgid "no-tty" msgstr "" -#: cli/internal/deploy.go:222 +#: cli/internal/deploy.go:243 #, c-format msgid "not enough arguments: %s" msgstr "" @@ -4041,7 +4103,7 @@ msgid "nothing found in stack: %s" msgstr "" #. translators: `notify` command -#: cli/updater/updater.go:40 +#: cli/updater/updater.go:41 msgid "notify [flags]" msgstr "notificar [flags]" @@ -4065,7 +4127,7 @@ msgstr "" msgid "only show errors" msgstr "" -#: cli/app/upgrade.go:465 +#: cli/app/upgrade.go:481 msgid "only show release notes" msgstr "" @@ -4079,7 +4141,7 @@ msgstr "" #. aliases with no spaces in between #: cli/app/backup.go:295 cli/app/new.go:361 cli/app/ps.go:29 #: cli/app/secret.go:561 cli/app/secret.go:585 cli/app/secret.go:625 -#: cli/app/undeploy.go:160 cli/catalogue/catalogue.go:294 +#: cli/app/undeploy.go:163 cli/catalogue/catalogue.go:294 #: cli/recipe/list.go:112 cli/recipe/release.go:672 cli/server/prune.go:18 msgid "p" msgstr "" @@ -4099,22 +4161,22 @@ msgstr "" msgid "parsed following command arguments: %s" msgstr "" -#: cli/app/upgrade.go:322 +#: cli/app/upgrade.go:338 #, c-format msgid "parsing chosen upgrade version failed: %s" msgstr "" -#: cli/app/upgrade.go:366 +#: cli/app/upgrade.go:382 #, c-format msgid "parsing deployed version failed: %s" msgstr "" -#: cli/app/upgrade.go:327 +#: cli/app/upgrade.go:343 #, c-format msgid "parsing deployment version failed: %s" msgstr "" -#: cli/app/upgrade.go:333 cli/app/upgrade.go:372 +#: cli/app/upgrade.go:349 cli/app/upgrade.go:388 #, c-format msgid "parsing recipe version failed: %s" msgstr "" @@ -4142,8 +4204,8 @@ msgstr "" msgid "pattern" msgstr "" -#: cli/app/deploy.go:352 cli/app/remove.go:165 cli/app/rollback.go:331 -#: cli/app/upgrade.go:441 cli/app/volume.go:219 +#: cli/app/deploy.go:369 cli/app/remove.go:165 cli/app/rollback.go:347 +#: cli/app/upgrade.go:457 cli/app/volume.go:219 msgid "perform action without further prompt" msgstr "" @@ -4152,22 +4214,22 @@ msgstr "" msgid "please fix your synced label for %s and re-run this command" msgstr "" -#: cli/app/rollback.go:243 +#: cli/app/rollback.go:259 #, c-format msgid "please select a downgrade (version: %s):" msgstr "" -#: cli/app/rollback.go:248 +#: cli/app/rollback.go:264 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" msgstr "" -#: cli/app/upgrade.go:289 +#: cli/app/upgrade.go:305 #, c-format msgid "please select an upgrade (version: %s):" msgstr "" -#: cli/app/upgrade.go:294 +#: cli/app/upgrade.go:310 #, c-format msgid "please select an upgrade (version: %s, chaos: %s):" msgstr "" @@ -4195,7 +4257,7 @@ msgstr "" msgid "print machine-readable output" msgstr "" -#: cli/internal/deploy.go:196 +#: cli/internal/deploy.go:217 msgid "proceed?" msgstr "" @@ -4204,7 +4266,12 @@ msgstr "" msgid "processing %s for %s" msgstr "" -#: cli/app/undeploy.go:159 +#: pkg/deploy/utils.go:221 +#, c-format +msgid "proposed images: %v" +msgstr "" + +#: cli/app/undeploy.go:162 msgid "prune" msgstr "" @@ -4213,7 +4280,7 @@ msgstr "" msgid "prune [flags]" msgstr "limpiar [flags]" -#: cli/app/undeploy.go:162 +#: cli/app/undeploy.go:165 msgid "prune unused containers, networks, and dangling images" msgstr "" @@ -4247,7 +4314,7 @@ msgstr "" #. translators: `abra recipe` aliases. use a comma separated list of aliases #. with no spaces in between #: cli/app/backup.go:327 cli/app/list.go:303 cli/app/move.go:346 -#: cli/app/run.go:23 cli/app/upgrade.go:463 cli/catalogue/catalogue.go:302 +#: cli/app/run.go:23 cli/app/upgrade.go:479 cli/catalogue/catalogue.go:302 #: cli/recipe/recipe.go:12 cli/recipe/release.go:640 cli/recipe/sync.go:270 msgid "r" msgstr "" @@ -4361,7 +4428,7 @@ msgstr "" msgid "release [version] [flags]" msgstr "publicar [version] [flags]" -#: cli/app/upgrade.go:462 +#: cli/app/upgrade.go:478 msgid "releasenotes" msgstr "" @@ -4549,7 +4616,7 @@ msgstr "" msgid "retries" msgstr "" -#: cli/updater/updater.go:251 +#: cli/updater/updater.go:252 #, c-format msgid "retrieve deployed version whether %s is already deployed" msgstr "" @@ -4606,7 +4673,7 @@ msgstr "" #. aliases with no spaces in between #. translators: `abra recipe release` aliases. use a comma separated list of #. aliases with no spaces in between -#: cli/app/rollback.go:27 cli/recipe/release.go:28 +#: cli/app/rollback.go:26 cli/recipe/release.go:28 msgid "rl" msgstr "" @@ -4624,7 +4691,7 @@ msgid "rm" msgstr "" #. translators: `app rollback` command -#: cli/app/rollback.go:31 +#: cli/app/rollback.go:30 msgid "rollback [version] [flags]" msgstr "revertir [version] [flags]" @@ -4667,7 +4734,7 @@ msgstr "" msgid "run command locally" msgstr "" -#: cli/app/deploy.go:236 cli/app/upgrade.go:270 +#: cli/app/deploy.go:253 cli/app/upgrade.go:286 #, c-format msgid "run the following post-deploy commands: %s" msgstr "" @@ -4677,7 +4744,7 @@ msgstr "" msgid "running backup %s on %s with exec config %v" msgstr "" -#: cli/internal/deploy.go:252 +#: cli/internal/deploy.go:273 #, c-format msgid "running command %s %s within the context of %s_%s" msgstr "" @@ -4697,7 +4764,7 @@ msgstr "" msgid "running command: %s" msgstr "" -#: cli/internal/deploy.go:230 +#: cli/internal/deploy.go:251 #, c-format msgid "running post-command '%s %s' in container %s" msgstr "" @@ -4727,6 +4794,11 @@ msgstr "" msgid "satisfied" msgstr "" +#: pkg/deploy/utils.go:164 +#, c-format +msgid "searching abra.sh for version for %s" +msgstr "" + #: pkg/secret/secret.go:139 #, c-format msgid "secret %s is > %d chars when combined with %s" @@ -4751,7 +4823,7 @@ msgstr "" msgid "secret not found: %s" msgstr "" -#: cli/app/deploy.go:291 +#: cli/app/deploy.go:308 #, c-format msgid "secret not generated: %s" msgstr "" @@ -4874,6 +4946,10 @@ msgstr "" msgid "severity" msgstr "" +#: cli/app/deploy.go:401 cli/app/rollback.go:371 cli/app/upgrade.go:489 +msgid "show all configs & images, including unchanged ones" +msgstr "" + #: cli/app/backup.go:273 msgid "show all paths" msgstr "" @@ -4890,10 +4966,14 @@ msgstr "" msgid "show apps of a specific server" msgstr "" -#: cli/run.go:193 cli/updater/updater.go:507 +#: cli/run.go:193 cli/updater/updater.go:493 msgid "show debug messages" msgstr "" +#: cli/app/deploy.go:398 cli/app/rollback.go:368 cli/app/upgrade.go:486 +msgid "show-unchanged" +msgstr "" + #: cli/app/logs.go:108 msgid "since" msgstr "" @@ -4938,11 +5018,11 @@ msgstr "" msgid "skipping converge logic checks" msgstr "" -#: cli/app/deploy.go:189 +#: cli/app/deploy.go:184 msgid "skipping domain checks" msgstr "" -#: cli/app/deploy.go:186 +#: cli/app/deploy.go:181 msgid "skipping domain checks, no DOMAIN=... configured" msgstr "" @@ -5174,7 +5254,7 @@ msgstr "" msgid "tmpfs options are incompatible with type volume" msgstr "" -#: cli/run.go:201 cli/updater/updater.go:515 +#: cli/run.go:201 cli/updater/updater.go:501 msgid "toggle non-interactive mode" msgstr "" @@ -5210,7 +5290,7 @@ msgstr "" #. translators: `abra upgrade` aliases. use a comma separated list of aliases with #. no spaces in between #: cli/app/cmd.go:269 cli/app/run.go:118 cli/recipe/upgrade.go:42 -#: cli/updater/updater.go:80 cli/upgrade.go:17 +#: cli/updater/updater.go:81 cli/upgrade.go:17 msgid "u" msgstr "" @@ -5472,7 +5552,7 @@ msgstr "" msgid "undeploy [flags]" msgstr "desarmar [flags]" -#: cli/app/undeploy.go:108 +#: cli/app/undeploy.go:111 msgid "undeploy succeeded 🟢" msgstr "" @@ -5509,11 +5589,11 @@ msgstr "" msgid "unknown" msgstr "" -#: cli/app/rollback.go:149 +#: cli/app/rollback.go:148 msgid "unknown deployed version, unable to downgrade" msgstr "" -#: cli/app/upgrade.go:155 +#: cli/app/upgrade.go:154 msgid "unknown deployed version, unable to upgrade" msgstr "" @@ -5544,11 +5624,11 @@ msgstr "" #. translators: `abra app upgrade` aliases. use a comma separated list of aliases with #. no spaces in between -#: cli/app/upgrade.go:30 +#: cli/app/upgrade.go:29 msgid "up" msgstr "" -#: cli/updater/updater.go:570 +#: cli/updater/updater.go:556 msgid "update all deployed apps" msgstr "" @@ -5567,13 +5647,13 @@ msgstr "" msgid "upgrade" msgstr "" -#: cli/updater/updater.go:456 +#: cli/updater/updater.go:442 #, c-format msgid "upgrade %s (%s) to version %s" msgstr "" #. translators: `app upgrade` command -#: cli/app/upgrade.go:34 +#: cli/app/upgrade.go:33 msgid "upgrade [version] [flags]" msgstr "actualizar [version] [flags]" @@ -5583,7 +5663,7 @@ msgid "upgrade [flags]" msgstr "actualizar [flags]" #. translators: `app upgrade` command -#: cli/updater/updater.go:85 +#: cli/updater/updater.go:86 msgid "upgrade [[stack] [recipe] | --all] [flags]" msgstr "actualizar [[stack] [recipe] | --all] [flags]" @@ -5676,7 +5756,7 @@ msgstr "" msgid "version %s saved to %s.env" msgstr "" -#: cli/app/deploy.go:116 +#: cli/app/deploy.go:115 #, c-format msgid "" "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" @@ -5701,32 +5781,32 @@ msgstr "" msgid "version wiped from %s.env" msgstr "" -#: cli/app/deploy.go:318 +#: cli/app/deploy.go:335 #, c-format msgid "version: can not redeploy chaos version %s" msgstr "" -#: cli/app/deploy.go:305 +#: cli/app/deploy.go:322 #, c-format msgid "version: taking chaos version: %s" msgstr "" -#: cli/app/deploy.go:326 +#: cli/app/deploy.go:343 #, c-format msgid "version: taking deployed version: %s" msgstr "" -#: cli/app/deploy.go:331 +#: cli/app/deploy.go:348 #, c-format msgid "version: taking new recipe version: %s" msgstr "" -#: cli/app/deploy.go:320 +#: cli/app/deploy.go:337 #, c-format msgid "version: taking version from .env file: %s" msgstr "" -#: cli/app/deploy.go:311 +#: cli/app/deploy.go:328 #, c-format msgid "version: taking version from cli arg: %s" msgstr "" @@ -5852,8 +5932,8 @@ msgstr "" msgid "writer: %v, " msgstr "" -#: cli/app/deploy.go:243 cli/app/new.go:221 cli/app/rollback.go:232 -#: cli/app/undeploy.go:111 cli/app/upgrade.go:278 +#: cli/app/deploy.go:260 cli/app/new.go:221 cli/app/rollback.go:248 +#: cli/app/undeploy.go:114 cli/app/upgrade.go:294 #, c-format msgid "writing recipe version failed: %s" msgstr "" diff --git a/pkg/secret/secret.go b/pkg/secret/secret.go index ffec2915..e1857ad9 100644 --- a/pkg/secret/secret.go +++ b/pkg/secret/secret.go @@ -280,7 +280,7 @@ type secretStatus struct { type secretStatuses []secretStatus // PollSecretsStatus checks status of secrets by comparing the local recipe -// config and deploymend server state. +// config and deployed server state. func PollSecretsStatus(cl *dockerClient.Client, app appPkg.App) (secretStatuses, error) { var secStats secretStatuses @@ -306,7 +306,7 @@ func PollSecretsStatus(cl *dockerClient.Client, app appPkg.App) (secretStatuses, remoteSecretNames := make(map[string]bool) for _, cont := range secretList { - remoteSecretNames[cont.Spec.Annotations.Name] = true + remoteSecretNames[cont.Spec.Name] = true } for secretName, val := range secretsConfig { diff --git a/tests/integration/app_deploy_overview.bats b/tests/integration/app_deploy_overview.bats index 475c657a..6abae8b4 100644 --- a/tests/integration/app_deploy_overview.bats +++ b/tests/integration/app_deploy_overview.bats @@ -41,6 +41,8 @@ teardown(){ assert_output --partial 'CURRENT DEPLOYMENT N/A' assert_output --partial 'ENV VERSION N/A' assert_output --partial "NEW DEPLOYMENT ${latestRelease}" + assert_output --partial "IMAGES nginx: ${latestRelease##*+} (new)" + assert_output --partial "CONFIGS test_conf: v1 (new)" run grep -q "TYPE=$TEST_RECIPE:${latestRelease}" \ "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" @@ -58,12 +60,35 @@ teardown(){ assert_output --partial "CURRENT DEPLOYMENT N/A" assert_output --partial "ENV VERSION ${latestRelease}" assert_output --partial "NEW DEPLOYMENT ${latestRelease}" + assert_output --partial "IMAGES nginx: ${latestRelease##*+} (new)" + assert_output --partial "CONFIGS test_conf: v1 (new)" run grep -q "TYPE=$TEST_RECIPE:${latestRelease}" \ "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" assert_success } +# bats test_tags=slow +@test "show changed config version on re-deploy" { + run $ABRA app deploy "$TEST_APP_DOMAIN" \ + --no-input --no-converge-checks + assert_success + + run sed -i 's/TEST_CONF_VERSION=v1/TEST_CONF_VERSION=v2/' \ + "$ABRA_DIR/recipes/$TEST_RECIPE/abra.sh" \ + assert_success + + cat "$ABRA_DIR/recipes/$TEST_RECIPE/abra.sh" + + run $ABRA app deploy "$TEST_APP_DOMAIN" \ + --no-input --no-converge-checks --force --chaos + assert_success + + assert_output --partial "CONFIGS test_conf: v1 → v2" + + _checkout_recipe +} + # bats test_tags=slow @test "deploy, re-deploy, choose env version" { run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.1+1.20.2" \