refactor!: archive kadabra
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@ -4,5 +4,4 @@
|
||||
Dockerfile
|
||||
abra
|
||||
dist
|
||||
kadabra
|
||||
tags
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@ -4,7 +4,6 @@
|
||||
.envrc
|
||||
.vscode/
|
||||
/abra
|
||||
/kadabra
|
||||
/bin
|
||||
dist/
|
||||
tests/integration/.bats
|
||||
/bin
|
||||
|
||||
@ -32,31 +32,6 @@ builds:
|
||||
- "-s"
|
||||
- "-w"
|
||||
|
||||
- id: kadabra
|
||||
binary: kadabra
|
||||
dir: cmd/kadabra
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
- linux
|
||||
- darwin
|
||||
goarch:
|
||||
- 386
|
||||
- amd64
|
||||
- arm
|
||||
- arm64
|
||||
goarm:
|
||||
- 5
|
||||
- 6
|
||||
- 7
|
||||
gcflags:
|
||||
- "all=-l -B"
|
||||
ldflags:
|
||||
- "-X 'main.Commit={{ .Commit }}'"
|
||||
- "-X 'main.Version={{ .Version }}'"
|
||||
- "-s"
|
||||
- "-w"
|
||||
|
||||
checksum:
|
||||
name_template: "checksums.txt"
|
||||
|
||||
|
||||
25
Makefile
25
Makefile
@ -1,5 +1,4 @@
|
||||
ABRA := ./cmd/abra
|
||||
KADABRA := ./cmd/kadabra
|
||||
COMMIT := $(shell git rev-list -1 HEAD)
|
||||
GOPATH := $(shell go env GOPATH)
|
||||
GOVERSION := 1.24
|
||||
@ -16,37 +15,21 @@ export GOPRIVATE=coopcloud.tech
|
||||
# NOTE(d1): default `make` optimised for Abra hacking
|
||||
all: format check build-abra test
|
||||
|
||||
run-abra:
|
||||
run:
|
||||
@go run -gcflags=$(GCFLAGS) -ldflags=$(LDFLAGS) $(ABRA)
|
||||
|
||||
run-kadabra:
|
||||
@go run -gcflags=$(GCFLAGS) -ldflags=$(LDFLAGS) $(KADABRA)
|
||||
|
||||
install-abra:
|
||||
install:
|
||||
@go install -gcflags=$(GCFLAGS) -ldflags=$(LDFLAGS) $(ABRA)
|
||||
|
||||
install-kadabra:
|
||||
@go install -gcflags=$(GCFLAGS) -ldflags=$(LDFLAGS) $(KADABRA)
|
||||
|
||||
install: install-abra install-kadabra
|
||||
|
||||
build-abra:
|
||||
build:
|
||||
@go build -v -gcflags=$(GCFLAGS) -ldflags=$(DIST_LDFLAGS) $(ABRA)
|
||||
|
||||
build-kadabra:
|
||||
@go build -v -gcflags=$(GCFLAGS) -ldflags=$(DIST_LDFLAGS) $(KADABRA)
|
||||
|
||||
build: build-abra build-kadabra
|
||||
|
||||
build-docker-abra:
|
||||
build-docker:
|
||||
@docker run -it -v $(PWD):/abra golang:$(GOVERSION) \
|
||||
bash -c 'cd /abra; ./scripts/docker/build.sh'
|
||||
|
||||
build-docker: build-docker-abra
|
||||
|
||||
clean:
|
||||
@rm '$(GOPATH)/bin/abra'
|
||||
@rm '$(GOPATH)/bin/kadabra'
|
||||
|
||||
format:
|
||||
@gofmt -s -w $$(find . -type f -name '*.go' | grep -v "/vendor/")
|
||||
|
||||
@ -1,558 +0,0 @@
|
||||
package updater
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"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"
|
||||
"coopcloud.tech/abra/pkg/recipe"
|
||||
"coopcloud.tech/abra/pkg/upstream/convert"
|
||||
"coopcloud.tech/abra/pkg/upstream/stack"
|
||||
"coopcloud.tech/tagcmp"
|
||||
charmLog "github.com/charmbracelet/log"
|
||||
composetypes "github.com/docker/cli/cli/compose/types"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/api/types/filters"
|
||||
dockerclient "github.com/docker/docker/client"
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"coopcloud.tech/abra/pkg/log"
|
||||
)
|
||||
|
||||
const SERVER = "localhost"
|
||||
|
||||
// translators: `kadabra notify` aliases. use a comma separated list of aliases
|
||||
// with no spaces in between
|
||||
var notifyAliases = i18n.G("n")
|
||||
|
||||
// NotifyCommand checks for available upgrades.
|
||||
var NotifyCommand = &cobra.Command{
|
||||
// translators: `notify` command
|
||||
Use: i18n.G("notify [flags]"),
|
||||
Aliases: strings.Split(notifyAliases, ","),
|
||||
// translators: Short description for `notify` command
|
||||
Short: i18n.G("Check for available upgrades"),
|
||||
Long: i18n.G(`Notify on new versions for deployed apps.
|
||||
|
||||
If a new patch/minor version is available, a notification is printed.
|
||||
|
||||
Use "--major/-m" to include new major versions.`),
|
||||
Args: cobra.NoArgs,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
cl, err := client.New("default")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
stacks, err := stack.GetStacks(cl)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
for _, stackInfo := range stacks {
|
||||
stackName := stackInfo.Name
|
||||
recipeName, err := getLabel(cl, stackName, "recipe")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if recipeName != "" {
|
||||
_, err = getLatestUpgrade(cl, stackName, recipeName)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
// translators: `kadabra upgrade` aliases. use a comma separated list of aliases with
|
||||
// no spaces in between
|
||||
var upgradeAliases = i18n.G("u")
|
||||
|
||||
// UpgradeCommand upgrades apps.
|
||||
var UpgradeCommand = &cobra.Command{
|
||||
// translators: `app upgrade` command
|
||||
Use: i18n.G("upgrade [[stack] [recipe] | --all] [flags]"),
|
||||
Aliases: strings.Split(upgradeAliases, ","),
|
||||
// translators: Short description for `app upgrade` command
|
||||
Short: i18n.G("Upgrade apps"),
|
||||
Long: i18n.G(`Upgrade an app by specifying stack name and recipe.
|
||||
|
||||
Use "--all" to upgrade every deployed app.
|
||||
|
||||
For each app with auto updates enabled, the deployed version is compared with
|
||||
the current recipe catalogue version. If a new patch/minor version is
|
||||
available, the app is upgraded.
|
||||
|
||||
To include major versions use the "--major/-m" flag. You probably don't want
|
||||
that as it will break things. Only apps that are not deployed with "--chaos/-C"
|
||||
are upgraded, to update chaos deployments use the "--chaos/-C" flag. Use it
|
||||
with care.`),
|
||||
Args: cobra.RangeArgs(0, 2),
|
||||
// TODO(d1): complete stack/recipe
|
||||
// ValidArgsFunction: func(
|
||||
// cmd *cobra.Command,
|
||||
// args []string,
|
||||
// toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||
// },
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
cl, err := client.New("default")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if !updateAll && len(args) != 2 {
|
||||
log.Fatal(i18n.G("missing arguments or --all/-a flag"))
|
||||
}
|
||||
|
||||
if !updateAll {
|
||||
stackName := args[0]
|
||||
recipeName := args[1]
|
||||
|
||||
err = tryUpgrade(cl, stackName, recipeName)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
stacks, err := stack.GetStacks(cl)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
for _, stackInfo := range stacks {
|
||||
stackName := stackInfo.Name
|
||||
recipeName, err := getLabel(cl, stackName, "recipe")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
err = tryUpgrade(cl, stackName, recipeName)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
// getLabel reads docker labels from running services in the format of "coop-cloud.${STACK_NAME}.${LABEL}".
|
||||
func getLabel(cl *dockerclient.Client, stackName string, label string) (string, error) {
|
||||
filter := filters.NewArgs()
|
||||
filter.Add("label", fmt.Sprintf("%s=%s", convert.LabelNamespace, stackName))
|
||||
|
||||
services, err := cl.ServiceList(context.Background(), types.ServiceListOptions{Filters: filter})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
for _, service := range services {
|
||||
labelKey := fmt.Sprintf("coop-cloud.%s.%s", stackName, label)
|
||||
if labelValue, ok := service.Spec.Labels[labelKey]; ok {
|
||||
return labelValue, nil
|
||||
}
|
||||
}
|
||||
|
||||
log.Debug(i18n.G("no %s label found for %s", label, stackName))
|
||||
|
||||
return "", nil
|
||||
}
|
||||
|
||||
// getBoolLabel reads a boolean docker label from running services
|
||||
func getBoolLabel(cl *dockerclient.Client, stackName string, label string) (bool, error) {
|
||||
lableValue, err := getLabel(cl, stackName, label)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if lableValue != "" {
|
||||
value, err := strconv.ParseBool(lableValue)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return value, nil
|
||||
}
|
||||
|
||||
log.Debug(i18n.G("boolean label %s could not be found for %s, set default to false.", label, stackName))
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// getEnv reads env variables from docker services.
|
||||
func getEnv(cl *dockerclient.Client, stackName string) (envfile.AppEnv, error) {
|
||||
envMap := make(map[string]string)
|
||||
filter := filters.NewArgs()
|
||||
filter.Add("label", fmt.Sprintf("%s=%s", convert.LabelNamespace, stackName))
|
||||
|
||||
services, err := cl.ServiceList(context.Background(), types.ServiceListOptions{Filters: filter})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, service := range services {
|
||||
envList := service.Spec.TaskTemplate.ContainerSpec.Env
|
||||
for _, envString := range envList {
|
||||
splitString := strings.SplitN(envString, "=", 2)
|
||||
if len(splitString) != 2 {
|
||||
log.Debug(i18n.G("can't separate key from value: %s (this variable is probably unset)", envString))
|
||||
continue
|
||||
}
|
||||
k := splitString[0]
|
||||
v := splitString[1]
|
||||
log.Debugf(i18n.G("for %s read env %s with value: %s from docker service", stackName, k, v))
|
||||
envMap[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
return envMap, nil
|
||||
}
|
||||
|
||||
// getLatestUpgrade returns the latest available version for an app respecting
|
||||
// the "--major" flag if it is newer than the currently deployed version.
|
||||
func getLatestUpgrade(cl *dockerclient.Client, stackName string, recipeName string) (string, error) {
|
||||
deployedVersion, err := getDeployedVersion(cl, stackName, recipeName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
availableUpgrades, err := getAvailableUpgrades(cl, stackName, recipeName, deployedVersion)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(availableUpgrades) == 0 {
|
||||
log.Debugf(i18n.G("no available upgrades for %s", stackName))
|
||||
return "", nil
|
||||
}
|
||||
|
||||
var chosenUpgrade string
|
||||
if len(availableUpgrades) > 0 {
|
||||
chosenUpgrade = availableUpgrades[len(availableUpgrades)-1]
|
||||
log.Info(i18n.G("%s (%s) can be upgraded from version %s to %s", stackName, recipeName, deployedVersion, chosenUpgrade))
|
||||
}
|
||||
|
||||
return chosenUpgrade, nil
|
||||
}
|
||||
|
||||
// getDeployedVersion returns the currently deployed version of an app.
|
||||
func getDeployedVersion(cl *dockerclient.Client, stackName string, recipeName string) (string, error) {
|
||||
log.Debug(i18n.G("retrieve deployed version whether %s is already deployed", stackName))
|
||||
|
||||
deployMeta, err := stack.IsDeployed(context.Background(), cl, stackName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if !deployMeta.IsDeployed {
|
||||
return "", errors.New(i18n.G("%s is not deployed?", stackName))
|
||||
}
|
||||
|
||||
if deployMeta.Version == "unknown" {
|
||||
return "", errors.New(i18n.G("failed to determine deployed version of %s", stackName))
|
||||
}
|
||||
|
||||
return deployMeta.Version, nil
|
||||
}
|
||||
|
||||
// getAvailableUpgrades returns all available versions of an app that are newer
|
||||
// than the deployed version. It only includes major upgrades if the "--major"
|
||||
// flag is set.
|
||||
func getAvailableUpgrades(cl *dockerclient.Client, stackName string, recipeName string,
|
||||
deployedVersion string) ([]string, error) {
|
||||
catl, err := recipe.ReadRecipeCatalogue(internal.Offline)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
versions, err := recipe.GetRecipeCatalogueVersions(recipeName, catl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(versions) == 0 {
|
||||
log.Warn(i18n.G("no published releases for %s in the recipe catalogue?", recipeName))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
var availableUpgrades []string
|
||||
for _, version := range versions {
|
||||
parsedDeployedVersion, err := tagcmp.Parse(deployedVersion)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
parsedVersion, err := tagcmp.Parse(version)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
versionDelta, err := parsedDeployedVersion.UpgradeDelta(parsedVersion)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if 0 < versionDelta.UpgradeType() && (versionDelta.UpgradeType() < 4 || includeMajorUpdates) {
|
||||
availableUpgrades = append(availableUpgrades, version)
|
||||
}
|
||||
}
|
||||
|
||||
log.Debug(i18n.G("available updates for %s: %s", stackName, availableUpgrades))
|
||||
|
||||
return availableUpgrades, nil
|
||||
}
|
||||
|
||||
// processRecipeRepoVersion clones, pulls, checks out the version and lints the
|
||||
// recipe repository.
|
||||
func processRecipeRepoVersion(r recipe.Recipe, version string) error {
|
||||
if err := r.EnsureExists(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := r.EnsureUpToDate(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := r.EnsureVersion(version); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := lint.LintForErrors(r); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
deployOpts := stack.Deploy{
|
||||
Namespace: stackName,
|
||||
Prune: false,
|
||||
ResolveImage: stack.ResolveImageAlways,
|
||||
Detach: false,
|
||||
}
|
||||
|
||||
composeFiles, err := r.GetComposeFiles(env)
|
||||
if err != nil {
|
||||
return nil, deployOpts, err
|
||||
}
|
||||
|
||||
deployOpts.Composefiles = composeFiles
|
||||
compose, err := appPkg.GetAppComposeConfig(stackName, deployOpts, env)
|
||||
if err != nil {
|
||||
return nil, deployOpts, err
|
||||
}
|
||||
|
||||
appPkg.ExposeAllEnv(stackName, compose, env)
|
||||
|
||||
// after the upgrade the deployment won't be in chaos state anymore
|
||||
appPkg.SetChaosLabel(compose, stackName, false)
|
||||
appPkg.SetRecipeLabel(compose, stackName, r.Name)
|
||||
appPkg.SetUpdateLabel(compose, stackName, env)
|
||||
|
||||
return compose, deployOpts, nil
|
||||
}
|
||||
|
||||
// tryUpgrade performs the upgrade if all the requirements are fulfilled.
|
||||
func tryUpgrade(cl *dockerclient.Client, stackName, recipeName string) error {
|
||||
if recipeName == "" {
|
||||
log.Debug(i18n.G("don't update %s due to missing recipe name", stackName))
|
||||
return nil
|
||||
}
|
||||
|
||||
chaos, err := getBoolLabel(cl, stackName, "chaos")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if chaos && !internal.Chaos {
|
||||
log.Debug(i18n.G("don't update %s due to chaos deployment", stackName))
|
||||
return nil
|
||||
}
|
||||
|
||||
updatesEnabled, err := getBoolLabel(cl, stackName, "autoupdate")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !updatesEnabled {
|
||||
log.Debug(i18n.G("don't update %s due to disabled auto updates or missing ENABLE_AUTO_UPDATE env", stackName))
|
||||
return nil
|
||||
}
|
||||
|
||||
upgradeVersion, err := getLatestUpgrade(cl, stackName, recipeName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if upgradeVersion == "" {
|
||||
log.Debug(i18n.G("don't update %s due to no new version", stackName))
|
||||
return nil
|
||||
}
|
||||
|
||||
err = upgrade(cl, stackName, recipeName, upgradeVersion)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// upgrade performs all necessary steps to upgrade an app.
|
||||
func upgrade(cl *dockerclient.Client, stackName, recipeName, upgradeVersion string) error {
|
||||
env, err := getEnv(cl, stackName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
app := appPkg.App{
|
||||
Name: stackName,
|
||||
Recipe: recipe.Get(recipeName),
|
||||
Server: SERVER,
|
||||
Env: env,
|
||||
}
|
||||
|
||||
r := recipe.Get(recipeName)
|
||||
|
||||
if err = processRecipeRepoVersion(r, upgradeVersion); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = deploy.MergeAbraShEnv(app.Recipe, app.Env); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
compose, deployOpts, err := createDeployConfig(r, stackName, app.Env)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Info(i18n.G("upgrade %s (%s) to version %s", stackName, recipeName, upgradeVersion))
|
||||
|
||||
serviceNames, err := appPkg.GetAppServiceNames(app.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f, err := app.Filters(true, false, serviceNames...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = stack.RunDeploy(
|
||||
cl,
|
||||
deployOpts,
|
||||
compose,
|
||||
stackName,
|
||||
app.Server,
|
||||
true,
|
||||
f,
|
||||
)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func newKadabraApp(version, commit string) *cobra.Command {
|
||||
rootCmd := &cobra.Command{
|
||||
// translators: `kadabra` binary name
|
||||
Use: i18n.G("kadabra [cmd] [flags]"),
|
||||
Version: fmt.Sprintf("%s-%s", version, commit[:7]),
|
||||
// translators: Short description for `kababra` binary
|
||||
Short: i18n.G("The Co-op Cloud auto-updater 🤖 🚀"),
|
||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||
log.Logger.SetStyles(charmLog.DefaultStyles())
|
||||
charmLog.SetDefault(log.Logger)
|
||||
|
||||
if internal.Debug {
|
||||
log.SetLevel(log.DebugLevel)
|
||||
log.SetOutput(os.Stderr)
|
||||
log.SetReportCaller(true)
|
||||
}
|
||||
|
||||
log.Debug(i18n.G("kadabra version %s, commit %s", version, commit))
|
||||
},
|
||||
}
|
||||
|
||||
rootCmd.PersistentFlags().BoolVarP(
|
||||
&internal.Debug,
|
||||
i18n.G("debug"),
|
||||
i18n.G("d"),
|
||||
false,
|
||||
i18n.G("show debug messages"),
|
||||
)
|
||||
|
||||
rootCmd.PersistentFlags().BoolVarP(
|
||||
&internal.NoInput,
|
||||
i18n.G("no-input"),
|
||||
i18n.G("n"),
|
||||
false,
|
||||
i18n.G("toggle non-interactive mode"),
|
||||
)
|
||||
|
||||
rootCmd.AddCommand(
|
||||
NotifyCommand,
|
||||
UpgradeCommand,
|
||||
)
|
||||
|
||||
return rootCmd
|
||||
}
|
||||
|
||||
// RunApp runs CLI abra app.
|
||||
func RunApp(version, commit string) {
|
||||
app := newKadabraApp(version, commit)
|
||||
|
||||
if err := app.Execute(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
includeMajorUpdates bool
|
||||
updateAll bool
|
||||
)
|
||||
|
||||
func init() {
|
||||
NotifyCommand.Flags().BoolVarP(
|
||||
&includeMajorUpdates,
|
||||
"major",
|
||||
"m",
|
||||
false,
|
||||
"check for major updates",
|
||||
)
|
||||
|
||||
UpgradeCommand.Flags().BoolVarP(
|
||||
&internal.Chaos,
|
||||
i18n.G("chaos"),
|
||||
i18n.G("C"),
|
||||
false,
|
||||
i18n.G("ignore uncommitted recipes changes"),
|
||||
)
|
||||
|
||||
UpgradeCommand.Flags().BoolVarP(
|
||||
&includeMajorUpdates,
|
||||
i18n.G("major"),
|
||||
i18n.G("m"),
|
||||
false,
|
||||
i18n.G("check for major updates"),
|
||||
)
|
||||
|
||||
UpgradeCommand.Flags().BoolVarP(
|
||||
&updateAll,
|
||||
i18n.G("all"),
|
||||
i18n.GC("a", "abra upgrade"),
|
||||
false,
|
||||
i18n.G("update all deployed apps"),
|
||||
)
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
// Package main provides the command-line entrypoint.
|
||||
package main
|
||||
|
||||
import (
|
||||
"coopcloud.tech/abra/cli/updater"
|
||||
)
|
||||
|
||||
// Version is the current version of Kadabra.
|
||||
var Version string
|
||||
|
||||
// Commit is the current git commit of Kadabra.
|
||||
var Commit string
|
||||
|
||||
func main() {
|
||||
if Version == "" {
|
||||
Version = "dev"
|
||||
}
|
||||
if Commit == "" {
|
||||
Commit = " "
|
||||
}
|
||||
|
||||
updater.RunApp(Version, Commit)
|
||||
}
|
||||
@ -7,7 +7,7 @@
|
||||
msgid ""
|
||||
msgstr "Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: EMAIL\n"
|
||||
"POT-Creation-Date: 2025-10-18 16:03-0400\n"
|
||||
"POT-Creation-Date: 2025-10-19 15:32+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -181,11 +181,6 @@ msgstr ""
|
||||
msgid "%d volumes removed successfully"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:244
|
||||
#, c-format
|
||||
msgid "%s (%s) can be upgraded from version %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#: ./pkg/recipe/git.go:191
|
||||
#, c-format
|
||||
msgid "%s (%s) has locally unstaged changes?"
|
||||
@ -346,7 +341,7 @@ msgstr ""
|
||||
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:448 ./cli/updater/updater.go:260
|
||||
#: ./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:448
|
||||
#, c-format
|
||||
msgid "%s is not deployed?"
|
||||
msgstr ""
|
||||
@ -612,7 +607,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:394 ./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/updater/updater.go:538
|
||||
#: ./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:394 ./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"
|
||||
msgstr ""
|
||||
|
||||
@ -660,11 +655,6 @@ msgstr ""
|
||||
msgid "Check app deployment status"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Short description for `notify` command
|
||||
#: ./cli/updater/updater.go:44
|
||||
msgid "Check for available upgrades"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Short description for `recipe fetch` command
|
||||
#: ./cli/recipe/fetch.go:27
|
||||
msgid "Clone recipe(s) locally"
|
||||
@ -1089,14 +1079,6 @@ msgstr ""
|
||||
msgid "NOW"
|
||||
msgstr ""
|
||||
|
||||
#: ./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"
|
||||
"\n"
|
||||
"Use \"--major/-m\" to include new major versions."
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/internal/deploy.go:210
|
||||
msgid "OLD SERVER"
|
||||
msgstr ""
|
||||
@ -1346,11 +1328,6 @@ msgstr ""
|
||||
msgid "Tail app logs"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Short description for `kababra` binary
|
||||
#: ./cli/updater/updater.go:473
|
||||
msgid "The Co-op Cloud auto-updater 🤖 🚀"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Short description for `abra` binary
|
||||
#: ./cli/run.go:80
|
||||
msgid "The Co-op Cloud command-line utility belt 🎩🐇"
|
||||
@ -1513,21 +1490,6 @@ msgstr ""
|
||||
msgid "Upgrade an app"
|
||||
msgstr ""
|
||||
|
||||
#: ./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"
|
||||
"\n"
|
||||
"For each app with auto updates enabled, the deployed version is compared with\n"
|
||||
"the current recipe catalogue version. If a new patch/minor version is\n"
|
||||
"available, the app is upgraded.\n"
|
||||
"\n"
|
||||
"To include major versions use the \"--major/-m\" flag. You probably don't want\n"
|
||||
"that as it will break things. Only apps that are not deployed with \"--chaos/-C\"\n"
|
||||
"are upgraded, to update chaos deployments use the \"--chaos/-C\" flag. Use it\n"
|
||||
"with care."
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/app/upgrade.go:37
|
||||
msgid "Upgrade an app.\n"
|
||||
"\n"
|
||||
@ -1545,11 +1507,6 @@ msgid "Upgrade an app.\n"
|
||||
"beforehand. See \"abra app backup\" for more."
|
||||
msgstr ""
|
||||
|
||||
#. translators: Short description for `app upgrade` command
|
||||
#: ./cli/updater/updater.go:89
|
||||
msgid "Upgrade apps"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Short description for `recipe upgrade` command
|
||||
#: ./cli/recipe/upgrade.go:49
|
||||
msgid "Upgrade recipe image tags"
|
||||
@ -1721,11 +1678,6 @@ msgctxt "server prune"
|
||||
msgid "a"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:554
|
||||
msgctxt "abra upgrade"
|
||||
msgid "a"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/app/remove.go:66
|
||||
msgid "aborting as requested"
|
||||
msgstr ""
|
||||
@ -1778,7 +1730,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:553
|
||||
#: ./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
|
||||
msgid "all"
|
||||
msgstr ""
|
||||
|
||||
@ -1895,11 +1847,6 @@ msgstr ""
|
||||
msgid "automatically set ssh remote"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:312
|
||||
#, c-format
|
||||
msgid "available updates for %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `abra app backup` aliases. use a comma separated list of aliases with
|
||||
#. no spaces in between
|
||||
#: ./cli/app/backup.go:239
|
||||
@ -1933,11 +1880,6 @@ msgstr ""
|
||||
msgid "bind options are incompatible with type volume"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:189
|
||||
#, c-format
|
||||
msgid "boolean label %s could not be found for %s, set default to false."
|
||||
msgstr ""
|
||||
|
||||
#: ./pkg/config/env.go:74 ./pkg/config/env.go:107
|
||||
#, c-format
|
||||
msgid "broken symlink in your abra config folders: %s"
|
||||
@ -1974,11 +1916,6 @@ msgstr ""
|
||||
msgid "can't read local recipes: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ./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:237
|
||||
msgid "cancelled"
|
||||
msgstr ""
|
||||
@ -2087,7 +2024,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:393 ./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/updater/updater.go:537
|
||||
#: ./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:393 ./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"
|
||||
msgstr ""
|
||||
|
||||
@ -2096,10 +2033,6 @@ msgstr ""
|
||||
msgid "check <domain> [flags]"
|
||||
msgstr ""
|
||||
|
||||
#: ./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:440
|
||||
#, c-format
|
||||
msgid "checking whether %s is already deployed"
|
||||
@ -2403,14 +2336,10 @@ 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:491
|
||||
#: ./cli/app/backup.go:73 ./cli/app/deploy.go:29 ./cli/recipe/diff.go:16
|
||||
msgid "d"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:490
|
||||
msgid "debug"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/app/secret.go:326
|
||||
#, c-format
|
||||
msgid "deleted %s successfully from local pass store"
|
||||
@ -2577,26 +2506,6 @@ msgstr ""
|
||||
msgid "don't forget to run 'sudo mandb'"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:384
|
||||
#, c-format
|
||||
msgid "don't update %s due to chaos deployment"
|
||||
msgstr ""
|
||||
|
||||
#: ./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:374
|
||||
#, c-format
|
||||
msgid "don't update %s due to missing recipe name"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:404
|
||||
#, c-format
|
||||
msgid "don't update %s due to no new version"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `app backup download` command
|
||||
#: ./cli/app/backup.go:77
|
||||
msgid "download <domain> [flags]"
|
||||
@ -2841,11 +2750,6 @@ msgstr ""
|
||||
msgid "failed to create volume %s on %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:264
|
||||
#, c-format
|
||||
msgid "failed to determine deployed version of %s"
|
||||
msgstr ""
|
||||
|
||||
#: ./pkg/upstream/stack/remove.go:239
|
||||
#, c-format
|
||||
msgid "failed to get tasks: %w"
|
||||
@ -3013,11 +2917,6 @@ msgstr ""
|
||||
msgid "filter by recipe"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:215
|
||||
#, c-format
|
||||
msgid "for %s read env %s with value: %s from docker service"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/app/deploy.go:401 ./cli/app/remove.go:162 ./cli/app/rollback.go:349 ./cli/app/upgrade.go:459 ./cli/app/volume.go:216 ./cli/recipe/fetch.go:137
|
||||
msgid "force"
|
||||
msgstr ""
|
||||
@ -3232,7 +3131,7 @@ 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:396 ./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/updater/updater.go:540
|
||||
#: ./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:396 ./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"
|
||||
msgstr ""
|
||||
|
||||
@ -3411,16 +3310,6 @@ msgstr ""
|
||||
msgid "invalid version %s specified"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `kadabra` binary name
|
||||
#: ./cli/updater/updater.go:470
|
||||
msgid "kadabra [cmd] [flags]"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:484
|
||||
#, c-format
|
||||
msgid "kadabra version %s, commit %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `abra app logs` aliases. use a comma separated list of aliases with
|
||||
#. no spaces in between
|
||||
#. translators: `abra recipe lint` aliases. use a comma separated list of
|
||||
@ -3557,7 +3446,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:323 ./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
|
||||
#: ./cli/app/list.go:323 ./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
|
||||
msgid "m"
|
||||
msgstr ""
|
||||
|
||||
@ -3570,7 +3459,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:656 ./cli/recipe/sync.go:279 ./cli/recipe/upgrade.go:351 ./cli/updater/updater.go:545
|
||||
#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:66 ./cli/internal/recipe.go:80 ./cli/recipe/release.go:656 ./cli/recipe/sync.go:279 ./cli/recipe/upgrade.go:351
|
||||
msgid "major"
|
||||
msgstr ""
|
||||
|
||||
@ -3614,10 +3503,6 @@ msgstr ""
|
||||
msgid "missing arguments [secret]/[version] or '--all'"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:116
|
||||
msgid "missing arguments or --all/-a flag"
|
||||
msgstr ""
|
||||
|
||||
#: ./pkg/secret/secret.go:131
|
||||
#, c-format
|
||||
msgid "missing version for secret? (%s)"
|
||||
@ -3641,9 +3526,7 @@ msgstr ""
|
||||
#. no spaces in between
|
||||
#. translators: `abra recipe new` aliases. use a comma separated list of
|
||||
#. 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:36 ./cli/updater/updater.go:499
|
||||
#: ./cli/app/new.go:48 ./cli/recipe/new.go:36
|
||||
msgid "n"
|
||||
msgstr ""
|
||||
|
||||
@ -3719,7 +3602,7 @@ msgstr ""
|
||||
msgid "no %s exists, skipping reading gitignore paths"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:168 ./pkg/app/compose.go:87
|
||||
#: ./pkg/app/compose.go:87
|
||||
#, c-format
|
||||
msgid "no %s label found for %s"
|
||||
msgstr ""
|
||||
@ -3750,11 +3633,6 @@ msgstr ""
|
||||
msgid "no available upgrades"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:237
|
||||
#, c-format
|
||||
msgid "no available upgrades for %s"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/internal/backup.go:26
|
||||
msgid "no backupbot discovered, is it deployed?"
|
||||
msgstr ""
|
||||
@ -3799,11 +3677,6 @@ 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:286
|
||||
#, c-format
|
||||
msgid "no published releases for %s in the recipe catalogue?"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/internal/validate.go:64
|
||||
#, c-format
|
||||
msgid "no recipe '%s' exists?"
|
||||
@ -3905,10 +3778,6 @@ msgstr ""
|
||||
msgid "no-domain-checks"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:498
|
||||
msgid "no-input"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/app/run.go:109
|
||||
msgid "no-tty"
|
||||
msgstr ""
|
||||
@ -3941,11 +3810,6 @@ msgstr ""
|
||||
msgid "nothing found in stack: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `notify` command
|
||||
#: ./cli/updater/updater.go:41
|
||||
msgid "notify [flags]"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/app/backup.go:329
|
||||
msgid "number of retry attempts"
|
||||
msgstr ""
|
||||
@ -4445,11 +4309,6 @@ msgstr ""
|
||||
msgid "retries"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:252
|
||||
#, c-format
|
||||
msgid "retrieve deployed version whether %s is already deployed"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/internal/backup.go:29
|
||||
#, c-format
|
||||
msgid "retrieved %s as backup enabled service"
|
||||
@ -4797,7 +4656,7 @@ msgstr ""
|
||||
msgid "show apps of a specific server"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/run.go:193 ./cli/updater/updater.go:493
|
||||
#: ./cli/run.go:193
|
||||
msgid "show debug messages"
|
||||
msgstr ""
|
||||
|
||||
@ -5082,7 +4941,7 @@ msgstr ""
|
||||
msgid "tmpfs options are incompatible with type volume"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/run.go:201 ./cli/updater/updater.go:501
|
||||
#: ./cli/run.go:201
|
||||
msgid "toggle non-interactive mode"
|
||||
msgstr ""
|
||||
|
||||
@ -5113,11 +4972,9 @@ msgstr ""
|
||||
|
||||
#. translators: `abra recipe upgrade` aliases. use a comma separated list of
|
||||
#. aliases with no spaces in between
|
||||
#. translators: `kadabra upgrade` aliases. use a comma separated list of aliases with
|
||||
#. 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:81 ./cli/upgrade.go:17
|
||||
#: ./cli/app/cmd.go:269 ./cli/app/run.go:118 ./cli/recipe/upgrade.go:42 ./cli/upgrade.go:17
|
||||
msgid "u"
|
||||
msgstr ""
|
||||
|
||||
@ -5452,10 +5309,6 @@ msgstr ""
|
||||
msgid "up"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:556
|
||||
msgid "update all deployed apps"
|
||||
msgstr ""
|
||||
|
||||
#: ./pkg/upstream/stack/stack.go:473
|
||||
#, c-format
|
||||
msgid "updating %s"
|
||||
@ -5471,11 +5324,6 @@ msgstr ""
|
||||
msgid "upgrade"
|
||||
msgstr ""
|
||||
|
||||
#: ./cli/updater/updater.go:442
|
||||
#, c-format
|
||||
msgid "upgrade %s (%s) to version %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `app upgrade` command
|
||||
#: ./cli/app/upgrade.go:33
|
||||
msgid "upgrade <domain> [version] [flags]"
|
||||
@ -5486,11 +5334,6 @@ msgstr ""
|
||||
msgid "upgrade <recipe> [flags]"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `app upgrade` command
|
||||
#: ./cli/updater/updater.go:86
|
||||
msgid "upgrade [[stack] [recipe] | --all] [flags]"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `upgrade` command
|
||||
#: ./cli/upgrade.go:22
|
||||
msgid "upgrade [flags]"
|
||||
|
||||
Binary file not shown.
@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: EMAIL\n"
|
||||
"POT-Creation-Date: 2025-10-18 16:03-0400\n"
|
||||
"POT-Creation-Date: 2025-10-19 15:32+0200\n"
|
||||
"PO-Revision-Date: 2025-09-04 08:14+0000\n"
|
||||
"Last-Translator: chasqui <chasqui@cryptolab.net>\n"
|
||||
"Language-Team: Spanish <https://translate.coopcloud.tech/projects/co-op-"
|
||||
@ -191,11 +191,6 @@ msgstr ""
|
||||
msgid "%d volumes removed successfully"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:244
|
||||
#, c-format
|
||||
msgid "%s (%s) can be upgraded from version %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#: pkg/recipe/git.go:191
|
||||
#, c-format
|
||||
msgid "%s (%s) has locally unstaged changes?"
|
||||
@ -361,7 +356,6 @@ 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:448
|
||||
#: cli/updater/updater.go:260
|
||||
#, c-format
|
||||
msgid "%s is not deployed?"
|
||||
msgstr ""
|
||||
@ -645,7 +639,6 @@ msgstr ""
|
||||
#: 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 ""
|
||||
|
||||
@ -693,11 +686,6 @@ msgstr ""
|
||||
msgid "Check app deployment status"
|
||||
msgstr "📋 Revisar el estado de una plataforma"
|
||||
|
||||
#. translators: Short description for `notify` command
|
||||
#: cli/updater/updater.go:44
|
||||
msgid "Check for available upgrades"
|
||||
msgstr "📨 Revisar las actualizaciones disponibles"
|
||||
|
||||
#. translators: Short description for `recipe fetch` command
|
||||
#: cli/recipe/fetch.go:27
|
||||
msgid "Clone recipe(s) locally"
|
||||
@ -1166,15 +1154,6 @@ msgstr ""
|
||||
msgid "NOW"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
"\n"
|
||||
"Use \"--major/-m\" to include new major versions."
|
||||
msgstr ""
|
||||
|
||||
#: cli/internal/deploy.go:210
|
||||
msgid "OLD SERVER"
|
||||
msgstr ""
|
||||
@ -1449,11 +1428,6 @@ msgstr ""
|
||||
msgid "Tail app logs"
|
||||
msgstr "📋 Seguir logs 📈 de la plataforma 🚀"
|
||||
|
||||
#. translators: Short description for `kababra` binary
|
||||
#: cli/updater/updater.go:473
|
||||
msgid "The Co-op Cloud auto-updater 🤖 🚀"
|
||||
msgstr "📨 Actualizador automático de Co-op Cloud 🤖 🚀"
|
||||
|
||||
#. translators: Short description for `abra` binary
|
||||
#: cli/run.go:80
|
||||
msgid "The Co-op Cloud command-line utility belt 🎩🐇"
|
||||
@ -1637,26 +1611,6 @@ msgstr ""
|
||||
msgid "Upgrade an app"
|
||||
msgstr "📨 Actualizar una plataforma 🚀"
|
||||
|
||||
#: 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"
|
||||
"\n"
|
||||
"For each app with auto updates enabled, the deployed version is compared "
|
||||
"with\n"
|
||||
"the current recipe catalogue version. If a new patch/minor version is\n"
|
||||
"available, the app is upgraded.\n"
|
||||
"\n"
|
||||
"To include major versions use the \"--major/-m\" flag. You probably don't "
|
||||
"want\n"
|
||||
"that as it will break things. Only apps that are not deployed with \"--"
|
||||
"chaos/-C\"\n"
|
||||
"are upgraded, to update chaos deployments use the \"--chaos/-C\" flag. Use "
|
||||
"it\n"
|
||||
"with care."
|
||||
msgstr ""
|
||||
|
||||
#: cli/app/upgrade.go:37
|
||||
msgid ""
|
||||
"Upgrade an app.\n"
|
||||
@ -1680,11 +1634,6 @@ msgid ""
|
||||
"beforehand. See \"abra app backup\" for more."
|
||||
msgstr ""
|
||||
|
||||
#. translators: Short description for `app upgrade` command
|
||||
#: cli/updater/updater.go:89
|
||||
msgid "Upgrade apps"
|
||||
msgstr "📨 Actualizar plataformas 🚀"
|
||||
|
||||
#. translators: Short description for `recipe upgrade` command
|
||||
#: cli/recipe/upgrade.go:49
|
||||
msgid "Upgrade recipe image tags"
|
||||
@ -1706,19 +1655,19 @@ msgid ""
|
||||
"\n"
|
||||
"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "
|
||||
"\"help\"))}}\n"
|
||||
" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}"
|
||||
"{{if .HasAvailableLocalFlags}}\n"
|
||||
" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if ."
|
||||
"HasAvailableLocalFlags}}\n"
|
||||
"\n"
|
||||
"Flags:\n"
|
||||
"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}"
|
||||
"{{if .HasAvailableInheritedFlags}}\n"
|
||||
"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if ."
|
||||
"HasAvailableInheritedFlags}}\n"
|
||||
"\n"
|
||||
"Global Flags:\n"
|
||||
"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}"
|
||||
"{{if .HasHelpSubCommands}}\n"
|
||||
"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if ."
|
||||
"HasHelpSubCommands}}\n"
|
||||
"\n"
|
||||
"Additional help topics:{{range .Commands}}"
|
||||
"{{if .IsAdditionalHelpTopicCommand}}\n"
|
||||
"Additional help topics:{{range .Commands}}{{if ."
|
||||
"IsAdditionalHelpTopicCommand}}\n"
|
||||
" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}"
|
||||
"{{if .HasAvailableSubCommands}}\n"
|
||||
"\n"
|
||||
@ -1883,11 +1832,6 @@ msgctxt "server prune"
|
||||
msgid "a"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:554
|
||||
msgctxt "abra upgrade"
|
||||
msgid "a"
|
||||
msgstr ""
|
||||
|
||||
#: cli/app/remove.go:66
|
||||
msgid "aborting as requested"
|
||||
msgstr ""
|
||||
@ -1941,7 +1885,7 @@ 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:553
|
||||
#: cli/recipe/fetch.go:121 cli/server/prune.go:98
|
||||
msgid "all"
|
||||
msgstr ""
|
||||
|
||||
@ -2064,11 +2008,6 @@ msgstr ""
|
||||
msgid "automatically set ssh remote"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:312
|
||||
#, c-format
|
||||
msgid "available updates for %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `abra app backup` aliases. use a comma separated list of aliases with
|
||||
#. no spaces in between
|
||||
#: cli/app/backup.go:239
|
||||
@ -2102,11 +2041,6 @@ msgstr ""
|
||||
msgid "bind options are incompatible with type volume"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:189
|
||||
#, c-format
|
||||
msgid "boolean label %s could not be found for %s, set default to false."
|
||||
msgstr ""
|
||||
|
||||
#: pkg/config/env.go:74 pkg/config/env.go:107
|
||||
#, c-format
|
||||
msgid "broken symlink in your abra config folders: %s"
|
||||
@ -2144,11 +2078,6 @@ msgstr ""
|
||||
msgid "can't read local recipes: %s"
|
||||
msgstr ""
|
||||
|
||||
#: 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:237
|
||||
msgid "cancelled"
|
||||
msgstr ""
|
||||
@ -2267,7 +2196,6 @@ msgstr ""
|
||||
#: 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 ""
|
||||
|
||||
@ -2276,10 +2204,6 @@ msgstr ""
|
||||
msgid "check <domain> [flags]"
|
||||
msgstr "verificar <domain> [flags]"
|
||||
|
||||
#: 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:440
|
||||
#, c-format
|
||||
msgid "checking whether %s is already deployed"
|
||||
@ -2590,14 +2514,9 @@ msgstr ""
|
||||
#. 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:491
|
||||
msgid "d"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:490
|
||||
msgid "debug"
|
||||
msgstr ""
|
||||
|
||||
#: cli/app/secret.go:326
|
||||
#, c-format
|
||||
msgid "deleted %s successfully from local pass store"
|
||||
@ -2765,28 +2684,6 @@ msgstr ""
|
||||
msgid "don't forget to run 'sudo mandb'"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:384
|
||||
#, c-format
|
||||
msgid "don't update %s due to chaos deployment"
|
||||
msgstr ""
|
||||
|
||||
#: 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:374
|
||||
#, c-format
|
||||
msgid "don't update %s due to missing recipe name"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:404
|
||||
#, c-format
|
||||
msgid "don't update %s due to no new version"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `app backup download` command
|
||||
#: cli/app/backup.go:77
|
||||
msgid "download <domain> [flags]"
|
||||
@ -3038,11 +2935,6 @@ msgstr ""
|
||||
msgid "failed to create volume %s on %s: %s"
|
||||
msgstr "🥷 Genera secretos (contraseñas) automáticamente 🤖"
|
||||
|
||||
#: cli/updater/updater.go:264
|
||||
#, c-format
|
||||
msgid "failed to determine deployed version of %s"
|
||||
msgstr ""
|
||||
|
||||
#: pkg/upstream/stack/remove.go:239
|
||||
#, c-format
|
||||
msgid "failed to get tasks: %w"
|
||||
@ -3210,11 +3102,6 @@ msgstr ""
|
||||
msgid "filter by recipe"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:215
|
||||
#, c-format
|
||||
msgid "for %s read env %s with value: %s from docker service"
|
||||
msgstr ""
|
||||
|
||||
#: cli/app/deploy.go:401 cli/app/remove.go:162 cli/app/rollback.go:349
|
||||
#: cli/app/upgrade.go:459 cli/app/volume.go:216 cli/recipe/fetch.go:137
|
||||
msgid "force"
|
||||
@ -3437,7 +3324,6 @@ msgstr ""
|
||||
#: 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 ""
|
||||
|
||||
@ -3618,16 +3504,6 @@ msgstr ""
|
||||
msgid "invalid version %s specified"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `kadabra` binary name
|
||||
#: cli/updater/updater.go:470
|
||||
msgid "kadabra [cmd] [flags]"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:484
|
||||
#, c-format
|
||||
msgid "kadabra version %s, commit %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `abra app logs` aliases. use a comma separated list of aliases with
|
||||
#. no spaces in between
|
||||
#. translators: `abra recipe lint` aliases. use a comma separated list of
|
||||
@ -3770,7 +3646,7 @@ msgstr "plataformas"
|
||||
#: cli/app/list.go:323 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
|
||||
#: cli/server/list.go:106
|
||||
msgid "m"
|
||||
msgstr ""
|
||||
|
||||
@ -3787,7 +3663,7 @@ msgstr ""
|
||||
|
||||
#: cli/internal/recipe.go:48 cli/internal/recipe.go:66
|
||||
#: cli/internal/recipe.go:80 cli/recipe/release.go:656 cli/recipe/sync.go:279
|
||||
#: cli/recipe/upgrade.go:351 cli/updater/updater.go:545
|
||||
#: cli/recipe/upgrade.go:351
|
||||
msgid "major"
|
||||
msgstr ""
|
||||
|
||||
@ -3833,10 +3709,6 @@ msgstr ""
|
||||
msgid "missing arguments [secret]/[version] or '--all'"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:116
|
||||
msgid "missing arguments or --all/-a flag"
|
||||
msgstr ""
|
||||
|
||||
#: pkg/secret/secret.go:131
|
||||
#, c-format
|
||||
msgid "missing version for secret? (%s)"
|
||||
@ -3860,10 +3732,7 @@ msgstr ""
|
||||
#. no spaces in between
|
||||
#. translators: `abra recipe new` aliases. use a comma separated list of
|
||||
#. 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:36
|
||||
#: cli/updater/updater.go:499
|
||||
#: cli/app/new.go:48 cli/recipe/new.go:36
|
||||
msgid "n"
|
||||
msgstr "n"
|
||||
|
||||
@ -3944,7 +3813,7 @@ msgstr ""
|
||||
msgid "no %s exists, skipping reading gitignore paths"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:168 pkg/app/compose.go:87
|
||||
#: pkg/app/compose.go:87
|
||||
#, c-format
|
||||
msgid "no %s label found for %s"
|
||||
msgstr ""
|
||||
@ -3975,11 +3844,6 @@ msgstr ""
|
||||
msgid "no available upgrades"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:237
|
||||
#, c-format
|
||||
msgid "no available upgrades for %s"
|
||||
msgstr ""
|
||||
|
||||
#: cli/internal/backup.go:26
|
||||
msgid "no backupbot discovered, is it deployed?"
|
||||
msgstr ""
|
||||
@ -4026,11 +3890,6 @@ msgid ""
|
||||
"tags to see all anyway)"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:286
|
||||
#, fuzzy, c-format
|
||||
msgid "no published releases for %s in the recipe catalogue?"
|
||||
msgstr "TRANSLATE THIS FUCKING SHIT ALREADY"
|
||||
|
||||
#: cli/internal/validate.go:64
|
||||
#, c-format
|
||||
msgid "no recipe '%s' exists?"
|
||||
@ -4134,10 +3993,6 @@ msgstr ""
|
||||
msgid "no-domain-checks"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:498
|
||||
msgid "no-input"
|
||||
msgstr ""
|
||||
|
||||
#: cli/app/run.go:109
|
||||
msgid "no-tty"
|
||||
msgstr ""
|
||||
@ -4172,11 +4027,6 @@ msgstr ""
|
||||
msgid "nothing found in stack: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `notify` command
|
||||
#: cli/updater/updater.go:41
|
||||
msgid "notify [flags]"
|
||||
msgstr "notificar [flags]"
|
||||
|
||||
#: cli/app/backup.go:329
|
||||
msgid "number of retry attempts"
|
||||
msgstr ""
|
||||
@ -4691,11 +4541,6 @@ msgstr ""
|
||||
msgid "retries"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:252
|
||||
#, c-format
|
||||
msgid "retrieve deployed version whether %s is already deployed"
|
||||
msgstr ""
|
||||
|
||||
#: cli/internal/backup.go:29
|
||||
#, c-format
|
||||
msgid "retrieved %s as backup enabled service"
|
||||
@ -4975,8 +4820,8 @@ msgstr ""
|
||||
#: cli/recipe/upgrade.go:228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"service %s is at version %s, but pinned to %s, please correct your "
|
||||
"compose.yml file manually!"
|
||||
"service %s is at version %s, but pinned to %s, please correct your compose."
|
||||
"yml file manually!"
|
||||
msgstr ""
|
||||
|
||||
#: cli/recipe/upgrade.go:224
|
||||
@ -5051,7 +4896,7 @@ msgstr ""
|
||||
msgid "show apps of a specific server"
|
||||
msgstr ""
|
||||
|
||||
#: cli/run.go:193 cli/updater/updater.go:493
|
||||
#: cli/run.go:193
|
||||
msgid "show debug messages"
|
||||
msgstr ""
|
||||
|
||||
@ -5339,7 +5184,7 @@ msgstr ""
|
||||
msgid "tmpfs options are incompatible with type volume"
|
||||
msgstr ""
|
||||
|
||||
#: cli/run.go:201 cli/updater/updater.go:501
|
||||
#: cli/run.go:201
|
||||
msgid "toggle non-interactive mode"
|
||||
msgstr ""
|
||||
|
||||
@ -5370,12 +5215,10 @@ msgstr ""
|
||||
|
||||
#. translators: `abra recipe upgrade` aliases. use a comma separated list of
|
||||
#. aliases with no spaces in between
|
||||
#. translators: `kadabra upgrade` aliases. use a comma separated list of aliases with
|
||||
#. 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:81 cli/upgrade.go:17
|
||||
#: cli/upgrade.go:17
|
||||
msgid "u"
|
||||
msgstr ""
|
||||
|
||||
@ -5718,10 +5561,6 @@ msgstr ""
|
||||
msgid "up"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:556
|
||||
msgid "update all deployed apps"
|
||||
msgstr ""
|
||||
|
||||
#: pkg/upstream/stack/stack.go:473
|
||||
#, c-format
|
||||
msgid "updating %s"
|
||||
@ -5737,11 +5576,6 @@ msgstr ""
|
||||
msgid "upgrade"
|
||||
msgstr ""
|
||||
|
||||
#: cli/updater/updater.go:442
|
||||
#, c-format
|
||||
msgid "upgrade %s (%s) to version %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: `app upgrade` command
|
||||
#: cli/app/upgrade.go:33
|
||||
msgid "upgrade <domain> [version] [flags]"
|
||||
@ -5752,11 +5586,6 @@ msgstr "actualizar <domain> [version] [flags]"
|
||||
msgid "upgrade <recipe> [flags]"
|
||||
msgstr "actualizar <recipe> [flags]"
|
||||
|
||||
#. translators: `app upgrade` command
|
||||
#: cli/updater/updater.go:86
|
||||
msgid "upgrade [[stack] [recipe] | --all] [flags]"
|
||||
msgstr "actualizar [[stack] [recipe] | --all] [flags]"
|
||||
|
||||
#. translators: `upgrade` command
|
||||
#: cli/upgrade.go:22
|
||||
msgid "upgrade [flags]"
|
||||
@ -6061,5 +5890,24 @@ msgstr ""
|
||||
msgid "{name: %s, "
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Check for available upgrades"
|
||||
#~ msgstr "📨 Revisar las actualizaciones disponibles"
|
||||
|
||||
#~ msgid "The Co-op Cloud auto-updater 🤖 🚀"
|
||||
#~ msgstr "📨 Actualizador automático de Co-op Cloud 🤖 🚀"
|
||||
|
||||
#~ msgid "Upgrade apps"
|
||||
#~ msgstr "📨 Actualizar plataformas 🚀"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "no published releases for %s in the recipe catalogue?"
|
||||
#~ msgstr "TRANSLATE THIS FUCKING SHIT ALREADY"
|
||||
|
||||
#~ msgid "notify [flags]"
|
||||
#~ msgstr "notificar [flags]"
|
||||
|
||||
#~ msgid "upgrade [[stack] [recipe] | --all] [flags]"
|
||||
#~ msgstr "actualizar [[stack] [recipe] | --all] [flags]"
|
||||
|
||||
#~ msgid "Undeploy an app"
|
||||
#~ msgstr "📥 Desarma una plataforma 🚀 (los datos 📦 persisten)"
|
||||
|
||||
Reference in New Issue
Block a user