Compare commits

...

8 Commits

Author SHA1 Message Date
9d401202b4 test: ensure "release, fail, release" works
All checks were successful
continuous-integration/drone/push Build is passing
See #794
2026-03-05 11:28:34 +01:00
6504be6403 test: ensure reproducible version 2026-03-05 11:28:33 +01:00
d4944dbf35 chore: update translation files
All checks were successful
continuous-integration/drone/push Build is passing
Updated by "Update PO files to match POT (msgmerge)" add-on in Weblate.

Translation: Co-op Cloud/abra
Translate-URL: https://translate.coopcloud.tech/projects/co-op-cloud/abra/
2026-03-03 00:03:00 +00:00
8d8d4f799d chore: i18n
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-03 01:02:49 +01:00
0633f24d1b feat: recipe release reverts completely on failure
Some checks failed
continuous-integration/drone/push Build is failing
2026-03-03 00:02:15 +00:00
2e062899c7 feat: release make target
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2026-03-01 09:42:59 +01:00
fbd7275f03 build: remove broken goreleaser automagic
All checks were successful
continuous-integration/drone/push Build is passing
See #780
2026-03-01 09:40:29 +01:00
cedf185e97 chore: translation using Weblate (Spanish)
All checks were successful
continuous-integration/drone/push Build is passing
Currently translated at 91.1% (1048 of 1150 strings)

Translation: Co-op Cloud/abra
Translate-URL: https://translate.coopcloud.tech/projects/co-op-cloud/abra/es/
2026-02-28 13:52:56 +00:00
7 changed files with 333 additions and 216 deletions

View File

@ -49,31 +49,6 @@ steps:
depends_on:
- make check
- name: fetch
image: docker:git
commands:
- git fetch --tags
depends_on:
- make check
- make test
when:
event: tag
- name: release
image: goreleaser/goreleaser:v2.5.1
environment:
GITEA_TOKEN:
from_secret: goreleaser_gitea_token
volumes:
- name: deps
path: /go
commands:
- goreleaser release
depends_on:
- fetch
when:
event: tag
- name: publish image
image: plugins/docker
settings:

View File

@ -86,3 +86,6 @@ build-mo:
for lang in $(POFILES); do \
msgfmt $$lang -o $$(echo $$lang | sed 's/.po/.mo/g') --statistics; \
done
release:
@goreleaser release --clean

View File

@ -97,6 +97,16 @@ your private key and enter your passphrase beforehand.
log.Fatal(i18n.G("main app service version for %s is empty?", recipe.Name))
}
repo, err := git.PlainOpen(recipe.Dir)
if err != nil {
log.Fatal(err)
}
preCommitHead, err := repo.Head()
if err != nil {
log.Fatal(err)
}
isClean, err := gitPkg.IsClean(recipe.Dir)
if err != nil {
log.Fatal(err)
@ -201,11 +211,6 @@ likely to change.
}
if tagString == "" {
repo, err := git.PlainOpen(recipe.Dir)
if err != nil {
log.Fatal(err)
}
var lastGitTag tagcmp.Tag
iter, err := repo.Tags()
if err != nil {
@ -282,16 +287,6 @@ likely to change.
log.Fatal(i18n.G("invalid version %s specified", tagString))
}
mainService := "app"
label := i18n.G("coop-cloud.${STACK_NAME}.version=%s", tagString)
if !internal.Dry {
if err := recipe.UpdateLabel("compose.y*ml", mainService, label); err != nil {
log.Fatal(err)
}
} else {
log.Info(i18n.G("dry run: not syncing label %s for recipe %s", tagString, recipe.Name))
}
for _, tag := range tags {
previousTagLeftHand := strings.Split(tag, "+")[0]
newTagStringLeftHand := strings.Split(tagString, "+")[0]
@ -300,24 +295,15 @@ likely to change.
}
}
repo, err := git.PlainOpen(recipe.Dir)
if err != nil {
log.Fatal(err)
}
preCommitHead, err := repo.Head()
if err != nil {
log.Fatal(err)
}
if err := createReleaseFromTag(recipe, tagString, mainAppVersion); err != nil {
if cleanErr := cleanTag(recipe, tagString); cleanErr != nil {
log.Fatal(cleanErr)
log.Fatal(i18n.G("unable to clean up tag after failed release attempt: %s", cleanErr))
}
if cleanErr := cleanCommit(recipe, preCommitHead); cleanErr != nil {
log.Fatal(cleanErr)
if resetErr := resetCommit(recipe, preCommitHead); resetErr != nil {
log.Fatal(i18n.G("unable to reset commit after failed release attempt: %s", resetErr))
}
log.Fatal(err)
log.Error(err)
log.Fatal(i18n.G("release failed. any changes made have been reverted"))
}
},
}
@ -375,23 +361,14 @@ func createReleaseFromTag(recipe recipePkg.Recipe, tagString, mainAppVersion str
return err
}
tag, err := tagcmp.Parse(tagString)
if err != nil {
return err
}
if tag.MissingMinor {
tag.Minor = "0"
tag.MissingMinor = false
}
if tag.MissingPatch {
tag.Patch = "0"
tag.MissingPatch = false
}
if tagString == "" {
tagString = fmt.Sprintf("%s+%s", tag.String(), mainAppVersion)
mainService := "app"
label := fmt.Sprintf("coop-cloud.${STACK_NAME}.version=%s", tagString)
if !internal.Dry {
if err := recipe.UpdateLabel("compose.y*ml", mainService, label); err != nil {
log.Fatal(err)
}
} else {
log.Info(i18n.G("dry run: not syncing label %s for recipe %s", tagString, recipe.Name))
}
if err := addReleaseNotes(recipe, tagString); err != nil {
@ -587,9 +564,10 @@ func pushRelease(recipe recipePkg.Recipe, tagString string) error {
return nil
}
// cleanCommit soft removes the latest release commit. No change are lost the
// the commit itself is removed. This is the equivalent of `git reset HEAD~1`.
func cleanCommit(recipe recipePkg.Recipe, head *plumbing.Reference) error {
// resetCommit hard resets to the state before release was started.
// This will only remove changes made by the release process due to requiring
// a clean working directory.
func resetCommit(recipe recipePkg.Recipe, head *plumbing.Reference) error {
repo, err := git.PlainOpen(recipe.Dir)
if err != nil {
return errors.New(i18n.G("unable to open repo in %s: %s", recipe.Dir, err))
@ -600,12 +578,12 @@ func cleanCommit(recipe recipePkg.Recipe, head *plumbing.Reference) error {
return errors.New(i18n.G("unable to open work tree in %s: %s", recipe.Dir, err))
}
opts := &git.ResetOptions{Commit: head.Hash(), Mode: git.MixedReset}
opts := &git.ResetOptions{Commit: head.Hash(), Mode: git.HardReset}
if err := worktree.Reset(opts); err != nil {
return errors.New(i18n.G("unable to soft reset %s: %s", recipe.Dir, err))
return errors.New(i18n.G("unable to hard reset %s: %s", recipe.Dir, err))
}
log.Debug(i18n.G("removed freshly created commit"))
log.Debug(i18n.G("reset commit to pre-release state"))
return nil
}

View File

@ -7,7 +7,7 @@
msgid ""
msgstr "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2026-02-20 14:48+0100\n"
"POT-Creation-Date: 2026-03-03 01:02+0100\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"
@ -449,7 +449,7 @@ msgstr ""
msgid "%s was successfully moved from %s to %s 🎉"
msgstr ""
#: ./cli/recipe/release.go:299
#: ./cli/recipe/release.go:294
#, c-format
msgid "%s+... conflicts with a previous release: %s"
msgstr ""
@ -1109,7 +1109,7 @@ msgstr ""
msgid "ON SERVER"
msgstr ""
#: ./cli/recipe/release.go:176
#: ./cli/recipe/release.go:186
msgid "PROPOSED CHANGES"
msgstr ""
@ -1273,7 +1273,7 @@ msgstr ""
msgid "SERVER"
msgstr ""
#: ./cli/app/ps.go:185 ./cli/recipe/release.go:176 ./cli/recipe/version.go:69 ./cli/recipe/version.go:110
#: ./cli/app/ps.go:185 ./cli/recipe/release.go:186 ./cli/recipe/version.go:69 ./cli/recipe/version.go:110
msgid "SERVICE"
msgstr ""
@ -1594,7 +1594,7 @@ msgstr ""
msgid "[hijack] end of stdout"
msgstr ""
#: ./cli/recipe/release.go:128
#: ./cli/recipe/release.go:138
#, c-format
msgid "\n"
"The following options are two types of initial semantic version that you can\n"
@ -1747,7 +1747,7 @@ msgstr ""
msgid "add [[server] | --local] [flags]"
msgstr ""
#: ./cli/recipe/release.go:495
#: ./cli/recipe/release.go:472
msgid "add release note? (leave empty to skip)"
msgstr ""
@ -1807,7 +1807,7 @@ msgstr ""
msgid "app domain %s (%s) does not appear to resolve to app server %s (%s)?"
msgstr ""
#: ./cli/recipe/release.go:363
#: ./cli/recipe/release.go:349
msgid "app service is missing image tag?"
msgstr ""
@ -1982,7 +1982,7 @@ msgstr ""
msgid "cannot resolve ipv4 for %s?"
msgstr ""
#: ./cli/recipe/release.go:120
#: ./cli/recipe/release.go:130
msgid "cannot specify tag and bump type at the same time"
msgstr ""
@ -2084,7 +2084,7 @@ msgstr ""
msgid "choosing %s as latest version of %s"
msgstr ""
#: ./cli/recipe/release.go:277
#: ./cli/recipe/release.go:282
#, c-format
msgid "choosing %s as new version for %s"
msgstr ""
@ -2099,7 +2099,7 @@ msgstr ""
msgid "choosing %s as version to upgrade"
msgstr ""
#: ./cli/recipe/release.go:427
#: ./cli/recipe/release.go:404
#, c-format
msgid "chore: publish %s release"
msgstr ""
@ -2258,7 +2258,7 @@ msgstr ""
msgid "context lacks Docker endpoint"
msgstr ""
#: ./cli/recipe/release.go:286 ./pkg/recipe/compose.go:229
#: ./pkg/recipe/compose.go:229
#, c-format
msgid "coop-cloud.${STACK_NAME}.version=%s"
msgstr ""
@ -2322,7 +2322,7 @@ msgstr ""
msgid "created secret on %s: %s"
msgstr ""
#: ./cli/recipe/release.go:565
#: ./cli/recipe/release.go:542
#, c-format
msgid "created tag %s at %s"
msgstr ""
@ -2570,7 +2570,7 @@ msgstr ""
msgid "dry run: adding %s"
msgstr ""
#: ./cli/recipe/release.go:455
#: ./cli/recipe/release.go:432
#, c-format
msgid "dry run: move release note from 'next' to %s"
msgstr ""
@ -2579,11 +2579,11 @@ msgstr ""
msgid "dry run: no changes commited"
msgstr ""
#: ./cli/recipe/release.go:520
#: ./cli/recipe/release.go:497
msgid "dry run: no changes committed"
msgstr ""
#: ./cli/catalogue/catalogue.go:271 ./cli/recipe/release.go:572
#: ./cli/catalogue/catalogue.go:271 ./cli/recipe/release.go:549
msgid "dry run: no changes published"
msgstr ""
@ -2592,12 +2592,12 @@ msgstr ""
msgid "dry run: no git changes pushed in %s"
msgstr ""
#: ./cli/recipe/release.go:545
#: ./cli/recipe/release.go:522
#, c-format
msgid "dry run: no git tag created (%s)"
msgstr ""
#: ./cli/recipe/release.go:292
#: ./cli/recipe/release.go:371
#, c-format
msgid "dry run: not syncing label %s for recipe %s"
msgstr ""
@ -2607,7 +2607,7 @@ msgstr ""
msgid "dry run: remote %s (%s) not created"
msgstr ""
#: ./cli/app/move.go:349 ./cli/catalogue/catalogue.go:301 ./cli/recipe/release.go:645
#: ./cli/app/move.go:349 ./cli/catalogue/catalogue.go:301 ./cli/recipe/release.go:623
msgid "dry-run"
msgstr ""
@ -2741,7 +2741,7 @@ msgstr ""
msgid "f"
msgstr ""
#: ./cli/recipe/release.go:398
#: ./cli/recipe/release.go:375
#, c-format
msgid "failed to add release notes: %s"
msgstr ""
@ -2761,7 +2761,7 @@ msgstr ""
msgid "failed to check out %s in %s: %s"
msgstr ""
#: ./cli/recipe/release.go:402
#: ./cli/recipe/release.go:379
#, c-format
msgid "failed to commit changes: %s"
msgstr ""
@ -2849,7 +2849,7 @@ msgstr ""
msgid "failed to parse image for %s in %s: %s"
msgstr ""
#: ./cli/recipe/release.go:410
#: ./cli/recipe/release.go:387
#, c-format
msgid "failed to publish new release: %s"
msgstr ""
@ -2918,7 +2918,7 @@ msgstr ""
msgid "failed to store secret on %s: %s"
msgstr ""
#: ./cli/recipe/release.go:406
#: ./cli/recipe/release.go:383
#, c-format
msgid "failed to tag release: %s"
msgstr ""
@ -3291,15 +3291,15 @@ msgstr ""
msgid "including VOLUMES=%v in backupbot exec invocation"
msgstr ""
#: ./cli/recipe/release.go:656 ./cli/recipe/upgrade.go:378
#: ./cli/recipe/release.go:634 ./cli/recipe/upgrade.go:378
msgid "increase the major part of the version"
msgstr ""
#: ./cli/recipe/release.go:664 ./cli/recipe/upgrade.go:386
#: ./cli/recipe/release.go:642 ./cli/recipe/upgrade.go:386
msgid "increase the minor part of the version"
msgstr ""
#: ./cli/recipe/release.go:672 ./cli/recipe/upgrade.go:394
#: ./cli/recipe/release.go:650 ./cli/recipe/upgrade.go:394
msgid "increase the patch part of the version"
msgstr ""
@ -3391,7 +3391,7 @@ msgstr ""
msgid "invalid tmpfs source, source must be empty"
msgstr ""
#: ./cli/recipe/release.go:282
#: ./cli/recipe/release.go:287
#, c-format
msgid "invalid version %s specified"
msgstr ""
@ -3547,7 +3547,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:653 ./cli/recipe/upgrade.go:375
#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:66 ./cli/internal/recipe.go:80 ./cli/recipe/release.go:631 ./cli/recipe/upgrade.go:375
msgid "major"
msgstr ""
@ -3576,7 +3576,7 @@ msgstr ""
msgid "migrating app config from %s to %s"
msgstr ""
#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:68 ./cli/internal/recipe.go:82 ./cli/recipe/release.go:661 ./cli/recipe/upgrade.go:383
#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:68 ./cli/internal/recipe.go:82 ./cli/recipe/release.go:639 ./cli/recipe/upgrade.go:383
msgid "minor"
msgstr ""
@ -3675,7 +3675,7 @@ msgstr ""
msgid "new recipe '%s' created: %s"
msgstr ""
#: ./cli/recipe/release.go:585
#: ./cli/recipe/release.go:562
#, c-format
msgid "new release published: %s"
msgstr ""
@ -3726,7 +3726,7 @@ msgstr ""
msgid "no backupbot discovered, is it deployed?"
msgstr ""
#: ./cli/catalogue/catalogue.go:231 ./cli/recipe/release.go:531
#: ./cli/catalogue/catalogue.go:231 ./cli/recipe/release.go:508
#, c-format
msgid "no changes discovered in %s, nothing to publish?"
msgstr ""
@ -3760,7 +3760,7 @@ msgstr ""
msgid "no existing label found, automagic insertion not supported yet"
msgstr ""
#: ./cli/recipe/release.go:124
#: ./cli/recipe/release.go:134
#, c-format
msgid "no git tags found for %s"
msgstr ""
@ -3994,7 +3994,7 @@ msgstr ""
msgid "pass command not found on $PATH, is it installed?"
msgstr ""
#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:70 ./cli/internal/recipe.go:84 ./cli/recipe/release.go:669 ./cli/recipe/upgrade.go:391
#: ./cli/internal/recipe.go:48 ./cli/internal/recipe.go:70 ./cli/internal/recipe.go:84 ./cli/recipe/release.go:647 ./cli/recipe/upgrade.go:391
msgid "patch"
msgstr ""
@ -4114,7 +4114,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:304 ./cli/app/move.go:350 ./cli/app/run.go:23 ./cli/app/upgrade.go:486 ./cli/catalogue/catalogue.go:302 ./cli/recipe/recipe.go:12 ./cli/recipe/release.go:646
#: ./cli/app/backup.go:327 ./cli/app/list.go:304 ./cli/app/move.go:350 ./cli/app/run.go:23 ./cli/app/upgrade.go:486 ./cli/catalogue/catalogue.go:302 ./cli/recipe/recipe.go:12 ./cli/recipe/release.go:624
msgid "r"
msgstr ""
@ -4230,6 +4230,10 @@ msgstr ""
msgid "release <recipe> [version] [flags]"
msgstr ""
#: ./cli/recipe/release.go:306
msgid "release failed. any changes made have been reverted"
msgstr ""
#: ./cli/app/upgrade.go:485
msgid "releasenotes"
msgstr ""
@ -4290,11 +4294,7 @@ msgstr ""
msgid "removed dirty suffix from .env version: %s -> %s"
msgstr ""
#: ./cli/recipe/release.go:608
msgid "removed freshly created commit"
msgstr ""
#: ./cli/recipe/release.go:626
#: ./cli/recipe/release.go:604
#, c-format
msgid "removed freshly created tag %s"
msgstr ""
@ -4366,7 +4366,7 @@ msgstr ""
msgid "repo set config: %s"
msgstr ""
#: ./cli/app/move.go:352 ./cli/catalogue/catalogue.go:304 ./cli/recipe/release.go:648
#: ./cli/app/move.go:352 ./cli/catalogue/catalogue.go:304 ./cli/recipe/release.go:626
msgid "report changes that would be made"
msgstr ""
@ -4387,6 +4387,10 @@ msgstr ""
msgid "reset <recipe> [flags]"
msgstr ""
#: ./cli/recipe/release.go:586
msgid "reset commit to pre-release state"
msgstr ""
#: ./cli/recipe/lint.go:45
msgid "resolve"
msgstr ""
@ -4931,7 +4935,7 @@ msgstr ""
msgid "ssh url: %s, "
msgstr ""
#: ./cli/recipe/release.go:577
#: ./cli/recipe/release.go:554
msgid "ssh-agent not found. see \"abra recipe release --help\" and try again"
msgstr ""
@ -5011,7 +5015,7 @@ msgstr ""
msgid "tag all images with stable tags"
msgstr ""
#: ./cli/recipe/release.go:218
#: ./cli/recipe/release.go:223
#, c-format
msgid "tag at commit %s is unannotated or otherwise broken"
msgstr ""
@ -5144,6 +5148,11 @@ msgstr ""
msgid "unable to clean up git clone of %s: %s"
msgstr ""
#: ./cli/recipe/release.go:300
#, c-format
msgid "unable to clean up tag after failed release attempt: %s"
msgstr ""
#: ./cli/app/list.go:152
#, c-format
msgid "unable to clone %s: %s"
@ -5154,7 +5163,7 @@ msgstr ""
msgid "unable to connect to %s, please check your SSH config"
msgstr ""
#: ./cli/recipe/release.go:126
#: ./cli/recipe/release.go:136
msgid "unable to continue, input required for initial version"
msgstr ""
@ -5178,7 +5187,7 @@ msgstr ""
msgid "unable to create local context: %s"
msgstr ""
#: ./cli/recipe/release.go:622
#: ./cli/recipe/release.go:600
#, c-format
msgid "unable to delete tag %s: %s"
msgstr ""
@ -5223,6 +5232,11 @@ msgstr ""
msgid "unable to git pull in %s: %s"
msgstr ""
#: ./cli/recipe/release.go:583
#, c-format
msgid "unable to hard reset %s: %s"
msgstr ""
#: ./cli/app/env.go:158
#, c-format
msgid "unable to inspect container for %s: %s"
@ -5252,12 +5266,12 @@ msgstr ""
msgid "unable to open git work tree in %s: %s"
msgstr ""
#: ./cli/recipe/release.go:595 ./cli/recipe/release.go:617
#: ./cli/recipe/release.go:573 ./cli/recipe/release.go:595
#, c-format
msgid "unable to open repo in %s: %s"
msgstr ""
#: ./cli/recipe/release.go:600
#: ./cli/recipe/release.go:578
#, c-format
msgid "unable to open work tree in %s: %s"
msgstr ""
@ -5337,6 +5351,11 @@ msgstr ""
msgid "unable to render to JSON: %s"
msgstr ""
#: ./cli/recipe/release.go:303
#, c-format
msgid "unable to reset commit after failed release attempt: %s"
msgstr ""
#: ./pkg/recipe/git.go:166
#, c-format
msgid "unable to resolve '%s': %s"
@ -5377,11 +5396,6 @@ msgstr ""
msgid "unable to setup input stream: %s"
msgstr ""
#: ./cli/recipe/release.go:605
#, c-format
msgid "unable to soft reset %s: %s"
msgstr ""
#: ./cli/internal/validate.go:84
#, c-format
msgid "unable to validate recipe: %s"
@ -5551,7 +5565,7 @@ msgstr ""
msgid "use local server"
msgstr ""
#: ./cli/recipe/release.go:461
#: ./cli/recipe/release.go:438
msgid "use release note in release/next?"
msgstr ""
@ -5760,7 +5774,7 @@ msgstr ""
msgid "which service are you looking for?"
msgstr ""
#: ./cli/recipe/release.go:148
#: ./cli/recipe/release.go:158
msgid "which version do you want to begin with?"
msgstr ""
@ -5772,7 +5786,7 @@ msgstr ""
msgid "wire up healthchecks"
msgstr ""
#: ./cli/recipe/release.go:106
#: ./cli/recipe/release.go:116
#, c-format
msgid "working directory not clean in %s, aborting"
msgstr ""
@ -5787,11 +5801,11 @@ msgstr ""
msgid "writing recipe version failed: %s"
msgstr ""
#: ./cli/recipe/release.go:654 ./cli/recipe/upgrade.go:376
#: ./cli/recipe/release.go:632 ./cli/recipe/upgrade.go:376
msgid "x"
msgstr ""
#: ./cli/recipe/release.go:662 ./cli/recipe/upgrade.go:384
#: ./cli/recipe/release.go:640 ./cli/recipe/upgrade.go:384
msgid "y"
msgstr ""
@ -5799,11 +5813,11 @@ msgstr ""
msgid "you can only use one of: --major, --minor, --patch."
msgstr ""
#: ./cli/recipe/release.go:243
#: ./cli/recipe/release.go:248
msgid "you can only use one version flag: --major, --minor or --patch"
msgstr ""
#: ./cli/recipe/release.go:670 ./cli/recipe/upgrade.go:392
#: ./cli/recipe/release.go:648 ./cli/recipe/upgrade.go:392
msgid "z"
msgstr ""

Binary file not shown.

View File

@ -1,5 +1,17 @@
msgid ""
msgstr "Project-Id-Version: \nReport-Msgid-Bugs-To: EMAIL\nPOT-Creation-Date: 2026-02-20 14:48+0100\nPO-Revision-Date: 2026-02-21 20:37+0000\nLast-Translator: chasqui <chasqui@cryptolab.net>\nLanguage-Team: Spanish <https://translate.coopcloud.tech/projects/co-op-cloud/abra/es/>\nLanguage: es\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Generator: Weblate 5.12.2\n"
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2026-03-03 01:02+0100\n"
"PO-Revision-Date: 2026-02-28 13:52+0000\n"
"Last-Translator: chasqui <chasqui@cryptolab.net>\n"
"Language-Team: Spanish <https://translate.coopcloud.tech/projects/co-op-cloud/abra/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.12.2\n"
#: cli/app/cp.go:38
msgid ""
@ -8,7 +20,12 @@ msgid ""
"\n"
" # copy that file back to your current working directory locally\n"
" abra app cp 1312.net app:/myfile.txt ./"
msgstr " # Para copiar un archivo.txt en el servicio \"app\"\n abra aplicacion copiar 1312.net archivo.txt app:/carpeta/destino/\n\n # Para copiar ese archivo de vuelta a tu directorio local actual\n abra aplicacion copiar 1312.net app:/archivo.txt ./"
msgstr ""
" # Para copiar un archivo.txt en el servicio \"app\"\n"
" abra aplicacion copiar 1312.net archivo.txt app:/carpeta/destino/\n"
"\n"
" # Para copiar ese archivo de vuelta a tu directorio local actual\n"
" abra aplicacion copiar 1312.net app:/archivo.txt ./"
#: cli/app/volume.go:101
msgid ""
@ -126,7 +143,18 @@ msgid ""
"\n"
" # drop the [service] arg if using \"--local/-l\"\n"
" abra app cmd 1312.net my_cmd --local"
msgstr " # Ejecutar comandos dentro de un servicio, por ejemplo db\n abra aplicacion ejecutar 1312.net db -- sh\n\n # Para ejecutar directamente el comando sin abrir bash\n abra aplicacion ejecutar 1312.net db comando_argumento --usuario bar\n\n # Para ejecutar directamente el comando sin abrir bash con \"--\"\n abra aplicacion ejecutar 1312.net db comando_argumentos --usuario bar -- foo -vvv\n\n # Omitir el servicio si usas \"--local/-l\"\n abra aplicacion ejecutar 1312.net comando --local"
msgstr ""
" # Ejecutar comandos dentro de un servicio, por ejemplo db\n"
" abra aplicacion ejecutar 1312.net db -- sh\n"
"\n"
" # Para ejecutar directamente el comando sin abrir bash\n"
" abra aplicacion ejecutar 1312.net db comando_argumento --usuario bar\n"
"\n"
" # Para ejecutar directamente el comando sin abrir bash con \"--\"\n"
" abra aplicacion ejecutar 1312.net db comando_argumentos --usuario bar -- foo -vvv\n"
"\n"
" # Omitir el servicio si usas \"--local/-l\"\n"
" abra aplicacion ejecutar 1312.net comando --local"
#: cli/app/env.go:85
msgid ""
@ -149,7 +177,12 @@ msgid ""
"\n"
" # restart all app services\n"
" abra app restart 1312.net -a"
msgstr " # Reiniciar el servcio \"db\" de una aplicación\n abra aplicacion reiniciar 1312.net db\n\n # Reiniciar todos los servicios de una aplicación\n abra aplicacion reiniciar 1312.net --todos-los-servicios"
msgstr ""
" # Reiniciar el servcio \"db\" de una aplicación\n"
" abra aplicacion reiniciar 1312.net db\n"
"\n"
" # Reiniciar todos los servicios de una aplicación\n"
" abra aplicacion reiniciar 1312.net --todos-los-servicios"
#: cli/app/run.go:31
msgid ""
@ -161,7 +194,15 @@ msgid ""
"\n"
" # run <cmd> with both kinds of args/flags \n"
" abra app run 1312.net app --user nobody -- ls -lha"
msgstr " # Lanzar <comando> con argumentos/opciones\n abra aplicación lanzar 1312.net app -- ls -lha\n\n # Lanzar <comando> sin args/opciones\n abra aplicación lanzar 1312.net app bash --usuario nobody\n\n # Lanzar <comando> con ambos tipos de args/opciones \n abra aplicación lanzar 1312.net app --usuario nobody -- ls -lha"
msgstr ""
" # Lanzar <comando> con argumentos/opciones\n"
" abra aplicación lanzar 1312.net app -- ls -lha\n"
"\n"
" # Lanzar <comando> sin args/opciones\n"
" abra aplicación lanzar 1312.net app bash --usuario nobody\n"
"\n"
" # Lanzar <comando> con ambos tipos de args/opciones \n"
" abra aplicación lanzar 1312.net app --usuario nobody -- ls -lha"
#: cli/app/deploy.go:43
msgid ""
@ -514,7 +555,7 @@ msgstr "%s se almacenó con éxito en el servidor"
msgid "%s was successfully moved from %s to %s 🎉"
msgstr "%s se movió con éxito de %s a %s 🎉"
#: cli/recipe/release.go:299
#: cli/recipe/release.go:294
#, c-format
msgid "%s+... conflicts with a previous release: %s"
msgstr "%s+... entra en conflicto con un lanzamiento anterior: %s"
@ -751,11 +792,11 @@ msgstr "COMPOSE_FILE detectado, cargando %s"
#: cli/internal/deploy.go:81
msgid "CONFIG"
msgstr "⚙️ CONFIGURACIÓN"
msgstr "⚙️ CONFIGURACIÓN"
#: cli/internal/deploy.go:107
msgid "CONFIGS"
msgstr "⚙️ CONFIGURACIONES"
msgstr "⚙️ CONFIGURACIONES"
#: cli/app/secret.go:481
msgid "CREATED ON SERVER"
@ -806,7 +847,7 @@ msgstr ""
#. translators: Short description for `app cp` command
#: cli/app/cp.go:37
msgid "Copy files to/from a deployed app service"
msgstr "↔️ Copia archivos desde/hacia una 🚀 aplicación"
msgstr "↔️ Copia archivos desde/hacia una 🚀 aplicación"
#. translators: Short description for `app new` command
#: cli/app/new.go:55
@ -984,16 +1025,16 @@ msgstr ""
#: cli/app/env.go:70
msgid "ENV OVERVIEW"
msgstr "RESUMEN DEL 🎛️ ENTORNO"
msgstr "🎛️ RESUMEN DEL ENTORNO"
#: cli/internal/deploy.go:84
msgid "ENV VERSION"
msgstr "VERSIÓN DEL 🎛️ ENTORNO"
msgstr "🎛️ VERSIÓN DEL ENTORNO"
#. translators: Short description for `app config` command
#: cli/app/config.go:25
msgid "Edit app config"
msgstr "⚙️ Edita las configuraciones de una 🚀 aplicación"
msgstr "⚙️ Edita las configuraciones de una 🚀 aplicación"
#. translators: Short description for `app check` command
#: cli/app/check.go:26
@ -1208,41 +1249,41 @@ msgstr "RESUMEN DE MOVIMIENTOS"
#. translators: Short description for `app backup` command group
#: cli/app/backup.go:246
msgid "Manage app backups"
msgstr "⚙️ Administrar 📸 instantáneas de la aplicación (respaldos)"
msgstr "⚙️ Administrar 📸 instantáneas de la aplicación (respaldos)"
#. translators: Short description for `app env` command group
#: cli/app/env.go:314
msgid "Manage app environment values"
msgstr "⚙️ Administrar 🎛️ valores del entorno de la aplicación"
msgstr "⚙️ Administrar 🎛️ valores del entorno de la aplicación"
#. translators: Short description for `app secret` command group
#: cli/app/secret.go:537
msgid "Manage app secrets"
msgstr "⚙️ Administrar 🥷 secretos de la aplicación"
msgstr "⚙️ Administrar 🥷 secretos de la aplicación"
#: cli/app/volume.go:210
msgid "Manage app volumes"
msgstr "⚙️ Administrar 📦 volúmenes de la aplicación"
msgstr "⚙️ Administrar 📦 volúmenes de la aplicación"
#. translators: Short description for `app` command group
#: cli/app/app.go:19
msgid "Manage apps"
msgstr "⚙️ Administrar 🚀 aplicaciones"
msgstr "⚙️ Administrar 🚀 aplicaciones"
#. translators: Short description for `recipe` command group
#: cli/recipe/recipe.go:20
msgid "Manage recipes"
msgstr "⚙️ Administrar 📜 recetas"
msgstr "⚙️ Administrar 📜 recetas"
#. translators: Short description for `server` command group
#: cli/server/server.go:20
msgid "Manage servers"
msgstr "⚙️ Administrar 🕋 servidores"
msgstr "⚙️ Administrar 🕋 servidores"
#. translators: Short description for `catalogue` command group
#: cli/catalogue/catalogue.go:281
msgid "Manage the recipe catalogue"
msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas"
msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas"
#: cli/app/move.go:42
msgid ""
@ -1288,7 +1329,7 @@ msgstr ""
#. translators: Short description for `app move` command
#: cli/app/move.go:41
msgid "Moves an app to a different server"
msgstr "Mueve la aplicación a un servidor diferente"
msgstr "🚚 Mueve la 🚀 aplicación a un 🕋 servidor diferente"
#: cli/recipe/new.go:123
msgid "N"
@ -1301,7 +1342,7 @@ msgstr "NOMBRE"
#: cli/internal/deploy.go:160
msgid "NEW DEPLOY"
msgstr "📤 NUEVO PROCESO DE DESPLIEGUE"
msgstr "📤 NUEVO DESPLIEGUE"
#: cli/internal/deploy.go:85
msgid "NEW DEPLOYMENT"
@ -1327,7 +1368,7 @@ msgstr "SERVIDOR ANTIGUO"
msgid "ON SERVER"
msgstr "EN EL SERVIDOR"
#: cli/recipe/release.go:176
#: cli/recipe/release.go:186
msgid "PROPOSED CHANGES"
msgstr "CAMBIOS PROPUESTOS"
@ -1495,7 +1536,7 @@ msgstr "🔂 Reiniciar una 🚀 aplicación"
#. translators: Short description for `app restore` command
#: cli/app/restore.go:24
msgid "Restore a snapshot"
msgstr "▶️ Restaurar una 📸 instantánea (respaldo)"
msgstr "▶️ Restaurar una 📸 instantánea (respaldo)"
#. translators: Short description for `app rollback` command
#: cli/app/rollback.go:34
@ -1519,7 +1560,18 @@ msgid ""
"be passed *before* the \"--\". It is possible to pass arguments without the \"--\"\n"
"as long as no dashes are present (i.e. \"foo\" works without \"--\", \"-foo\"\n"
"does not)."
msgstr "Ejecuta un comando específico dentro de la aplicación.\n\nEsos comandos son funciones de bash. Se pueden ejecutar \nen el contexto de un servicio (por ejemplo, app, db, web) \no localmente en tu estación de trabajo agregando \"--local/-l\".\n\nNota: si usas el estilo \"--\" para poner argumentos, \nlas opciones (p. ej. \"--local/-l\") deben ir *antes* del \"--\". \nTambién puedes pasar argumentos sin el \"--\" siempre \nque no tengan guiones. \n(p. ej. \"foo\" funciona sin \"--\", \"-foo\" no)."
msgstr ""
"Ejecuta un comando específico dentro de la aplicación.\n"
"\n"
"Esos comandos son funciones de bash. Se pueden ejecutar \n"
"en el contexto de un servicio (por ejemplo, app, db, web) \n"
"o localmente en tu estación de trabajo agregando \"--local/-l\".\n"
"\n"
"Nota: si usas el estilo \"--\" para poner argumentos, \n"
"las opciones (p. ej. \"--local/-l\") deben ir *antes* del \"--\". \n"
"También puedes pasar argumentos sin el \"--\" siempre \n"
"que no tengan guiones. \n"
"(p. ej. \"foo\" funciona sin \"--\", \"-foo\" no)."
#. translators: Short description for `app cmd` command
#: cli/app/cmd.go:30
@ -1543,7 +1595,7 @@ msgstr "RESUMEN DE LOS 🥷 SECRETOS"
msgid "SERVER"
msgstr "🕋 SERVIDOR"
#: cli/app/ps.go:185 cli/recipe/release.go:176 cli/recipe/version.go:69
#: cli/app/ps.go:185 cli/recipe/release.go:186 cli/recipe/version.go:69
#: cli/recipe/version.go:110
msgid "SERVICE"
msgstr "🔥 SERVICIO"
@ -1585,7 +1637,7 @@ msgstr "📋 Lista las 📑 etiquetas desplegadas (proxy)"
#. translators: Short description for `recipe diff` command
#: cli/recipe/diff.go:23
msgid "Show unstaged changes in recipe config"
msgstr "📋Muestra cambios sin actualizar en la configuración de la 📜 receta"
msgstr "📋 Muestra cambios sin actualizar en la configuración de la 📜 receta"
#: cli/app/restore.go:25
msgid ""
@ -1972,7 +2024,33 @@ msgid ""
" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n"
"\n"
"Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n"
msgstr "Uso:{{if .Runnable}}\n {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}\n\nComando:\n {{.NameAndAliases}}{{end}}{{if .HasExample}}\n\nEjemplos:\n # Nota: \"1312.net\" es solo un ejemplo de nombre de aplicación.\n# Reemplázalo por el dominio o nombre real de tu aplicación.\n\n{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n\nComandos disponibles:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n\nOpciones:\n{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n\nOpciones globales:\n{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\n\nTemas de ayuda adicionales:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n\nUse \"{{.CommandPath}} [command] --help\" para más información sobre un comando.{{end}}\n"
msgstr ""
"Uso:{{if .Runnable}}\n"
" {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n"
" {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}\n"
"\n"
"Comando:\n"
" {{.NameAndAliases}}{{end}}{{if .HasExample}}\n"
"\n"
"Ejemplos:\n"
" # Nota: \"1312.net\" es solo un ejemplo de nombre de aplicación.\n"
"# Reemplázalo por el dominio o nombre real de tu aplicación.\n"
"\n"
"{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n"
"\n"
"Comandos disponibles:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n"
" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n"
"\n"
"Opciones:\n"
"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n"
"\n"
"Opciones globales:\n"
"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\n"
"\n"
"Temas de ayuda adicionales:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n"
" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n"
"\n"
"Use \"{{.CommandPath}} [command] --help\" para más información sobre un comando.{{end}}\n"
#: cli/recipe/fetch.go:28
msgid "Using \"--force/-f\" Git syncs an existing recipe. It does not erase unstaged changes."
@ -2003,7 +2081,7 @@ msgstr "[hijack] Fin de stdin"
msgid "[hijack] end of stdout"
msgstr "[hijack] Fin de stdout"
#: cli/recipe/release.go:128
#: cli/recipe/release.go:138
#, c-format
msgid ""
"\n"
@ -2201,7 +2279,7 @@ msgstr "agrega '- \"%s\"' manualmente al servicio de la 'app' en %s"
msgid "add [[server] | --local] [flags]"
msgstr "agregar [[servidor] | --local] [opciones]"
#: cli/recipe/release.go:495
#: cli/recipe/release.go:472
msgid "add release note? (leave empty to skip)"
msgstr "¿Agregar nota de versión? (dejar vacío para omitir)"
@ -2262,7 +2340,7 @@ msgstr "aplicacion [comando] [argumento] [opciones]"
msgid "app domain %s (%s) does not appear to resolve to app server %s (%s)?"
msgstr "¿El dominio de la aplicación %s (%s) no parece resolverse al servidor de la aplicación %s (%s)?"
#: cli/recipe/release.go:363
#: cli/recipe/release.go:349
msgid "app service is missing image tag?"
msgstr "¿A la aplicación le falta la etiqueta de imagen?"
@ -2438,14 +2516,16 @@ msgstr "no se puede redeplegar la versión anterior de caos (%s), ¿Era tu inten
msgid ""
"cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?\n"
" to return to a regular release, specify a release tag, commit SHA or use \"--latest\""
msgstr "no se puede redesplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"? \npara volver a un lanzamiento regular, especifica una etiqueta de lanzamiento, SHA de commit o agrega el comando \"--latest\""
msgstr ""
"no se puede redesplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"? \n"
"para volver a un lanzamiento regular, especifica una etiqueta de lanzamiento, SHA de commit o agrega el comando \"--latest\""
#: pkg/dns/dns.go:38 pkg/dns/dns.go:47
#, c-format
msgid "cannot resolve ipv4 for %s?"
msgstr "no se puede resolver ipv4 para %s?"
#: cli/recipe/release.go:120
#: cli/recipe/release.go:130
msgid "cannot specify tag and bump type at the same time"
msgstr "no se puede especificar una etiqueta y un tipo de incremento al mismo tiempo"
@ -2552,7 +2632,7 @@ msgstr ""
msgid "choosing %s as latest version of %s"
msgstr "eligiendo %s como la última versión de %s"
#: cli/recipe/release.go:277
#: cli/recipe/release.go:282
#, c-format
msgid "choosing %s as new version for %s"
msgstr "eligiendo %s como nueva versión para %s"
@ -2567,7 +2647,7 @@ msgstr "eligiendo %s como versión para revertir"
msgid "choosing %s as version to upgrade"
msgstr "eligiendo %s como versión para actualizar"
#: cli/recipe/release.go:427
#: cli/recipe/release.go:404
#, c-format
msgid "chore: publish %s release"
msgstr "tarea: publicar versión %s"
@ -2726,7 +2806,7 @@ msgstr "el contexto para %s ya existe"
msgid "context lacks Docker endpoint"
msgstr "el contexto no tiene punto final de Docker"
#: cli/recipe/release.go:286 pkg/recipe/compose.go:229
#: pkg/recipe/compose.go:229
#, c-format
msgid "coop-cloud.${STACK_NAME}.version=%s"
msgstr ""
@ -2790,7 +2870,7 @@ msgstr "creado cliente para %s"
msgid "created secret on %s: %s"
msgstr "secreto creado en %s: %s"
#: cli/recipe/release.go:565
#: cli/recipe/release.go:542
#, c-format
msgid "created tag %s at %s"
msgstr "creada etiqueta %s en %s"
@ -3039,7 +3119,7 @@ msgstr "ejecución de prueba"
msgid "dry run: adding %s"
msgstr "ejecución de prueba: añadiendo %s"
#: cli/recipe/release.go:455
#: cli/recipe/release.go:432
#, c-format
msgid "dry run: move release note from 'next' to %s"
msgstr "ejecución de prueba: mover la nota de la versión de 'next' a %s"
@ -3048,11 +3128,11 @@ msgstr "ejecución de prueba: mover la nota de la versión de 'next' a %s"
msgid "dry run: no changes commited"
msgstr "ejecución de prueba: no se confirmaron cambios"
#: cli/recipe/release.go:520
#: cli/recipe/release.go:497
msgid "dry run: no changes committed"
msgstr "ejecución de prueba: ningún cambio confirmado"
#: cli/catalogue/catalogue.go:271 cli/recipe/release.go:572
#: cli/catalogue/catalogue.go:271 cli/recipe/release.go:549
msgid "dry run: no changes published"
msgstr "ejecución de prueba: no se publicaron cambios"
@ -3061,12 +3141,12 @@ msgstr "ejecución de prueba: no se publicaron cambios"
msgid "dry run: no git changes pushed in %s"
msgstr "ejecución de prueba: no se enviaron cambios de git (push) en %s"
#: cli/recipe/release.go:545
#: cli/recipe/release.go:522
#, c-format
msgid "dry run: no git tag created (%s)"
msgstr "ejecución de prueba: no se creó etiqueta de git (%s)"
#: cli/recipe/release.go:292
#: cli/recipe/release.go:371
#, c-format
msgid "dry run: not syncing label %s for recipe %s"
msgstr "ejecución de prueba: no se sincronizará la etiqueta %s para la receta %s"
@ -3076,7 +3156,7 @@ msgstr "ejecución de prueba: no se sincronizará la etiqueta %s para la receta
msgid "dry run: remote %s (%s) not created"
msgstr "ejecución de prueba: remoto %s (%s) no creado"
#: cli/app/move.go:349 cli/catalogue/catalogue.go:301 cli/recipe/release.go:645
#: cli/app/move.go:349 cli/catalogue/catalogue.go:301 cli/recipe/release.go:623
msgid "dry-run"
msgstr "ejecucion-de-prueba"
@ -3214,7 +3294,7 @@ msgstr "extrayendo secreto %s en %s"
msgid "f"
msgstr ""
#: cli/recipe/release.go:398
#: cli/recipe/release.go:375
#, c-format
msgid "failed to add release notes: %s"
msgstr "🛑 error al agregar notas de la versión: %s"
@ -3234,7 +3314,7 @@ msgstr "🛑 error al cambiar a %s en %s"
msgid "failed to check out %s in %s: %s"
msgstr "🛑 error al cambiar a %s en %s: %s"
#: cli/recipe/release.go:402
#: cli/recipe/release.go:379
#, c-format
msgid "failed to commit changes: %s"
msgstr "🛑 error al hacer commit: %s"
@ -3322,7 +3402,7 @@ msgstr "🛑 error al analizar la imagen %s; detectado: %s"
msgid "failed to parse image for %s in %s: %s"
msgstr "🛑 error al analizar la imagen %s; en: %s: %s"
#: cli/recipe/release.go:410
#: cli/recipe/release.go:387
#, c-format
msgid "failed to publish new release: %s"
msgstr "🛑 error al publicar la nueva versión: %s"
@ -3391,7 +3471,7 @@ msgstr "🛑 error al seleccionar la rama predeterminada en %s"
msgid "failed to store secret on %s: %s"
msgstr "🛑 no se pudo almacenar el secreto en %s: %s"
#: cli/recipe/release.go:406
#: cli/recipe/release.go:383
#, c-format
msgid "failed to tag release: %s"
msgstr "🛑 error al etiquetar la versión: %s"
@ -3771,15 +3851,15 @@ msgstr "incluyendo VOLUMES=%s en la invocación de backupbot exec"
msgid "including VOLUMES=%v in backupbot exec invocation"
msgstr "incluyendo VOLUMES=%v en la invocación de backupbot exec"
#: cli/recipe/release.go:656 cli/recipe/upgrade.go:378
#: cli/recipe/release.go:634 cli/recipe/upgrade.go:378
msgid "increase the major part of the version"
msgstr "incrementar la parte mayor de la versión"
#: cli/recipe/release.go:664 cli/recipe/upgrade.go:386
#: cli/recipe/release.go:642 cli/recipe/upgrade.go:386
msgid "increase the minor part of the version"
msgstr "incrementar la parte menor de la versión"
#: cli/recipe/release.go:672 cli/recipe/upgrade.go:394
#: cli/recipe/release.go:650 cli/recipe/upgrade.go:394
msgid "increase the patch part of the version"
msgstr "incrementar la parte de parche de la versión"
@ -3871,7 +3951,7 @@ msgstr "receta inválida: %s"
msgid "invalid tmpfs source, source must be empty"
msgstr "fuente tmpfs inválida, la fuente debe estar vacía"
#: cli/recipe/release.go:282
#: cli/recipe/release.go:287
#, c-format
msgid "invalid version %s specified"
msgstr "versión %s especificada inválida"
@ -4037,7 +4117,7 @@ msgid "main app service version for %s is empty?"
msgstr "¿la versión del servicio principal de la aplicación para %s está vacía?"
#: cli/internal/recipe.go:48 cli/internal/recipe.go:66
#: cli/internal/recipe.go:80 cli/recipe/release.go:653
#: cli/internal/recipe.go:80 cli/recipe/release.go:631
#: cli/recipe/upgrade.go:375
msgid "major"
msgstr "mayor"
@ -4068,7 +4148,7 @@ msgid "migrating app config from %s to %s"
msgstr "migrando la configuración de la aplicación de %s a %s"
#: cli/internal/recipe.go:48 cli/internal/recipe.go:68
#: cli/internal/recipe.go:82 cli/recipe/release.go:661
#: cli/internal/recipe.go:82 cli/recipe/release.go:639
#: cli/recipe/upgrade.go:383
msgid "minor"
msgstr "menor"
@ -4168,7 +4248,7 @@ msgstr "nuevos cambios publicados: %s"
msgid "new recipe '%s' created: %s"
msgstr "nueva receta '%s' creada: %s"
#: cli/recipe/release.go:585
#: cli/recipe/release.go:562
#, c-format
msgid "new release published: %s"
msgstr "nueva versión publicada: %s"
@ -4219,7 +4299,7 @@ msgstr "no hay actualizaciones disponibles"
msgid "no backupbot discovered, is it deployed?"
msgstr "no se descubrió backupbot, ¿está desplegado?"
#: cli/catalogue/catalogue.go:231 cli/recipe/release.go:531
#: cli/catalogue/catalogue.go:231 cli/recipe/release.go:508
#, c-format
msgid "no changes discovered in %s, nothing to publish?"
msgstr "no se descubrieron cambios en %s, ¿nada que publicar?"
@ -4253,7 +4333,7 @@ msgstr "no se proporcionó dominio"
msgid "no existing label found, automagic insertion not supported yet"
msgstr "no se encontró ninguna etiqueta existente, la inserción automágica no es compatible aún"
#: cli/recipe/release.go:124
#: cli/recipe/release.go:134
#, c-format
msgid "no git tags found for %s"
msgstr "no se encontraron etiquetas de git para %s"
@ -4492,7 +4572,7 @@ msgid "pass command not found on $PATH, is it installed?"
msgstr "comando pass no encontrado en $PATH, ¿está instalado?"
#: cli/internal/recipe.go:48 cli/internal/recipe.go:70
#: cli/internal/recipe.go:84 cli/recipe/release.go:669
#: cli/internal/recipe.go:84 cli/recipe/release.go:647
#: cli/recipe/upgrade.go:391
msgid "patch"
msgstr "parche"
@ -4618,7 +4698,7 @@ msgstr "consultando servidores remotos..."
#. with no spaces in between
#: cli/app/backup.go:327 cli/app/list.go:304 cli/app/move.go:350
#: cli/app/run.go:23 cli/app/upgrade.go:486 cli/catalogue/catalogue.go:302
#: cli/recipe/recipe.go:12 cli/recipe/release.go:646
#: cli/recipe/recipe.go:12 cli/recipe/release.go:624
msgid "r"
msgstr ""
@ -4738,6 +4818,10 @@ msgstr ""
msgid "release <recipe> [version] [flags]"
msgstr "publicar <receta> [version] [opciones]"
#: cli/recipe/release.go:306
msgid "release failed. any changes made have been reverted"
msgstr ""
#: cli/app/upgrade.go:485
msgid "releasenotes"
msgstr "notas de la versión"
@ -4798,11 +4882,7 @@ msgstr "eliminado el repositorio .git en %s"
msgid "removed dirty suffix from .env version: %s -> %s"
msgstr "eliminado sufijo sucio de la versión .env: %s -> %s"
#: cli/recipe/release.go:608
msgid "removed freshly created commit"
msgstr "eliminado commit recién creado"
#: cli/recipe/release.go:626
#: cli/recipe/release.go:604
#, c-format
msgid "removed freshly created tag %s"
msgstr "eliminada etiqueta recién creada %s"
@ -4874,7 +4954,7 @@ msgstr "configuración del repositorio: %s"
msgid "repo set config: %s"
msgstr "configuración del repositorio establecida: %s"
#: cli/app/move.go:352 cli/catalogue/catalogue.go:304 cli/recipe/release.go:648
#: cli/app/move.go:352 cli/catalogue/catalogue.go:304 cli/recipe/release.go:626
msgid "report changes that would be made"
msgstr "informar sobre los cambios que se realizarían"
@ -4895,6 +4975,10 @@ msgstr "requiere al menos 3 argumentos"
msgid "reset <recipe> [flags]"
msgstr "resetear <receta> [opciones]"
#: cli/recipe/release.go:586
msgid "reset commit to pre-release state"
msgstr ""
#: cli/recipe/lint.go:45
msgid "resolve"
msgstr "resolver"
@ -5445,7 +5529,7 @@ msgstr "la conexión al host SSH no es válida"
msgid "ssh url: %s, "
msgstr ""
#: cli/recipe/release.go:577
#: cli/recipe/release.go:554
msgid "ssh-agent not found. see \"abra recipe release --help\" and try again"
msgstr "ssh-agent no encontrado. consulta \"abra receta publicar --ayuda\" y vuelve a intentarlo"
@ -5526,7 +5610,7 @@ msgstr ""
msgid "tag all images with stable tags"
msgstr "etiquetar todas las imágenes con etiquetas estables"
#: cli/recipe/release.go:218
#: cli/recipe/release.go:223
#, c-format
msgid "tag at commit %s is unannotated or otherwise broken"
msgstr "la etiqueta en el commit %s no está anotada o está dañada"
@ -5660,6 +5744,11 @@ msgstr "no se pudo cambiar a la rama predeterminada en %s: %s"
msgid "unable to clean up git clone of %s: %s"
msgstr "no se pudo limpiar la clonación de Git de %s: %s"
#: cli/recipe/release.go:300
#, fuzzy, c-format
msgid "unable to clean up tag after failed release attempt: %s"
msgstr "no se pudo limpiar la clonación de Git de %s: %s"
#: cli/app/list.go:152
#, c-format
msgid "unable to clone %s: %s"
@ -5670,7 +5759,7 @@ msgstr "no se pudo clonar %s: %s"
msgid "unable to connect to %s, please check your SSH config"
msgstr "no se pudo conectar a %s; por favor revisa tu configuración SSH"
#: cli/recipe/release.go:126
#: cli/recipe/release.go:136
msgid "unable to continue, input required for initial version"
msgstr "no se puede continuar; se requiere entrada para la versión inicial"
@ -5694,7 +5783,7 @@ msgstr "no se pudo crear %s: %s"
msgid "unable to create local context: %s"
msgstr "no se pudo crear el contexto local: %s"
#: cli/recipe/release.go:622
#: cli/recipe/release.go:600
#, c-format
msgid "unable to delete tag %s: %s"
msgstr "no se pudo eliminar la etiqueta %s: %s"
@ -5739,6 +5828,11 @@ msgstr "no se pudo obtener el contenedor que coincide con %s: %s"
msgid "unable to git pull in %s: %s"
msgstr "no se pudo hacer git pull en %s: %s"
#: cli/recipe/release.go:583
#, fuzzy, c-format
msgid "unable to hard reset %s: %s"
msgstr "no se pudo hacer un soft reset en %s: %s"
#: cli/app/env.go:158
#, c-format
msgid "unable to inspect container for %s: %s"
@ -5769,12 +5863,12 @@ msgstr "no se pudo abrir %s: %s"
msgid "unable to open git work tree in %s: %s"
msgstr "no se pudo abrir el git work tree en %s: %s"
#: cli/recipe/release.go:595 cli/recipe/release.go:617
#: cli/recipe/release.go:573 cli/recipe/release.go:595
#, c-format
msgid "unable to open repo in %s: %s"
msgstr "no se pudo abrir el repositorio en %s: %s"
#: cli/recipe/release.go:600
#: cli/recipe/release.go:578
#, c-format
msgid "unable to open work tree in %s: %s"
msgstr "no se pudo abrir el work tree en %s: %s"
@ -5855,6 +5949,11 @@ msgstr "no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s
msgid "unable to render to JSON: %s"
msgstr "no se pudo renderizar a JSON: %s"
#: cli/recipe/release.go:303
#, fuzzy, c-format
msgid "unable to reset commit after failed release attempt: %s"
msgstr "no se pudo establecer los streams de IO como terminal raw: %s"
#: pkg/recipe/git.go:166
#, c-format
msgid "unable to resolve '%s': %s"
@ -5895,11 +5994,6 @@ msgstr "no se pudo establecer el remoto SSH en %s: %s"
msgid "unable to setup input stream: %s"
msgstr "no se pudo configurar el stream de entrada: %s"
#: cli/recipe/release.go:605
#, c-format
msgid "unable to soft reset %s: %s"
msgstr "no se pudo hacer un soft reset en %s: %s"
#: cli/internal/validate.go:84
#, c-format
msgid "unable to validate recipe: %s"
@ -6072,7 +6166,7 @@ msgstr "usar una etiqueta para todas las imágenes"
msgid "use local server"
msgstr "usar servidor local"
#: cli/recipe/release.go:461
#: cli/recipe/release.go:438
msgid "use release note in release/next?"
msgstr "¿Usar la nota de la versión en release/next?"
@ -6285,7 +6379,7 @@ msgstr "¿Qué editor de texto deseas usar?"
msgid "which service are you looking for?"
msgstr "¿qué servicio estás buscando?"
#: cli/recipe/release.go:148
#: cli/recipe/release.go:158
msgid "which version do you want to begin with?"
msgstr "¿Con cuál versión quieres comenzar?"
@ -6297,7 +6391,7 @@ msgstr "¿Qué volúmenes quieres eliminar?"
msgid "wire up healthchecks"
msgstr "configurar chequeos de salud"
#: cli/recipe/release.go:106
#: cli/recipe/release.go:116
#, c-format
msgid "working directory not clean in %s, aborting"
msgstr "el directorio de trabajo no está limpio en %s, abortando"
@ -6313,11 +6407,11 @@ msgstr ""
msgid "writing recipe version failed: %s"
msgstr "escritura de la versión de la receta fallida: %s"
#: cli/recipe/release.go:654 cli/recipe/upgrade.go:376
#: cli/recipe/release.go:632 cli/recipe/upgrade.go:376
msgid "x"
msgstr ""
#: cli/recipe/release.go:662 cli/recipe/upgrade.go:384
#: cli/recipe/release.go:640 cli/recipe/upgrade.go:384
msgid "y"
msgstr ""
@ -6325,11 +6419,11 @@ msgstr ""
msgid "you can only use one of: --major, --minor, --patch."
msgstr "solo puedes usar una de: --mayor, --menor, --parche."
#: cli/recipe/release.go:243
#: cli/recipe/release.go:248
msgid "you can only use one version flag: --major, --minor or --patch"
msgstr "solo puedes usar una opción de versión: --mayor, --menor o --parche"
#: cli/recipe/release.go:670 cli/recipe/upgrade.go:392
#: cli/recipe/release.go:648 cli/recipe/upgrade.go:392
msgid "z"
msgstr ""
@ -6343,6 +6437,9 @@ msgstr ""
msgid "{name: %s, "
msgstr "{nombre: %s, "
#~ msgid "removed freshly created commit"
#~ msgstr "eliminado commit recién creado"
#~ msgid "Sync recipe version label"
#~ msgstr "Sincronizar versión de la receta 🧑‍🍳"

View File

@ -217,3 +217,53 @@ teardown() {
assert_failure
assert_output --partial "automagic insertion not supported yet"
}
@test "push during release fails" {
tagHash=$(_get_tag_hash "0.2.0+1.21.0")
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$tagHash"
assert_success
run $ABRA recipe upgrade "$TEST_RECIPE" --no-input --patch --commit
assert_success
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" show
assert_success
assert_output --partial 'image: nginx:1.21.6'
wantHash="$(_get_current_hash)"
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" remote set-url origin-ssh "$ABRA_DIR/does/not/exist"
assert_success
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
assert_failure
assert_output --partial 'failed to publish new release:'
assert_output --partial 'any changes made have been reverted'
assert_equal "$wantHash" "$(_get_current_hash)"
assert_equal "$(_git_status)" ""
}
@test "release, fail, release: works" {
tagHash=$(_get_tag_hash "0.2.0+1.21.0")
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$tagHash"
assert_success
run $ABRA recipe upgrade "$TEST_RECIPE" --no-input --patch --commit
assert_success
# NOTE(d1): fake broken remote so the release fails
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" remote set-url origin-ssh "$ABRA_DIR/does/not/exist"
assert_success
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
assert_failure
# NOTE(d1): correct remote so release can proceed
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" remote set-url origin-ssh "$ABRA_DIR/origin-recipes/$TEST_RECIPE.git"
assert_success
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
assert_success
}