From 1013f669bb6dc52676fbf59b188e77a13b8ad8c6 Mon Sep 17 00:00:00 2001 From: iexos Date: Fri, 10 Apr 2026 23:14:53 +0200 Subject: [PATCH 01/55] fix: i18n & clarify no release notes msg --- cli/app/upgrade.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index d5e5513a..595f6d85 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -238,7 +238,7 @@ beforehand. See "abra app backup" for more.`), if upgradeReleaseNotes == "" { upgradeWarnMessages = append( upgradeWarnMessages, - fmt.Sprintf("no release notes available for %s", chosenUpgrade), + i18n.G("no release notes for upgrading from %s to %s", deployMeta.Version, chosenUpgrade), ) } From 7524a785ce4a85a84f4b3ae472e5ca0e1d477907 Mon Sep 17 00:00:00 2001 From: iexos Date: Sat, 11 Apr 2026 11:34:53 +0200 Subject: [PATCH 02/55] chore: make i18n --- pkg/i18n/locales/abra.pot | 7 +- pkg/i18n/locales/es.po | 719 ++++++++++++++++++++++++++------------ 2 files changed, 506 insertions(+), 220 deletions(-) diff --git a/pkg/i18n/locales/abra.pot b/pkg/i18n/locales/abra.pot index cc825c0d..0c039967 100644 --- a/pkg/i18n/locales/abra.pot +++ b/pkg/i18n/locales/abra.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" - "POT-Creation-Date: 2026-03-03 01:02+0100\n" + "POT-Creation-Date: 2026-04-11 11:34+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3779,6 +3779,11 @@ msgstr "" msgid "no recipe name provided" msgstr "" +#: ./cli/app/upgrade.go:241 +#, c-format +msgid "no release notes for upgrading from %s to %s" +msgstr "" + #: ./cli/app/secret.go:234 #, c-format msgid "no secret %s available for recipe %s?" diff --git a/pkg/i18n/locales/es.po b/pkg/i18n/locales/es.po index 289aff9f..7e0924b0 100644 --- a/pkg/i18n/locales/es.po +++ b/pkg/i18n/locales/es.po @@ -2,10 +2,11 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" -"POT-Creation-Date: 2026-03-03 01:02+0100\n" +"POT-Creation-Date: 2026-04-11 11:34+0200\n" "PO-Revision-Date: 2026-02-28 13:52+0000\n" "Last-Translator: chasqui \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -100,7 +101,8 @@ msgstr "" " abra aplicacion secreto insertar 1312.net my_secret v1 secreto.txt -f\n" "\n" " # insertar secreto desde stdin\n" -" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net my_secret v1" +" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net " +"my_secret v1" #: cli/app/list.go:54 msgid "" @@ -151,7 +153,8 @@ msgstr "" " 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" +" 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" @@ -164,7 +167,8 @@ msgid "" " # pull lost app .env file\n" " abra app env pull my.gitea.net --server 1312.net" msgstr "" -" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones locales\n" +" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones " +"locales\n" " abra aplicacion entorno obtener 1312.net --force\n" "\n" " # Extraer el archivo .env perdido de la aplicación\n" @@ -390,8 +394,12 @@ msgstr "%s se ha escalado a 1" #: pkg/catalogue/catalogue.go:40 #, c-format -msgid "%s has locally unstaged changes? please commit/remove your changes before proceeding" -msgstr "¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus cambios antes de continuar" +msgid "" +"%s has locally unstaged changes? please commit/remove your changes before " +"proceeding" +msgstr "" +"¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus " +"cambios antes de continuar" #: cli/internal/recipe.go:114 #, c-format @@ -411,7 +419,9 @@ msgstr "%s no tiene secretos para generar, omitiendo..." #: pkg/recipe/compose.go:107 #, c-format msgid "%s has no version label? try running \"abra recipe sync %s\" first?" -msgstr "¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta sincronizar %s\" primero?" +msgstr "" +"¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta " +"sincronizar %s\" primero?" #: pkg/secret/pass.go:29 #, c-format @@ -512,13 +522,18 @@ msgstr "%s eliminado del almacén de contraseñas" #: cli/app/new.go:220 #, c-format -msgid "%s requires secret generation before deploy, run \"abra app secret generate %s --all\"" -msgstr "%s requiere generación de secretos antes del despliegue, ejecuta \"abra aplicacion secreto generar %s --all\"" +msgid "" +"%s requires secret generation before deploy, run \"abra app secret generate " +"%s --all\"" +msgstr "" +"%s requiere generación de secretos antes del despliegue, ejecuta \"abra " +"aplicacion secreto generar %s --all\"" #: cli/app/new.go:224 #, c-format msgid "%s requires secret insertion before deploy (#generate=false)" -msgstr "%s requiere inserción de secretos antes del despliegue (#generate=false)" +msgstr "" +"%s requiere inserción de secretos antes del despliegue (#generate=false)" #: cli/app/new.go:151 #, c-format @@ -666,8 +681,12 @@ msgid "'%s' is not a known version for %s" msgstr "'%s' no es una versión conocida para %s" #: cli/app/volume.go:175 -msgid "'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode is enabled" -msgstr "'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, el modo vim está activado" +msgid "" +"'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode " +"is enabled" +msgstr "" +"'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, " +"el modo vim está activado" #: cli/app/cmd.go:125 #, c-format @@ -691,27 +710,35 @@ msgstr "Se utiliza una plantilla de receta gestionada por la comunidad." msgid "" "A recipe is a blueprint for an app.\n" "\n" -"It is a bunch of config files which describe how to deploy and maintain an app.\n" +"It is a bunch of config files which describe how to deploy and maintain an " +"app.\n" "Recipes are maintained by the Co-op Cloud community and you can use Abra to\n" "read them, deploy them and create apps for you.\n" "\n" -"Anyone who uses a recipe can become a maintainer. Maintainers typically make\n" -"sure the recipe is in good working order and the config upgraded in a timely\n" +"Anyone who uses a recipe can become a maintainer. Maintainers typically " +"make\n" +"sure the recipe is in good working order and the config upgraded in a " +"timely\n" "manner." msgstr "" "Una receta son las instrucciones para crear una aplicación.\n" "\n" -"Es un conjunto de archivos de configuración, que describen cómo desplegar y mantener una aplicación.\n" -"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra para\n" +"Es un conjunto de archivos de configuración, que describen cómo desplegar y " +"mantener una aplicación.\n" +"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra " +"para\n" "leerlas, desplegarlas y crear aplicaciones para ti.\n" "\n" -"Cualquiera que use una receta puede convertirse en mantenedor. Los mantenedores típicamente se\n" -"aseguran de que la receta funcione correctamente y de que la configuración se actualice de manera oportuna." +"Cualquiera que use una receta puede convertirse en mantenedor. Los " +"mantenedores típicamente se\n" +"aseguran de que la receta funcione correctamente y de que la configuración " +"se actualice de manera oportuna." #: cli/app/remove.go:57 #, c-format msgid "ALERTA ALERTA: deleting %s data and config (local/remote)" -msgstr "ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" +msgstr "" +"ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" #. translators: Short description for `server add` command #: cli/server/add.go:30 @@ -723,7 +750,8 @@ msgid "" "Add a new server to your configuration so that it can be managed by Abra.\n" "\n" "Abra relies on the standard SSH command-line and ~/.ssh/config for client\n" -"connection details. You must configure an entry per-host in your ~/.ssh/config\n" +"connection details. You must configure an entry per-host in your ~/.ssh/" +"config\n" "for each server:\n" "\n" " Host 1312.net 1312\n" @@ -732,15 +760,19 @@ msgid "" " Port 12345\n" " IdentityFile ~/.ssh/antifa@somewhere\n" "\n" -"If \"--local\" is passed, then Abra assumes that the current local server is\n" -"intended as the target server. This is useful when you want to have your entire\n" +"If \"--local\" is passed, then Abra assumes that the current local server " +"is\n" +"intended as the target server. This is useful when you want to have your " +"entire\n" "Co-op Cloud config located on the server itself, and not on your local\n" "developer machine. The domain is then set to \"default\"." msgstr "" -"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado por Abra.\n" +"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado " +"por Abra.\n" "\n" "Para agregar servidor Remoto:\n" -"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de conexión al servidor. \n" +"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de " +"conexión al servidor. \n" "Debes configurar una entrada en ~/.ssh/config para cada servidor:\n" "\n" " Host 1312.net 1312\n" @@ -750,13 +782,15 @@ msgstr "" " IdentityFile ~/.ssh/antifa@1312.net\n" "\n" "Para agregar servidor local;\n" -"Si agregas \"--local\", Abra asumirá que la computadora local actual es el servidor que quieres agregar. \n" +"Si agregas \"--local\", Abra asumirá que la computadora local actual es el " +"servidor que quieres agregar. \n" "Esto es útil cuando quieres tener Abra en el mismo servidor. \n" "El dominio se establece entonces como \"default\"." #: cli/app/labels.go:33 msgid "Both local recipe and live deployment labels are shown." -msgstr "Se muestran tanto la receta local como las etiquetas del despliegue en vivo." +msgstr "" +"Se muestran tanto la receta local como las etiquetas del despliegue en vivo." #: 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:414 @@ -820,12 +854,16 @@ msgstr "💕 Clona la 📜 receta(s) en local" msgid "" "Compare env vars in both the app \".env\" and recipe \".env.sample\" file.\n" "\n" -"The goal is to ensure that recipe \".env.sample\" env vars are defined in your\n" -"app \".env\" file. Only env var definitions in the \".env.sample\" which are\n" -"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not include\n" +"The goal is to ensure that recipe \".env.sample\" env vars are defined in " +"your\n" +"app \".env\" file. Only env var definitions in the \".env.sample\" which " +"are\n" +"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not " +"include\n" "these env vars, then \"check\" will complain.\n" "\n" -"Recipe maintainers may or may not provide defaults for env vars within their\n" +"Recipe maintainers may or may not provide defaults for env vars within " +"their\n" "recipes regardless of commenting or not (e.g. through the use of\n" "${FOO:} syntax). \"check\" does not confirm or deny this for you." msgstr "" @@ -868,24 +906,31 @@ msgstr "Crea una nueva 📸 instantánea (respaldo)" msgid "" "Create a new version of a recipe.\n" "\n" -"These versions are then published on the Co-op Cloud recipe catalogue. These\n" +"These versions are then published on the Co-op Cloud recipe catalogue. " +"These\n" "versions take the following form:\n" "\n" " a.b.c+x.y.z\n" "\n" -"Where the \"a.b.c\" part is a semantic version determined by the maintainer. The\n" -"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main container\n" +"Where the \"a.b.c\" part is a semantic version determined by the maintainer. " +"The\n" +"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main " +"container\n" "which contains the software to be used, by naming convention).\n" "\n" "We maintain a semantic versioning scheme (\"a.b.c\") alongside the recipe\n" -"versioning scheme (\"x.y.z\") in order to maximise the chances that the nature of\n" +"versioning scheme (\"x.y.z\") in order to maximise the chances that the " +"nature of\n" "recipe updates are properly communicated. I.e. developers of an app might\n" -"publish a minor version but that might lead to changes in the recipe which are\n" +"publish a minor version but that might lead to changes in the recipe which " +"are\n" "major and therefore require intervention while doing the upgrade work.\n" "\n" "This command will publish your new release to git.coopcloud.tech. This\n" -"requires that you have permission to git push to these repositories and have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" +"requires that you have permission to git push to these repositories and " +"have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to " +"add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -901,14 +946,20 @@ msgstr "" "Donde \"a.b.c\" es la versión semántica que decide el mantenedor. La parte \n" "\"x.y.z\" es la versión semántica oficial de la imagen de la aplicación .\n" "\n" -"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta (\"x.y.z\") \n" -"para que sea más claro qué tipo de cambios trae cada actualización. Por ejemplo, \n" -"los desarrolladores de una aplicación pueden publicar una versión menor, pero \n" -"la receta podría necesitar cambios importantes que requieran atención al actualizar.\n" +"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta " +"(\"x.y.z\") \n" +"para que sea más claro qué tipo de cambios trae cada actualización. Por " +"ejemplo, \n" +"los desarrolladores de una aplicación pueden publicar una versión menor, " +"pero \n" +"la receta podría necesitar cambios importantes que requieran atención al " +"actualizar.\n" "\n" "Este comando publicará tu nuevo release en git.coopcloud.tech. Necesitas \n" -"permiso para hacer git push en esos repositorios y tener tus claves SSH configuradas \n" -"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu contraseña antes \n" +"permiso para hacer git push en esos repositorios y tener tus claves SSH " +"configuradas \n" +"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu " +"contraseña antes \n" "de ejecutar:\n" "\n" " eval `ssh-agent`\n" @@ -925,21 +976,27 @@ msgid "" "This new app configuration is stored in your $ABRA_DIR directory under the\n" "appropriate server.\n" "\n" -"This command does not deploy your app for you. You will need to run \"abra app\n" +"This command does not deploy your app for you. You will need to run \"abra " +"app\n" "deploy \" to do so.\n" "\n" -"You can see what recipes are available (i.e. values for the [recipe] argument)\n" +"You can see what recipes are available (i.e. values for the [recipe] " +"argument)\n" "by running \"abra recipe ls\".\n" "\n" "Recipe commit hashes are supported values for \"[version]\".\n" "\n" -"Passing the \"--secrets/-S\" flag will automatically generate secrets for your\n" +"Passing the \"--secrets/-S\" flag will automatically generate secrets for " +"your\n" "app and store them encrypted at rest on the chosen target server. These\n" -"generated secrets are only visible at generation time, so please take care to\n" +"generated secrets are only visible at generation time, so please take care " +"to\n" "store them somewhere safe.\n" "\n" -"You can use the \"--pass/-P\" to store these generated passwords locally in a\n" -"pass store (see passwordstore.org for more). The pass command must be available\n" +"You can use the \"--pass/-P\" to store these generated passwords locally in " +"a\n" +"pass store (see passwordstore.org for more). The pass command must be " +"available\n" "on your $PATH." msgstr "" "Crea una nueva aplicación a partir de una receta.\n" @@ -949,13 +1006,15 @@ msgstr "" "Ojo: Este comando no despliega la aplicación.\n" "\n" "Si pasas la opción \"--secrets/-S\" se generarán automáticamente secretos \n" -"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos secretos \n" +"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos " +"secretos \n" "generados solo se muestran al momento de crearlos, así que guárdalos \n" "en un lugar seguro.\n" "\n" "Los hashes de commit de la receta son valores válidos para \"[version]\".\n" "\n" -"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas localmente \n" +"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas " +"localmente \n" "en un almacén pass (ver passwordstore.org). El comando pass debe estar \n" "disponible en tu $PATH." @@ -989,9 +1048,11 @@ msgstr "📤 Despliega una 🚀 aplicación" msgid "" "Deploy an app.\n" "\n" -"This command supports chaos operations. Use \"--chaos/-C\" to deploy your recipe\n" +"This command supports chaos operations. Use \"--chaos/-C\" to deploy your " +"recipe\n" "checkout as-is. Recipe commit hashes are also supported as values for\n" -"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos operations." +"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos " +"operations." msgstr "" "Despliega una aplicación.\n" "\n" @@ -1014,7 +1075,8 @@ msgstr "⬇️ Descarga una 📸 instantánea" msgid "" "Downloads a backup.tar.gz to the current working directory.\n" "\n" -"\"--volumes/-v\" includes data contained in volumes alongide paths specified in\n" +"\"--volumes/-v\" includes data contained in volumes alongide paths specified " +"in\n" "\"backupbot.backup.path\" labels." msgstr "" "Descarga un backup.tar.gz al directorio de trabajo actual.\n" @@ -1058,21 +1120,28 @@ msgstr "NOMBRE GENERADO" msgid "" "Generate a new copy of the recipe catalogue.\n" "\n" -"N.B. this command **will** wipe local unstaged changes from your local recipes\n" -"if present. \"--chaos/-C\" on this command refers to the catalogue repository\n" -"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose your\n" +"N.B. this command **will** wipe local unstaged changes from your local " +"recipes\n" +"if present. \"--chaos/-C\" on this command refers to the catalogue " +"repository\n" +"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose " +"your\n" "changes.\n" "\n" "It is possible to generate new metadata for a single recipe by passing\n" "[recipe]. The existing local catalogue will be updated, not overwritten.\n" "\n" -"It is quite easy to get rate limited by Docker Hub when running this command.\n" -"If you have a Hub account you can \"docker login\" and Abra will automatically\n" +"It is quite easy to get rate limited by Docker Hub when running this " +"command.\n" +"If you have a Hub account you can \"docker login\" and Abra will " +"automatically\n" "use those details.\n" "\n" "Publish your new release to git.coopcloud.tech with \"--publish/-p\". This\n" -"requires that you have permission to git push to these repositories and have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" +"requires that you have permission to git push to these repositories and " +"have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to " +"add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -1110,7 +1179,8 @@ msgid "" msgstr "" "Genera un informe de todas las aplicaciones gestionadas.\n" "\n" -"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre el estado de despliegue." +"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre " +"el estado de despliegue." #: cli/app/new.go:317 msgid "Generate app secrets?" @@ -1139,7 +1209,8 @@ msgstr "📋 Muestra el catálogo de 📜 recetas" #: pkg/recipe/git.go:459 #, c-format msgid "GetRecipeVersions encountered error for %s: %s (collected %d versions)" -msgstr "GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" +msgstr "" +"GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" #: cli/recipe/new.go:125 msgid "Git (user) name to do commits with" @@ -1289,17 +1360,22 @@ msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas" msgid "" "Move an app to a differnt server.\n" "\n" -"This command will migrate an app config and copy secrets and volumes from the\n" -"old server to the new one. The app MUST be deployed on the old server before\n" +"This command will migrate an app config and copy secrets and volumes from " +"the\n" +"old server to the new one. The app MUST be deployed on the old server " +"before\n" "doing the move. The app will be undeployed from the current server but not\n" "deployed on the new server.\n" "\n" -"The \"tar\" command is required on both the old and new server as well as \"sudo\"\n" +"The \"tar\" command is required on both the old and new server as well as " +"\"sudo\"\n" "permissions. The \"rsync\" command is required on your local machine for\n" "transferring volumes.\n" "\n" -"Do not forget to update your DNS records. Don't panic, it might take a while\n" -"for the dust to settle after you move an app. If anything goes wrong, you can\n" +"Do not forget to update your DNS records. Don't panic, it might take a " +"while\n" +"for the dust to settle after you move an app. If anything goes wrong, you " +"can\n" "always move the app config file to the original server and deploy it there\n" "again. No data is removed from the old server.\n" "\n" @@ -1324,7 +1400,8 @@ msgstr "" "de vuelta al servidor original y desplegarlo otra vez. No se elimina \n" "ningún dato del servidor antiguo.\n" "\n" -"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se moverán." +"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se " +"moverán." #. translators: Short description for `app move` command #: cli/app/move.go:41 @@ -1381,7 +1458,8 @@ msgstr "🧹 Limpiar recursos en un 🕋 servidor" msgid "" "Prunes unused containers, networks, and dangling images.\n" "\n" -"Use \"--volumes/-v\" to remove volumes that are not associated with a deployed\n" +"Use \"--volumes/-v\" to remove volumes that are not associated with a " +"deployed\n" "app. This can result in unwanted data loss if not used carefully." msgstr "" "Elimina contenedores, redes e imágenes que no se usan.\n" @@ -1393,13 +1471,16 @@ msgstr "" #. translators: Short description for `app env pull` command #: cli/app/env.go:80 msgid "Pull app environment values from a deployed app" -msgstr "Obtener (pull) valores de entorno de la aplicación desde una aplicación desplegada" +msgstr "" +"Obtener (pull) valores de entorno de la aplicación desde una aplicación " +"desplegada" #: cli/app/env.go:81 msgid "" "Pull app environment values from a deploymed app.\n" "\n" -"A convenient command for when you've lost your app environment file or want to\n" +"A convenient command for when you've lost your app environment file or want " +"to\n" "synchronize your local app environment values with what is deployed live." msgstr "" "Extrae los valores de entorno de una aplicación desplegada.\n" @@ -1435,7 +1516,8 @@ msgid "" "Remove a managed server.\n" "\n" "Abra will remove the internal bookkeeping ($ABRA_DIR/servers/...) and\n" -"underlying client connection context. This server will then be lost in time,\n" +"underlying client connection context. This server will then be lost in " +"time,\n" "like tears in rain." msgstr "" "Eliminar un servidor gestionado.\n" @@ -1457,7 +1539,8 @@ msgstr "💀 Borrar completamente una 🚀 aplicación (local y remotamente)" #. translators: Short description for `recipe reset` command #: cli/recipe/reset.go:23 msgid "Remove all unstaged changes from recipe config" -msgstr "💀 Borra los cambios no actualizados de la configuración de la 📜 receta" +msgstr "" +"💀 Borra los cambios no actualizados de la configuración de la 📜 receta" #: cli/app/remove.go:29 msgid "" @@ -1466,16 +1549,19 @@ msgid "" "By default, it will prompt for confirmation before proceeding. All secrets,\n" "volumes and the local app env file will be deleted.\n" "\n" -"Only run this command when you are sure you want to completely remove the app\n" +"Only run this command when you are sure you want to completely remove the " +"app\n" "and all associated app data. This is a destructive action, Be Careful!\n" "\n" "If you would like to delete specific volumes or secrets, please use removal\n" "sub-commands under \"app volume\" and \"app secret\" instead.\n" "\n" -"Please note, if you delete the local app env file without removing volumes and\n" +"Please note, if you delete the local app env file without removing volumes " +"and\n" "secrets first, Abra will *not* be able to help you remove them afterwards.\n" "\n" -"To delete everything without prompt, use the \"--force/-f\" or the \"--no-input/n\"\n" +"To delete everything without prompt, use the \"--force/-f\" or the \"--no-" +"input/n\"\n" "flag." msgstr "" "Elimina todo lo relacionado con una aplicación que ya está plegada.\n" @@ -1506,11 +1592,14 @@ msgstr "💀 Elimina 📦 volúmen(es) asociados a una 🚀 aplicación" msgid "" "Remove volumes associated with an app.\n" "\n" -"The app in question must be undeployed before you try to remove volumes. See\n" +"The app in question must be undeployed before you try to remove volumes. " +"See\n" "\"abra app undeploy \" for more.\n" "\n" -"The command is interactive and will show a multiple select input which allows\n" -"you to make a seclection. Use the \"?\" key to see more help on navigating this\n" +"The command is interactive and will show a multiple select input which " +"allows\n" +"you to make a seclection. Use the \"?\" key to see more help on navigating " +"this\n" "interface.\n" "\n" "Passing \"--force/-f\" will select all volumes for removal. Be careful." @@ -1546,19 +1635,25 @@ msgstr "⏪ Revertir una 🚀 aplicación una versión anterior" #. translators: Short description for `app run` command #: cli/app/run.go:30 msgid "Run a command inside a service container" -msgstr "Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" +msgstr "" +"Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" #: cli/app/cmd.go:31 msgid "" "Run an app specific command.\n" "\n" -"These commands are bash functions, defined in the abra.sh of the recipe itself.\n" -"They can be run within the context of a service (e.g. app) or locally on your\n" +"These commands are bash functions, defined in the abra.sh of the recipe " +"itself.\n" +"They can be run within the context of a service (e.g. app) or locally on " +"your\n" "work station by passing \"--local/-l\".\n" "\n" -"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-l\") must\n" -"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" +"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-" +"l\") must\n" +"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" @@ -1709,8 +1804,10 @@ msgid "" "Arbitrary secret insertion is not supported. Secrets that are inserted must\n" "match those configured in the recipe beforehand.\n" "\n" -"This command can be useful when you want to manually generate secrets for an app\n" -"environment. Typically, you can let Abra generate them for you on app creation\n" +"This command can be useful when you want to manually generate secrets for an " +"app\n" +"environment. Typically, you can let Abra generate them for you on app " +"creation\n" "(see \"abra app new --secrets/-S\" for more)." msgstr "" "Este comando inserta un secreto en el entorno de una aplicación.\n" @@ -1761,17 +1858,22 @@ msgstr "" msgid "" "This command rolls an app back to a previous version.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only " +"recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a specific\n" +"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a " +"specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what downgrades\n" -"are available. The live deployment version is the \"source of truth\" in this\n" +"Only the deployed version is consulted when trying to determine what " +"downgrades\n" +"are available. The live deployment version is the \"source of truth\" in " +"this\n" "case. The stored .env version is not consulted.\n" "\n" -"A downgrade can be destructive, please ensure you have a copy of your app data\n" +"A downgrade can be destructive, please ensure you have a copy of your app " +"data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Este comando revierte una aplicación a una versión anterior.\n" @@ -1795,7 +1897,8 @@ msgstr "" msgid "" "This does not destroy any application data.\n" "\n" -"However, you should remain vigilant, as your swarm installation will consider\n" +"However, you should remain vigilant, as your swarm installation will " +"consider\n" "any previously attached volumes as eligible for pruning once undeployed.\n" "\n" "Passing \"--prune/-p\" does not remove those volumes." @@ -1821,7 +1924,8 @@ msgid "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" +"abra\n" "\n" "Zsh:\n" " # If shell autocompletion is not already enabled in your environment,\n" @@ -1857,7 +1961,8 @@ msgstr "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" +"abra\n" "\n" "Zsh:\n" " # Si la autocompletación no está habilitada, actívala una vez:\n" @@ -1908,7 +2013,8 @@ msgid "" "It will update the relevant compose file tags on the local file system.\n" "\n" "Some image tags cannot be parsed because they do not follow some sort of\n" -"semver-like convention. In this case, all possible tags will be listed and it\n" +"semver-like convention. In this case, all possible tags will be listed and " +"it\n" "is up to the end-user to decide.\n" "\n" "The command is interactive and will show a select input which allows you to\n" @@ -1940,8 +2046,10 @@ msgid "" "\n" "By default, the latest stable release is downloaded.\n" "\n" -"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind that\n" -"it may contain absolutely catastrophic deal-breaker bugs. Thank you very much\n" +"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind " +"that\n" +"it may contain absolutely catastrophic deal-breaker bugs. Thank you very " +"much\n" "for the testing efforts 💗" msgstr "" "Actualiza abra in situ con la última versión estable \n" @@ -1962,17 +2070,22 @@ msgstr "📨 Actualizar una 🚀 aplicación" msgid "" "Upgrade an app.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only " +"recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a specific\n" +"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a " +"specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what upgrades\n" -"are available. The live deployment version is the \"source of truth\" in this\n" +"Only the deployed version is consulted when trying to determine what " +"upgrades\n" +"are available. The live deployment version is the \"source of truth\" in " +"this\n" "case. The stored .env version is not consulted.\n" "\n" -"An upgrade can be destructive, please ensure you have a copy of your app data\n" +"An upgrade can be destructive, please ensure you have a copy of your app " +"data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Actualizar una aplicación.\n" @@ -2011,19 +2124,26 @@ msgid "" "Examples:\n" "{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n" -" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n" +"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name " +"\"help\"))}}\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" -" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n" +"Additional help topics:{{range .Commands}}" +"{{if .IsAdditionalHelpTopicCommand}}\n" +" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}" +"{{if .HasAvailableSubCommands}}\n" "\n" -"Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n" +"Use \"{{.CommandPath}} [command] --help\" for more information about a " +"command.{{end}}\n" msgstr "" "Uso:{{if .Runnable}}\n" " {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n" @@ -2038,23 +2158,34 @@ msgstr "" "\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" +"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" +"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}" +"{{if .HasAvailableInheritedFlags}}\n" "\n" "Opciones globales:\n" -"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\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" +"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" +"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." -msgstr "Usando \"--force/-f\", Git sincroniza una receta existente. No borra los cambios no preparados." +msgid "" +"Using \"--force/-f\" Git syncs an existing recipe. It does not erase " +"unstaged changes." +msgstr "" +"Usando \"--force/-f\", Git sincroniza una receta existente. No borra los " +"cambios no preparados." #: cli/app/secret.go:117 msgid "VALUE" @@ -2085,20 +2216,27 @@ msgstr "[hijack] Fin de stdout" #, c-format msgid "" "\n" -"The following options are two types of initial semantic version that you can\n" -"pick for %s that will be published in the recipe catalogue. This follows the\n" +"The following options are two types of initial semantic version that you " +"can\n" +"pick for %s that will be published in the recipe catalogue. This follows " +"the\n" "semver convention (more on https://semver.org), here is a short cheatsheet\n" "\n" -" 0.1.0: development release, still hacking. when you make a major upgrade\n" -" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move to\n" +" 0.1.0: development release, still hacking. when you make a major " +"upgrade\n" +" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move " +"to\n" " using the \"x\" part when things are stable.\n" "\n" " 1.0.0: public release, assumed to be working. you already have a stable\n" -" and reliable deployment of this app and feel relatively confident\n" +" and reliable deployment of this app and feel relatively " +"confident\n" " about it.\n" "\n" -"If you want people to be able alpha test your current config for %s but don't\n" -"think it is quite reliable, go with 0.1.0 and people will know that things are\n" +"If you want people to be able alpha test your current config for %s but " +"don't\n" +"think it is quite reliable, go with 0.1.0 and people will know that things " +"are\n" "likely to change.\n" "\n" msgstr "" @@ -2109,7 +2247,8 @@ msgstr "" "Resumen rápido:\n" "\n" " 0.1.0: versión de desarrollo, todavía en prueba. Cuando hagas una \n" -"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás a \n" +"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás " +"a \n" "usar la parte \"x\" cuando las cosas estén estables.\n" "\n" " 1.0.0: versión pública, se asume que funciona. Ya tienes un \n" @@ -2127,7 +2266,8 @@ msgid "" "\n" "You need to make a decision about what kind of an update this new recipe\n" "version is. If someone else performs this upgrade, do they have to do some\n" -"migration work or take care of some breaking changes? This can be signaled in\n" +"migration work or take care of some breaking changes? This can be signaled " +"in\n" "the version you specify on the recipe deploy label and is called a semantic\n" "version.\n" "\n" @@ -2137,21 +2277,27 @@ msgid "" "\n" "Here is a semver cheat sheet (more on https://semver.org):\n" "\n" -" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> 2.0.0).\n" -" the upgrade won't work without some preparation work and others need\n" +" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> " +"2.0.0).\n" +" the upgrade won't work without some preparation work and others " +"need\n" " to take care when performing it. \"it could go wrong\".\n" "\n" -" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> 0.2.0).\n" -" the upgrade should Just Work and there are no breaking changes in\n" +" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> " +"0.2.0).\n" +" the upgrade should Just Work and there are no breaking changes " +"in\n" " the app and the recipe config. \"it should go fine\".\n" "\n" -" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this upgrade\n" +" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this " +"upgrade\n" " should also Just Work and is mostly to do with minor bug fixes\n" " and/or security patches. \"nothing to worry about\".\n" "\n" msgstr "" "\n" -"Necesitas decidir qué tipo de actualización es esta nueva versión de la receta. \n" +"Necesitas decidir qué tipo de actualización es esta nueva versión de la " +"receta. \n" "Si otra persona realiza esta actualización, ¿tendrá que hacer migraciones \n" "o atender cambios incompatibles? Eso se indica con la versión semántica \n" "que especifiques en la etiqueta de despliegue de la receta.\n" @@ -2162,17 +2308,25 @@ msgstr "" "\n" "Semántica de semver (más en https://semver.org):\n" "\n" -" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 -> 2.0.0).\n" -" la actualización no funcionará sin trabajo de preparación y otros deben\n" +" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 " +"-> 2.0.0).\n" +" la actualización no funcionará sin trabajo de preparación y otros " +"deben\n" " tener cuidado al realizarla. \"podría salir mal\".\n" "\n" -" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -> 0.2.0).\n" -" la actualización debería funcionar sin problemas y no hay cambios\n" -" incompatibles en la app ni en la configuración de la receta. \"debería ir bien\".\n" +" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 " +"-> 0.2.0).\n" +" la actualización debería funcionar sin problemas y no hay " +"cambios\n" +" incompatibles en la app ni en la configuración de la receta. " +"\"debería ir bien\".\n" "\n" -" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> 0.0.2).\n" -" esta actualización también debería funcionar sin problemas y trata\n" -" principalmente de arreglos menores y/o parches de seguridad. \"nada de qué preocuparse\".\n" +" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> " +"0.0.2).\n" +" esta actualización también debería funcionar sin problemas y " +"trata\n" +" principalmente de arreglos menores y/o parches de seguridad. " +"\"nada de qué preocuparse\".\n" "\n" #: pkg/lint/recipe.go:203 @@ -2338,7 +2492,9 @@ msgstr "aplicacion [comando] [argumento] [opciones]" #: pkg/dns/dns.go:52 #, c-format 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)?" +msgstr "" +"¿El dominio de la aplicación %s (%s) no parece resolverse al servidor de la " +"aplicación %s (%s)?" #: cli/recipe/release.go:349 msgid "app service is missing image tag?" @@ -2494,7 +2650,9 @@ msgstr "cancelado" #: pkg/catalogue/catalogue.go:59 pkg/recipe/git.go:251 #, c-format msgid "cannot ensure %s is up-to-date, no git remotes configured" -msgstr "no se puede asegurar que %s esté actualizado, no hay remotos de git configurados" +msgstr "" +"no se puede asegurar que %s esté actualizado, no hay remotos de git " +"configurados" #: cli/app/config.go:43 pkg/app/app.go:52 #, c-format @@ -2508,17 +2666,24 @@ msgstr "no se puede obtener la etiqueta %s para %s" #: pkg/recipe/git.go:58 #, c-format -msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" -msgstr "no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"?" +msgid "" +"cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" +msgstr "" +"no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención " +"usar \"--caos\"?" #: cli/app/deploy.go:388 #, c-format 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\"" +"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\"? \n" -"para volver a un lanzamiento regular, especifica una etiqueta de lanzamiento, SHA de commit o agrega el comando \"--latest\"" +"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 @@ -2527,7 +2692,8 @@ msgstr "no se puede resolver ipv4 para %s?" #: 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" +msgstr "" +"no se puede especificar una etiqueta y un tipo de incremento al mismo tiempo" #: cli/app/secret.go:68 msgid "cannot use '[secret] [version]' and '--all' together" @@ -2608,7 +2774,9 @@ msgstr "caos" #: pkg/secret/secret.go:235 #, c-format -msgid "charset=bytes only supports encoding=base64, got encoding=%s for secret %s, defaulting to base64" +msgid "" +"charset=bytes only supports encoding=base64, got encoding=%s for secret %s, " +"defaulting to base64" msgstr "" #. translators: `app check` command @@ -2691,13 +2859,21 @@ msgstr "el comando %v no salió después de %v: stderr=%q" #: pkg/upstream/commandconn/commandconn.go:172 #, c-format -msgid "command %v has exited with %v, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s" -msgstr "el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" +msgid "" +"command %v has exited with %v, please make sure the URL is valid, and Docker " +"18.09 or later is installed on the remote host: stderr=%s" +msgstr "" +"el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida " +"y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" #. translators: `app command` command #: cli/app/cmd.go:27 -msgid "command [service | --local] [[args] [flags] | [flags] -- [args]]" -msgstr "ejecutar [servicio | --local] [[argumento] [opciones] | [opciones] -- [argumento]]" +msgid "" +"command [service | --local] [[args] [flags] | [flags] -- " +"[args]]" +msgstr "" +"ejecutar [servicio | --local] [[argumento] [opciones] " +"| [opciones] -- [argumento]]" #: pkg/upstream/commandconn/commandconn.go:239 #, c-format @@ -2781,12 +2957,15 @@ msgstr "tiempo de conexión agotado para %s" #: pkg/recipe/compose.go:191 #, c-format msgid "considering %s config(s) for label update" -msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas" +msgstr "" +"considerando la(s) configuración(es) %s para la actualización de etiquetas" #: pkg/recipe/compose.go:123 #, c-format msgid "considering %s config(s) for tag update" -msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas (tags)" +msgstr "" +"considerando la(s) configuración(es) %s para la actualización de etiquetas " +"(tags)" #: cli/app/undeploy.go:141 cli/server/prune.go:53 #, c-format @@ -3091,7 +3270,8 @@ msgstr "no solicitar un TTY" #: pkg/ssh/ssh.go:26 msgid "docker: is the daemon running / your user has docker permissions?" -msgstr "docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" +msgstr "" +"docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" #: cli/app/new.go:382 msgid "domain" @@ -3149,7 +3329,8 @@ msgstr "ejecución de prueba: no se creó etiqueta de git (%s)" #: 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" +msgstr "" +"ejecución de prueba: no se sincronizará la etiqueta %s para la receta %s" #: pkg/git/remote.go:15 #, c-format @@ -3187,11 +3368,14 @@ msgstr "habilitar ejecución de comandos pre/post-hook" #: cli/internal/validate.go:82 #, c-format msgid "ensure %s recipe compose.* files include \"version: '3.8'\"" -msgstr "asegúrate de que los archivos compose.* de la receta %s incluyan \"version: '3.8'\"" +msgstr "" +"asegúrate de que los archivos compose.* de la receta %s incluyan \"version: " +"'3.8'\"" #: pkg/lint/recipe.go:69 msgid "ensure 'version: \"3.8\"' in compose configs" -msgstr "asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" +msgstr "" +"asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" #: pkg/lint/recipe.go:163 msgid "ensure \"image: ...\" set on all services" @@ -3208,8 +3392,12 @@ msgid "ensuring env version %s" msgstr "asegurando la versión del entorno (env) %s" #: cli/recipe/upgrade.go:285 -msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled" -msgstr "presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta etiqueta; modo vim habilitado" +msgid "" +"enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode " +"is enabled" +msgstr "" +"presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta " +"etiqueta; modo vim habilitado" #. translators: `app env` command group #: cli/app/env.go:311 @@ -3322,12 +3510,14 @@ msgstr "🛑 error al hacer commit: %s" #: cli/app/move.go:167 #, c-format msgid "failed to copy %s from %s to local machine: output:%s err:%s" -msgstr "🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" +msgstr "" +"🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" #: cli/app/move.go:173 #, c-format msgid "failed to copy %s from local machine to %s: output:%s err:%s" -msgstr "🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" +msgstr "" +"🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" #: pkg/upstream/stack/stack.go:535 #, c-format @@ -3459,7 +3649,8 @@ msgstr "🛑 No se pudo obtener el último commit de %s: %s" #: pkg/upstream/stack/stack.go:472 #, c-format msgid "failed to retrieve registry auth for image %s: %s" -msgstr "🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" +msgstr "" +"🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" #: pkg/git/branch.go:68 #, c-format @@ -3600,7 +3791,9 @@ msgstr "catálogo de recetas generado: %s" #: cli/app/secret.go:145 #, c-format msgid "generated secrets %s shown again, please take note of them %s" -msgstr "los secretos generados %s; se muestran nuevamente, por favor toma nota de ellos %s" +msgstr "" +"los secretos generados %s; se muestran nuevamente, por favor toma nota de " +"ellos %s" #: pkg/app/compose.go:63 #, c-format @@ -3866,7 +4059,9 @@ msgstr "incrementar la parte de parche de la versión" #: pkg/git/init.go:50 #, c-format msgid "init committed all files for new git repo in %s" -msgstr "inicializado y comiteados todos los archivos para el nuevo repositorio git en %s" +msgstr "" +"inicializado y comiteados todos los archivos para el nuevo repositorio git " +"en %s" #: pkg/git/init.go:24 #, c-format @@ -3912,22 +4107,31 @@ msgstr "fuente de enlace inválida, la fuente no puede estar vacía" #: pkg/upstream/convert/service.go:813 #, c-format msgid "invalid credential spec: cannot specify both %s and %s" -msgstr "especificación de credencial inválida: no se pueden especificar ambos %s y %s" +msgstr "" +"especificación de credencial inválida: no se pueden especificar ambos %s y %s" #: pkg/upstream/convert/service.go:815 #, c-format msgid "invalid credential spec: cannot specify both %s, and %s" -msgstr "especificación de credencial inválida: no se pueden especificar tanto %s, como %s" +msgstr "" +"especificación de credencial inválida: no se pueden especificar tanto %s, " +"como %s" #: pkg/upstream/convert/service.go:834 #, c-format -msgid "invalid credential spec: spec specifies config %v, but no such config can be found" -msgstr "especificación de credencial inválida: la especificación indica la configuración %v, pero no se puede encontrar tal configuración" +msgid "" +"invalid credential spec: spec specifies config %v, but no such config can be " +"found" +msgstr "" +"especificación de credencial inválida: la especificación indica la " +"configuración %v, pero no se puede encontrar tal configuración" #: pkg/upstream/container/hijack.go:100 #, c-format msgid "invalid detach escape keys, using default: %s" -msgstr "teclas de escape de separación inválidas, utilizando el valor predeterminado: %s" +msgstr "" +"teclas de escape de separación inválidas, utilizando el valor " +"predeterminado: %s" #: pkg/lint/recipe.go:504 msgid "invalid lightweight tag detected" @@ -4114,7 +4318,8 @@ msgstr "maquina" #: cli/recipe/release.go:97 #, c-format 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?" +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:631 @@ -4215,13 +4420,23 @@ msgstr "se necesitan 3 o 4 argumentos" #: pkg/upstream/stack/stack.go:352 #, c-format -msgid "network %q is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed, which you can do by running this on the server: docker network create -d overlay proxy" -msgstr "La red %q está declarada como externa, pero no se pudo encontrar. Debes crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo en el servidor mismo con: docker network create -d overlay proxy" +msgid "" +"network %q is declared as external, but could not be found. You need to " +"create a swarm-scoped network before the stack is deployed, which you can do " +"by running this on the server: docker network create -d overlay proxy" +msgstr "" +"La red %q está declarada como externa, pero no se pudo encontrar. Debes " +"crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo " +"en el servidor mismo con: docker network create -d overlay proxy" #: pkg/upstream/stack/stack.go:356 #, c-format -msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" -msgstr "la red %q se declara como externa, pero no está en el alcance correcto: %q en lugar de \"swarm\"" +msgid "" +"network %q is declared as external, but it is not in the right scope: %q " +"instead of \"swarm\"" +msgstr "" +"la red %q se declara como externa, pero no está en el alcance correcto: %q " +"en lugar de \"swarm\"" #: cli/app/undeploy.go:148 cli/server/prune.go:60 #, c-format @@ -4261,7 +4476,8 @@ msgstr "secretos nuevos: %v" #: pkg/git/read.go:88 #, c-format msgid "no %s exists, not reading any global gitignore config" -msgstr "no existe %s, no se está leyendo ninguna configuración global de gitignore" +msgstr "" +"no existe %s, no se está leyendo ninguna configuración global de gitignore" #: pkg/git/read.go:130 #, c-format @@ -4331,7 +4547,9 @@ msgstr "no se proporcionó dominio" #: pkg/recipe/compose.go:248 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" +msgstr "" +"no se encontró ninguna etiqueta existente, la inserción automágica no es " +"compatible aún" #: cli/recipe/release.go:134 #, c-format @@ -4340,8 +4558,12 @@ msgstr "no se encontraron etiquetas de git para %s" #: cli/recipe/upgrade.go:182 #, c-format -msgid "no new versions available for %s, assuming %s is the latest (use -a/--all-tags to see all anyway)" -msgstr "no hay nuevas versiones disponibles para %s; asumiendo que %s es la más reciente (usa -a/--all-tags para ver todas)" +msgid "" +"no new versions available for %s, assuming %s is the latest (use -a/--all-" +"tags to see all anyway)" +msgstr "" +"no hay nuevas versiones disponibles para %s; asumiendo que %s es la más " +"reciente (usa -a/--all-tags para ver todas)" #: cli/internal/validate.go:64 #, c-format @@ -4352,6 +4574,11 @@ msgstr "¿no existe la receta '%s'?" msgid "no recipe name provided" msgstr "no se proporcionó el nombre de la receta" +#: cli/app/upgrade.go:241 +#, fuzzy, c-format +msgid "no release notes for upgrading from %s to %s" +msgstr "ejecución de prueba: mover la nota de la versión de 'next' a %s" + #: cli/app/secret.go:234 #, c-format msgid "no secret %s available for recipe %s?" @@ -4459,7 +4686,9 @@ msgstr "no hay suficientes argumentos: %s" #: pkg/secret/secret.go:145 msgid "not generating app secrets, none enabled in recipe config" -msgstr "no se están generando secretos de la aplicación; ninguno habilitado en la configuración de la receta" +msgstr "" +"no se están generando secretos de la aplicación; ninguno habilitado en la " +"configuración de la receta" #: cli/internal/command.go:93 msgid "not requesting a remote TTY" @@ -4472,8 +4701,12 @@ msgstr "no se actualizará %s; se omite, como fue solicitado" #: cli/recipe/upgrade.go:244 #, c-format -msgid "not upgrading from %s to %s for %s, because the upgrade type is more serious than what user wants" -msgstr "no se actualizará %s a %s para %s, porque el tipo de actualización es más serio de lo que el usuario desea" +msgid "" +"not upgrading from %s to %s for %s, because the upgrade type is more serious " +"than what user wants" +msgstr "" +"no se actualizará %s a %s para %s, porque el tipo de actualización es más " +"serio de lo que el usuario desea" #: pkg/upstream/stack/remove.go:73 #, c-format @@ -4604,7 +4837,9 @@ msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s):" #: cli/app/rollback.go:272 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" -msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: %s):" +msgstr "" +"por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: " +"%s):" #: cli/app/upgrade.go:312 #, c-format @@ -5056,7 +5291,8 @@ msgstr "versiones recuperadas del repositorio local de recetas" #: pkg/upstream/stack/stack.go:468 #, c-format msgid "retrieving docker auth token: failed create docker cli: %s" -msgstr "recuperando token de autenticación de Docker: error al crear docker cli: %s" +msgstr "" +"recuperando token de autenticación de Docker: error al crear docker cli: %s" #: pkg/recipe/recipe.go:659 msgid "retrieving recipes" @@ -5117,7 +5353,9 @@ msgstr "regla" #. translators: `app run` command #: cli/app/run.go:27 msgid "run [[args] [flags] | [flags] -- [args]]" -msgstr "lanzar [[argumento] [opciones] | [opciones] -- [argumento]]" +msgstr "" +"lanzar [[argumento] [opciones] | " +"[opciones] -- [argumento]]" #: cli/app/run.go:120 msgid "run command as user" @@ -5207,7 +5445,9 @@ msgstr "secreto [comando] [argumento] [opciones]" #: cli/app/secret.go:295 msgid "secret data not provided on command-line or stdin, prompting" -msgstr "datos del secreto no proporcionados en la línea de comandos o stdin, solicitando" +msgstr "" +"datos del secreto no proporcionados en la línea de comandos o stdin, " +"solicitando" #: pkg/upstream/convert/service.go:72 #, c-format @@ -5241,7 +5481,8 @@ msgstr "los secretos se muestran %s nuevamente, por favor guárdalos %s" #: cli/app/deploy.go:306 #, c-format msgid "selected latest recipe version: %s (from %d available versions)" -msgstr "versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" +msgstr "" +"versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" #: cli/app/new.go:121 #, c-format @@ -5257,7 +5498,8 @@ msgstr "servidor" #: pkg/app/app.go:301 #, c-format msgid "server %s doesn't exist? Run \"abra server ls\" to check" -msgstr "el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" +msgstr "" +"el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" #. translators: `server` command group #: cli/server/server.go:17 @@ -5285,7 +5527,8 @@ msgstr "falta contexto del servidor, la creación de contexto falló: %s" #: pkg/client/client.go:58 #, c-format msgid "server missing context, run \"abra server add %s\"?" -msgstr "falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" +msgstr "" +"falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" #: pkg/client/client.go:47 #, c-format @@ -5314,13 +5557,18 @@ msgstr "serverAdd: cleanUp: no se pueden listar los archivos en %s: %s" #: cli/recipe/upgrade.go:227 #, c-format -msgid "service %s is at version %s, but pinned to %s, please correct your compose.yml file manually!" -msgstr "el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige manualmente tu archivo compose.yml!" +msgid "" +"service %s is at version %s, but pinned to %s, please correct your " +"compose.yml file manually!" +msgstr "" +"el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige " +"manualmente tu archivo compose.yml!" #: cli/recipe/upgrade.go:223 #, c-format msgid "service %s, image %s pinned to %s, no compatible upgrade found" -msgstr "servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" +msgstr "" +"servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" #: cli/app/restore.go:113 msgid "services" @@ -5366,7 +5614,8 @@ msgstr "gravedad" #: cli/app/deploy.go:456 cli/app/rollback.go:379 cli/app/upgrade.go:496 msgid "show all configs & images, including unchanged ones" -msgstr "mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" +msgstr "" +"mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" #: cli/app/backup.go:273 msgid "show all paths" @@ -5467,7 +5716,8 @@ msgstr "omitiendo la etiqueta %s: configuración de compose inválida: %s" #: pkg/recipe/git.go:432 #, c-format msgid "skipping tag %s: invalid image reference in service %s: %s" -msgstr "omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" +msgstr "" +"omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" #: pkg/app/app.go:697 #, c-format @@ -5531,11 +5781,17 @@ msgstr "" #: 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" +msgstr "" +"ssh-agent no encontrado. consulta \"abra receta publicar --ayuda\" y vuelve " +"a intentarlo" #: cli/catalogue/catalogue.go:98 -msgid "ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue generate --help\"" -msgstr "ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo regenerar --ayuda\"" +msgid "" +"ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue " +"generate --help\"" +msgstr "" +"ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo " +"regenerar --ayuda\"" #: cli/app/list.go:295 cli/recipe/list.go:45 msgid "status" @@ -5801,12 +6057,16 @@ msgstr "no se pudo determinar el tipo de receta a partir de %s, env: %v" #: cli/app/env.go:106 #, c-format msgid "unable to determine server of app %s, please pass --server/-s" -msgstr "no se pudo determinar el servidor de la aplicación %s; agrega al comando --server/-s" +msgstr "" +"no se pudo determinar el servidor de la aplicación %s; agrega al comando --" +"server/-s" #: cli/recipe/upgrade.go:252 #, c-format msgid "unable to determine versioning semantics of %s, listing all tags" -msgstr "no se pudieron determinar las reglas de versionado de %s; listando todas las etiquetas" +msgstr "" +"no se pudieron determinar las reglas de versionado de %s; listando todas las " +"etiquetas" #: cli/recipe/fetch.go:71 #, c-format @@ -5881,7 +6141,8 @@ msgstr "no se pudo abrir el work tree de %s: %s" #: cli/recipe/upgrade.go:159 #, c-format msgid "unable to parse %s, error was: %s, skipping upgrade for %s" -msgstr "no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" +msgstr "" +"no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" #: pkg/recipe/compose.go:153 #, c-format @@ -5926,7 +6187,9 @@ msgstr "no se pudieron leer los remotos en %s: %s" #: cli/recipe/upgrade.go:153 #, c-format msgid "unable to read tag for image %s, is it missing? skipping upgrade for %s" -msgstr "no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo actualización para %s" +msgstr "" +"no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo " +"actualización para %s" #: cli/app/move.go:210 #, c-format @@ -5941,7 +6204,8 @@ msgstr "no se pudo eliminar el remoto predeterminado en %s: %s" #: cli/app/volume.go:158 #, c-format msgid "unable to remove volume: no volume with name '%s'?" -msgstr "no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" +msgstr "" +"no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" #: cli/app/secret.go:135 cli/app/secret.go:515 cli/recipe/list.go:83 #: cli/recipe/version.go:113 cli/server/list.go:88 @@ -6224,8 +6488,10 @@ msgstr "versión %s guardada en %s.env" #: cli/app/deploy.go:126 #, c-format -msgid "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" -msgstr "la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" +msgid "" +"version '%s' appears to be a chaos commit, but --chaos/-C was not provided" +msgstr "" +"la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" #: pkg/recipe/recipe.go:200 #, c-format @@ -6273,7 +6539,8 @@ msgstr "versión: tomando la versión desde el archivo .env: %s" #: cli/app/deploy.go:378 #, c-format msgid "version: taking version from cli arg: %s" -msgstr "versión: tomando la versión desde el argumento de la línea de comandos: %s" +msgstr "" +"versión: tomando la versión desde el argumento de la línea de comandos: %s" #. translators: `recipe versions` command #: cli/recipe/version.go:23 @@ -6460,21 +6727,31 @@ msgstr "{nombre: %s, " #, c-format #~ msgid "latest git tag (%s) and synced label (%s) are the same?" -#~ msgstr "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las mismas?" +#~ msgstr "" +#~ "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las " +#~ "mismas?" #~ msgid "no -p/--publish passed, not publishing" #~ msgstr "no pasó -p/--publish, no se publicará" #, c-format -#~ msgid "no tag specified and no previous tag available for %s, assuming initial release" -#~ msgstr "no se especificó etiqueta y no hay etiqueta previa disponible para %s; asumiendo lanzamiento inicial" +#~ msgid "" +#~ "no tag specified and no previous tag available for %s, assuming initial " +#~ "release" +#~ msgstr "" +#~ "no se especificó etiqueta y no hay etiqueta previa disponible para %s; " +#~ "asumiendo lanzamiento inicial" #, c-format #~ msgid "please fix your synced label for %s and re-run this command" -#~ msgstr "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar este comando" +#~ msgstr "" +#~ "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar " +#~ "este comando" #~ msgid "previous git tags detected, assuming new semver release" -#~ msgstr "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento semver" +#~ msgstr "" +#~ "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento " +#~ "semver" #~ msgid "publish new release?" #~ msgstr "¿publicar nueva versión?" @@ -6483,8 +6760,12 @@ msgstr "{nombre: %s, " #~ msgstr "sincronizar [version] [flags]" #, c-format -#~ msgid "unable to read version for %s from synced label. Did you try running \"abra recipe sync %s\" already?" -#~ msgstr "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya ejecutaste \"abra receta sincronizar %s\"?" +#~ msgid "" +#~ "unable to read version for %s from synced label. Did you try running " +#~ "\"abra recipe sync %s\" already?" +#~ msgstr "" +#~ "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya " +#~ "ejecutaste \"abra receta sincronizar %s\"?" #, c-format #~ msgid "use %s as the new version?" From 7a079b78de9731b90ee6f5e2c447875c61ac8a5c Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 11 Apr 2026 13:54:52 +0000 Subject: [PATCH 03/55] chore: update translation files Updated by "Update PO files to match POT (msgmerge)" add-on in Weblate. Translation: Co-op Cloud/abra Translate-URL: https://translate.coopcloud.tech/projects/co-op-cloud/abra/ --- pkg/i18n/locales/es.po | 712 +++++++++++++---------------------------- 1 file changed, 218 insertions(+), 494 deletions(-) diff --git a/pkg/i18n/locales/es.po b/pkg/i18n/locales/es.po index 7e0924b0..f4ea02d4 100644 --- a/pkg/i18n/locales/es.po +++ b/pkg/i18n/locales/es.po @@ -5,8 +5,7 @@ msgstr "" "POT-Creation-Date: 2026-04-11 11:34+0200\n" "PO-Revision-Date: 2026-02-28 13:52+0000\n" "Last-Translator: chasqui \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -101,8 +100,7 @@ msgstr "" " abra aplicacion secreto insertar 1312.net my_secret v1 secreto.txt -f\n" "\n" " # insertar secreto desde stdin\n" -" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net " -"my_secret v1" +" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net my_secret v1" #: cli/app/list.go:54 msgid "" @@ -153,8 +151,7 @@ msgstr "" " 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" +" 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" @@ -167,8 +164,7 @@ msgid "" " # pull lost app .env file\n" " abra app env pull my.gitea.net --server 1312.net" msgstr "" -" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones " -"locales\n" +" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones locales\n" " abra aplicacion entorno obtener 1312.net --force\n" "\n" " # Extraer el archivo .env perdido de la aplicación\n" @@ -394,12 +390,8 @@ msgstr "%s se ha escalado a 1" #: pkg/catalogue/catalogue.go:40 #, c-format -msgid "" -"%s has locally unstaged changes? please commit/remove your changes before " -"proceeding" -msgstr "" -"¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus " -"cambios antes de continuar" +msgid "%s has locally unstaged changes? please commit/remove your changes before proceeding" +msgstr "¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus cambios antes de continuar" #: cli/internal/recipe.go:114 #, c-format @@ -419,9 +411,7 @@ msgstr "%s no tiene secretos para generar, omitiendo..." #: pkg/recipe/compose.go:107 #, c-format msgid "%s has no version label? try running \"abra recipe sync %s\" first?" -msgstr "" -"¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta " -"sincronizar %s\" primero?" +msgstr "¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta sincronizar %s\" primero?" #: pkg/secret/pass.go:29 #, c-format @@ -522,18 +512,13 @@ msgstr "%s eliminado del almacén de contraseñas" #: cli/app/new.go:220 #, c-format -msgid "" -"%s requires secret generation before deploy, run \"abra app secret generate " -"%s --all\"" -msgstr "" -"%s requiere generación de secretos antes del despliegue, ejecuta \"abra " -"aplicacion secreto generar %s --all\"" +msgid "%s requires secret generation before deploy, run \"abra app secret generate %s --all\"" +msgstr "%s requiere generación de secretos antes del despliegue, ejecuta \"abra aplicacion secreto generar %s --all\"" #: cli/app/new.go:224 #, c-format msgid "%s requires secret insertion before deploy (#generate=false)" -msgstr "" -"%s requiere inserción de secretos antes del despliegue (#generate=false)" +msgstr "%s requiere inserción de secretos antes del despliegue (#generate=false)" #: cli/app/new.go:151 #, c-format @@ -681,12 +666,8 @@ msgid "'%s' is not a known version for %s" msgstr "'%s' no es una versión conocida para %s" #: cli/app/volume.go:175 -msgid "" -"'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode " -"is enabled" -msgstr "" -"'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, " -"el modo vim está activado" +msgid "'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode is enabled" +msgstr "'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, el modo vim está activado" #: cli/app/cmd.go:125 #, c-format @@ -710,35 +691,27 @@ msgstr "Se utiliza una plantilla de receta gestionada por la comunidad." msgid "" "A recipe is a blueprint for an app.\n" "\n" -"It is a bunch of config files which describe how to deploy and maintain an " -"app.\n" +"It is a bunch of config files which describe how to deploy and maintain an app.\n" "Recipes are maintained by the Co-op Cloud community and you can use Abra to\n" "read them, deploy them and create apps for you.\n" "\n" -"Anyone who uses a recipe can become a maintainer. Maintainers typically " -"make\n" -"sure the recipe is in good working order and the config upgraded in a " -"timely\n" +"Anyone who uses a recipe can become a maintainer. Maintainers typically make\n" +"sure the recipe is in good working order and the config upgraded in a timely\n" "manner." msgstr "" "Una receta son las instrucciones para crear una aplicación.\n" "\n" -"Es un conjunto de archivos de configuración, que describen cómo desplegar y " -"mantener una aplicación.\n" -"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra " -"para\n" +"Es un conjunto de archivos de configuración, que describen cómo desplegar y mantener una aplicación.\n" +"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra para\n" "leerlas, desplegarlas y crear aplicaciones para ti.\n" "\n" -"Cualquiera que use una receta puede convertirse en mantenedor. Los " -"mantenedores típicamente se\n" -"aseguran de que la receta funcione correctamente y de que la configuración " -"se actualice de manera oportuna." +"Cualquiera que use una receta puede convertirse en mantenedor. Los mantenedores típicamente se\n" +"aseguran de que la receta funcione correctamente y de que la configuración se actualice de manera oportuna." #: cli/app/remove.go:57 #, c-format msgid "ALERTA ALERTA: deleting %s data and config (local/remote)" -msgstr "" -"ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" +msgstr "ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" #. translators: Short description for `server add` command #: cli/server/add.go:30 @@ -750,8 +723,7 @@ msgid "" "Add a new server to your configuration so that it can be managed by Abra.\n" "\n" "Abra relies on the standard SSH command-line and ~/.ssh/config for client\n" -"connection details. You must configure an entry per-host in your ~/.ssh/" -"config\n" +"connection details. You must configure an entry per-host in your ~/.ssh/config\n" "for each server:\n" "\n" " Host 1312.net 1312\n" @@ -760,19 +732,15 @@ msgid "" " Port 12345\n" " IdentityFile ~/.ssh/antifa@somewhere\n" "\n" -"If \"--local\" is passed, then Abra assumes that the current local server " -"is\n" -"intended as the target server. This is useful when you want to have your " -"entire\n" +"If \"--local\" is passed, then Abra assumes that the current local server is\n" +"intended as the target server. This is useful when you want to have your entire\n" "Co-op Cloud config located on the server itself, and not on your local\n" "developer machine. The domain is then set to \"default\"." msgstr "" -"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado " -"por Abra.\n" +"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado por Abra.\n" "\n" "Para agregar servidor Remoto:\n" -"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de " -"conexión al servidor. \n" +"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de conexión al servidor. \n" "Debes configurar una entrada en ~/.ssh/config para cada servidor:\n" "\n" " Host 1312.net 1312\n" @@ -782,15 +750,13 @@ msgstr "" " IdentityFile ~/.ssh/antifa@1312.net\n" "\n" "Para agregar servidor local;\n" -"Si agregas \"--local\", Abra asumirá que la computadora local actual es el " -"servidor que quieres agregar. \n" +"Si agregas \"--local\", Abra asumirá que la computadora local actual es el servidor que quieres agregar. \n" "Esto es útil cuando quieres tener Abra en el mismo servidor. \n" "El dominio se establece entonces como \"default\"." #: cli/app/labels.go:33 msgid "Both local recipe and live deployment labels are shown." -msgstr "" -"Se muestran tanto la receta local como las etiquetas del despliegue en vivo." +msgstr "Se muestran tanto la receta local como las etiquetas del despliegue en vivo." #: 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:414 @@ -854,16 +820,12 @@ msgstr "💕 Clona la 📜 receta(s) en local" msgid "" "Compare env vars in both the app \".env\" and recipe \".env.sample\" file.\n" "\n" -"The goal is to ensure that recipe \".env.sample\" env vars are defined in " -"your\n" -"app \".env\" file. Only env var definitions in the \".env.sample\" which " -"are\n" -"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not " -"include\n" +"The goal is to ensure that recipe \".env.sample\" env vars are defined in your\n" +"app \".env\" file. Only env var definitions in the \".env.sample\" which are\n" +"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not include\n" "these env vars, then \"check\" will complain.\n" "\n" -"Recipe maintainers may or may not provide defaults for env vars within " -"their\n" +"Recipe maintainers may or may not provide defaults for env vars within their\n" "recipes regardless of commenting or not (e.g. through the use of\n" "${FOO:} syntax). \"check\" does not confirm or deny this for you." msgstr "" @@ -906,31 +868,24 @@ msgstr "Crea una nueva 📸 instantánea (respaldo)" msgid "" "Create a new version of a recipe.\n" "\n" -"These versions are then published on the Co-op Cloud recipe catalogue. " -"These\n" +"These versions are then published on the Co-op Cloud recipe catalogue. These\n" "versions take the following form:\n" "\n" " a.b.c+x.y.z\n" "\n" -"Where the \"a.b.c\" part is a semantic version determined by the maintainer. " -"The\n" -"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main " -"container\n" +"Where the \"a.b.c\" part is a semantic version determined by the maintainer. The\n" +"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main container\n" "which contains the software to be used, by naming convention).\n" "\n" "We maintain a semantic versioning scheme (\"a.b.c\") alongside the recipe\n" -"versioning scheme (\"x.y.z\") in order to maximise the chances that the " -"nature of\n" +"versioning scheme (\"x.y.z\") in order to maximise the chances that the nature of\n" "recipe updates are properly communicated. I.e. developers of an app might\n" -"publish a minor version but that might lead to changes in the recipe which " -"are\n" +"publish a minor version but that might lead to changes in the recipe which are\n" "major and therefore require intervention while doing the upgrade work.\n" "\n" "This command will publish your new release to git.coopcloud.tech. This\n" -"requires that you have permission to git push to these repositories and " -"have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to " -"add\n" +"requires that you have permission to git push to these repositories and have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -946,20 +901,14 @@ msgstr "" "Donde \"a.b.c\" es la versión semántica que decide el mantenedor. La parte \n" "\"x.y.z\" es la versión semántica oficial de la imagen de la aplicación .\n" "\n" -"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta " -"(\"x.y.z\") \n" -"para que sea más claro qué tipo de cambios trae cada actualización. Por " -"ejemplo, \n" -"los desarrolladores de una aplicación pueden publicar una versión menor, " -"pero \n" -"la receta podría necesitar cambios importantes que requieran atención al " -"actualizar.\n" +"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta (\"x.y.z\") \n" +"para que sea más claro qué tipo de cambios trae cada actualización. Por ejemplo, \n" +"los desarrolladores de una aplicación pueden publicar una versión menor, pero \n" +"la receta podría necesitar cambios importantes que requieran atención al actualizar.\n" "\n" "Este comando publicará tu nuevo release en git.coopcloud.tech. Necesitas \n" -"permiso para hacer git push en esos repositorios y tener tus claves SSH " -"configuradas \n" -"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu " -"contraseña antes \n" +"permiso para hacer git push en esos repositorios y tener tus claves SSH configuradas \n" +"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu contraseña antes \n" "de ejecutar:\n" "\n" " eval `ssh-agent`\n" @@ -976,27 +925,21 @@ msgid "" "This new app configuration is stored in your $ABRA_DIR directory under the\n" "appropriate server.\n" "\n" -"This command does not deploy your app for you. You will need to run \"abra " -"app\n" +"This command does not deploy your app for you. You will need to run \"abra app\n" "deploy \" to do so.\n" "\n" -"You can see what recipes are available (i.e. values for the [recipe] " -"argument)\n" +"You can see what recipes are available (i.e. values for the [recipe] argument)\n" "by running \"abra recipe ls\".\n" "\n" "Recipe commit hashes are supported values for \"[version]\".\n" "\n" -"Passing the \"--secrets/-S\" flag will automatically generate secrets for " -"your\n" +"Passing the \"--secrets/-S\" flag will automatically generate secrets for your\n" "app and store them encrypted at rest on the chosen target server. These\n" -"generated secrets are only visible at generation time, so please take care " -"to\n" +"generated secrets are only visible at generation time, so please take care to\n" "store them somewhere safe.\n" "\n" -"You can use the \"--pass/-P\" to store these generated passwords locally in " -"a\n" -"pass store (see passwordstore.org for more). The pass command must be " -"available\n" +"You can use the \"--pass/-P\" to store these generated passwords locally in a\n" +"pass store (see passwordstore.org for more). The pass command must be available\n" "on your $PATH." msgstr "" "Crea una nueva aplicación a partir de una receta.\n" @@ -1006,15 +949,13 @@ msgstr "" "Ojo: Este comando no despliega la aplicación.\n" "\n" "Si pasas la opción \"--secrets/-S\" se generarán automáticamente secretos \n" -"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos " -"secretos \n" +"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos secretos \n" "generados solo se muestran al momento de crearlos, así que guárdalos \n" "en un lugar seguro.\n" "\n" "Los hashes de commit de la receta son valores válidos para \"[version]\".\n" "\n" -"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas " -"localmente \n" +"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas localmente \n" "en un almacén pass (ver passwordstore.org). El comando pass debe estar \n" "disponible en tu $PATH." @@ -1048,11 +989,9 @@ msgstr "📤 Despliega una 🚀 aplicación" msgid "" "Deploy an app.\n" "\n" -"This command supports chaos operations. Use \"--chaos/-C\" to deploy your " -"recipe\n" +"This command supports chaos operations. Use \"--chaos/-C\" to deploy your recipe\n" "checkout as-is. Recipe commit hashes are also supported as values for\n" -"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos " -"operations." +"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos operations." msgstr "" "Despliega una aplicación.\n" "\n" @@ -1075,8 +1014,7 @@ msgstr "⬇️ Descarga una 📸 instantánea" msgid "" "Downloads a backup.tar.gz to the current working directory.\n" "\n" -"\"--volumes/-v\" includes data contained in volumes alongide paths specified " -"in\n" +"\"--volumes/-v\" includes data contained in volumes alongide paths specified in\n" "\"backupbot.backup.path\" labels." msgstr "" "Descarga un backup.tar.gz al directorio de trabajo actual.\n" @@ -1120,28 +1058,21 @@ msgstr "NOMBRE GENERADO" msgid "" "Generate a new copy of the recipe catalogue.\n" "\n" -"N.B. this command **will** wipe local unstaged changes from your local " -"recipes\n" -"if present. \"--chaos/-C\" on this command refers to the catalogue " -"repository\n" -"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose " -"your\n" +"N.B. this command **will** wipe local unstaged changes from your local recipes\n" +"if present. \"--chaos/-C\" on this command refers to the catalogue repository\n" +"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose your\n" "changes.\n" "\n" "It is possible to generate new metadata for a single recipe by passing\n" "[recipe]. The existing local catalogue will be updated, not overwritten.\n" "\n" -"It is quite easy to get rate limited by Docker Hub when running this " -"command.\n" -"If you have a Hub account you can \"docker login\" and Abra will " -"automatically\n" +"It is quite easy to get rate limited by Docker Hub when running this command.\n" +"If you have a Hub account you can \"docker login\" and Abra will automatically\n" "use those details.\n" "\n" "Publish your new release to git.coopcloud.tech with \"--publish/-p\". This\n" -"requires that you have permission to git push to these repositories and " -"have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to " -"add\n" +"requires that you have permission to git push to these repositories and have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -1179,8 +1110,7 @@ msgid "" msgstr "" "Genera un informe de todas las aplicaciones gestionadas.\n" "\n" -"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre " -"el estado de despliegue." +"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre el estado de despliegue." #: cli/app/new.go:317 msgid "Generate app secrets?" @@ -1209,8 +1139,7 @@ msgstr "📋 Muestra el catálogo de 📜 recetas" #: pkg/recipe/git.go:459 #, c-format msgid "GetRecipeVersions encountered error for %s: %s (collected %d versions)" -msgstr "" -"GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" +msgstr "GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" #: cli/recipe/new.go:125 msgid "Git (user) name to do commits with" @@ -1360,22 +1289,17 @@ msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas" msgid "" "Move an app to a differnt server.\n" "\n" -"This command will migrate an app config and copy secrets and volumes from " -"the\n" -"old server to the new one. The app MUST be deployed on the old server " -"before\n" +"This command will migrate an app config and copy secrets and volumes from the\n" +"old server to the new one. The app MUST be deployed on the old server before\n" "doing the move. The app will be undeployed from the current server but not\n" "deployed on the new server.\n" "\n" -"The \"tar\" command is required on both the old and new server as well as " -"\"sudo\"\n" +"The \"tar\" command is required on both the old and new server as well as \"sudo\"\n" "permissions. The \"rsync\" command is required on your local machine for\n" "transferring volumes.\n" "\n" -"Do not forget to update your DNS records. Don't panic, it might take a " -"while\n" -"for the dust to settle after you move an app. If anything goes wrong, you " -"can\n" +"Do not forget to update your DNS records. Don't panic, it might take a while\n" +"for the dust to settle after you move an app. If anything goes wrong, you can\n" "always move the app config file to the original server and deploy it there\n" "again. No data is removed from the old server.\n" "\n" @@ -1400,8 +1324,7 @@ msgstr "" "de vuelta al servidor original y desplegarlo otra vez. No se elimina \n" "ningún dato del servidor antiguo.\n" "\n" -"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se " -"moverán." +"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se moverán." #. translators: Short description for `app move` command #: cli/app/move.go:41 @@ -1458,8 +1381,7 @@ msgstr "🧹 Limpiar recursos en un 🕋 servidor" msgid "" "Prunes unused containers, networks, and dangling images.\n" "\n" -"Use \"--volumes/-v\" to remove volumes that are not associated with a " -"deployed\n" +"Use \"--volumes/-v\" to remove volumes that are not associated with a deployed\n" "app. This can result in unwanted data loss if not used carefully." msgstr "" "Elimina contenedores, redes e imágenes que no se usan.\n" @@ -1471,16 +1393,13 @@ msgstr "" #. translators: Short description for `app env pull` command #: cli/app/env.go:80 msgid "Pull app environment values from a deployed app" -msgstr "" -"Obtener (pull) valores de entorno de la aplicación desde una aplicación " -"desplegada" +msgstr "Obtener (pull) valores de entorno de la aplicación desde una aplicación desplegada" #: cli/app/env.go:81 msgid "" "Pull app environment values from a deploymed app.\n" "\n" -"A convenient command for when you've lost your app environment file or want " -"to\n" +"A convenient command for when you've lost your app environment file or want to\n" "synchronize your local app environment values with what is deployed live." msgstr "" "Extrae los valores de entorno de una aplicación desplegada.\n" @@ -1516,8 +1435,7 @@ msgid "" "Remove a managed server.\n" "\n" "Abra will remove the internal bookkeeping ($ABRA_DIR/servers/...) and\n" -"underlying client connection context. This server will then be lost in " -"time,\n" +"underlying client connection context. This server will then be lost in time,\n" "like tears in rain." msgstr "" "Eliminar un servidor gestionado.\n" @@ -1539,8 +1457,7 @@ msgstr "💀 Borrar completamente una 🚀 aplicación (local y remotamente)" #. translators: Short description for `recipe reset` command #: cli/recipe/reset.go:23 msgid "Remove all unstaged changes from recipe config" -msgstr "" -"💀 Borra los cambios no actualizados de la configuración de la 📜 receta" +msgstr "💀 Borra los cambios no actualizados de la configuración de la 📜 receta" #: cli/app/remove.go:29 msgid "" @@ -1549,19 +1466,16 @@ msgid "" "By default, it will prompt for confirmation before proceeding. All secrets,\n" "volumes and the local app env file will be deleted.\n" "\n" -"Only run this command when you are sure you want to completely remove the " -"app\n" +"Only run this command when you are sure you want to completely remove the app\n" "and all associated app data. This is a destructive action, Be Careful!\n" "\n" "If you would like to delete specific volumes or secrets, please use removal\n" "sub-commands under \"app volume\" and \"app secret\" instead.\n" "\n" -"Please note, if you delete the local app env file without removing volumes " -"and\n" +"Please note, if you delete the local app env file without removing volumes and\n" "secrets first, Abra will *not* be able to help you remove them afterwards.\n" "\n" -"To delete everything without prompt, use the \"--force/-f\" or the \"--no-" -"input/n\"\n" +"To delete everything without prompt, use the \"--force/-f\" or the \"--no-input/n\"\n" "flag." msgstr "" "Elimina todo lo relacionado con una aplicación que ya está plegada.\n" @@ -1592,14 +1506,11 @@ msgstr "💀 Elimina 📦 volúmen(es) asociados a una 🚀 aplicación" msgid "" "Remove volumes associated with an app.\n" "\n" -"The app in question must be undeployed before you try to remove volumes. " -"See\n" +"The app in question must be undeployed before you try to remove volumes. See\n" "\"abra app undeploy \" for more.\n" "\n" -"The command is interactive and will show a multiple select input which " -"allows\n" -"you to make a seclection. Use the \"?\" key to see more help on navigating " -"this\n" +"The command is interactive and will show a multiple select input which allows\n" +"you to make a seclection. Use the \"?\" key to see more help on navigating this\n" "interface.\n" "\n" "Passing \"--force/-f\" will select all volumes for removal. Be careful." @@ -1635,25 +1546,19 @@ msgstr "⏪ Revertir una 🚀 aplicación una versión anterior" #. translators: Short description for `app run` command #: cli/app/run.go:30 msgid "Run a command inside a service container" -msgstr "" -"Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" +msgstr "Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" #: cli/app/cmd.go:31 msgid "" "Run an app specific command.\n" "\n" -"These commands are bash functions, defined in the abra.sh of the recipe " -"itself.\n" -"They can be run within the context of a service (e.g. app) or locally on " -"your\n" +"These commands are bash functions, defined in the abra.sh of the recipe itself.\n" +"They can be run within the context of a service (e.g. app) or locally on your\n" "work station by passing \"--local/-l\".\n" "\n" -"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-" -"l\") must\n" -"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" +"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-l\") must\n" +"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" @@ -1804,10 +1709,8 @@ msgid "" "Arbitrary secret insertion is not supported. Secrets that are inserted must\n" "match those configured in the recipe beforehand.\n" "\n" -"This command can be useful when you want to manually generate secrets for an " -"app\n" -"environment. Typically, you can let Abra generate them for you on app " -"creation\n" +"This command can be useful when you want to manually generate secrets for an app\n" +"environment. Typically, you can let Abra generate them for you on app creation\n" "(see \"abra app new --secrets/-S\" for more)." msgstr "" "Este comando inserta un secreto en el entorno de una aplicación.\n" @@ -1858,22 +1761,17 @@ msgstr "" msgid "" "This command rolls an app back to a previous version.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only " -"recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a " -"specific\n" +"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what " -"downgrades\n" -"are available. The live deployment version is the \"source of truth\" in " -"this\n" +"Only the deployed version is consulted when trying to determine what downgrades\n" +"are available. The live deployment version is the \"source of truth\" in this\n" "case. The stored .env version is not consulted.\n" "\n" -"A downgrade can be destructive, please ensure you have a copy of your app " -"data\n" +"A downgrade can be destructive, please ensure you have a copy of your app data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Este comando revierte una aplicación a una versión anterior.\n" @@ -1897,8 +1795,7 @@ msgstr "" msgid "" "This does not destroy any application data.\n" "\n" -"However, you should remain vigilant, as your swarm installation will " -"consider\n" +"However, you should remain vigilant, as your swarm installation will consider\n" "any previously attached volumes as eligible for pruning once undeployed.\n" "\n" "Passing \"--prune/-p\" does not remove those volumes." @@ -1924,8 +1821,7 @@ msgid "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" -"abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" "\n" "Zsh:\n" " # If shell autocompletion is not already enabled in your environment,\n" @@ -1961,8 +1857,7 @@ msgstr "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" -"abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" "\n" "Zsh:\n" " # Si la autocompletación no está habilitada, actívala una vez:\n" @@ -2013,8 +1908,7 @@ msgid "" "It will update the relevant compose file tags on the local file system.\n" "\n" "Some image tags cannot be parsed because they do not follow some sort of\n" -"semver-like convention. In this case, all possible tags will be listed and " -"it\n" +"semver-like convention. In this case, all possible tags will be listed and it\n" "is up to the end-user to decide.\n" "\n" "The command is interactive and will show a select input which allows you to\n" @@ -2046,10 +1940,8 @@ msgid "" "\n" "By default, the latest stable release is downloaded.\n" "\n" -"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind " -"that\n" -"it may contain absolutely catastrophic deal-breaker bugs. Thank you very " -"much\n" +"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind that\n" +"it may contain absolutely catastrophic deal-breaker bugs. Thank you very much\n" "for the testing efforts 💗" msgstr "" "Actualiza abra in situ con la última versión estable \n" @@ -2070,22 +1962,17 @@ msgstr "📨 Actualizar una 🚀 aplicación" msgid "" "Upgrade an app.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only " -"recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a " -"specific\n" +"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what " -"upgrades\n" -"are available. The live deployment version is the \"source of truth\" in " -"this\n" +"Only the deployed version is consulted when trying to determine what upgrades\n" +"are available. The live deployment version is the \"source of truth\" in this\n" "case. The stored .env version is not consulted.\n" "\n" -"An upgrade can be destructive, please ensure you have a copy of your app " -"data\n" +"An upgrade can be destructive, please ensure you have a copy of your app data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Actualizar una aplicación.\n" @@ -2124,26 +2011,19 @@ msgid "" "Examples:\n" "{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name " -"\"help\"))}}\n" -" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}" -"{{if .HasAvailableLocalFlags}}\n" +"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\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" -" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}" -"{{if .HasAvailableSubCommands}}\n" +"Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n" +" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Use \"{{.CommandPath}} [command] --help\" for more information about a " -"command.{{end}}\n" +"Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n" msgstr "" "Uso:{{if .Runnable}}\n" " {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n" @@ -2158,34 +2038,23 @@ msgstr "" "\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" +"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" +"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n" "\n" "Opciones globales:\n" -"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}" -"{{if .HasHelpSubCommands}}\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" +"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" +"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." -msgstr "" -"Usando \"--force/-f\", Git sincroniza una receta existente. No borra los " -"cambios no preparados." +msgid "Using \"--force/-f\" Git syncs an existing recipe. It does not erase unstaged changes." +msgstr "Usando \"--force/-f\", Git sincroniza una receta existente. No borra los cambios no preparados." #: cli/app/secret.go:117 msgid "VALUE" @@ -2216,27 +2085,20 @@ msgstr "[hijack] Fin de stdout" #, c-format msgid "" "\n" -"The following options are two types of initial semantic version that you " -"can\n" -"pick for %s that will be published in the recipe catalogue. This follows " -"the\n" +"The following options are two types of initial semantic version that you can\n" +"pick for %s that will be published in the recipe catalogue. This follows the\n" "semver convention (more on https://semver.org), here is a short cheatsheet\n" "\n" -" 0.1.0: development release, still hacking. when you make a major " -"upgrade\n" -" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move " -"to\n" +" 0.1.0: development release, still hacking. when you make a major upgrade\n" +" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move to\n" " using the \"x\" part when things are stable.\n" "\n" " 1.0.0: public release, assumed to be working. you already have a stable\n" -" and reliable deployment of this app and feel relatively " -"confident\n" +" and reliable deployment of this app and feel relatively confident\n" " about it.\n" "\n" -"If you want people to be able alpha test your current config for %s but " -"don't\n" -"think it is quite reliable, go with 0.1.0 and people will know that things " -"are\n" +"If you want people to be able alpha test your current config for %s but don't\n" +"think it is quite reliable, go with 0.1.0 and people will know that things are\n" "likely to change.\n" "\n" msgstr "" @@ -2247,8 +2109,7 @@ msgstr "" "Resumen rápido:\n" "\n" " 0.1.0: versión de desarrollo, todavía en prueba. Cuando hagas una \n" -"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás " -"a \n" +"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás a \n" "usar la parte \"x\" cuando las cosas estén estables.\n" "\n" " 1.0.0: versión pública, se asume que funciona. Ya tienes un \n" @@ -2266,8 +2127,7 @@ msgid "" "\n" "You need to make a decision about what kind of an update this new recipe\n" "version is. If someone else performs this upgrade, do they have to do some\n" -"migration work or take care of some breaking changes? This can be signaled " -"in\n" +"migration work or take care of some breaking changes? This can be signaled in\n" "the version you specify on the recipe deploy label and is called a semantic\n" "version.\n" "\n" @@ -2277,27 +2137,21 @@ msgid "" "\n" "Here is a semver cheat sheet (more on https://semver.org):\n" "\n" -" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> " -"2.0.0).\n" -" the upgrade won't work without some preparation work and others " -"need\n" +" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> 2.0.0).\n" +" the upgrade won't work without some preparation work and others need\n" " to take care when performing it. \"it could go wrong\".\n" "\n" -" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> " -"0.2.0).\n" -" the upgrade should Just Work and there are no breaking changes " -"in\n" +" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> 0.2.0).\n" +" the upgrade should Just Work and there are no breaking changes in\n" " the app and the recipe config. \"it should go fine\".\n" "\n" -" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this " -"upgrade\n" +" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this upgrade\n" " should also Just Work and is mostly to do with minor bug fixes\n" " and/or security patches. \"nothing to worry about\".\n" "\n" msgstr "" "\n" -"Necesitas decidir qué tipo de actualización es esta nueva versión de la " -"receta. \n" +"Necesitas decidir qué tipo de actualización es esta nueva versión de la receta. \n" "Si otra persona realiza esta actualización, ¿tendrá que hacer migraciones \n" "o atender cambios incompatibles? Eso se indica con la versión semántica \n" "que especifiques en la etiqueta de despliegue de la receta.\n" @@ -2308,25 +2162,17 @@ msgstr "" "\n" "Semántica de semver (más en https://semver.org):\n" "\n" -" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 " -"-> 2.0.0).\n" -" la actualización no funcionará sin trabajo de preparación y otros " -"deben\n" +" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 -> 2.0.0).\n" +" la actualización no funcionará sin trabajo de preparación y otros deben\n" " tener cuidado al realizarla. \"podría salir mal\".\n" "\n" -" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 " -"-> 0.2.0).\n" -" la actualización debería funcionar sin problemas y no hay " -"cambios\n" -" incompatibles en la app ni en la configuración de la receta. " -"\"debería ir bien\".\n" +" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -> 0.2.0).\n" +" la actualización debería funcionar sin problemas y no hay cambios\n" +" incompatibles en la app ni en la configuración de la receta. \"debería ir bien\".\n" "\n" -" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> " -"0.0.2).\n" -" esta actualización también debería funcionar sin problemas y " -"trata\n" -" principalmente de arreglos menores y/o parches de seguridad. " -"\"nada de qué preocuparse\".\n" +" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> 0.0.2).\n" +" esta actualización también debería funcionar sin problemas y trata\n" +" principalmente de arreglos menores y/o parches de seguridad. \"nada de qué preocuparse\".\n" "\n" #: pkg/lint/recipe.go:203 @@ -2492,9 +2338,7 @@ msgstr "aplicacion [comando] [argumento] [opciones]" #: pkg/dns/dns.go:52 #, c-format 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)?" +msgstr "¿El dominio de la aplicación %s (%s) no parece resolverse al servidor de la aplicación %s (%s)?" #: cli/recipe/release.go:349 msgid "app service is missing image tag?" @@ -2650,9 +2494,7 @@ msgstr "cancelado" #: pkg/catalogue/catalogue.go:59 pkg/recipe/git.go:251 #, c-format msgid "cannot ensure %s is up-to-date, no git remotes configured" -msgstr "" -"no se puede asegurar que %s esté actualizado, no hay remotos de git " -"configurados" +msgstr "no se puede asegurar que %s esté actualizado, no hay remotos de git configurados" #: cli/app/config.go:43 pkg/app/app.go:52 #, c-format @@ -2666,24 +2508,17 @@ msgstr "no se puede obtener la etiqueta %s para %s" #: pkg/recipe/git.go:58 #, c-format -msgid "" -"cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" -msgstr "" -"no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención " -"usar \"--caos\"?" +msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" +msgstr "no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"?" #: cli/app/deploy.go:388 #, c-format 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\"" +"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\"? \n" -"para volver a un lanzamiento regular, especifica una etiqueta de " -"lanzamiento, SHA de commit o agrega el comando \"--latest\"" +"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 @@ -2692,8 +2527,7 @@ msgstr "no se puede resolver ipv4 para %s?" #: 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" +msgstr "no se puede especificar una etiqueta y un tipo de incremento al mismo tiempo" #: cli/app/secret.go:68 msgid "cannot use '[secret] [version]' and '--all' together" @@ -2774,9 +2608,7 @@ msgstr "caos" #: pkg/secret/secret.go:235 #, c-format -msgid "" -"charset=bytes only supports encoding=base64, got encoding=%s for secret %s, " -"defaulting to base64" +msgid "charset=bytes only supports encoding=base64, got encoding=%s for secret %s, defaulting to base64" msgstr "" #. translators: `app check` command @@ -2859,21 +2691,13 @@ msgstr "el comando %v no salió después de %v: stderr=%q" #: pkg/upstream/commandconn/commandconn.go:172 #, c-format -msgid "" -"command %v has exited with %v, please make sure the URL is valid, and Docker " -"18.09 or later is installed on the remote host: stderr=%s" -msgstr "" -"el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida " -"y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" +msgid "command %v has exited with %v, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s" +msgstr "el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" #. translators: `app command` command #: cli/app/cmd.go:27 -msgid "" -"command [service | --local] [[args] [flags] | [flags] -- " -"[args]]" -msgstr "" -"ejecutar [servicio | --local] [[argumento] [opciones] " -"| [opciones] -- [argumento]]" +msgid "command [service | --local] [[args] [flags] | [flags] -- [args]]" +msgstr "ejecutar [servicio | --local] [[argumento] [opciones] | [opciones] -- [argumento]]" #: pkg/upstream/commandconn/commandconn.go:239 #, c-format @@ -2957,15 +2781,12 @@ msgstr "tiempo de conexión agotado para %s" #: pkg/recipe/compose.go:191 #, c-format msgid "considering %s config(s) for label update" -msgstr "" -"considerando la(s) configuración(es) %s para la actualización de etiquetas" +msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas" #: pkg/recipe/compose.go:123 #, c-format msgid "considering %s config(s) for tag update" -msgstr "" -"considerando la(s) configuración(es) %s para la actualización de etiquetas " -"(tags)" +msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas (tags)" #: cli/app/undeploy.go:141 cli/server/prune.go:53 #, c-format @@ -3270,8 +3091,7 @@ msgstr "no solicitar un TTY" #: pkg/ssh/ssh.go:26 msgid "docker: is the daemon running / your user has docker permissions?" -msgstr "" -"docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" +msgstr "docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" #: cli/app/new.go:382 msgid "domain" @@ -3329,8 +3149,7 @@ msgstr "ejecución de prueba: no se creó etiqueta de git (%s)" #: 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" +msgstr "ejecución de prueba: no se sincronizará la etiqueta %s para la receta %s" #: pkg/git/remote.go:15 #, c-format @@ -3368,14 +3187,11 @@ msgstr "habilitar ejecución de comandos pre/post-hook" #: cli/internal/validate.go:82 #, c-format msgid "ensure %s recipe compose.* files include \"version: '3.8'\"" -msgstr "" -"asegúrate de que los archivos compose.* de la receta %s incluyan \"version: " -"'3.8'\"" +msgstr "asegúrate de que los archivos compose.* de la receta %s incluyan \"version: '3.8'\"" #: pkg/lint/recipe.go:69 msgid "ensure 'version: \"3.8\"' in compose configs" -msgstr "" -"asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" +msgstr "asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" #: pkg/lint/recipe.go:163 msgid "ensure \"image: ...\" set on all services" @@ -3392,12 +3208,8 @@ msgid "ensuring env version %s" msgstr "asegurando la versión del entorno (env) %s" #: cli/recipe/upgrade.go:285 -msgid "" -"enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode " -"is enabled" -msgstr "" -"presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta " -"etiqueta; modo vim habilitado" +msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled" +msgstr "presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta etiqueta; modo vim habilitado" #. translators: `app env` command group #: cli/app/env.go:311 @@ -3510,14 +3322,12 @@ msgstr "🛑 error al hacer commit: %s" #: cli/app/move.go:167 #, c-format msgid "failed to copy %s from %s to local machine: output:%s err:%s" -msgstr "" -"🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" +msgstr "🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" #: cli/app/move.go:173 #, c-format msgid "failed to copy %s from local machine to %s: output:%s err:%s" -msgstr "" -"🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" +msgstr "🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" #: pkg/upstream/stack/stack.go:535 #, c-format @@ -3649,8 +3459,7 @@ msgstr "🛑 No se pudo obtener el último commit de %s: %s" #: pkg/upstream/stack/stack.go:472 #, c-format msgid "failed to retrieve registry auth for image %s: %s" -msgstr "" -"🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" +msgstr "🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" #: pkg/git/branch.go:68 #, c-format @@ -3791,9 +3600,7 @@ msgstr "catálogo de recetas generado: %s" #: cli/app/secret.go:145 #, c-format msgid "generated secrets %s shown again, please take note of them %s" -msgstr "" -"los secretos generados %s; se muestran nuevamente, por favor toma nota de " -"ellos %s" +msgstr "los secretos generados %s; se muestran nuevamente, por favor toma nota de ellos %s" #: pkg/app/compose.go:63 #, c-format @@ -4059,9 +3866,7 @@ msgstr "incrementar la parte de parche de la versión" #: pkg/git/init.go:50 #, c-format msgid "init committed all files for new git repo in %s" -msgstr "" -"inicializado y comiteados todos los archivos para el nuevo repositorio git " -"en %s" +msgstr "inicializado y comiteados todos los archivos para el nuevo repositorio git en %s" #: pkg/git/init.go:24 #, c-format @@ -4107,31 +3912,22 @@ msgstr "fuente de enlace inválida, la fuente no puede estar vacía" #: pkg/upstream/convert/service.go:813 #, c-format msgid "invalid credential spec: cannot specify both %s and %s" -msgstr "" -"especificación de credencial inválida: no se pueden especificar ambos %s y %s" +msgstr "especificación de credencial inválida: no se pueden especificar ambos %s y %s" #: pkg/upstream/convert/service.go:815 #, c-format msgid "invalid credential spec: cannot specify both %s, and %s" -msgstr "" -"especificación de credencial inválida: no se pueden especificar tanto %s, " -"como %s" +msgstr "especificación de credencial inválida: no se pueden especificar tanto %s, como %s" #: pkg/upstream/convert/service.go:834 #, c-format -msgid "" -"invalid credential spec: spec specifies config %v, but no such config can be " -"found" -msgstr "" -"especificación de credencial inválida: la especificación indica la " -"configuración %v, pero no se puede encontrar tal configuración" +msgid "invalid credential spec: spec specifies config %v, but no such config can be found" +msgstr "especificación de credencial inválida: la especificación indica la configuración %v, pero no se puede encontrar tal configuración" #: pkg/upstream/container/hijack.go:100 #, c-format msgid "invalid detach escape keys, using default: %s" -msgstr "" -"teclas de escape de separación inválidas, utilizando el valor " -"predeterminado: %s" +msgstr "teclas de escape de separación inválidas, utilizando el valor predeterminado: %s" #: pkg/lint/recipe.go:504 msgid "invalid lightweight tag detected" @@ -4318,8 +4114,7 @@ msgstr "maquina" #: cli/recipe/release.go:97 #, c-format 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?" +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:631 @@ -4420,23 +4215,13 @@ msgstr "se necesitan 3 o 4 argumentos" #: pkg/upstream/stack/stack.go:352 #, c-format -msgid "" -"network %q is declared as external, but could not be found. You need to " -"create a swarm-scoped network before the stack is deployed, which you can do " -"by running this on the server: docker network create -d overlay proxy" -msgstr "" -"La red %q está declarada como externa, pero no se pudo encontrar. Debes " -"crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo " -"en el servidor mismo con: docker network create -d overlay proxy" +msgid "network %q is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed, which you can do by running this on the server: docker network create -d overlay proxy" +msgstr "La red %q está declarada como externa, pero no se pudo encontrar. Debes crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo en el servidor mismo con: docker network create -d overlay proxy" #: pkg/upstream/stack/stack.go:356 #, c-format -msgid "" -"network %q is declared as external, but it is not in the right scope: %q " -"instead of \"swarm\"" -msgstr "" -"la red %q se declara como externa, pero no está en el alcance correcto: %q " -"en lugar de \"swarm\"" +msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" +msgstr "la red %q se declara como externa, pero no está en el alcance correcto: %q en lugar de \"swarm\"" #: cli/app/undeploy.go:148 cli/server/prune.go:60 #, c-format @@ -4476,8 +4261,7 @@ msgstr "secretos nuevos: %v" #: pkg/git/read.go:88 #, c-format msgid "no %s exists, not reading any global gitignore config" -msgstr "" -"no existe %s, no se está leyendo ninguna configuración global de gitignore" +msgstr "no existe %s, no se está leyendo ninguna configuración global de gitignore" #: pkg/git/read.go:130 #, c-format @@ -4547,9 +4331,7 @@ msgstr "no se proporcionó dominio" #: pkg/recipe/compose.go:248 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" +msgstr "no se encontró ninguna etiqueta existente, la inserción automágica no es compatible aún" #: cli/recipe/release.go:134 #, c-format @@ -4558,12 +4340,8 @@ msgstr "no se encontraron etiquetas de git para %s" #: cli/recipe/upgrade.go:182 #, c-format -msgid "" -"no new versions available for %s, assuming %s is the latest (use -a/--all-" -"tags to see all anyway)" -msgstr "" -"no hay nuevas versiones disponibles para %s; asumiendo que %s es la más " -"reciente (usa -a/--all-tags para ver todas)" +msgid "no new versions available for %s, assuming %s is the latest (use -a/--all-tags to see all anyway)" +msgstr "no hay nuevas versiones disponibles para %s; asumiendo que %s es la más reciente (usa -a/--all-tags para ver todas)" #: cli/internal/validate.go:64 #, c-format @@ -4686,9 +4464,7 @@ msgstr "no hay suficientes argumentos: %s" #: pkg/secret/secret.go:145 msgid "not generating app secrets, none enabled in recipe config" -msgstr "" -"no se están generando secretos de la aplicación; ninguno habilitado en la " -"configuración de la receta" +msgstr "no se están generando secretos de la aplicación; ninguno habilitado en la configuración de la receta" #: cli/internal/command.go:93 msgid "not requesting a remote TTY" @@ -4701,12 +4477,8 @@ msgstr "no se actualizará %s; se omite, como fue solicitado" #: cli/recipe/upgrade.go:244 #, c-format -msgid "" -"not upgrading from %s to %s for %s, because the upgrade type is more serious " -"than what user wants" -msgstr "" -"no se actualizará %s a %s para %s, porque el tipo de actualización es más " -"serio de lo que el usuario desea" +msgid "not upgrading from %s to %s for %s, because the upgrade type is more serious than what user wants" +msgstr "no se actualizará %s a %s para %s, porque el tipo de actualización es más serio de lo que el usuario desea" #: pkg/upstream/stack/remove.go:73 #, c-format @@ -4837,9 +4609,7 @@ msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s):" #: cli/app/rollback.go:272 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" -msgstr "" -"por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: " -"%s):" +msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: %s):" #: cli/app/upgrade.go:312 #, c-format @@ -5291,8 +5061,7 @@ msgstr "versiones recuperadas del repositorio local de recetas" #: pkg/upstream/stack/stack.go:468 #, c-format msgid "retrieving docker auth token: failed create docker cli: %s" -msgstr "" -"recuperando token de autenticación de Docker: error al crear docker cli: %s" +msgstr "recuperando token de autenticación de Docker: error al crear docker cli: %s" #: pkg/recipe/recipe.go:659 msgid "retrieving recipes" @@ -5353,9 +5122,7 @@ msgstr "regla" #. translators: `app run` command #: cli/app/run.go:27 msgid "run [[args] [flags] | [flags] -- [args]]" -msgstr "" -"lanzar [[argumento] [opciones] | " -"[opciones] -- [argumento]]" +msgstr "lanzar [[argumento] [opciones] | [opciones] -- [argumento]]" #: cli/app/run.go:120 msgid "run command as user" @@ -5445,9 +5212,7 @@ msgstr "secreto [comando] [argumento] [opciones]" #: cli/app/secret.go:295 msgid "secret data not provided on command-line or stdin, prompting" -msgstr "" -"datos del secreto no proporcionados en la línea de comandos o stdin, " -"solicitando" +msgstr "datos del secreto no proporcionados en la línea de comandos o stdin, solicitando" #: pkg/upstream/convert/service.go:72 #, c-format @@ -5481,8 +5246,7 @@ msgstr "los secretos se muestran %s nuevamente, por favor guárdalos %s" #: cli/app/deploy.go:306 #, c-format msgid "selected latest recipe version: %s (from %d available versions)" -msgstr "" -"versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" +msgstr "versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" #: cli/app/new.go:121 #, c-format @@ -5498,8 +5262,7 @@ msgstr "servidor" #: pkg/app/app.go:301 #, c-format msgid "server %s doesn't exist? Run \"abra server ls\" to check" -msgstr "" -"el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" +msgstr "el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" #. translators: `server` command group #: cli/server/server.go:17 @@ -5527,8 +5290,7 @@ msgstr "falta contexto del servidor, la creación de contexto falló: %s" #: pkg/client/client.go:58 #, c-format msgid "server missing context, run \"abra server add %s\"?" -msgstr "" -"falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" +msgstr "falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" #: pkg/client/client.go:47 #, c-format @@ -5557,18 +5319,13 @@ msgstr "serverAdd: cleanUp: no se pueden listar los archivos en %s: %s" #: cli/recipe/upgrade.go:227 #, c-format -msgid "" -"service %s is at version %s, but pinned to %s, please correct your " -"compose.yml file manually!" -msgstr "" -"el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige " -"manualmente tu archivo compose.yml!" +msgid "service %s is at version %s, but pinned to %s, please correct your compose.yml file manually!" +msgstr "el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige manualmente tu archivo compose.yml!" #: cli/recipe/upgrade.go:223 #, c-format msgid "service %s, image %s pinned to %s, no compatible upgrade found" -msgstr "" -"servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" +msgstr "servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" #: cli/app/restore.go:113 msgid "services" @@ -5614,8 +5371,7 @@ msgstr "gravedad" #: cli/app/deploy.go:456 cli/app/rollback.go:379 cli/app/upgrade.go:496 msgid "show all configs & images, including unchanged ones" -msgstr "" -"mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" +msgstr "mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" #: cli/app/backup.go:273 msgid "show all paths" @@ -5716,8 +5472,7 @@ msgstr "omitiendo la etiqueta %s: configuración de compose inválida: %s" #: pkg/recipe/git.go:432 #, c-format msgid "skipping tag %s: invalid image reference in service %s: %s" -msgstr "" -"omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" +msgstr "omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" #: pkg/app/app.go:697 #, c-format @@ -5781,17 +5536,11 @@ msgstr "" #: 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" +msgstr "ssh-agent no encontrado. consulta \"abra receta publicar --ayuda\" y vuelve a intentarlo" #: cli/catalogue/catalogue.go:98 -msgid "" -"ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue " -"generate --help\"" -msgstr "" -"ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo " -"regenerar --ayuda\"" +msgid "ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue generate --help\"" +msgstr "ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo regenerar --ayuda\"" #: cli/app/list.go:295 cli/recipe/list.go:45 msgid "status" @@ -6057,16 +5806,12 @@ msgstr "no se pudo determinar el tipo de receta a partir de %s, env: %v" #: cli/app/env.go:106 #, c-format msgid "unable to determine server of app %s, please pass --server/-s" -msgstr "" -"no se pudo determinar el servidor de la aplicación %s; agrega al comando --" -"server/-s" +msgstr "no se pudo determinar el servidor de la aplicación %s; agrega al comando --server/-s" #: cli/recipe/upgrade.go:252 #, c-format msgid "unable to determine versioning semantics of %s, listing all tags" -msgstr "" -"no se pudieron determinar las reglas de versionado de %s; listando todas las " -"etiquetas" +msgstr "no se pudieron determinar las reglas de versionado de %s; listando todas las etiquetas" #: cli/recipe/fetch.go:71 #, c-format @@ -6141,8 +5886,7 @@ msgstr "no se pudo abrir el work tree de %s: %s" #: cli/recipe/upgrade.go:159 #, c-format msgid "unable to parse %s, error was: %s, skipping upgrade for %s" -msgstr "" -"no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" +msgstr "no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" #: pkg/recipe/compose.go:153 #, c-format @@ -6187,9 +5931,7 @@ msgstr "no se pudieron leer los remotos en %s: %s" #: cli/recipe/upgrade.go:153 #, c-format msgid "unable to read tag for image %s, is it missing? skipping upgrade for %s" -msgstr "" -"no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo " -"actualización para %s" +msgstr "no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo actualización para %s" #: cli/app/move.go:210 #, c-format @@ -6204,8 +5946,7 @@ msgstr "no se pudo eliminar el remoto predeterminado en %s: %s" #: cli/app/volume.go:158 #, c-format msgid "unable to remove volume: no volume with name '%s'?" -msgstr "" -"no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" +msgstr "no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" #: cli/app/secret.go:135 cli/app/secret.go:515 cli/recipe/list.go:83 #: cli/recipe/version.go:113 cli/server/list.go:88 @@ -6488,10 +6229,8 @@ msgstr "versión %s guardada en %s.env" #: cli/app/deploy.go:126 #, c-format -msgid "" -"version '%s' appears to be a chaos commit, but --chaos/-C was not provided" -msgstr "" -"la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" +msgid "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" +msgstr "la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" #: pkg/recipe/recipe.go:200 #, c-format @@ -6539,8 +6278,7 @@ msgstr "versión: tomando la versión desde el archivo .env: %s" #: cli/app/deploy.go:378 #, c-format msgid "version: taking version from cli arg: %s" -msgstr "" -"versión: tomando la versión desde el argumento de la línea de comandos: %s" +msgstr "versión: tomando la versión desde el argumento de la línea de comandos: %s" #. translators: `recipe versions` command #: cli/recipe/version.go:23 @@ -6727,31 +6465,21 @@ msgstr "{nombre: %s, " #, c-format #~ msgid "latest git tag (%s) and synced label (%s) are the same?" -#~ msgstr "" -#~ "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las " -#~ "mismas?" +#~ msgstr "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las mismas?" #~ msgid "no -p/--publish passed, not publishing" #~ msgstr "no pasó -p/--publish, no se publicará" #, c-format -#~ msgid "" -#~ "no tag specified and no previous tag available for %s, assuming initial " -#~ "release" -#~ msgstr "" -#~ "no se especificó etiqueta y no hay etiqueta previa disponible para %s; " -#~ "asumiendo lanzamiento inicial" +#~ msgid "no tag specified and no previous tag available for %s, assuming initial release" +#~ msgstr "no se especificó etiqueta y no hay etiqueta previa disponible para %s; asumiendo lanzamiento inicial" #, c-format #~ msgid "please fix your synced label for %s and re-run this command" -#~ msgstr "" -#~ "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar " -#~ "este comando" +#~ msgstr "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar este comando" #~ msgid "previous git tags detected, assuming new semver release" -#~ msgstr "" -#~ "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento " -#~ "semver" +#~ msgstr "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento semver" #~ msgid "publish new release?" #~ msgstr "¿publicar nueva versión?" @@ -6760,12 +6488,8 @@ msgstr "{nombre: %s, " #~ msgstr "sincronizar [version] [flags]" #, c-format -#~ msgid "" -#~ "unable to read version for %s from synced label. Did you try running " -#~ "\"abra recipe sync %s\" already?" -#~ msgstr "" -#~ "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya " -#~ "ejecutaste \"abra receta sincronizar %s\"?" +#~ msgid "unable to read version for %s from synced label. Did you try running \"abra recipe sync %s\" already?" +#~ msgstr "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya ejecutaste \"abra receta sincronizar %s\"?" #, c-format #~ msgid "use %s as the new version?" From 1e80d111e6a56aa4c275a102871a18374280bbe1 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Sat, 2 May 2026 09:56:40 +0200 Subject: [PATCH 04/55] test: less flaky test --- tests/integration/recipe_release.bats | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/integration/recipe_release.bats b/tests/integration/recipe_release.bats index 407c971a..c3f2375e 100644 --- a/tests/integration/recipe_release.bats +++ b/tests/integration/recipe_release.bats @@ -63,26 +63,23 @@ teardown() { } @test "release minor bump" { - run $ABRA recipe upgrade "$TEST_RECIPE" --no-input --minor --commit - assert_success - - run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" show - assert_success - assert_output --regexp 'image: nginx:1.2.*' - # NOTE(d1): ensure the latest tag is the one we expect + run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout 0.3.0+1.21.0 _remove_tags run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag \ -a "0.3.0+1.21.0" -m "fake: 0.3.0+1.21.0" assert_success + run $ABRA recipe upgrade "$TEST_RECIPE" --no-input --minor --commit + assert_success + run $ABRA recipe release "$TEST_RECIPE" --no-input --minor assert_success assert_output --partial 'INFO new release published:' run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag --list assert_success - assert_output --regexp '0\.4\.0\+1\.2.*' + assert_output --regexp '0\.4\.0\+1\.(.*)' } @test "release with unstaged changes" { From df5a38e8873046d14846c85a021bf37b3ff68675 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 18:01:50 +0000 Subject: [PATCH 05/55] chore(deps): update module github.com/decentral1se/cobra to v1.10.2 --- go.mod | 2 +- go.sum | 4 ++-- vendor/github.com/spf13/cobra/command.go | 16 +++++----------- vendor/modules.txt | 4 ++-- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 7ad4ba44..e45915f5 100644 --- a/go.mod +++ b/go.mod @@ -160,4 +160,4 @@ require ( replace github.com/docker/cli v28.4.0+incompatible => git.coopcloud.tech/toolshed/docker-cli v28.5.3-0.20260202112816-30df2d0b3a00+incompatible -replace github.com/spf13/cobra => github.com/decentral1se/cobra v1.10.2-i18n +replace github.com/spf13/cobra => github.com/decentral1se/cobra v1.10.2 diff --git a/go.sum b/go.sum index 118add0f..8ccc3118 100644 --- a/go.sum +++ b/go.sum @@ -308,8 +308,8 @@ github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjI github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decentral1se/cobra v1.10.2-i18n h1:XR+6AHHfnf4k5NM9f09oLMrEVwz3rkQIAIcqgL8R08g= -github.com/decentral1se/cobra v1.10.2-i18n/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/decentral1se/cobra v1.10.2 h1:MZ8Ifi/jRels9sZrpSccDbUlK++3b2HlBODfv0Bh6x0= +github.com/decentral1se/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/decentral1se/passgen v1.0.1 h1:j2AxK/kHKxDHWZZfkJj8Wgae9+O+DYEqR5sjKthIYKA= github.com/decentral1se/passgen v1.0.1/go.mod h1:530V+lNoPhKtkrX2fIVsIfLhkl47CuiOM7HRgi7C+SU= github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go index 75b0923f..c05fed45 100644 --- a/vendor/github.com/spf13/cobra/command.go +++ b/vendor/github.com/spf13/cobra/command.go @@ -925,15 +925,10 @@ func (c *Command) execute(a []string) (err error) { // Also say we need help if the command isn't runnable. helpVal, err := c.Flags().GetBool(helpFlagName) if err != nil { - // NOTE(d1): temporarily hardcoding "ayuda" as a replacement for "help" - // source of the pain: https://github.com/spf13/cobra/issues/2359 - helpVal, err = c.Flags().GetBool("ayuda") - if err != nil { - // should be impossible to get here as we always declare a help - // flag in InitDefaultHelpFlag() - c.Println("\"help\" flag declared as non-bool. Please correct your code") - return err - } + // should be impossible to get here as we always declare a help + // flag in InitDefaultHelpFlag() + c.Println("\"help\" flag declared as non-bool. Please correct your code") + return err } if helpVal { @@ -1231,8 +1226,7 @@ func (c *Command) InitDefaultHelpFlag() { } else { usage += name } - // NOTE(d1): do not assume "help" exists in the context of translation - // c.Flags().BoolP(helpFlagName, "h", false, usage) + c.Flags().BoolP(helpFlagName, "h", false, usage) _ = c.Flags().SetAnnotation(helpFlagName, FlagSetByCobraAnnotation, []string{"true"}) } } diff --git a/vendor/modules.txt b/vendor/modules.txt index 22536447..e873cc09 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -541,7 +541,7 @@ github.com/sirupsen/logrus # github.com/skeema/knownhosts v1.3.2 ## explicit; go 1.24.0 github.com/skeema/knownhosts -# github.com/spf13/cobra v1.10.1 => github.com/decentral1se/cobra v1.10.2-i18n +# github.com/spf13/cobra v1.10.1 => github.com/decentral1se/cobra v1.10.2 ## explicit; go 1.15 github.com/spf13/cobra github.com/spf13/cobra/doc @@ -857,4 +857,4 @@ gotest.tools/v3/internal/cleanup gotest.tools/v3/internal/difflib gotest.tools/v3/internal/format gotest.tools/v3/internal/source -# github.com/spf13/cobra => github.com/decentral1se/cobra v1.10.2-i18n +# github.com/spf13/cobra => github.com/decentral1se/cobra v1.10.2 From 5eba3abb1bc226c9d8104442d2ac144233b42531 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 19:01:12 +0000 Subject: [PATCH 06/55] chore(deps): update golang docker tag --- vendor/coopcloud.tech/tagcmp/.drone.yml | 6 +++--- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vendor/coopcloud.tech/tagcmp/.drone.yml b/vendor/coopcloud.tech/tagcmp/.drone.yml index 595ec5a8..c5f78899 100644 --- a/vendor/coopcloud.tech/tagcmp/.drone.yml +++ b/vendor/coopcloud.tech/tagcmp/.drone.yml @@ -3,16 +3,16 @@ kind: pipeline name: coopcloud.tech/tagcmp steps: - name: gofmt - image: golang:1.21 + image: golang:1.26 commands: - test -z "$(gofmt -l .)" - name: go build - image: golang:1.21 + image: golang:1.26 commands: - go build -v . - name: go test - image: golang:1.21 + image: golang:1.26 commands: - go test . -cover diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index cbbb007e..dd7770ce 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.24@sha256:14fd8a55e59a560704e5fc44970b301d00d344e45d6b914dda228e09f359a088 +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 93b2bb1e..3569ebdf 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.24@sha256:14fd8a55e59a560704e5fc44970b301d00d344e45d6b914dda228e09f359a088 +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm64 From e170d1c971101061187a2e6cb2fb7ff21f4b6e70 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 19:01:05 +0000 Subject: [PATCH 07/55] chore(deps): update alpine docker tag to v3.23 --- Dockerfile | 2 +- vendor/github.com/docker/distribution/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index cb1dda28..f8823c64 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ WORKDIR /app RUN CGO_ENABLED=0 make build -FROM alpine:3.22 +FROM alpine:3.23 RUN apk add --no-cache \ ca-certificates \ diff --git a/vendor/github.com/docker/distribution/Dockerfile b/vendor/github.com/docker/distribution/Dockerfile index ebd42c24..98fb181b 100644 --- a/vendor/github.com/docker/distribution/Dockerfile +++ b/vendor/github.com/docker/distribution/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 ARG GO_VERSION=1.20.8 -ARG ALPINE_VERSION=3.18 +ARG ALPINE_VERSION=3.23 ARG XX_VERSION=1.2.1 FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx From 5945ea8e1b003cddf4f9760412241215a42f8fc8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 20:01:30 +0000 Subject: [PATCH 08/55] chore(deps): update module github.com/go-git/go-git/v5 to v5.19.0 --- go.mod | 18 +- go.sum | 36 +- vendor/coopcloud.tech/tagcmp/.drone.yml | 6 +- .../github.com/docker/distribution/Dockerfile | 2 +- .../github.com/go-git/go-billy/v5/README.md | 4 + .../go-billy/v5/helper/chroot/chroot.go | 208 +++++++++- .../github.com/go-git/go-billy/v5/osfs/os.go | 5 + .../go-git/go-billy/v5/osfs/os_bound.go | 100 ++++- .../go-git/go-billy/v5/osfs/os_chroot.go | 10 + .../go-git/go-billy/v5/util/util.go | 43 +- .../go-git/v5/plumbing/object/commit.go | 207 +++++----- .../v5/plumbing/object/commit_scanner.go | 377 ++++++++++++++++++ .../go-git/v5/plumbing/object/signature.go | 122 +++++- .../go-git/go-git/v5/plumbing/object/tag.go | 135 ++++--- .../go-git/v5/plumbing/object/tag_scanner.go | 237 +++++++++++ .../go-git/go-git/v5/plumbing/object/tree.go | 128 ++++-- .../v5/plumbing/transport/http/common.go | 168 +++++++- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- .../github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- vendor/github.com/pjbgf/sha1cd/sha1cd.go | 5 - .../pjbgf/sha1cd/sha1cdblock_amd64.go | 4 +- .../pjbgf/sha1cd/sha1cdblock_amd64.s | 8 +- .../pjbgf/sha1cd/sha1cdblock_arm64.go | 4 +- .../pjbgf/sha1cd/sha1cdblock_generic.go | 25 +- vendor/github.com/pjbgf/sha1cd/ubc/ubc.go | 5 +- vendor/golang.org/x/crypto/ssh/cipher.go | 2 +- vendor/golang.org/x/crypto/ssh/client_auth.go | 10 +- vendor/golang.org/x/net/http2/hpack/tables.go | 13 +- vendor/golang.org/x/net/http2/transport.go | 9 +- .../x/sys/cpu/cpu_darwin_arm64_other.go | 2 + .../golang.org/x/sys/cpu/cpu_other_arm64.go | 2 +- .../golang.org/x/sys/cpu/cpu_windows_arm64.go | 42 -- .../golang.org/x/sys/windows/dll_windows.go | 37 +- .../x/sys/windows/security_windows.go | 6 +- vendor/modules.txt | 22 +- 35 files changed, 1600 insertions(+), 406 deletions(-) create mode 100644 vendor/github.com/go-git/go-git/v5/plumbing/object/commit_scanner.go create mode 100644 vendor/github.com/go-git/go-git/v5/plumbing/object/tag_scanner.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go diff --git a/go.mod b/go.mod index e45915f5..94fe8279 100644 --- a/go.mod +++ b/go.mod @@ -13,14 +13,14 @@ require ( github.com/docker/cli v28.4.0+incompatible github.com/docker/docker v28.5.2+incompatible github.com/docker/go-units v0.5.0 - github.com/go-git/go-git/v5 v5.17.2 + github.com/go-git/go-git/v5 v5.19.0 github.com/google/go-cmp v0.7.0 github.com/leonelquinteros/gotext v1.7.2 github.com/moby/sys/signal v0.7.1 github.com/moby/term v0.5.2 github.com/pkg/errors v0.9.1 github.com/schollz/progressbar/v3 v3.19.0 - golang.org/x/term v0.41.0 + golang.org/x/term v0.42.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools/v3 v3.5.2 ) @@ -60,7 +60,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.8.0 // indirect + github.com/go-git/go-billy/v5 v5.9.0 // indirect github.com/go-logfmt/logfmt v0.6.1 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -96,7 +96,7 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/runc v1.1.13 // indirect github.com/opencontainers/runtime-spec v1.1.0 // indirect - github.com/pjbgf/sha1cd v0.5.0 // indirect + github.com/pjbgf/sha1cd v0.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.67.5 // indirect @@ -124,10 +124,10 @@ require ( go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.49.0 // indirect - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/net v0.52.0 // indirect - golang.org/x/text v0.35.0 // indirect + golang.org/x/crypto v0.50.0 // indirect + golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/text v0.36.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect @@ -155,7 +155,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/theupdateframework/notary v0.7.0 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - golang.org/x/sys v0.42.0 + golang.org/x/sys v0.43.0 ) replace github.com/docker/cli v28.4.0+incompatible => git.coopcloud.tech/toolshed/docker-cli v28.5.3-0.20260202112816-30df2d0b3a00+incompatible diff --git a/go.sum b/go.sum index 8ccc3118..2945e87e 100644 --- a/go.sum +++ b/go.sum @@ -389,12 +389,12 @@ github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.8.0 h1:I8hjc3LbBlXTtVuFNJuwYuMiHvQJDq1AT6u4DwDzZG0= -github.com/go-git/go-billy/v5 v5.8.0/go.mod h1:RpvI/rw4Vr5QA+Z60c6d6LXH0rYJo0uD5SqfmrrheCY= +github.com/go-git/go-billy/v5 v5.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmmBPA= +github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.17.2 h1:B+nkdlxdYrvyFK4GPXVU8w1U+YkbsgciIR7f2sZJ104= -github.com/go-git/go-git/v5 v5.17.2/go.mod h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo= +github.com/go-git/go-git/v5 v5.19.0 h1:+WkVUQZSy/F1Gb13udrMKjIM2PrzsNfDKFSfo5tkMtc= +github.com/go-git/go-git/v5 v5.19.0/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -753,8 +753,8 @@ github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuh github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= -github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= +github.com/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU= +github.com/pjbgf/sha1cd v0.6.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -966,8 +966,8 @@ golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -978,8 +978,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1043,8 +1043,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1140,13 +1140,13 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1156,8 +1156,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/vendor/coopcloud.tech/tagcmp/.drone.yml b/vendor/coopcloud.tech/tagcmp/.drone.yml index c5f78899..595ec5a8 100644 --- a/vendor/coopcloud.tech/tagcmp/.drone.yml +++ b/vendor/coopcloud.tech/tagcmp/.drone.yml @@ -3,16 +3,16 @@ kind: pipeline name: coopcloud.tech/tagcmp steps: - name: gofmt - image: golang:1.26 + image: golang:1.21 commands: - test -z "$(gofmt -l .)" - name: go build - image: golang:1.26 + image: golang:1.21 commands: - go build -v . - name: go test - image: golang:1.26 + image: golang:1.21 commands: - go test . -cover diff --git a/vendor/github.com/docker/distribution/Dockerfile b/vendor/github.com/docker/distribution/Dockerfile index 98fb181b..ebd42c24 100644 --- a/vendor/github.com/docker/distribution/Dockerfile +++ b/vendor/github.com/docker/distribution/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 ARG GO_VERSION=1.20.8 -ARG ALPINE_VERSION=3.23 +ARG ALPINE_VERSION=3.18 ARG XX_VERSION=1.2.1 FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx diff --git a/vendor/github.com/go-git/go-billy/v5/README.md b/vendor/github.com/go-git/go-billy/v5/README.md index da5c0747..f260f794 100644 --- a/vendor/github.com/go-git/go-billy/v5/README.md +++ b/vendor/github.com/go-git/go-billy/v5/README.md @@ -5,6 +5,10 @@ Billy implements an interface based on the `os` standard library, allowing to de Billy was born as part of [go-git/go-git](https://github.com/go-git/go-git) project. +## Version support + +go-billy v5 is in maintenance mode. Users should upgrade to [go-billy v6](https://pkg.go.dev/github.com/go-git/go-billy/v6) where possible. + ## Installation ```go diff --git a/vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go b/vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go index dbdf1118..299d1653 100644 --- a/vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go +++ b/vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go @@ -3,19 +3,25 @@ package chroot import ( "errors" "os" + "path" "path/filepath" "strings" + "syscall" "github.com/go-git/go-billy/v5" "github.com/go-git/go-billy/v5/helper/polyfill" ) // ChrootHelper is a helper to implement billy.Chroot. +// It is not a security boundary, callers that need containment should use a +// filesystem implementation that enforces paths at the OS boundary instead. type ChrootHelper struct { underlying billy.Filesystem base string } +const maxFollowedSymlinks = 8 // Aligns with POSIX_SYMLOOP_MAX + // New creates a new filesystem wrapping up the given 'fs'. // The created filesystem has its base in the given ChrootHelperectory of the // underlying filesystem. @@ -34,15 +40,184 @@ func (fs *ChrootHelper) underlyingPath(filename string) (string, error) { return fs.Join(fs.Root(), filename), nil } -func isCrossBoundaries(path string) bool { - path = filepath.ToSlash(path) - path = filepath.Clean(path) +func (fs *ChrootHelper) followedPath(filename string, followFinal bool, op string) (string, error) { + fullpath, err := fs.underlyingPath(filename) + if err != nil { + return "", err + } - return strings.HasPrefix(path, ".."+string(filepath.Separator)) + sl, ok := fs.underlying.(billy.Symlink) + if !ok { + return fullpath, nil + } + + rel, err := fs.relativeToRoot(fullpath) + if err != nil { + return "", err + } + + fullpath, err = fs.resolveFollowedPath(rel, followFinal, op, sl) + if errors.Is(err, billy.ErrNotSupported) { + return fs.underlyingPath(filename) + } + + return fullpath, err +} + +func (fs *ChrootHelper) resolveFollowedPath(rel string, followFinal bool, op string, sl billy.Symlink) (string, error) { + if rel == "" { + return fs.resolveFollowedRoot(followFinal, op, sl) + } + + parts := splitRelativePath(rel) + resolved := "" + followed := 0 + + for len(parts) > 0 { + part := parts[0] + parts = parts[1:] + + currentRel := joinRelativePath(resolved, part) + currentPath := fs.Join(fs.Root(), currentRel) + if len(parts) == 0 && !followFinal { + return currentPath, nil + } + + fi, err := sl.Lstat(currentPath) + if err != nil { + if os.IsNotExist(err) { + return fs.Join(fs.Root(), joinRelativePath(append([]string{currentRel}, parts...)...)), nil + } + return "", err + } + + if fi.Mode()&os.ModeSymlink == 0 { + resolved = currentRel + continue + } + + followed++ + if followed > maxFollowedSymlinks { + return "", symlinkLoopError(op, currentPath) + } + + target, err := sl.Readlink(currentPath) + if err != nil { + return "", err + } + + targetRel, err := fs.linkTargetRel(currentPath, target) + if err != nil { + return "", err + } + if targetRel == currentRel { + return "", symlinkLoopError(op, currentPath) + } + + parts = append(splitRelativePath(targetRel), parts...) + resolved = "" + } + + return fs.Join(fs.Root(), resolved), nil +} + +func symlinkLoopError(op, path string) error { + return &os.PathError{Op: op, Path: path, Err: syscall.ELOOP} +} + +func (fs *ChrootHelper) resolveFollowedRoot(followFinal bool, op string, sl billy.Symlink) (string, error) { + root := fs.Join(fs.Root(), "") + if !followFinal { + return root, nil + } + + fi, err := sl.Lstat(root) + if err != nil { + if os.IsNotExist(err) { + return root, nil + } + return "", err + } + + if fi.Mode()&os.ModeSymlink == 0 { + return root, nil + } + + target, err := sl.Readlink(root) + if err != nil { + return "", err + } + + targetRel, err := fs.linkTargetRel(root, target) + if err != nil { + return root, err + } + if targetRel == "" { + return "", symlinkLoopError(op, root) + } + + return fs.resolveFollowedPath(targetRel, followFinal, op, sl) +} + +func (fs *ChrootHelper) relativeToRoot(filename string) (string, error) { + rel, err := filepath.Rel(filepath.Clean(fs.Root()), filepath.Clean(filename)) + if err != nil || isCrossBoundaries(rel) { + return "", billy.ErrCrossedBoundary + } + + if rel == "." { + return "", nil + } + return rel, nil +} + +func (fs *ChrootHelper) linkTargetRel(linkPath, target string) (string, error) { + target = filepath.FromSlash(target) + if filepath.IsAbs(target) || strings.HasPrefix(target, string(filepath.Separator)) { + return fs.relativeToRoot(target) + } + + return fs.relativeToRoot(fs.Join(filepath.Dir(linkPath), target)) +} + +func splitRelativePath(filename string) []string { + filename = filepath.Clean(filename) + if filename == "" || filename == "." { + return nil + } + + return strings.Split(filepath.ToSlash(filename), "/") +} + +func joinRelativePath(elem ...string) string { + parts := make([]string, 0, len(elem)) + for _, part := range elem { + if part == "" || part == "." { + continue + } + parts = append(parts, part) + } + + if len(parts) == 0 { + return "" + } + return filepath.Join(parts...) +} + +func isCreateExclusive(flag int) bool { + return flag&os.O_CREATE != 0 && flag&os.O_EXCL != 0 +} + +func isCrossBoundaries(name string) bool { + name = filepath.ToSlash(name) + name = strings.TrimLeft(name, "/") + name = path.Clean(name) + + return name == ".." || strings.HasPrefix(name, "../") } func (fs *ChrootHelper) Create(filename string) (billy.File, error) { - fullpath, err := fs.underlyingPath(filename) + fullpath, err := fs.followedPath(filename, true, "create") if err != nil { return nil, err } @@ -56,7 +231,7 @@ func (fs *ChrootHelper) Create(filename string) (billy.File, error) { } func (fs *ChrootHelper) Open(filename string) (billy.File, error) { - fullpath, err := fs.underlyingPath(filename) + fullpath, err := fs.followedPath(filename, true, "open") if err != nil { return nil, err } @@ -70,7 +245,7 @@ func (fs *ChrootHelper) Open(filename string) (billy.File, error) { } func (fs *ChrootHelper) OpenFile(filename string, flag int, mode os.FileMode) (billy.File, error) { - fullpath, err := fs.underlyingPath(filename) + fullpath, err := fs.followedPath(filename, !isCreateExclusive(flag), "open") if err != nil { return nil, err } @@ -84,12 +259,16 @@ func (fs *ChrootHelper) OpenFile(filename string, flag int, mode os.FileMode) (b } func (fs *ChrootHelper) Stat(filename string) (os.FileInfo, error) { - fullpath, err := fs.underlyingPath(filename) + fullpath, err := fs.followedPath(filename, true, "stat") if err != nil { return nil, err } - return fs.underlying.Stat(fullpath) + fi, err := fs.underlying.Stat(fullpath) + if err != nil { + return nil, err + } + return fileInfo{FileInfo: fi, name: filepath.Base(filename)}, nil } func (fs *ChrootHelper) Rename(from, to string) error { @@ -135,7 +314,7 @@ func (fs *ChrootHelper) TempFile(dir, prefix string) (billy.File, error) { } func (fs *ChrootHelper) ReadDir(path string) ([]os.FileInfo, error) { - fullpath, err := fs.underlyingPath(path) + fullpath, err := fs.followedPath(path, true, "readdir") if err != nil { return nil, err } @@ -241,6 +420,11 @@ type file struct { name string } +type fileInfo struct { + os.FileInfo + name string +} + func newFile(fs billy.Filesystem, f billy.File, filename string) billy.File { filename = fs.Join(fs.Root(), filename) filename, _ = filepath.Rel(fs.Root(), filename) @@ -254,3 +438,7 @@ func newFile(fs billy.Filesystem, f billy.File, filename string) billy.File { func (f *file) Name() string { return f.name } + +func (fi fileInfo) Name() string { + return fi.name +} diff --git a/vendor/github.com/go-git/go-billy/v5/osfs/os.go b/vendor/github.com/go-git/go-billy/v5/osfs/os.go index a7fe79f2..0c240ef3 100644 --- a/vendor/github.com/go-git/go-billy/v5/osfs/os.go +++ b/vendor/github.com/go-git/go-billy/v5/osfs/os.go @@ -24,6 +24,9 @@ var Default = &ChrootOS{} // New returns a new OS filesystem. // By default paths are deduplicated, but still enforced // under baseDir. For more info refer to WithDeduplicatePath. +// +// New returns ChrootOS by default for v5 compatibility. Users should prefer +// New with WithBoundOS. func New(baseDir string, opts ...Option) billy.Filesystem { o := &options{ deduplicatePath: true, @@ -47,6 +50,8 @@ func WithBoundOS() Option { } // WithChrootOS returns the option of using a Chroot filesystem OS. +// +// Deprecated: use WithBoundOS instead. func WithChrootOS() Option { return func(o *options) { o.Type = ChrootOSFS diff --git a/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go b/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go index 92ebc3dc..70e6a723 100644 --- a/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go +++ b/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go @@ -20,6 +20,7 @@ package osfs import ( + "errors" "fmt" "os" "path/filepath" @@ -29,6 +30,31 @@ import ( "github.com/go-git/go-billy/v5" ) +var ( + // ErrBaseDirCannotBeRemoved is returned when removing the BoundOS base dir. + ErrBaseDirCannotBeRemoved = errors.New("base dir cannot be removed") + + // ErrBaseDirCannotBeRenamed is returned when renaming the BoundOS base dir. + ErrBaseDirCannotBeRenamed = errors.New("base dir cannot be renamed") + + dotPrefixes = dotPathPrefixes() + dotSeparators = dotPathSeparators() +) + +func dotPathPrefixes() []string { + if filepath.Separator == '\\' { + return []string{"./", ".\\"} + } + return []string{"./"} +} + +func dotPathSeparators() string { + if filepath.Separator == '\\' { + return `/\` + } + return `/` +} + // BoundOS is a fs implementation based on the OS filesystem which is bound to // a base dir. // Prefer this fs implementation over ChrootOS. @@ -54,6 +80,7 @@ func (fs *BoundOS) Create(filename string) (billy.File, error) { } func (fs *BoundOS) OpenFile(filename string, flag int, perm os.FileMode) (billy.File, error) { + filename = fs.expandDot(filename) fn, err := fs.abs(filename) if err != nil { return nil, err @@ -62,6 +89,7 @@ func (fs *BoundOS) OpenFile(filename string, flag int, perm os.FileMode) (billy. } func (fs *BoundOS) ReadDir(path string) ([]os.FileInfo, error) { + path = fs.expandDot(path) dir, err := fs.abs(path) if err != nil { return nil, err @@ -71,6 +99,12 @@ func (fs *BoundOS) ReadDir(path string) ([]os.FileInfo, error) { } func (fs *BoundOS) Rename(from, to string) error { + if fs.isBaseDir(from) { + return ErrBaseDirCannotBeRenamed + } + from = fs.expandDot(from) + to = fs.expandDot(to) + f, err := fs.abs(from) if err != nil { return err @@ -89,6 +123,7 @@ func (fs *BoundOS) Rename(from, to string) error { } func (fs *BoundOS) MkdirAll(path string, perm os.FileMode) error { + path = fs.expandDot(path) dir, err := fs.abs(path) if err != nil { return err @@ -101,6 +136,7 @@ func (fs *BoundOS) Open(filename string) (billy.File, error) { } func (fs *BoundOS) Stat(filename string) (os.FileInfo, error) { + filename = fs.expandDot(filename) filename, err := fs.abs(filename) if err != nil { return nil, err @@ -109,6 +145,11 @@ func (fs *BoundOS) Stat(filename string) (os.FileInfo, error) { } func (fs *BoundOS) Remove(filename string) error { + if fs.isBaseDir(filename) { + return ErrBaseDirCannotBeRemoved + } + filename = fs.expandDot(filename) + fn, err := fs.abs(filename) if err != nil { return err @@ -122,6 +163,7 @@ func (fs *BoundOS) Remove(filename string) error { func (fs *BoundOS) TempFile(dir, prefix string) (billy.File, error) { if dir != "" { var err error + dir = fs.expandDot(dir) dir, err = fs.abs(dir) if err != nil { return nil, err @@ -144,6 +186,11 @@ func (fs *BoundOS) Join(elem ...string) string { } func (fs *BoundOS) RemoveAll(path string) error { + if fs.isBaseDir(path) { + return ErrBaseDirCannotBeRemoved + } + path = fs.expandDot(path) + dir, err := fs.abs(path) if err != nil { return err @@ -152,6 +199,7 @@ func (fs *BoundOS) RemoveAll(path string) error { } func (fs *BoundOS) Symlink(target, link string) error { + link = fs.expandDot(link) ln, err := fs.abs(link) if err != nil { return err @@ -164,6 +212,7 @@ func (fs *BoundOS) Symlink(target, link string) error { } func (fs *BoundOS) Lstat(filename string) (os.FileInfo, error) { + filename = fs.expandDot(filename) filename = filepath.Clean(filename) if !filepath.IsAbs(filename) { filename = filepath.Join(fs.baseDir, filename) @@ -175,6 +224,7 @@ func (fs *BoundOS) Lstat(filename string) (os.FileInfo, error) { } func (fs *BoundOS) Readlink(link string) (string, error) { + link = fs.expandDot(link) if !filepath.IsAbs(link) { link = filepath.Clean(filepath.Join(fs.baseDir, link)) } @@ -185,6 +235,7 @@ func (fs *BoundOS) Readlink(link string) (string, error) { } func (fs *BoundOS) Chmod(path string, mode os.FileMode) error { + path = fs.expandDot(path) abspath, err := fs.abs(path) if err != nil { return err @@ -199,7 +250,7 @@ func (fs *BoundOS) Chroot(path string) (billy.Filesystem, error) { if err != nil { return nil, err } - return New(joined), nil + return New(joined, WithBoundOS()), nil } // Root returns the current base dir of the billy.Filesystem. @@ -220,6 +271,37 @@ func (fs *BoundOS) createDir(fullpath string) error { return nil } +func (fs *BoundOS) expandDot(path string) string { + if path == "." { + return fs.baseDir + } + for _, prefix := range dotPrefixes { + if strings.HasPrefix(path, prefix) { + path = strings.TrimLeft(strings.TrimPrefix(path, prefix), dotSeparators) + if path == "" { + return fs.baseDir + } + return path + } + } + return path +} + +func (fs *BoundOS) isBaseDir(path string) bool { + if path == "" || filepath.Clean(path) == "." { + return true + } + path = fs.expandDot(path) + if filepath.Clean(path) == filepath.Clean(fs.baseDir) { + return true + } + abspath, err := fs.abs(path) + if err != nil { + return false + } + return filepath.Clean(abspath) == filepath.Clean(fs.baseDir) +} + // abs transforms filename to an absolute path, taking into account the base dir. // Relative paths won't be allowed to ascend the base dir, so `../file` will become // `/working-dir/file`. @@ -233,7 +315,7 @@ func (fs *BoundOS) abs(filename string) (string, error) { path, err := securejoin.SecureJoin(fs.baseDir, filename) if err != nil { - return "", nil + return "", err } if fs.deduplicatePath { @@ -246,24 +328,12 @@ func (fs *BoundOS) abs(filename string) (string, error) { return path, nil } -// insideBaseDir checks whether filename is located within -// the fs.baseDir. -func (fs *BoundOS) insideBaseDir(filename string) (bool, error) { - if filename == fs.baseDir { - return true, nil - } - if !strings.HasPrefix(filename, fs.baseDir+string(filepath.Separator)) { - return false, fmt.Errorf("path outside base dir") - } - return true, nil -} - // insideBaseDirEval checks whether filename is contained within // a dir that is within the fs.baseDir, by first evaluating any symlinks // that either filename or fs.baseDir may contain. func (fs *BoundOS) insideBaseDirEval(filename string) (bool, error) { // "/" contains all others. - if fs.baseDir == "/" { + if fs.baseDir == "/" || fs.baseDir == filename { return true, nil } dir, err := filepath.EvalSymlinks(filepath.Dir(filename)) diff --git a/vendor/github.com/go-git/go-billy/v5/osfs/os_chroot.go b/vendor/github.com/go-git/go-billy/v5/osfs/os_chroot.go index 413b3b89..2fa9d8b5 100644 --- a/vendor/github.com/go-git/go-billy/v5/osfs/os_chroot.go +++ b/vendor/github.com/go-git/go-billy/v5/osfs/os_chroot.go @@ -14,6 +14,8 @@ import ( // ChrootOS is a legacy filesystem based on a "soft chroot" of the os filesystem. // Although this is still the default os filesystem, consider using BoundOS instead. // +// Deprecated: use New with WithBoundOS instead. +// // Behaviours of note: // 1. A "soft chroot" translates the base dir to "/" for the purposes of the // fs abstraction. @@ -24,6 +26,14 @@ import ( type ChrootOS struct{} func newChrootOS(baseDir string) billy.Filesystem { + if baseDir != "" { + resolved, err := filepath.EvalSymlinks(baseDir) + if err != nil { + return chroot.New(&ChrootOS{}, baseDir) + } + baseDir = resolved + } + return chroot.New(&ChrootOS{}, baseDir) } diff --git a/vendor/github.com/go-git/go-billy/v5/util/util.go b/vendor/github.com/go-git/go-billy/v5/util/util.go index 2cdd832c..cd869d6e 100644 --- a/vendor/github.com/go-git/go-billy/v5/util/util.go +++ b/vendor/github.com/go-git/go-billy/v5/util/util.go @@ -16,8 +16,6 @@ import ( // can but returns the first error it encounters. If the path does not exist, // RemoveAll returns nil (no error). func RemoveAll(fs billy.Basic, path string) error { - fs, path = getUnderlyingAndPath(fs, path) - if r, ok := fs.(removerAll); ok { return r.RemoveAll(path) } @@ -39,7 +37,7 @@ func removeAll(fs billy.Basic, path string) error { } // Otherwise, is this a directory we need to recurse into? - dir, serr := fs.Stat(path) + dir, serr := lstat(fs, path) if serr != nil { if errors.Is(serr, os.ErrNotExist) { return nil @@ -48,8 +46,8 @@ func removeAll(fs billy.Basic, path string) error { return serr } - if !dir.IsDir() { - // Not a directory; return the error from Remove. + if dir.Mode()&os.ModeSymlink != 0 || !dir.IsDir() { + // Not a directory we should recurse into; return the error from Remove. return err } @@ -62,7 +60,7 @@ func removeAll(fs billy.Basic, path string) error { fis, err := dirfs.ReadDir(path) if err != nil { if errors.Is(err, os.ErrNotExist) { - // Race. It was deleted between the Lstat and Open. + // Race. It was deleted between the Lstat and ReadDir. // Return nil per RemoveAll's docs. return nil } @@ -91,7 +89,18 @@ func removeAll(fs billy.Basic, path string) error { } return err +} +func lstat(filesystem billy.Basic, path string) (os.FileInfo, error) { + if sl, ok := filesystem.(billy.Symlink); ok { + // Avoid following a symlink substituted after the initial Remove fails. + fi, err := sl.Lstat(path) + if err == nil || !errors.Is(err, billy.ErrNotSupported) { + return fi, err + } + } + + return filesystem.Stat(path) } // WriteFile writes data to a file named by filename in the given filesystem. @@ -123,8 +132,10 @@ func WriteFile(fs billy.Basic, filename string, data []byte, perm os.FileMode) ( // We generate random temporary file names so that there's a good // chance the file doesn't exist yet - keeps the number of tries in // TempFile to a minimum. -var rand uint32 -var randmu sync.Mutex +var ( + rand uint32 + randmu sync.Mutex +) func reseed() uint32 { return uint32(time.Now().UnixNano() + int64(os.Getpid())) @@ -220,22 +231,6 @@ func getTempDir(fs billy.Basic) string { return ".tmp" } -type underlying interface { - Underlying() billy.Basic -} - -func getUnderlyingAndPath(fs billy.Basic, path string) (billy.Basic, string) { - u, ok := fs.(underlying) - if !ok { - return fs, path - } - if ch, ok := fs.(billy.Chroot); ok { - path = fs.Join(ch.Root(), path) - } - - return u.Underlying(), path -} - // ReadFile reads the named file and returns the contents from the given filesystem. // A successful call returns err == nil, not err == EOF. // Because ReadFile reads the whole file, it does not treat an EOF from Read diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/commit.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/commit.go index 78627b06..07034c10 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/object/commit.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/commit.go @@ -5,7 +5,7 @@ import ( "context" "errors" "fmt" - "io" + "slices" "strings" "github.com/ProtonMail/go-crypto/openpgp" @@ -20,6 +20,7 @@ const ( beginpgp string = "-----BEGIN PGP SIGNATURE-----" endpgp string = "-----END PGP SIGNATURE-----" headerpgp string = "gpgsig" + headerpgp256 string = "gpgsig-sha256" headerencoding string = "encoding" // https://github.com/git/git/blob/bcb6cae2966cc407ca1afc77413b3ef11103c175/Documentation/gitformat-signature.txt#L153 @@ -41,6 +42,11 @@ type MessageEncoding string // in time, such as a timestamp, the author of the changes since the last // commit, a pointer to the previous commit(s), etc. // http://shafiulazam.com/gitbook/1_the_git_object_model.html +// +// When a Commit is populated by Decode it retains a reference to the source +// plumbing.EncodedObject so that EncodeWithoutSignature can reproduce the +// exact bytes the signature was computed over. Refer to EncodeWithoutSignature +// for more information. type Commit struct { // Hash of the commit object. Hash plumbing.Hash @@ -66,6 +72,9 @@ type Commit struct { ExtraHeaders []ExtraHeader s storer.EncodedObjectStorer + // src holds the encoded object this Commit was decoded from, used by + // EncodeWithoutSignature to recover the canonical signed bytes. + src plumbing.EncodedObject } // ExtraHeader holds any non-standard header @@ -98,8 +107,8 @@ func (h ExtraHeader) Format(f fmt.State, verb rune) { func parseExtraHeader(line []byte) (ExtraHeader, bool) { split := bytes.SplitN(line, []byte{' '}, 2) - out := ExtraHeader { - Key: string(bytes.TrimRight(split[0], "\n")), + out := ExtraHeader{ + Key: string(bytes.TrimRight(split[0], "\n")), Value: "", } @@ -181,6 +190,11 @@ func (c *Commit) NumParents() int { var ErrParentNotFound = errors.New("commit parent not found") +// ErrMalformedCommit is returned when a commit object cannot be decoded +// because its standard headers (tree, parent, author, committer) are missing, +// duplicated, or out of order. +var ErrMalformedCommit = errors.New("malformed commit") + // Parent returns the ith parent of a commit. func (c *Commit) Parent(i int) (*Commit, error) { if len(c.ParentHashes) == 0 || i > len(c.ParentHashes)-1 { @@ -227,14 +241,23 @@ func (c *Commit) Type() plumbing.ObjectType { return plumbing.CommitObject } +func (c *Commit) reset() { + storer := c.s + *c = Commit{ + Encoding: defaultUtf8CommitMessageEncoding, + s: storer, + } +} + // Decode transforms a plumbing.EncodedObject into a Commit struct. func (c *Commit) Decode(o plumbing.EncodedObject) (err error) { if o.Type() != plumbing.CommitObject { return ErrUnsupportedObject } + c.reset() c.Hash = o.Hash() - c.Encoding = defaultUtf8CommitMessageEncoding + c.src = o reader, err := o.Reader() if err != nil { @@ -245,97 +268,17 @@ func (c *Commit) Decode(o plumbing.EncodedObject) (err error) { r := sync.GetBufioReader(reader) defer sync.PutBufioReader(r) - var message bool - var mergetag bool - var pgpsig bool - var msgbuf bytes.Buffer - var extraheader *ExtraHeader = nil - for { - line, err := r.ReadBytes('\n') - if err != nil && err != io.EOF { + s := &commitScanner{r: r, c: c} + for state := scanTree; state != nil; { + state, err = state(s) + if err != nil { return err } - - if mergetag { - if len(line) > 0 && line[0] == ' ' { - line = bytes.TrimLeft(line, " ") - c.MergeTag += string(line) - continue - } else { - mergetag = false - } - } - - if pgpsig { - if len(line) > 0 && line[0] == ' ' { - line = bytes.TrimLeft(line, " ") - c.PGPSignature += string(line) - continue - } else { - pgpsig = false - } - } - - if extraheader != nil { - if len(line) > 0 && line[0] == ' ' { - extraheader.Value += string(line[1:]) - continue - } else { - extraheader.Value = strings.TrimRight(extraheader.Value, "\n") - c.ExtraHeaders = append(c.ExtraHeaders, *extraheader) - extraheader = nil - } - } - - if !message { - original_line := line - line = bytes.TrimSpace(line) - if len(line) == 0 { - message = true - continue - } - - split := bytes.SplitN(line, []byte{' '}, 2) - - var data []byte - if len(split) == 2 { - data = split[1] - } - - switch string(split[0]) { - case "tree": - c.TreeHash = plumbing.NewHash(string(data)) - case "parent": - c.ParentHashes = append(c.ParentHashes, plumbing.NewHash(string(data))) - case "author": - c.Author.Decode(data) - case "committer": - c.Committer.Decode(data) - case headermergetag: - c.MergeTag += string(data) + "\n" - mergetag = true - case headerencoding: - c.Encoding = MessageEncoding(data) - case headerpgp: - c.PGPSignature += string(data) + "\n" - pgpsig = true - default: - h, maybecontinued := parseExtraHeader(original_line) - if maybecontinued { - extraheader = &h - } else { - c.ExtraHeaders = append(c.ExtraHeaders, h) - } - } - } else { - msgbuf.Write(line) - } - - if err == io.EOF { - break - } } - c.Message = msgbuf.String() + if !s.sawTree { + return fmt.Errorf("%w: missing tree header", ErrMalformedCommit) + } + c.Message = s.msgbuf.String() return nil } @@ -344,11 +287,73 @@ func (c *Commit) Encode(o plumbing.EncodedObject) error { return c.encode(o, true) } -// EncodeWithoutSignature export a Commit into a plumbing.EncodedObject without the signature (correspond to the payload of the PGP signature). +// EncodeWithoutSignature exports a Commit into a plumbing.EncodedObject +// without any signature headers, producing the payload that PGP/GPG +// signatures are computed over. +// +// Behaviour depends on how the Commit was created: +// +// - For Commits populated by Decode whose exported fields still match the +// source object, the payload is streamed from the raw source bytes with +// gpgsig and gpgsig-sha256 headers (and their continuation lines) +// stripped verbatim. This preserves the exact bytes the signature was +// computed over, regardless of any normalization performed by Decode. +// +// - For Commits constructed in memory, or for decoded Commits whose +// exported fields have been mutated, the payload is derived from the +// current struct fields. Mutation is detected by re-decoding the source +// object and comparing exported fields; if any differ, the in-memory +// representation prevails. func (c *Commit) EncodeWithoutSignature(o plumbing.EncodedObject) error { + if c.matchesSource() { + return stripObjectSignatures(o, c.src, plumbing.CommitObject) + } return c.encode(o, false) } +// matchesSource reports whether c.src is set and re-decoding it produces a +// Commit whose payload-affecting exported fields are identical to those of +// c. It is the auto-detection used by EncodeWithoutSignature to decide +// between the raw bytes and the struct-encoded payload. +// +// PGPSignature is intentionally excluded from the comparison: neither path +// emits it, so mutating it must not trigger a switch to struct-encode (which +// would change the byte layout the caller is trying to verify against). +func (c *Commit) matchesSource() bool { + if c.src == nil { + return false + } + fresh := &Commit{} + if err := fresh.Decode(c.src); err != nil { + return false + } + return c.Hash == fresh.Hash && + signatureEqual(c.Author, fresh.Author) && + signatureEqual(c.Committer, fresh.Committer) && + c.MergeTag == fresh.MergeTag && + c.Message == fresh.Message && + c.TreeHash == fresh.TreeHash && + c.Encoding == fresh.Encoding && + slices.Equal(c.ParentHashes, fresh.ParentHashes) && + slices.Equal(c.ExtraHeaders, fresh.ExtraHeaders) +} + +func signatureEqual(a, b Signature) bool { + return a.Name == b.Name && + a.Email == b.Email && + a.When.Unix() == b.When.Unix() && + a.When.Format("-0700") == b.When.Format("-0700") +} + +func isStandardHeader(key string) bool { + switch key { + case "tree", "parent", "author", "committer", + headerencoding, headermergetag, headerpgp, headerpgp256: + return true + } + return false +} + func (c *Commit) encode(o plumbing.EncodedObject, includeSig bool) (err error) { o.SetType(plumbing.CommitObject) w, err := o.Writer() @@ -407,7 +412,9 @@ func (c *Commit) encode(o plumbing.EncodedObject, includeSig bool) (err error) { } for _, header := range c.ExtraHeaders { - + if isStandardHeader(header.Key) { + continue + } if _, err = fmt.Fprintf(w, "\n%s", header); err != nil { return err } @@ -478,9 +485,21 @@ func (c *Commit) String() string { ) } +// ErrMultipleSignatures is returned by Verify when the commit carries more +// than one armored signature block. Mirrors upstream's parse_gpg_output +// rejection of GOODSIG/BADSIG status lines after the first +// (gpg-interface.c:257-269): multi-signature commits are intentionally +// unsupported because their provenance cannot be reduced to a single +// authoritative signer. +var ErrMultipleSignatures = errors.New("commit has multiple signatures") + // Verify performs PGP verification of the commit with a provided armored // keyring and returns openpgp.Entity associated with verifying key on success. func (c *Commit) Verify(armoredKeyRing string) (*openpgp.Entity, error) { + if countSignatureBlocks([]byte(c.PGPSignature)) > 1 { + return nil, ErrMultipleSignatures + } + keyRingReader := strings.NewReader(armoredKeyRing) keyring, err := openpgp.ReadArmoredKeyRing(keyRingReader) if err != nil { diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_scanner.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_scanner.go new file mode 100644 index 00000000..7e4cf544 --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_scanner.go @@ -0,0 +1,377 @@ +package object + +import ( + "bufio" + "bytes" + "fmt" + "io" + "strings" + + "github.com/go-git/go-git/v5/plumbing" +) + +// commitScanner holds the working state of the commit decoder driven by the +// stateFn loop in (*Commit).Decode. Each commitState reads one or more lines +// from r, updates the in-progress *Commit and the scanner's bookkeeping, and +// returns the state that should run next (or nil to stop). +type commitScanner struct { + r *bufio.Reader + c *Commit + msgbuf bytes.Buffer + + // pending holds a line that was read but the current state decided to + // hand back to the next state, paired with the io.EOF flag that was + // returned when the line was originally read. + pending []byte + pendingErr error + + // First-occurrence tracking: once the corresponding field has been + // decoded, subsequent occurrences are silently dropped (matches + // upstream's find_commit_header / first-wins semantics). + // + // gpgsig is not tracked here: upstream's parse_buffer_signed_by_header + // (commit.c:1186) accumulates every occurrence into one signature buffer, + // so we do the same on the scanner side to keep verification payloads + // byte-aligned. gpgsig-sha256 is recognized and skipped without exposing a + // new field in v5. + sawTree, sawAuthor, sawCommitter bool + sawEncoding, sawMergetag bool + + // extra is the multi-line ExtraHeader currently being assembled. + extra *ExtraHeader +} + +// commitState is one step of the decoder state machine. Each function reads +// the lines it needs, mutates *Commit via s.c, and returns the next state to +// run (or nil to terminate the loop). +type commitState func(*commitScanner) (commitState, error) + +// readLine returns the next line from the buffer, transparently consuming any +// line that was previously pushed back by a state that decided not to handle +// it. +func (s *commitScanner) readLine() ([]byte, error) { + if s.pending != nil { + line, err := s.pending, s.pendingErr + s.pending, s.pendingErr = nil, nil + return line, err + } + line, err := s.r.ReadBytes('\n') + if err != nil && err != io.EOF { + return line, err + } + return line, err +} + +// pushBack stashes an unconsumed line so the next state's readLine call sees +// it. Only one line can be pushed back at a time. +func (s *commitScanner) pushBack(line []byte, err error) { + s.pending = line + s.pendingErr = err +} + +// scanTree expects the first non-empty header to be `tree HASH`. Anything +// else (or an empty buffer) is rejected with ErrMalformedCommit, matching +// upstream's `bogus commit object` check. +func scanTree(s *commitScanner) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 || isBlankLine(line) { + return nil, fmt.Errorf("%w: missing tree header", ErrMalformedCommit) + } + + key, data := splitHeader(line) + if key != "tree" { + return nil, fmt.Errorf("%w: tree header must be first", ErrMalformedCommit) + } + h, herr := parseObjectIDHex(data, ErrMalformedCommit, "tree") + if herr != nil { + return nil, herr + } + s.c.TreeHash = h + s.sawTree = true + if err == io.EOF { + return nil, nil + } + return scanParents, nil +} + +// scanParents consumes contiguous `parent HASH` lines. The first non-parent +// line ends the parent block and is handed off to scanAuthor; any later +// `parent` line is silently dropped (matches upstream's parse_commit_buffer +// exiting its parent loop at the first non-parent line and +// read_commit_extra_header_lines filtering `parent` out of extras). +func scanParents(s *commitScanner) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 { + return nil, nil + } + if isBlankLine(line) { + return scanMessage, nil + } + + key, data := splitHeader(line) + if key == "parent" { + h, herr := parseObjectIDHex(data, ErrMalformedCommit, "parent") + if herr != nil { + return nil, herr + } + s.c.ParentHashes = append(s.c.ParentHashes, h) + if err == io.EOF { + return nil, nil + } + return scanParents, nil + } + s.pushBack(line, err) + return scanAuthor, nil +} + +// scanAuthor accepts an `author` line at its canonical position immediately +// after the parent block. Any other header here is pushed back for +// scanCommitter; an out-of-place author is therefore silently dropped. +// Mirrors upstream's parse_commit_date func. +func scanAuthor(s *commitScanner) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 { + return nil, nil + } + if isBlankLine(line) { + return scanMessage, nil + } + + key, data := splitHeader(line) + if key == "author" { + s.c.Author.Decode(data) + s.sawAuthor = true + if err == io.EOF { + return nil, nil + } + return scanCommitter, nil + } + s.pushBack(line, err) + return scanCommitter, nil +} + +// scanCommitter accepts a `committer` line at its canonical position +// immediately after the author. Any other header is pushed back for +// scanHeaders. Same upstream rationale as scanAuthor. +func scanCommitter(s *commitScanner) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 { + return nil, nil + } + if isBlankLine(line) { + return scanMessage, nil + } + + key, data := splitHeader(line) + if key == "committer" { + s.c.Committer.Decode(data) + s.sawCommitter = true + if err == io.EOF { + return nil, nil + } + return scanHeaders, nil + } + s.pushBack(line, err) + return scanHeaders, nil +} + +// scanHeaders dispatches one header line. Continuation-bearing headers +// (mergetag, gpgsig, gpgsig-sha256, and unknown extras whose value is +// continued on subsequent lines) hand off to a dedicated continuation state +// that handles the `...` lines and then returns here. +func scanHeaders(s *commitScanner) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 { + return nil, nil + } + if isBlankLine(line) { + return scanMessage, nil + } + + originalLine := line + key, data := splitHeader(line) + + var next commitState = scanHeaders + switch key { + case "tree", "parent", "author", "committer": + // Anything reaching scanHeaders with one of these keys is out of + // canonical position: duplicate tree, parent past the contiguous + // block, or author/committer not at their expected slot. Drop them + // the same way upstream's standard_header_field filter excludes + // them from the extras list (read_commit_extra_header_lines, + // commit.c:1520-1522). + case headerencoding: + if !s.sawEncoding { + s.c.Encoding = MessageEncoding(data) + s.sawEncoding = true + } + case headermergetag: + if s.sawMergetag { + next = scanSkipCont + } else { + s.c.MergeTag += string(data) + "\n" + s.sawMergetag = true + next = scanMergetagCont + } + case headerpgp: + s.c.PGPSignature += string(data) + "\n" + next = scanPgpCont + case headerpgp256: + next = scanSkipCont + default: + h, multiline := parseExtraHeader(originalLine) + if multiline { + s.extra = &h + next = scanExtraCont + } else { + s.c.ExtraHeaders = append(s.c.ExtraHeaders, h) + } + } + + if err == io.EOF { + return nil, nil + } + return next, nil +} + +// scanMergetagCont accumulates continuation lines for the first mergetag +// header. Continuations strip exactly one leading space, mirroring upstream's +// `line + 1` (commit.c:1509). The first non-continuation line is pushed back +// so scanHeaders can dispatch it. +func scanMergetagCont(s *commitScanner) (commitState, error) { + return continuationCont(s, &s.c.MergeTag, scanMergetagCont) +} + +// scanPgpCont accumulates continuation lines for a signature header. +// Continuations strip exactly one leading space, mirroring upstream's +// `line + 1` (commit.c:1509). The first non-continuation line is pushed back +// so scanHeaders can dispatch it. Repeat occurrences of the same signature +// header land back here and concatenate, matching upstream's +// parse_buffer_signed_by_header (commit.c:1186). +func scanPgpCont(s *commitScanner) (commitState, error) { + return continuationCont(s, &s.c.PGPSignature, scanPgpCont) +} + +func continuationCont(s *commitScanner, dst *string, self commitState) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) > 0 && line[0] == ' ' { + *dst += string(line[1:]) + if err == io.EOF { + return nil, nil + } + return self, nil + } + if len(line) > 0 { + s.pushBack(line, err) + } + return scanHeaders, nil +} + +// scanSkipCont discards continuation lines that belong to a header scanHeaders +// chose to drop. +func scanSkipCont(s *commitScanner) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) > 0 && line[0] == ' ' { + if err == io.EOF { + return nil, nil + } + return scanSkipCont, nil + } + if len(line) > 0 { + s.pushBack(line, err) + } + return scanHeaders, nil +} + +// scanExtraCont accumulates continuation lines for an unknown ExtraHeader +// whose value spans multiple lines, then finalises the entry once the +// continuation block ends. +func scanExtraCont(s *commitScanner) (commitState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) > 0 && line[0] == ' ' { + s.extra.Value += string(line[1:]) + if err == io.EOF { + s.finaliseExtra() + return nil, nil + } + return scanExtraCont, nil + } + s.finaliseExtra() + if len(line) > 0 { + s.pushBack(line, err) + } + return scanHeaders, nil +} + +func (s *commitScanner) finaliseExtra() { + s.extra.Value = strings.TrimRight(s.extra.Value, "\n") + s.c.ExtraHeaders = append(s.c.ExtraHeaders, *s.extra) + s.extra = nil +} + +// scanMessage drains the remaining bytes into the message buffer. +func scanMessage(s *commitScanner) (commitState, error) { + for { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) > 0 { + s.msgbuf.Write(line) + } + if err == io.EOF { + return nil, nil + } + } +} + +// isBlankLine reports whether line is the canonical header/body separator: +// a single newline. Mirrors upstream's `*line == '\n'` test in +// read_commit_extra_header_lines (commit.c:1502). +func isBlankLine(line []byte) bool { + return len(line) == 1 && line[0] == '\n' +} + +// splitHeader returns the header keyword (everything before the first space) +// and the value (everything after, with the trailing newline stripped). If +// the header has no value the returned data is nil. +func splitHeader(line []byte) (string, []byte) { + trimmed := bytes.TrimRight(line, "\n") + key, value, ok := bytes.Cut(trimmed, []byte{' '}) + if !ok { + return string(trimmed), nil + } + return string(key), value +} + +func parseObjectIDHex(data []byte, malformedErr error, header string) (plumbing.Hash, error) { + id := string(data) + if !plumbing.IsHash(id) { + return plumbing.ZeroHash, fmt.Errorf("%w: bad %s hash", malformedErr, header) + } + return plumbing.NewHash(id), nil +} diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go index f9c3d306..3346e4fd 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go @@ -1,6 +1,13 @@ package object -import "bytes" +import ( + "bytes" + "io" + + "github.com/go-git/go-git/v5/plumbing" + "github.com/go-git/go-git/v5/utils/ioutil" + "github.com/go-git/go-git/v5/utils/sync" +) const ( signatureTypeUnknown signatureType = iota @@ -100,3 +107,116 @@ func parseSignedBytes(b []byte) (int, signatureType) { } return match, t } + +// countSignatureBlocks reports how many distinct armored signature blocks +// start at a line boundary in b. Used by verification paths to reject +// multi-signature payloads, matching upstream's check in gpg-interface.c +// where parse_gpg_output bails out the first time it sees a second +// exclusive status line (a second GOODSIG/BADSIG/etc.). +func countSignatureBlocks(b []byte) int { + n, count := 0, 0 + for n < len(b) { + i := b[n:] + if typeForSignature(i) != signatureTypeUnknown { + count++ + } + if eol := bytes.IndexByte(i, '\n'); eol >= 0 { + n += eol + 1 + continue + } + break + } + return count +} + +// isSignatureHeader reports whether line is a canonical "gpgsig "/ +// "gpgsig-sha256 " header line. Other "gpgsig"-prefixed extra headers +// are intentionally not matched. +func isSignatureHeader(line []byte) bool { + return bytes.HasPrefix(line, []byte(headerpgp+" ")) || + bytes.HasPrefix(line, []byte(headerpgp256+" ")) +} + +// stripObjectSignatures streams src into dst, producing the byte sequence +// over which a PGP/GPG signature is computed: +// +// - Canonical "gpgsig" and "gpgsig-sha256" headers (and their +// continuation lines) are dropped, mirroring upstream's +// remove_signature in commit.c. +// - For tag objects, the inline trailing PGP signature is additionally +// truncated, mirroring upstream's parse_signature in gpg-interface.c +// used by gpg_verify_tag. +// +// The returned object's type is set to objType. Used by both +// Commit.EncodeWithoutSignature and Tag.EncodeWithoutSignature to +// reproduce the exact bytes the signature was computed over. +func stripObjectSignatures(dst, src plumbing.EncodedObject, objType plumbing.ObjectType) (err error) { + dst.SetType(objType) + + r, err := src.Reader() + if err != nil { + return err + } + defer ioutil.CheckClose(r, &err) + + var input io.Reader = r + if objType == plumbing.TagObject { + raw, err := io.ReadAll(r) + if err != nil { + return err + } + if sm, _ := parseSignedBytes(raw); sm >= 0 { + raw = raw[:sm] + } + input = bytes.NewReader(raw) + } + + w, err := dst.Writer() + if err != nil { + return err + } + defer ioutil.CheckClose(w, &err) + + return stripHeaderSignatures(w, input) +} + +// stripHeaderSignatures copies r to w, dropping canonical signature header +// lines (gpgsig and gpgsig-sha256) and their continuation lines. Lines +// past the blank line that closes the header block are copied verbatim. +func stripHeaderSignatures(w io.Writer, r io.Reader) error { + br := sync.GetBufioReader(r) + defer sync.PutBufioReader(br) + + var inBody, skipping bool + for { + line, rerr := br.ReadBytes('\n') + if rerr != nil && rerr != io.EOF { + return rerr + } + + write := true + if !inBody { + switch { + case skipping && len(line) > 0 && line[0] == ' ': + write = false + case isSignatureHeader(line): + skipping = true + write = false + case len(line) == 1 && line[0] == '\n': + skipping = false + inBody = true + default: + skipping = false + } + } + + if write && len(line) > 0 { + if _, werr := w.Write(line); werr != nil { + return werr + } + } + if rerr == io.EOF { + return nil + } + } +} diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/tag.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/tag.go index cf46c08e..93e56a4a 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/object/tag.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/tag.go @@ -1,9 +1,8 @@ package object import ( - "bytes" + "errors" "fmt" - "io" "strings" "github.com/ProtonMail/go-crypto/openpgp" @@ -13,6 +12,10 @@ import ( "github.com/go-git/go-git/v5/utils/sync" ) +// ErrMalformedTag is returned when a tag object cannot be decoded because +// its required headers (object, type, tag) are missing or out of order. +var ErrMalformedTag = errors.New("malformed tag") + // Tag represents an annotated tag object. It points to a single git object of // any type, but tags typically are applied to commit or blob objects. It // provides a reference that associates the target with a tag name. It also @@ -39,6 +42,9 @@ type Tag struct { Target plumbing.Hash s storer.EncodedObjectStorer + // src holds the encoded object this Tag was decoded from, used by + // EncodeWithoutSignature to recover the canonical signed bytes. + src plumbing.EncodedObject } // GetTag gets a tag from an object storer and decodes it. @@ -77,13 +83,20 @@ func (t *Tag) Type() plumbing.ObjectType { return plumbing.TagObject } +func (t *Tag) reset() { + storer := t.s + *t = Tag{s: storer} +} + // Decode transforms a plumbing.EncodedObject into a Tag struct. func (t *Tag) Decode(o plumbing.EncodedObject) (err error) { if o.Type() != plumbing.TagObject { return ErrUnsupportedObject } + t.reset() t.Hash = o.Hash() + t.src = o reader, err := o.Reader() if err != nil { @@ -94,42 +107,15 @@ func (t *Tag) Decode(o plumbing.EncodedObject) (err error) { r := sync.GetBufioReader(reader) defer sync.PutBufioReader(r) - for { - var line []byte - line, err = r.ReadBytes('\n') - if err != nil && err != io.EOF { + scanner := &tagScanner{r: r, t: t} + for state := scanTagObject; state != nil; { + state, err = state(scanner) + if err != nil { return err } - - line = bytes.TrimSpace(line) - if len(line) == 0 { - break // Start of message - } - - split := bytes.SplitN(line, []byte{' '}, 2) - switch string(split[0]) { - case "object": - t.Target = plumbing.NewHash(string(split[1])) - case "type": - t.TargetType, err = plumbing.ParseObjectType(string(split[1])) - if err != nil { - return err - } - case "tag": - t.Name = string(split[1]) - case "tagger": - t.Tagger.Decode(split[1]) - } - - if err == io.EOF { - return nil - } } - data, err := io.ReadAll(r) - if err != nil { - return err - } + data := scanner.msgbuf.Bytes() if sm, _ := parseSignedBytes(data); sm >= 0 { t.PGPSignature = string(data[sm:]) data = data[:sm] @@ -144,11 +130,54 @@ func (t *Tag) Encode(o plumbing.EncodedObject) error { return t.encode(o, true) } -// EncodeWithoutSignature export a Tag into a plumbing.EncodedObject without the signature (correspond to the payload of the PGP signature). +// EncodeWithoutSignature exports a Tag into a plumbing.EncodedObject without +// any signature data, producing the payload that PGP/GPG signatures are +// computed over. +// +// Behaviour mirrors Commit.EncodeWithoutSignature: +// +// - For Tags populated by Decode whose exported fields still match the +// source object, the payload is streamed from the raw source bytes with +// the inline trailing signature truncated and gpgsig/gpgsig-sha256 +// headers (and their continuation lines) stripped verbatim. This +// preserves the exact bytes the signature was computed over, regardless +// of any normalization performed by Decode. +// +// - For Tags constructed in memory, or for decoded Tags whose exported +// fields have been mutated, the payload is derived from the current +// struct fields. Mutation is detected by re-decoding the source object +// and comparing exported fields; if any differ, the in-memory +// representation prevails. func (t *Tag) EncodeWithoutSignature(o plumbing.EncodedObject) error { + if t.matchesSource() { + return stripObjectSignatures(o, t.src, plumbing.TagObject) + } return t.encode(o, false) } +// matchesSource reports whether t.src is set and re-decoding it produces a +// Tag whose payload-affecting exported fields are identical to those of t. +// +// PGPSignature is intentionally excluded from the comparison: neither path +// emits it as part of the verification payload, so mutating it must not +// trigger a switch to struct-encode (which would change the byte layout the +// caller is trying to verify against). +func (t *Tag) matchesSource() bool { + if t.src == nil { + return false + } + fresh := &Tag{} + if err := fresh.Decode(t.src); err != nil { + return false + } + return t.Hash == fresh.Hash && + t.Name == fresh.Name && + signatureEqual(t.Tagger, fresh.Tagger) && + t.Message == fresh.Message && + t.TargetType == fresh.TargetType && + t.Target == fresh.Target +} + func (t *Tag) encode(o plumbing.EncodedObject, includeSig bool) (err error) { o.SetType(plumbing.TagObject) w, err := o.Writer() @@ -158,16 +187,26 @@ func (t *Tag) encode(o plumbing.EncodedObject, includeSig bool) (err error) { defer ioutil.CheckClose(w, &err) if _, err = fmt.Fprintf(w, - "object %s\ntype %s\ntag %s\ntagger ", + "object %s\ntype %s\ntag %s\n", t.Target.String(), t.TargetType.Bytes(), t.Name); err != nil { return err } - if err = t.Tagger.Encode(w); err != nil { - return err + if !isZeroSignature(t.Tagger) { + if _, err = fmt.Fprint(w, "tagger "); err != nil { + return err + } + + if err = t.Tagger.Encode(w); err != nil { + return err + } + + if _, err = fmt.Fprint(w, "\n"); err != nil { + return err + } } - if _, err = fmt.Fprint(w, "\n\n"); err != nil { + if _, err = fmt.Fprint(w, "\n"); err != nil { return err } @@ -175,11 +214,12 @@ func (t *Tag) encode(o plumbing.EncodedObject, includeSig bool) (err error) { return err } - // Note that this is highly sensitive to what it sent along in the message. - // Message *always* needs to end with a newline, or else the message and the - // signature will be concatenated into a corrupt object. Since this is a - // lower-level method, we assume you know what you are doing and have already - // done the needful on the message in the caller. + // Note that this is highly sensitive to what is sent along in the + // message. Message *always* needs to end with a newline, or else the + // message and the trailing signature will be concatenated into a + // corrupt object. Since this is a lower-level method, we assume you + // know what you are doing and have already done the needful on the + // message in the caller. if includeSig { if _, err = fmt.Fprint(w, t.PGPSignature); err != nil { return err @@ -189,6 +229,10 @@ func (t *Tag) encode(o plumbing.EncodedObject, includeSig bool) (err error) { return err } +func isZeroSignature(s Signature) bool { + return s.Name == "" && s.Email == "" && s.When.IsZero() +} + // Commit returns the commit pointed to by the tag. If the tag points to a // different type of object ErrUnsupportedObject will be returned. func (t *Tag) Commit() (*Commit, error) { @@ -256,7 +300,8 @@ func (t *Tag) String() string { } // Verify performs PGP verification of the tag with a provided armored -// keyring and returns openpgp.Entity associated with verifying key on success. +// keyring and returns openpgp.Entity associated with verifying key on +// success. func (t *Tag) Verify(armoredKeyRing string) (*openpgp.Entity, error) { keyRingReader := strings.NewReader(armoredKeyRing) keyring, err := openpgp.ReadArmoredKeyRing(keyRingReader) diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/tag_scanner.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/tag_scanner.go new file mode 100644 index 00000000..2bfb3a1d --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/tag_scanner.go @@ -0,0 +1,237 @@ +package object + +import ( + "bufio" + "bytes" + "fmt" + "io" + + "github.com/go-git/go-git/v5/plumbing" +) + +// tagScanner holds the working state of the tag decoder driven by the +// stateFn loop in (*Tag).Decode. Each tagState reads one or more lines +// from r, updates the in-progress *Tag and the scanner's bookkeeping, +// and returns the state that should run next (or nil to stop). +type tagScanner struct { + r *bufio.Reader + t *Tag + msgbuf bytes.Buffer + + // pending holds a line that was read but the current state decided to + // hand back to the next state, paired with the io.EOF flag returned + // when the line was originally read. + pending []byte + pendingErr error + + // First-occurrence tracking: once the corresponding canonical + // header has been decoded at its expected position, subsequent + // occurrences (or out-of-position lines) are silently dropped, + // matching the strict layout enforced by upstream's + // parse_tag_buffer (tag.c:130). + // + // gpgsig-sha256 is recognized and skipped without exposing a new field + // in v5. + sawObject, sawType, sawName, sawTagger bool +} + +// tagState is one step of the decoder state machine. Each function reads +// the lines it needs, mutates *Tag via s.t, and returns the next state +// to run (or nil to terminate the loop). +type tagState func(*tagScanner) (tagState, error) + +// readLine returns the next line from the buffer, transparently +// consuming any line that was previously pushed back by a state that +// decided not to handle it. +func (s *tagScanner) readLine() ([]byte, error) { + if s.pending != nil { + line, err := s.pending, s.pendingErr + s.pending, s.pendingErr = nil, nil + return line, err + } + return s.r.ReadBytes('\n') +} + +// pushBack stashes an unconsumed line so the next state's readLine call +// sees it. Only one line can be pushed back at a time. +func (s *tagScanner) pushBack(line []byte, err error) { + s.pending = line + s.pendingErr = err +} + +// scanTagObject requires the first line to be `object HASH`, mirroring +// upstream's strict parse_tag_buffer (tag.c:151-156). Anything else +// returns ErrMalformedTag. +func scanTagObject(s *tagScanner) (tagState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 || isBlankLine(line) { + return nil, fmt.Errorf("%w: missing object header", ErrMalformedTag) + } + + key, data := splitHeader(line) + if key != "object" { + return nil, fmt.Errorf("%w: object header must be first", ErrMalformedTag) + } + h, herr := parseObjectIDHex(data, ErrMalformedTag, "object") + if herr != nil { + return nil, herr + } + s.t.Target = h + s.sawObject = true + if err == io.EOF { + return nil, nil + } + return scanTagType, nil +} + +// scanTagType requires a `type` line immediately after the object header, +// mirroring upstream's parse_tag_buffer (tag.c:158-166). +func scanTagType(s *tagScanner) (tagState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 || isBlankLine(line) { + return nil, fmt.Errorf("%w: missing type header", ErrMalformedTag) + } + + key, data := splitHeader(line) + if key != "type" { + return nil, fmt.Errorf("%w: type header must follow object", ErrMalformedTag) + } + ot, perr := plumbing.ParseObjectType(string(data)) + if perr != nil { + return nil, perr + } + s.t.TargetType = ot + s.sawType = true + if err == io.EOF { + return nil, nil + } + return scanTagName, nil +} + +// scanTagName requires a `tag` line immediately after the type header, +// mirroring upstream's parse_tag_buffer (tag.c:186-194). +func scanTagName(s *tagScanner) (tagState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 || isBlankLine(line) { + return nil, fmt.Errorf("%w: missing tag header", ErrMalformedTag) + } + + key, data := splitHeader(line) + if key != "tag" { + return nil, fmt.Errorf("%w: tag header must follow type", ErrMalformedTag) + } + s.t.Name = string(data) + s.sawName = true + if err == io.EOF { + return nil, nil + } + return scanTagTagger, nil +} + +// scanTagTagger accepts a `tagger` line at its canonical position. Any +// other header is pushed back for scanTagHeaders. +func scanTagTagger(s *tagScanner) (tagState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 { + return nil, nil + } + if isBlankLine(line) { + return scanTagMessage, nil + } + + key, data := splitHeader(line) + if key == "tagger" { + s.t.Tagger.Decode(data) + s.sawTagger = true + if err == io.EOF { + return nil, nil + } + return scanTagHeaders, nil + } + s.pushBack(line, err) + return scanTagHeaders, nil +} + +// scanTagHeaders dispatches one header line. gpgsig-sha256 hands off to +// scanTagSkipCont so the continuation block can be consumed; out-of-position +// canonical fields and unknown headers are silently dropped. +func scanTagHeaders(s *tagScanner) (tagState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) == 0 { + return nil, nil + } + if isBlankLine(line) { + return scanTagMessage, nil + } + + key, _ := splitHeader(line) + next := scanTagHeaders + switch key { + case "object", "type", "tag", "tagger": + // Out-of-canonical-position duplicates are dropped, mirroring the + // strict ordering of upstream's parse_tag_buffer. + case headerpgp256: + next = scanTagSkipCont + default: + // Unknown header: silently dropped (the Tag struct does not + // expose ExtraHeaders). + } + + if err == io.EOF { + return nil, nil + } + return next, nil +} + +// scanTagSkipCont discards continuation lines for a header scanTagHeaders chose +// to drop. The first non-continuation line is pushed back so scanTagHeaders can +// dispatch it. +func scanTagSkipCont(s *tagScanner) (tagState, error) { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) > 0 && line[0] == ' ' { + if err == io.EOF { + return nil, nil + } + return scanTagSkipCont, nil + } + if len(line) > 0 { + s.pushBack(line, err) + } + return scanTagHeaders, nil +} + +// scanTagMessage drains the remaining bytes into the message buffer. +// (*Tag).Decode then runs parseSignedBytes over those bytes to peel off +// the optional inline trailing PGP signature. +func scanTagMessage(s *tagScanner) (tagState, error) { + for { + line, err := s.readLine() + if err != nil && err != io.EOF { + return nil, err + } + if len(line) > 0 { + s.msgbuf.Write(line) + } + if err == io.EOF { + return nil, nil + } + } +} diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go index 2e1b7891..d0d0036d 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go @@ -29,6 +29,7 @@ var ( ErrDirectoryNotFound = errors.New("directory not found") ErrEntryNotFound = errors.New("entry not found") ErrEntriesNotSorted = errors.New("entries in tree are not sorted") + ErrMalformedTree = errors.New("malformed tree") ) // Tree is basically like a directory - it references a bunch of other trees @@ -37,9 +38,9 @@ type Tree struct { Entries []TreeEntry Hash plumbing.Hash - s storer.EncodedObjectStorer - m map[string]*TreeEntry - t map[string]*Tree // tree path cache + s storer.EncodedObjectStorer + t map[string]*Tree // tree path cache + entriesSorted bool } // GetTree gets a tree from an object storer and decodes it. @@ -182,16 +183,43 @@ func (t *Tree) dir(baseName string) (*Tree, error) { } func (t *Tree) entry(baseName string) (*TreeEntry, error) { - if t.m == nil { - t.buildMap() - } - - entry, ok := t.m[baseName] - if !ok { + if t.entriesSorted { + if entry := t.searchEntry(baseName); entry != nil { + return entry, nil + } return nil, ErrEntryNotFound } - return entry, nil + pastName := baseName + "/" + for i := range t.Entries { + entry := &t.Entries[i] + if entry.Name == baseName { + return entry, nil + } + if treeEntrySortName(entry) > pastName { + break + } + } + + return nil, ErrEntryNotFound +} + +func (t *Tree) searchEntry(baseName string) *TreeEntry { + if i := t.searchEntryIndex(baseName); i < len(t.Entries) && t.Entries[i].Name == baseName { + return &t.Entries[i] + } + + if i := t.searchEntryIndex(baseName + "/"); i < len(t.Entries) && t.Entries[i].Name == baseName { + return &t.Entries[i] + } + + return nil +} + +func (t *Tree) searchEntryIndex(name string) int { + return sort.Search(len(t.Entries), func(i int) bool { + return treeEntrySortName(&t.Entries[i]) >= name + }) } // Files returns a FileIter allowing to iterate over the Tree @@ -212,20 +240,25 @@ func (t *Tree) Type() plumbing.ObjectType { return plumbing.TreeObject } +func (t *Tree) reset() { + storer := t.s + *t = Tree{s: storer} +} + // Decode transform an plumbing.EncodedObject into a Tree struct func (t *Tree) Decode(o plumbing.EncodedObject) (err error) { if o.Type() != plumbing.TreeObject { return ErrUnsupportedObject } + t.reset() t.Hash = o.Hash() + // assume tree is sorted as a valid tree should always be sorted. + t.entriesSorted = true if o.Size() == 0 { return nil } - t.Entries = nil - t.m = nil - reader, err := o.Reader() if err != nil { return err @@ -235,10 +268,14 @@ func (t *Tree) Decode(o plumbing.EncodedObject) (err error) { r := sync.GetBufioReader(reader) defer sync.PutBufioReader(r) + var prevSortName string for { str, err := r.ReadString(' ') if err != nil { if err == io.EOF { + if len(str) != 0 { + return fmt.Errorf("%w: missing mode terminator", ErrMalformedTree) + } break } @@ -248,25 +285,41 @@ func (t *Tree) Decode(o plumbing.EncodedObject) (err error) { mode, err := filemode.New(str) if err != nil { - return err + return fmt.Errorf("%w: malformed mode", ErrMalformedTree) } + mode = canonicalTreeMode(mode) name, err := r.ReadString(0) - if err != nil && err != io.EOF { + if err != nil { + if err == io.EOF { + return fmt.Errorf("%w: missing filename terminator", ErrMalformedTree) + } return err } + if len(name) == 1 { + return fmt.Errorf("%w: empty filename", ErrMalformedTree) + } var hash plumbing.Hash if _, err = io.ReadFull(r, hash[:]); err != nil { + if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { + return fmt.Errorf("%w: truncated object id", ErrMalformedTree) + } return err } baseName := name[:len(name)-1] - t.Entries = append(t.Entries, TreeEntry{ + entry := TreeEntry{ Hash: hash, Mode: mode, Name: baseName, - }) + } + sortName := treeEntrySortName(&entry) + if len(t.Entries) != 0 && prevSortName > sortName { + t.entriesSorted = false + } + prevSortName = sortName + t.Entries = append(t.Entries, entry) } return nil @@ -279,21 +332,37 @@ func (s TreeEntrySorter) Len() int { } func (s TreeEntrySorter) Less(i, j int) bool { - name1 := s[i].Name - name2 := s[j].Name - if s[i].Mode == filemode.Dir { - name1 += "/" - } - if s[j].Mode == filemode.Dir { - name2 += "/" - } - return name1 < name2 + return treeEntrySortName(&s[i]) < treeEntrySortName(&s[j]) } func (s TreeEntrySorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +// Git compares tree entries as if directory names had a trailing slash. +func treeEntrySortName(e *TreeEntry) string { + if e.Mode == filemode.Dir { + return e.Name + "/" + } + return e.Name +} + +func canonicalTreeMode(mode filemode.FileMode) filemode.FileMode { + switch mode & 0o170000 { + case 0o040000: + return filemode.Dir + case 0o100000: + if mode&0o111 != 0 { + return filemode.Executable + } + return filemode.Regular + case 0o120000: + return filemode.Symlink + default: + return filemode.Submodule + } +} + // Encode transforms a Tree into a plumbing.EncodedObject. // The tree entries must be sorted by name. func (t *Tree) Encode(o plumbing.EncodedObject) (err error) { @@ -329,13 +398,6 @@ func (t *Tree) Encode(o plumbing.EncodedObject) (err error) { return err } -func (t *Tree) buildMap() { - t.m = make(map[string]*TreeEntry) - for i := 0; i < len(t.Entries); i++ { - t.m[t.Entries[i].Name] = &t.Entries[i] - } -} - // Diff returns a list of changes between this tree and the provided one func (t *Tree) Diff(to *Tree) (Changes, error) { return t.DiffContext(context.Background(), to) diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go b/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go index 5dd2e311..83f93f16 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go @@ -7,7 +7,6 @@ import ( "crypto/tls" "crypto/x509" "fmt" - "net" "net/http" "net/url" "reflect" @@ -24,6 +23,33 @@ import ( "github.com/go-git/go-git/v5/utils/ioutil" ) +type contextKey int + +const initialRequestKey contextKey = iota + +// RedirectPolicy controls how the HTTP transport follows redirects. +// +// The values mirror Git's http.followRedirects config: +// "true" follows redirects for all requests, "false" treats redirects as +// errors, and "initial" follows redirects only for the initial +// /info/refs discovery request. The zero value defaults to "initial". +type RedirectPolicy string + +const ( + FollowInitialRedirects RedirectPolicy = "initial" + FollowRedirects RedirectPolicy = "true" + NoFollowRedirects RedirectPolicy = "false" +) + +func withInitialRequest(ctx context.Context) context.Context { + return context.WithValue(ctx, initialRequestKey, true) +} + +func isInitialRequest(req *http.Request) bool { + v, _ := req.Context().Value(initialRequestKey).(bool) + return v +} + // it requires a bytes.Buffer, because we need to know the length func applyHeadersToRequest(req *http.Request, content *bytes.Buffer, host string, requestType string) { req.Header.Add("User-Agent", capability.DefaultAgent()) @@ -54,12 +80,15 @@ func advertisedReferences(ctx context.Context, s *session, serviceName string) ( s.ApplyAuthToRequest(req) applyHeadersToRequest(req, nil, s.endpoint.Host, serviceName) - res, err := s.client.Do(req.WithContext(ctx)) + res, err := s.client.Do(req.WithContext(withInitialRequest(ctx))) if err != nil { return nil, err } - s.ModifyEndpointIfRedirect(res) + if err := s.ModifyEndpointIfRedirect(res); err != nil { + _ = res.Body.Close() + return nil, err + } defer ioutil.CheckClose(res.Body, &err) if err = NewErr(res); err != nil { @@ -96,6 +125,7 @@ type client struct { client *http.Client transports *lru.Cache mutex sync.RWMutex + follow RedirectPolicy } // ClientOptions holds user configurable options for the client. @@ -106,6 +136,11 @@ type ClientOptions struct { // size, will result in the least recently used transport getting deleted // before the provided transport is added to the cache. CacheMaxEntries int + + // RedirectPolicy controls redirect handling. Supported values are + // "true", "false", and "initial". The zero value defaults to + // "initial", matching Git's http.followRedirects default. + RedirectPolicy RedirectPolicy } var ( @@ -150,12 +185,16 @@ func NewClientWithOptions(c *http.Client, opts *ClientOptions) transport.Transpo } cl := &client{ client: c, + follow: FollowInitialRedirects, } if opts != nil { if opts.CacheMaxEntries > 0 { cl.transports = lru.New(opts.CacheMaxEntries) } + if opts.RedirectPolicy != "" { + cl.follow = opts.RedirectPolicy + } } return cl } @@ -289,14 +328,9 @@ func newSession(c *client, ep *transport.Endpoint, auth transport.AuthMethod) (* } } - httpClient = &http.Client{ - Transport: transport, - CheckRedirect: c.client.CheckRedirect, - Jar: c.client.Jar, - Timeout: c.client.Timeout, - } + httpClient = c.cloneHTTPClient(transport) } else { - httpClient = c.client + httpClient = c.cloneHTTPClient(c.client.Transport) } s := &session{ @@ -324,30 +358,122 @@ func (s *session) ApplyAuthToRequest(req *http.Request) { s.auth.SetAuth(req) } -func (s *session) ModifyEndpointIfRedirect(res *http.Response) { +func (s *session) ModifyEndpointIfRedirect(res *http.Response) error { if res.Request == nil { - return + return nil + } + if s.endpoint == nil { + return fmt.Errorf("http redirect: nil endpoint") } r := res.Request if !strings.HasSuffix(r.URL.Path, infoRefsPath) { - return + return fmt.Errorf("http redirect: target %q does not end with %s", r.URL.Path, infoRefsPath) + } + if r.URL.Scheme != "http" && r.URL.Scheme != "https" { + return fmt.Errorf("http redirect: unsupported scheme %q", r.URL.Scheme) + } + if r.URL.Scheme != s.endpoint.Protocol && + !(s.endpoint.Protocol == "http" && r.URL.Scheme == "https") { + return fmt.Errorf("http redirect: changes scheme from %q to %q", s.endpoint.Protocol, r.URL.Scheme) } - h, p, err := net.SplitHostPort(r.URL.Host) + host := endpointHost(r.URL.Hostname()) + port, err := endpointPort(r.URL.Port()) if err != nil { - h = r.URL.Host + return err } - if p != "" { - port, err := strconv.Atoi(p) - if err == nil { - s.endpoint.Port = port - } + + if host != s.endpoint.Host || effectivePort(r.URL.Scheme, port) != effectivePort(s.endpoint.Protocol, s.endpoint.Port) { + s.endpoint.User = "" + s.endpoint.Password = "" + s.auth = nil } - s.endpoint.Host = h + + s.endpoint.Host = host + s.endpoint.Port = port s.endpoint.Protocol = r.URL.Scheme s.endpoint.Path = r.URL.Path[:len(r.URL.Path)-len(infoRefsPath)] + return nil +} + +func endpointHost(host string) string { + if strings.Contains(host, ":") { + return "[" + host + "]" + } + + return host +} + +func endpointPort(port string) (int, error) { + if port == "" { + return 0, nil + } + + parsed, err := strconv.Atoi(port) + if err != nil { + return 0, fmt.Errorf("http redirect: invalid port %q", port) + } + + return parsed, nil +} + +func effectivePort(scheme string, port int) int { + if port != 0 { + return port + } + + switch strings.ToLower(scheme) { + case "http": + return 80 + case "https": + return 443 + default: + return 0 + } +} + +func (c *client) cloneHTTPClient(transport http.RoundTripper) *http.Client { + return &http.Client{ + Transport: transport, + CheckRedirect: wrapCheckRedirect(c.follow, c.client.CheckRedirect), + Jar: c.client.Jar, + Timeout: c.client.Timeout, + } +} + +func wrapCheckRedirect(policy RedirectPolicy, next func(*http.Request, []*http.Request) error) func(*http.Request, []*http.Request) error { + return func(req *http.Request, via []*http.Request) error { + if err := checkRedirect(req, via, policy); err != nil { + return err + } + if next != nil { + return next(req, via) + } + return nil + } +} + +func checkRedirect(req *http.Request, via []*http.Request, policy RedirectPolicy) error { + switch policy { + case FollowRedirects: + case NoFollowRedirects: + return fmt.Errorf("http redirect: redirects disabled to %s", req.URL) + case "", FollowInitialRedirects: + if !isInitialRequest(req) { + return fmt.Errorf("http redirect: redirect on non-initial request to %s", req.URL) + } + default: + return fmt.Errorf("http redirect: invalid redirect policy %q", policy) + } + if req.URL.Scheme != "http" && req.URL.Scheme != "https" { + return fmt.Errorf("http redirect: unsupported scheme %q", req.URL.Scheme) + } + if len(via) >= 10 { + return fmt.Errorf("http redirect: too many redirects") + } + return nil } func (*session) Close() error { diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index dd7770ce..1fe43ec4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 3569ebdf..af7f2e21 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm64 diff --git a/vendor/github.com/pjbgf/sha1cd/sha1cd.go b/vendor/github.com/pjbgf/sha1cd/sha1cd.go index b8d2890a..865a995c 100644 --- a/vendor/github.com/pjbgf/sha1cd/sha1cd.go +++ b/vendor/github.com/pjbgf/sha1cd/sha1cd.go @@ -12,7 +12,6 @@ package sha1cd // Original: https://github.com/golang/go/blob/master/src/crypto/sha1/sha1.go import ( - "crypto" "encoding/binary" "errors" "hash" @@ -20,10 +19,6 @@ import ( shared "github.com/pjbgf/sha1cd/internal" ) -func init() { - crypto.RegisterHash(crypto.SHA1, New) -} - // The size of a SHA-1 checksum in bytes. const Size = shared.Size diff --git a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.go b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.go index 7b3ad25b..6b716abd 100644 --- a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.go +++ b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.go @@ -37,9 +37,9 @@ func block(dig *digest, p []byte) { chunk := p[:shared.Chunk] blockAMD64(dig.h[:], chunk, m1[:], cs[:]) - rectifyCompressionState(m1, &cs) + rectifyCompressionState(&m1, &cs) - col := checkCollision(m1, cs, dig.h) + col := checkCollision(&m1, &cs, &dig.h) if col { dig.col = true diff --git a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.s b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.s index e2725f3c..061906a9 100644 --- a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.s +++ b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_amd64.s @@ -11,11 +11,11 @@ // Reference implementations: // - https://github.com/golang/go/blob/master/src/crypto/sha1/sha1block_amd64.s +// Reverse the dword order in abcd via PSHUFD then store the 16 bytes in one +// move, instead of issuing four VPEXTRD's that each go through the store port. #define LOADCS(abcd, e, index, target) \ - VPEXTRD $3, abcd, ((index*20)+0)(target); \ - VPEXTRD $2, abcd, ((index*20)+4)(target); \ - VPEXTRD $1, abcd, ((index*20)+8)(target); \ - VPEXTRD $0, abcd, ((index*20)+12)(target); \ + VPSHUFD $0x1B, abcd, X8; \ + VMOVDQU X8, ((index*20)+0)(target); \ MOVL e, ((index*20)+16)(target); #define LOADM1(m1, index, target) \ diff --git a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_arm64.go b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_arm64.go index e641c958..f44f22da 100644 --- a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_arm64.go +++ b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_arm64.go @@ -34,8 +34,8 @@ func block(dig *digest, p []byte) { blockARM64(dig.h[:], chunk, m1[:], cs[:]) - rectifyCompressionState(m1, &cs) - col := checkCollision(m1, cs, dig.h) + rectifyCompressionState(&m1, &cs) + col := checkCollision(&m1, &cs, &dig.h) if col { dig.col = true diff --git a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_generic.go b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_generic.go index 0569a1f6..a80148eb 100644 --- a/vendor/github.com/pjbgf/sha1cd/sha1cdblock_generic.go +++ b/vendor/github.com/pjbgf/sha1cd/sha1cdblock_generic.go @@ -127,7 +127,8 @@ func blockGeneric(dig *digest, p []byte) { } if hi == 1 { - col := checkCollision(m1, cs, [shared.WordBuffers]uint32{h0, h1, h2, h3, h4}) + h := [shared.WordBuffers]uint32{h0, h1, h2, h3, h4} + col := checkCollision(&m1, &cs, &h) if col { dig.col = true hi++ @@ -143,23 +144,23 @@ func blockGeneric(dig *digest, p []byte) { //go:noinline func checkCollision( - m1 [shared.Rounds]uint32, - cs [shared.PreStepState][shared.WordBuffers]uint32, - h [shared.WordBuffers]uint32, + m1 *[shared.Rounds]uint32, + cs *[shared.PreStepState][shared.WordBuffers]uint32, + h *[shared.WordBuffers]uint32, ) bool { if mask := ubc.CalculateDvMask(m1); mask != 0 { dvs := ubc.SHA1_dvs() for i := 0; dvs[i].DvType != 0; i++ { if (mask & ((uint32)(1) << uint32(dvs[i].MaskB))) != 0 { - var csState [shared.WordBuffers]uint32 + var csState *[shared.WordBuffers]uint32 switch dvs[i].TestT { case 58: - csState = cs[1] + csState = &cs[1] case 65: - csState = cs[2] + csState = &cs[2] case 0: - csState = cs[0] + csState = &cs[0] default: panic(fmt.Sprintf("dvs data is trying to use a testT that isn't available: %d", dvs[i].TestT)) } @@ -168,7 +169,7 @@ func checkCollision( dvs[i].TestT, // testT is the step number // m2 is a secondary message created XORing with // ubc's DM prior to the SHA recompression step. - m1, dvs[i].Dm, + m1, &dvs[i].Dm, csState, h) @@ -182,8 +183,8 @@ func checkCollision( } //go:nosplit -func hasCollided(step uint32, m1, dm [shared.Rounds]uint32, - state [shared.WordBuffers]uint32, h [shared.WordBuffers]uint32) bool { +func hasCollided(step uint32, m1, dm *[shared.Rounds]uint32, + state *[shared.WordBuffers]uint32, h *[shared.WordBuffers]uint32) bool { // Intermediary Hash Value. ihv := [shared.WordBuffers]uint32{} @@ -282,7 +283,7 @@ func hasCollided(step uint32, m1, dm [shared.Rounds]uint32, // //go:nosplit func rectifyCompressionState( - m1 [shared.Rounds]uint32, + m1 *[shared.Rounds]uint32, cs *[shared.PreStepState][shared.WordBuffers]uint32, ) { if cs == nil { diff --git a/vendor/github.com/pjbgf/sha1cd/ubc/ubc.go b/vendor/github.com/pjbgf/sha1cd/ubc/ubc.go index 0da55c07..bd932051 100644 --- a/vendor/github.com/pjbgf/sha1cd/ubc/ubc.go +++ b/vendor/github.com/pjbgf/sha1cd/ubc/ubc.go @@ -29,7 +29,10 @@ type DvInfo struct { // bitconditions for that DV have been met. // //go:nosplit -func CalculateDvMask(W [80]uint32) uint32 { +func CalculateDvMask(W *[80]uint32) uint32 { + if W == nil { + return 0 + } mask := uint32(0xFFFFFFFF) mask &= (((((W[44] ^ W[45]) >> 29) & 1) - 1) | ^(DV_I_48_0_bit | DV_I_51_0_bit | DV_I_52_0_bit | DV_II_45_0_bit | DV_II_46_0_bit | DV_II_50_0_bit | DV_II_51_0_bit)) mask &= (((((W[49] ^ W[50]) >> 29) & 1) - 1) | ^(DV_I_46_0_bit | DV_II_45_0_bit | DV_II_50_0_bit | DV_II_51_0_bit | DV_II_55_0_bit | DV_II_56_0_bit)) diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go index 7554ed57..ad2b3705 100644 --- a/vendor/golang.org/x/crypto/ssh/cipher.go +++ b/vendor/golang.org/x/crypto/ssh/cipher.go @@ -586,7 +586,7 @@ func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader // Length of encrypted portion of the packet (header, payload, padding). // Enforce minimum padding and packet size. - encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize) + encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPacketSize) // Enforce block size. encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize diff --git a/vendor/golang.org/x/crypto/ssh/client_auth.go b/vendor/golang.org/x/crypto/ssh/client_auth.go index 3127e499..4f2f75c3 100644 --- a/vendor/golang.org/x/crypto/ssh/client_auth.go +++ b/vendor/golang.org/x/crypto/ssh/client_auth.go @@ -274,10 +274,14 @@ func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (MultiA } // Filter algorithms based on those supported by MultiAlgorithmSigner. + // Iterate over the signer's algorithms first to preserve its preference order. + supportedKeyAlgos := algorithmsForKeyFormat(keyFormat) var keyAlgos []string - for _, algo := range algorithmsForKeyFormat(keyFormat) { - if slices.Contains(as.Algorithms(), underlyingAlgo(algo)) { - keyAlgos = append(keyAlgos, algo) + for _, signerAlgo := range as.Algorithms() { + if idx := slices.IndexFunc(supportedKeyAlgos, func(algo string) bool { + return underlyingAlgo(algo) == signerAlgo + }); idx >= 0 { + keyAlgos = append(keyAlgos, supportedKeyAlgos[idx]) } } diff --git a/vendor/golang.org/x/net/http2/hpack/tables.go b/vendor/golang.org/x/net/http2/hpack/tables.go index 8cbdf3f0..803fe517 100644 --- a/vendor/golang.org/x/net/http2/hpack/tables.go +++ b/vendor/golang.org/x/net/http2/hpack/tables.go @@ -6,6 +6,7 @@ package hpack import ( "fmt" + "strings" ) // headerFieldTable implements a list of HeaderFields. @@ -54,10 +55,16 @@ func (t *headerFieldTable) len() int { // addEntry adds a new entry. func (t *headerFieldTable) addEntry(f HeaderField) { + // Prevent f from escaping to the heap. + f2 := HeaderField{ + Name: strings.Clone(f.Name), + Value: strings.Clone(f.Value), + Sensitive: f.Sensitive, + } id := uint64(t.len()) + t.evictCount + 1 - t.byName[f.Name] = id - t.byNameValue[pairNameValue{f.Name, f.Value}] = id - t.ents = append(t.ents, f) + t.byName[f2.Name] = id + t.byNameValue[pairNameValue{f2.Name, f2.Value}] = id + t.ents = append(t.ents, f2) } // evictOldest evicts the n oldest entries in the table. diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 2e9c2f6a..19553f10 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -718,9 +718,6 @@ func canRetryError(err error) bool { } func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse bool) (*ClientConn, error) { - if t.transportTestHooks != nil { - return t.newClientConn(nil, singleUse, nil) - } host, _, err := net.SplitHostPort(addr) if err != nil { return nil, err @@ -2861,6 +2858,9 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { var seenMaxConcurrentStreams bool err := f.ForeachSetting(func(s Setting) error { + if err := s.Valid(); err != nil { + return err + } switch s.ID { case SettingMaxFrameSize: cc.maxFrameSize = s.Val @@ -2892,9 +2892,6 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { cc.henc.SetMaxDynamicTableSize(s.Val) cc.peerMaxHeaderTableSize = s.Val case SettingEnableConnectProtocol: - if err := s.Valid(); err != nil { - return err - } // If the peer wants to send us SETTINGS_ENABLE_CONNECT_PROTOCOL, // we require that it do so in the first SETTINGS frame. // diff --git a/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go b/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go index 4ee68e38..37ecc664 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go +++ b/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go @@ -6,6 +6,8 @@ package cpu +import "runtime" + func doinit() { setMinimalFeatures() diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go index 6c7c5bfd..53f814d7 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !darwin && !linux && !netbsd && !openbsd && !windows && arm64 +//go:build !darwin && !linux && !netbsd && !openbsd && arm64 package cpu diff --git a/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go deleted file mode 100644 index d09e85a3..00000000 --- a/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2026 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpu - -import ( - "golang.org/x/sys/windows" -) - -func doinit() { - // set HasASIMD and HasFP to true as per - // https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=msvc-170#base-requirements - // - // The ARM64 version of Windows always presupposes that it's running on an ARMv8 or later architecture. - // Both floating-point and NEON support are presumed to be present in hardware. - // - ARM64.HasASIMD = true - ARM64.HasFP = true - - if windows.IsProcessorFeaturePresent(windows.PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) { - ARM64.HasAES = true - ARM64.HasPMULL = true - ARM64.HasSHA1 = true - ARM64.HasSHA2 = true - } - ARM64.HasSHA3 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE) - ARM64.HasCRC32 = windows.IsProcessorFeaturePresent(windows.PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE) - ARM64.HasSHA512 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE) - ARM64.HasATOMICS = windows.IsProcessorFeaturePresent(windows.PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE) - if windows.IsProcessorFeaturePresent(windows.PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE) { - ARM64.HasASIMDDP = true - ARM64.HasASIMDRDM = true - } - if windows.IsProcessorFeaturePresent(windows.PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE) { - ARM64.HasLRCPC = true - ARM64.HasSM3 = true - } - ARM64.HasSVE = windows.IsProcessorFeaturePresent(windows.PF_ARM_SVE_INSTRUCTIONS_AVAILABLE) - ARM64.HasSVE2 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE) - ARM64.HasJSCVT = windows.IsProcessorFeaturePresent(windows.PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE) -} diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go index 3ca814f5..1157b06d 100644 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -163,42 +163,7 @@ func (p *Proc) Addr() uintptr { // (according to the semantics of the specific function being called) before consulting // the error. The error will be guaranteed to contain windows.Errno. func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { - switch len(a) { - case 0: - return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0) - case 1: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0) - case 2: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0) - case 3: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2]) - case 4: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0) - case 5: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0) - case 6: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5]) - case 7: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0) - case 8: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0) - case 9: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]) - case 10: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0) - case 11: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0) - case 12: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]) - case 13: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0) - case 14: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0) - case 15: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14]) - default: - panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") - } + return syscall.SyscallN(p.Addr(), a...) } // A LazyDLL implements access to a single DLL. diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index a8b0364c..6c955cea 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -1438,13 +1438,17 @@ func GetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformati } // GetNamedSecurityInfo queries the security information for a given named object and returns the self-relative security -// descriptor result on the Go heap. +// descriptor result on the Go heap. The security descriptor might be nil, even when err is nil, if the object exists +// but has no security descriptor. func GetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { var winHeapSD *SECURITY_DESCRIPTOR err = getNamedSecurityInfo(objectName, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) if err != nil { return } + if winHeapSD == nil { + return nil, nil + } defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) return winHeapSD.copySelfRelativeSecurityDescriptor(), nil } diff --git a/vendor/modules.txt b/vendor/modules.txt index e873cc09..1d5e10b6 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -283,16 +283,16 @@ github.com/go-git/gcfg github.com/go-git/gcfg/scanner github.com/go-git/gcfg/token github.com/go-git/gcfg/types -# github.com/go-git/go-billy/v5 v5.8.0 -## explicit; go 1.24.0 +# github.com/go-git/go-billy/v5 v5.9.0 +## explicit; go 1.25.0 github.com/go-git/go-billy/v5 github.com/go-git/go-billy/v5/helper/chroot github.com/go-git/go-billy/v5/helper/polyfill github.com/go-git/go-billy/v5/memfs github.com/go-git/go-billy/v5/osfs github.com/go-git/go-billy/v5/util -# github.com/go-git/go-git/v5 v5.17.2 -## explicit; go 1.24.0 +# github.com/go-git/go-git/v5 v5.19.0 +## explicit; go 1.25.0 github.com/go-git/go-git/v5 github.com/go-git/go-git/v5/config github.com/go-git/go-git/v5/internal/path_util @@ -492,7 +492,7 @@ github.com/opencontainers/image-spec/specs-go/v1 ## explicit; go 1.18 # github.com/opencontainers/runtime-spec v1.1.0 ## explicit -# github.com/pjbgf/sha1cd v0.5.0 +# github.com/pjbgf/sha1cd v0.6.0 ## explicit; go 1.22 github.com/pjbgf/sha1cd github.com/pjbgf/sha1cd/internal @@ -662,7 +662,7 @@ go.yaml.in/yaml/v2 # go.yaml.in/yaml/v3 v3.0.4 ## explicit; go 1.16 go.yaml.in/yaml/v3 -# golang.org/x/crypto v0.49.0 +# golang.org/x/crypto v0.50.0 ## explicit; go 1.25.0 golang.org/x/crypto/argon2 golang.org/x/crypto/blake2b @@ -680,13 +680,13 @@ golang.org/x/crypto/ssh golang.org/x/crypto/ssh/agent golang.org/x/crypto/ssh/internal/bcrypt_pbkdf golang.org/x/crypto/ssh/knownhosts -# golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 +# golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f ## explicit; go 1.25.0 golang.org/x/exp/slices golang.org/x/exp/slog golang.org/x/exp/slog/internal golang.org/x/exp/slog/internal/buffer -# golang.org/x/net v0.52.0 +# golang.org/x/net v0.53.0 ## explicit; go 1.25.0 golang.org/x/net/context golang.org/x/net/http/httpguts @@ -699,7 +699,7 @@ golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace -# golang.org/x/sys v0.42.0 +# golang.org/x/sys v0.43.0 ## explicit; go 1.25.0 golang.org/x/sys/cpu golang.org/x/sys/execabs @@ -707,10 +707,10 @@ golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/term v0.41.0 +# golang.org/x/term v0.42.0 ## explicit; go 1.25.0 golang.org/x/term -# golang.org/x/text v0.35.0 +# golang.org/x/text v0.36.0 ## explicit; go 1.25.0 golang.org/x/text/cases golang.org/x/text/internal From 9d8eb2317e674f410c5dbcfb634e35804fea9cf0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 21:01:45 +0000 Subject: [PATCH 09/55] chore(deps): update module golang.org/x/sys to v0.44.0 --- go.mod | 2 +- go.sum | 4 +- .../golang.org/x/sys/cpu/cpu_other_arm64.go | 2 +- vendor/golang.org/x/sys/cpu/cpu_windows.go | 26 ++++ .../golang.org/x/sys/cpu/cpu_windows_arm64.go | 38 ++++++ vendor/golang.org/x/sys/cpu/zcpu_windows.go | 48 +++++++ .../golang.org/x/sys/unix/affinity_linux.go | 128 +++++++++++++++--- vendor/golang.org/x/sys/unix/mkall.sh | 2 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 8 +- .../x/sys/unix/syscall_linux_arm.go | 3 + .../x/sys/unix/syscall_linux_arm64.go | 3 + .../x/sys/unix/syscall_linux_loong64.go | 3 + .../x/sys/unix/syscall_linux_riscv64.go | 3 + .../golang.org/x/sys/unix/zsyscall_linux.go | 4 +- .../x/sys/windows/syscall_windows.go | 13 +- .../golang.org/x/sys/windows/types_windows.go | 29 ++++ .../x/sys/windows/zsyscall_windows.go | 36 +++++ vendor/modules.txt | 2 +- 18 files changed, 325 insertions(+), 29 deletions(-) create mode 100644 vendor/golang.org/x/sys/cpu/cpu_windows.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/zcpu_windows.go diff --git a/go.mod b/go.mod index 94fe8279..3c5d1c8f 100644 --- a/go.mod +++ b/go.mod @@ -155,7 +155,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/theupdateframework/notary v0.7.0 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - golang.org/x/sys v0.43.0 + golang.org/x/sys v0.44.0 ) replace github.com/docker/cli v28.4.0+incompatible => git.coopcloud.tech/toolshed/docker-cli v28.5.3-0.20260202112816-30df2d0b3a00+incompatible diff --git a/go.sum b/go.sum index 2945e87e..d4738ccd 100644 --- a/go.sum +++ b/go.sum @@ -1140,8 +1140,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go index 53f814d7..6c7c5bfd 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !darwin && !linux && !netbsd && !openbsd && arm64 +//go:build !darwin && !linux && !netbsd && !openbsd && !windows && arm64 package cpu diff --git a/vendor/golang.org/x/sys/cpu/cpu_windows.go b/vendor/golang.org/x/sys/cpu/cpu_windows.go new file mode 100644 index 00000000..99ec8fdf --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_windows.go @@ -0,0 +1,26 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +//go:generate go run golang.org/x/sys/windows/mkwinsyscall -systemdll=false -output zcpu_windows.go cpu_windows.go + +//sys isProcessorFeaturePresent(ProcessorFeature uint32) (ret bool) = kernel32.IsProcessorFeaturePresent + +// The processor features to be tested for IsProcessorFeaturePresent, see +// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-isprocessorfeaturepresent +const ( + _PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE = 30 + _PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE = 31 + _PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE = 34 + _PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE = 43 + + _PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE = 44 + _PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE = 45 + _PF_ARM_SVE_INSTRUCTIONS_AVAILABLE = 46 + _PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE = 47 + + _PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE = 64 + _PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE = 65 +) diff --git a/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go new file mode 100644 index 00000000..034732e5 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go @@ -0,0 +1,38 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +func doinit() { + // set HasASIMD and HasFP to true as per + // https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=msvc-170#base-requirements + // + // The ARM64 version of Windows always presupposes that it's running on an ARMv8 or later architecture. + // Both floating-point and NEON support are presumed to be present in hardware. + // + ARM64.HasASIMD = true + ARM64.HasFP = true + + if isProcessorFeaturePresent(_PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) { + ARM64.HasAES = true + ARM64.HasPMULL = true + ARM64.HasSHA1 = true + ARM64.HasSHA2 = true + } + ARM64.HasSHA3 = isProcessorFeaturePresent(_PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE) + ARM64.HasCRC32 = isProcessorFeaturePresent(_PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE) + ARM64.HasSHA512 = isProcessorFeaturePresent(_PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE) + ARM64.HasATOMICS = isProcessorFeaturePresent(_PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE) + if isProcessorFeaturePresent(_PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE) { + ARM64.HasASIMDDP = true + ARM64.HasASIMDRDM = true + } + if isProcessorFeaturePresent(_PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE) { + ARM64.HasLRCPC = true + ARM64.HasSM3 = true + } + ARM64.HasSVE = isProcessorFeaturePresent(_PF_ARM_SVE_INSTRUCTIONS_AVAILABLE) + ARM64.HasSVE2 = isProcessorFeaturePresent(_PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE) + ARM64.HasJSCVT = isProcessorFeaturePresent(_PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE) +} diff --git a/vendor/golang.org/x/sys/cpu/zcpu_windows.go b/vendor/golang.org/x/sys/cpu/zcpu_windows.go new file mode 100644 index 00000000..6411a7a7 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/zcpu_windows.go @@ -0,0 +1,48 @@ +// Code generated by 'go generate'; DO NOT EDIT. + +package cpu + +import ( + "syscall" + "unsafe" +) + +var _ unsafe.Pointer + +// Do the interface allocations only once for common +// Errno values. +const ( + errnoERROR_IO_PENDING = 997 +) + +var ( + errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_EINVAL error = syscall.EINVAL +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return errERROR_EINVAL + case errnoERROR_IO_PENDING: + return errERROR_IO_PENDING + } + // TODO: add more here, after collecting data on the common + // error values see on Windows. (perhaps when running + // all.bat?) + return e +} + +var ( + modkernel32 = syscall.NewLazyDLL("kernel32.dll") + + procIsProcessorFeaturePresent = modkernel32.NewProc("IsProcessorFeaturePresent") +) + +func isProcessorFeaturePresent(ProcessorFeature uint32) (ret bool) { + r0, _, _ := syscall.SyscallN(procIsProcessorFeaturePresent.Addr(), uintptr(ProcessorFeature)) + ret = r0 != 0 + return +} diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go index 3ea47038..acd6257f 100644 --- a/vendor/golang.org/x/sys/unix/affinity_linux.go +++ b/vendor/golang.org/x/sys/unix/affinity_linux.go @@ -13,11 +13,19 @@ import ( const cpuSetSize = _CPU_SETSIZE / _NCPUBITS -// CPUSet represents a CPU affinity mask. +// CPUSet represents a bit mask of CPUs, to be used with [SchedGetaffinity], [SchedSetaffinity], +// and [SetMemPolicy]. +// +// Note this type can only represent CPU IDs 0 through 1023. +// Use [CPUSetDynamic]/[NewCPUSet] instead to avoid this limit. type CPUSet [cpuSetSize]cpuMask -func schedAffinity(trap uintptr, pid int, set *CPUSet) error { - _, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set))) +// CPUSetDynamic represents a bit mask of CPUs, to be used with [SchedGetaffinityDynamic], +// [SchedSetaffinityDynamic], and [SetMemPolicyDynamic]. Use [NewCPUSet] to allocate. +type CPUSetDynamic []cpuMask + +func schedAffinity(trap uintptr, pid int, size uintptr, ptr unsafe.Pointer) error { + _, _, e := RawSyscall(trap, uintptr(pid), uintptr(size), uintptr(ptr)) if e != 0 { return errnoErr(e) } @@ -27,13 +35,13 @@ func schedAffinity(trap uintptr, pid int, set *CPUSet) error { // SchedGetaffinity gets the CPU affinity mask of the thread specified by pid. // If pid is 0 the calling thread is used. func SchedGetaffinity(pid int, set *CPUSet) error { - return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set) + return schedAffinity(SYS_SCHED_GETAFFINITY, pid, unsafe.Sizeof(*set), unsafe.Pointer(set)) } // SchedSetaffinity sets the CPU affinity mask of the thread specified by pid. // If pid is 0 the calling thread is used. func SchedSetaffinity(pid int, set *CPUSet) error { - return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set) + return schedAffinity(SYS_SCHED_SETAFFINITY, pid, unsafe.Sizeof(*set), unsafe.Pointer(set)) } // Zero clears the set s, so that it contains no CPUs. @@ -45,9 +53,7 @@ func (s *CPUSet) Zero() { // will silently ignore any invalid CPU bits in [CPUSet] so this is an // efficient way of resetting the CPU affinity of a process. func (s *CPUSet) Fill() { - for i := range s { - s[i] = ^cpuMask(0) - } + cpuMaskFill(s[:]) } func cpuBitsIndex(cpu int) int { @@ -58,24 +64,27 @@ func cpuBitsMask(cpu int) cpuMask { return cpuMask(1 << (uint(cpu) % _NCPUBITS)) } -// Set adds cpu to the set s. -func (s *CPUSet) Set(cpu int) { +func cpuMaskFill(s []cpuMask) { + for i := range s { + s[i] = ^cpuMask(0) + } +} + +func cpuMaskSet(s []cpuMask, cpu int) { i := cpuBitsIndex(cpu) if i < len(s) { s[i] |= cpuBitsMask(cpu) } } -// Clear removes cpu from the set s. -func (s *CPUSet) Clear(cpu int) { +func cpuMaskClear(s []cpuMask, cpu int) { i := cpuBitsIndex(cpu) if i < len(s) { s[i] &^= cpuBitsMask(cpu) } } -// IsSet reports whether cpu is in the set s. -func (s *CPUSet) IsSet(cpu int) bool { +func cpuMaskIsSet(s []cpuMask, cpu int) bool { i := cpuBitsIndex(cpu) if i < len(s) { return s[i]&cpuBitsMask(cpu) != 0 @@ -83,11 +92,98 @@ func (s *CPUSet) IsSet(cpu int) bool { return false } -// Count returns the number of CPUs in the set s. -func (s *CPUSet) Count() int { +func cpuMaskCount(s []cpuMask) int { c := 0 for _, b := range s { c += bits.OnesCount64(uint64(b)) } return c } + +// Set adds cpu to the set s. If cpu is out of bounds for s, no action is taken. +func (s *CPUSet) Set(cpu int) { + cpuMaskSet(s[:], cpu) +} + +// Clear removes cpu from the set s. If cpu is out of bounds for s, no action is taken. +func (s *CPUSet) Clear(cpu int) { + cpuMaskClear(s[:], cpu) +} + +// IsSet reports whether cpu is in the set s. +func (s *CPUSet) IsSet(cpu int) bool { + return cpuMaskIsSet(s[:], cpu) +} + +// Count returns the number of CPUs in the set s. +func (s *CPUSet) Count() int { + return cpuMaskCount(s[:]) +} + +// NewCPUSet creates a CPU affinity mask capable of representing CPU IDs +// up to maxCPU (exclusive). +func NewCPUSet(maxCPU int) CPUSetDynamic { + numMasks := (maxCPU + _NCPUBITS - 1) / _NCPUBITS + if numMasks == 0 { + numMasks = 1 + } + return make(CPUSetDynamic, numMasks) +} + +// Zero clears the set s, so that it contains no CPUs. +func (s CPUSetDynamic) Zero() { + clear(s) +} + +// Fill adds all possible CPU bits to the set s. On Linux, [SchedSetaffinityDynamic] +// will silently ignore any invalid CPU bits in [CPUSetDynamic] so this is an +// efficient way of resetting the CPU affinity of a process. +func (s CPUSetDynamic) Fill() { + cpuMaskFill(s) +} + +// Set adds cpu to the set s. If cpu is out of bounds for s, no action is taken. +func (s CPUSetDynamic) Set(cpu int) { + cpuMaskSet(s, cpu) +} + +// Clear removes cpu from the set s. If cpu is out of bounds for s, no action is taken. +func (s CPUSetDynamic) Clear(cpu int) { + cpuMaskClear(s, cpu) +} + +// IsSet reports whether cpu is in the set s. +func (s CPUSetDynamic) IsSet(cpu int) bool { + return cpuMaskIsSet(s, cpu) +} + +// Count returns the number of CPUs in the set s. +func (s CPUSetDynamic) Count() int { + return cpuMaskCount(s) +} + +func (s CPUSetDynamic) size() uintptr { + return uintptr(len(s)) * unsafe.Sizeof(cpuMask(0)) +} + +func (s CPUSetDynamic) pointer() unsafe.Pointer { + if len(s) == 0 { + return nil + } + return unsafe.Pointer(&s[0]) +} + +// SchedGetaffinityDynamic gets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +// +// If the set is smaller than the size of the affinity mask used by the kernel, +// [EINVAL] is returned. +func SchedGetaffinityDynamic(pid int, set CPUSetDynamic) error { + return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set.size(), set.pointer()) +} + +// SchedSetaffinityDynamic sets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +func SchedSetaffinityDynamic(pid int, set CPUSetDynamic) error { + return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set.size(), set.pointer()) +} diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh index d0ed6119..f6ddee1a 100644 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -51,7 +51,7 @@ if [[ "$GOOS" = "linux" ]]; then # Files generated through docker (use $cmd so you can Ctl-C the build or run) set -e $cmd docker build --tag generate:$GOOS $GOOS - $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS + $cmd docker run --rm --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS exit fi diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 06c0eea6..f7b82bcc 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -2644,8 +2644,12 @@ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { //sys Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error) //sys Mseal(b []byte, flags uint) (err error) -//sys setMemPolicy(mode int, mask *CPUSet, size int) (err error) = SYS_SET_MEMPOLICY +//sys setMemPolicy(mode int, mask unsafe.Pointer, size uintptr) (err error) = SYS_SET_MEMPOLICY func SetMemPolicy(mode int, mask *CPUSet) error { - return setMemPolicy(mode, mask, _CPU_SETSIZE) + return setMemPolicy(mode, unsafe.Pointer(mask), _CPU_SETSIZE) +} + +func SetMemPolicyDynamic(mode int, mask CPUSetDynamic) error { + return setMemPolicy(mode, mask.pointer(), mask.size()) } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index cd2dd797..ecf92bfa 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -82,6 +82,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime}, diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index 745e5c7e..17373807 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -113,6 +113,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime}, diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index dd2262a4..a3fd1d0b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -150,6 +150,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime}, diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 8cf3670b..fc5543c5 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -112,6 +112,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime}, diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 8935d10a..886f5de5 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -2241,8 +2241,8 @@ func Mseal(b []byte, flags uint) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setMemPolicy(mode int, mask *CPUSet, size int) (err error) { - _, _, e1 := Syscall(SYS_SET_MEMPOLICY, uintptr(mode), uintptr(unsafe.Pointer(mask)), uintptr(size)) +func setMemPolicy(mode int, mask unsafe.Pointer, size uintptr) (err error) { + _, _, e1 := Syscall(SYS_SET_MEMPOLICY, uintptr(mode), uintptr(mask), uintptr(size)) if e1 != 0 { err = errnoErr(e1) } diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index d7664365..453a7b97 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -892,9 +892,13 @@ const socket_error = uintptr(^uint32(0)) //sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar //sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx //sys GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex +//sys GetIfTable2Ex(level uint32, table **MibIfTable2) (errcode error) = iphlpapi.GetIfTable2Ex //sys GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) = iphlpapi.GetIpForwardEntry2 //sys GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) = iphlpapi.GetIpForwardTable2 +//sys GetIpInterfaceEntry(row *MibIpInterfaceRow) (errcode error) = iphlpapi.GetIpInterfaceEntry +//sys GetIpInterfaceTable(family uint16, table **MibIpInterfaceTable) (errcode error) = iphlpapi.GetIpInterfaceTable //sys GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry +//sys GetUnicastIpAddressTable(family uint16, table **MibUnicastIpAddressTable) (errcode error) = iphlpapi.GetUnicastIpAddressTable //sys FreeMibTable(memory unsafe.Pointer) = iphlpapi.FreeMibTable //sys NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange //sys NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyRouteChange2 @@ -1693,10 +1697,13 @@ func NewNTUnicodeString(s string) (*NTUnicodeString, error) { if err != nil { return nil, err } - n := uint16(len(s16) * 2) + n := len(s16) * 2 + if n > (1<<16)-1 { + return nil, syscall.EINVAL + } return &NTUnicodeString{ - Length: n - 2, // subtract 2 bytes for the NULL terminator - MaximumLength: n, + Length: uint16(n) - 2, // subtract 2 bytes for the NULL terminator + MaximumLength: uint16(n), Buffer: &s16[0], }, nil } diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index d5658a13..d82299e3 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -2320,6 +2320,21 @@ type MibIfRow2 struct { OutQLen uint64 } +// MIB_IF_TABLE_LEVEL enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_if_table_level. +const ( + MibIfTableNormal = 0 + MibIfTableRaw = 1 + MibIfTableNormalWithoutStatistics = 2 +) + +// MibIfTable2 contains a table of logical and physical interface entries. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_table2. +type MibIfTable2 struct { + NumEntries uint32 + Table [1]MibIfRow2 +} + // IP_ADDRESS_PREFIX stores an IP address prefix. See // https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-ip_address_prefix. type IpAddressPrefix struct { @@ -2413,6 +2428,13 @@ type MibUnicastIpAddressRow struct { CreationTimeStamp Filetime } +// MibUnicastIpAddressTable contains a table of unicast IP address entries. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_table. +type MibUnicastIpAddressTable struct { + NumEntries uint32 + Table [1]MibUnicastIpAddressRow +} + const ScopeLevelCount = 16 // MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface. @@ -2455,6 +2477,13 @@ type MibIpInterfaceRow struct { DisableDefaultRoutes uint8 } +// MibIpInterfaceTable contains a table of IP interface entries. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_table. +type MibIpInterfaceTable struct { + NumEntries uint32 + Table [1]MibIpInterfaceRow +} + // Console related constants used for the mode parameter to SetConsoleMode. See // https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index fe7a4ea1..a506ac0f 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -188,9 +188,13 @@ var ( procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") procGetIfEntry2Ex = modiphlpapi.NewProc("GetIfEntry2Ex") + procGetIfTable2Ex = modiphlpapi.NewProc("GetIfTable2Ex") procGetIpForwardEntry2 = modiphlpapi.NewProc("GetIpForwardEntry2") procGetIpForwardTable2 = modiphlpapi.NewProc("GetIpForwardTable2") + procGetIpInterfaceEntry = modiphlpapi.NewProc("GetIpInterfaceEntry") + procGetIpInterfaceTable = modiphlpapi.NewProc("GetIpInterfaceTable") procGetUnicastIpAddressEntry = modiphlpapi.NewProc("GetUnicastIpAddressEntry") + procGetUnicastIpAddressTable = modiphlpapi.NewProc("GetUnicastIpAddressTable") procNotifyIpInterfaceChange = modiphlpapi.NewProc("NotifyIpInterfaceChange") procNotifyRouteChange2 = modiphlpapi.NewProc("NotifyRouteChange2") procNotifyUnicastIpAddressChange = modiphlpapi.NewProc("NotifyUnicastIpAddressChange") @@ -1674,6 +1678,14 @@ func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) { return } +func GetIfTable2Ex(level uint32, table **MibIfTable2) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIfTable2Ex.Addr(), uintptr(level), uintptr(unsafe.Pointer(table))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + func GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) { r0, _, _ := syscall.SyscallN(procGetIpForwardEntry2.Addr(), uintptr(unsafe.Pointer(row))) if r0 != 0 { @@ -1690,6 +1702,22 @@ func GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode erro return } +func GetIpInterfaceEntry(row *MibIpInterfaceRow) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIpInterfaceEntry.Addr(), uintptr(unsafe.Pointer(row))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIpInterfaceTable(family uint16, table **MibIpInterfaceTable) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIpInterfaceTable.Addr(), uintptr(family), uintptr(unsafe.Pointer(table))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) { r0, _, _ := syscall.SyscallN(procGetUnicastIpAddressEntry.Addr(), uintptr(unsafe.Pointer(row))) if r0 != 0 { @@ -1698,6 +1726,14 @@ func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) { return } +func GetUnicastIpAddressTable(family uint16, table **MibUnicastIpAddressTable) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetUnicastIpAddressTable.Addr(), uintptr(family), uintptr(unsafe.Pointer(table))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { var _p0 uint32 if initialNotification { diff --git a/vendor/modules.txt b/vendor/modules.txt index 1d5e10b6..9d68c2a0 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -699,7 +699,7 @@ golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace -# golang.org/x/sys v0.43.0 +# golang.org/x/sys v0.44.0 ## explicit; go 1.25.0 golang.org/x/sys/cpu golang.org/x/sys/execabs From 24a5e6334fac7a98452b6270199fe5bdfd2e255e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 22:00:58 +0000 Subject: [PATCH 10/55] chore(deps): update golang docker tag --- vendor/coopcloud.tech/tagcmp/.drone.yml | 6 +++--- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vendor/coopcloud.tech/tagcmp/.drone.yml b/vendor/coopcloud.tech/tagcmp/.drone.yml index 595ec5a8..c5f78899 100644 --- a/vendor/coopcloud.tech/tagcmp/.drone.yml +++ b/vendor/coopcloud.tech/tagcmp/.drone.yml @@ -3,16 +3,16 @@ kind: pipeline name: coopcloud.tech/tagcmp steps: - name: gofmt - image: golang:1.21 + image: golang:1.26 commands: - test -z "$(gofmt -l .)" - name: go build - image: golang:1.21 + image: golang:1.26 commands: - go build -v . - name: go test - image: golang:1.21 + image: golang:1.26 commands: - go test . -cover diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 1fe43ec4..dd7770ce 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index af7f2e21..3569ebdf 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm64 From e7ddb74a08b2676bd2f4b5751c6995a7910fdd9b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 22:01:30 +0000 Subject: [PATCH 11/55] chore(deps): update module golang.org/x/term to v0.43.0 --- go.mod | 2 +- go.sum | 4 ++-- vendor/modules.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 3c5d1c8f..31a13312 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/moby/term v0.5.2 github.com/pkg/errors v0.9.1 github.com/schollz/progressbar/v3 v3.19.0 - golang.org/x/term v0.42.0 + golang.org/x/term v0.43.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools/v3 v3.5.2 ) diff --git a/go.sum b/go.sum index d4738ccd..c56dfc15 100644 --- a/go.sum +++ b/go.sum @@ -1145,8 +1145,8 @@ golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= -golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/modules.txt b/vendor/modules.txt index 9d68c2a0..48c8aaa9 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -707,7 +707,7 @@ golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/term v0.42.0 +# golang.org/x/term v0.43.0 ## explicit; go 1.25.0 golang.org/x/term # golang.org/x/text v0.36.0 From e0e6dcb710b7550c740bddf64201af413e69455c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 23:00:58 +0000 Subject: [PATCH 12/55] chore(deps): update otel/weaver docker tag to v0.23.0 --- vendor/go.opentelemetry.io/otel/dependencies.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile index f0cc942b..74fa510b 100644 --- a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -1,4 +1,4 @@ # This is a renovate-friendly source of Docker images. FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python -FROM otel/weaver:v0.21.2@sha256:2401de985c38bdb98b43918e2f43aa36b2afed4aa5669ac1c1de0a17301cd36d AS weaver +FROM otel/weaver:v0.23.0@sha256:7984ecb55b859eb3034ae9d836c4eeda137e2bdd0873b7ba2bb6c3d24d6ff457 AS weaver FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown From e4215c09aa060fbacfa674ff146b83571ff9316c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2026 23:00:51 +0000 Subject: [PATCH 13/55] chore(deps): update nginx docker tag to v1.31.0 --- pkg/secret/testdir/compose.yaml | 2 +- tests/resources/test_recipe/compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secret/testdir/compose.yaml b/pkg/secret/testdir/compose.yaml index 02f52b83..e3cbbf8d 100644 --- a/pkg/secret/testdir/compose.yaml +++ b/pkg/secret/testdir/compose.yaml @@ -3,7 +3,7 @@ version: "3.8" services: app: - image: nginx:1.21.0 + image: nginx:1.31.0 secrets: - test_pass_one - test_pass_two diff --git a/tests/resources/test_recipe/compose.yml b/tests/resources/test_recipe/compose.yml index 638fd142..d75796da 100644 --- a/tests/resources/test_recipe/compose.yml +++ b/tests/resources/test_recipe/compose.yml @@ -3,7 +3,7 @@ version: "3.8" services: app: - image: nginx:1.29.0 + image: nginx:1.31.0 networks: - proxy deploy: From db001c1ba4551e15244d00b3c6f26947cbec5a13 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2026 00:00:59 +0000 Subject: [PATCH 14/55] chore(deps): update tonistiigi/xx docker tag to v1.9.0 --- vendor/github.com/docker/distribution/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/github.com/docker/distribution/Dockerfile b/vendor/github.com/docker/distribution/Dockerfile index ebd42c24..c08dfb55 100644 --- a/vendor/github.com/docker/distribution/Dockerfile +++ b/vendor/github.com/docker/distribution/Dockerfile @@ -2,7 +2,7 @@ ARG GO_VERSION=1.20.8 ARG ALPINE_VERSION=3.18 -ARG XX_VERSION=1.2.1 +ARG XX_VERSION=1.9.0 FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base From 0e902ed89751ea8608aefdd4aca3872c79e91ed5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2026 14:01:42 +0000 Subject: [PATCH 15/55] chore(deps): update coopcloud.tech/tagcmp digest to c26951b --- go.mod | 2 +- go.sum | 4 ++-- vendor/coopcloud.tech/tagcmp/renovate.json | 6 ++++++ vendor/github.com/docker/distribution/Dockerfile | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- vendor/go.opentelemetry.io/otel/dependencies.Dockerfile | 2 +- vendor/modules.txt | 2 +- 8 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 vendor/coopcloud.tech/tagcmp/renovate.json diff --git a/go.mod b/go.mod index 31a13312..4248b26e 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module coopcloud.tech/abra go 1.26.0 require ( - coopcloud.tech/tagcmp v0.0.0-20250818180036-0ec1b205b5ca + coopcloud.tech/tagcmp v0.0.0-20260515102403-c26951b55977 git.coopcloud.tech/toolshed/godotenv v1.5.2-0.20250103171850-4d0ca41daa5c github.com/AlecAivazis/survey/v2 v2.3.7 github.com/charmbracelet/bubbletea v1.3.10 diff --git a/go.sum b/go.sum index c56dfc15..73e7ef3d 100644 --- a/go.sum +++ b/go.sum @@ -22,8 +22,8 @@ cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIA cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -coopcloud.tech/tagcmp v0.0.0-20250818180036-0ec1b205b5ca h1:gSD53tBAsbIGq4SnFfq+mEep6foekQ2a5ea7b38qkm0= -coopcloud.tech/tagcmp v0.0.0-20250818180036-0ec1b205b5ca/go.mod h1:ESVm0wQKcbcFi06jItF3rI7enf4Jt2PvbkWpDDHk1DQ= +coopcloud.tech/tagcmp v0.0.0-20260515102403-c26951b55977 h1:J7I0HFjwVAj/kkX6lwSTHmlXDRjQRsdIFNUUqu55ADY= +coopcloud.tech/tagcmp v0.0.0-20260515102403-c26951b55977/go.mod h1:ESVm0wQKcbcFi06jItF3rI7enf4Jt2PvbkWpDDHk1DQ= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= diff --git a/vendor/coopcloud.tech/tagcmp/renovate.json b/vendor/coopcloud.tech/tagcmp/renovate.json new file mode 100644 index 00000000..5db72dd6 --- /dev/null +++ b/vendor/coopcloud.tech/tagcmp/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ] +} diff --git a/vendor/github.com/docker/distribution/Dockerfile b/vendor/github.com/docker/distribution/Dockerfile index c08dfb55..ebd42c24 100644 --- a/vendor/github.com/docker/distribution/Dockerfile +++ b/vendor/github.com/docker/distribution/Dockerfile @@ -2,7 +2,7 @@ ARG GO_VERSION=1.20.8 ARG ALPINE_VERSION=3.18 -ARG XX_VERSION=1.9.0 +ARG XX_VERSION=1.2.1 FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index dd7770ce..1fe43ec4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 3569ebdf..af7f2e21 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm64 diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile index 74fa510b..f0cc942b 100644 --- a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -1,4 +1,4 @@ # This is a renovate-friendly source of Docker images. FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python -FROM otel/weaver:v0.23.0@sha256:7984ecb55b859eb3034ae9d836c4eeda137e2bdd0873b7ba2bb6c3d24d6ff457 AS weaver +FROM otel/weaver:v0.21.2@sha256:2401de985c38bdb98b43918e2f43aa36b2afed4aa5669ac1c1de0a17301cd36d AS weaver FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown diff --git a/vendor/modules.txt b/vendor/modules.txt index 48c8aaa9..b842c8a3 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,4 +1,4 @@ -# coopcloud.tech/tagcmp v0.0.0-20250818180036-0ec1b205b5ca +# coopcloud.tech/tagcmp v0.0.0-20260515102403-c26951b55977 ## explicit; go 1.16 coopcloud.tech/tagcmp # dario.cat/mergo v1.0.2 From f2dd65491d3ed2c9cfcec587469bc709d200a4ed Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2026 16:01:27 +0000 Subject: [PATCH 16/55] chore(deps): update golang docker tag --- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 1fe43ec4..dd7770ce 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index af7f2e21..3569ebdf 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm64 From 90ca856b643246b1c77ad5ae07b1a8222384132e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 May 2026 21:01:33 +0000 Subject: [PATCH 17/55] chore(deps): update module github.com/go-git/go-git/v5 to v5.19.1 --- go.mod | 2 +- go.sum | 4 +- .../go-git/go-git/v5/config/config.go | 31 +- .../go-git/go-git/v5/config/modules.go | 52 ++++ .../go-git/go-git/v5/config/optbool.go | 82 ++++++ .../go-git/v5/internal/pathutil/dotgit.go | 21 ++ .../go-git/go-git/v5/internal/pathutil/hfs.go | 99 +++++++ .../go-git/v5/internal/pathutil/ntfs.go | 187 +++++++++++++ .../go-git/v5/internal/pathutil/tree.go | 66 +++++ .../go-git/go-git/v5/internal/url/url.go | 37 ++- .../v5/plumbing/format/idxfile/decoder.go | 164 ++++++++++- .../v5/plumbing/format/idxfile/idxfile.go | 29 +- .../v5/plumbing/format/objfile/reader.go | 18 +- .../v5/plumbing/format/packfile/diff_delta.go | 3 - .../v5/plumbing/format/packfile/fsobject.go | 8 +- .../v5/plumbing/format/packfile/packfile.go | 21 +- .../v5/plumbing/format/packfile/parser.go | 72 ++++- .../plumbing/format/packfile/patch_delta.go | 113 +++++--- .../v5/plumbing/format/packfile/scanner.go | 154 +++++++++- .../go-git/go-git/v5/plumbing/object/tree.go | 23 ++ .../v5/plumbing/transport/ssh/common.go | 34 ++- .../github.com/go-git/go-git/v5/repository.go | 13 +- .../v5/storage/filesystem/dotgit/dotgit.go | 19 +- .../github.com/go-git/go-git/v5/submodule.go | 82 +++++- .../go-git/go-git/v5/utils/binary/read.go | 15 + .../github.com/go-git/go-git/v5/worktree.go | 115 +------- .../go-git/go-git/v5/worktree_fs.go | 264 ++++++++++++++++++ .../go-git/go-git/v5/worktree_status.go | 9 + vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- .../github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- vendor/modules.txt | 3 +- 31 files changed, 1529 insertions(+), 215 deletions(-) create mode 100644 vendor/github.com/go-git/go-git/v5/config/optbool.go create mode 100644 vendor/github.com/go-git/go-git/v5/internal/pathutil/dotgit.go create mode 100644 vendor/github.com/go-git/go-git/v5/internal/pathutil/hfs.go create mode 100644 vendor/github.com/go-git/go-git/v5/internal/pathutil/ntfs.go create mode 100644 vendor/github.com/go-git/go-git/v5/internal/pathutil/tree.go create mode 100644 vendor/github.com/go-git/go-git/v5/worktree_fs.go diff --git a/go.mod b/go.mod index 4248b26e..24cd3f74 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/docker/cli v28.4.0+incompatible github.com/docker/docker v28.5.2+incompatible github.com/docker/go-units v0.5.0 - github.com/go-git/go-git/v5 v5.19.0 + github.com/go-git/go-git/v5 v5.19.1 github.com/google/go-cmp v0.7.0 github.com/leonelquinteros/gotext v1.7.2 github.com/moby/sys/signal v0.7.1 diff --git a/go.sum b/go.sum index 73e7ef3d..2f6687a0 100644 --- a/go.sum +++ b/go.sum @@ -393,8 +393,8 @@ github.com/go-git/go-billy/v5 v5.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmm github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.19.0 h1:+WkVUQZSy/F1Gb13udrMKjIM2PrzsNfDKFSfo5tkMtc= -github.com/go-git/go-git/v5 v5.19.0/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ= +github.com/go-git/go-git/v5 v5.19.1 h1:nX27AnaU43/K5bKktKwgBmR9lawoYVe1Ckg0rgzzN00= +github.com/go-git/go-git/v5 v5.19.1/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= diff --git a/vendor/github.com/go-git/go-git/v5/config/config.go b/vendor/github.com/go-git/go-git/v5/config/config.go index 33f6e37d..3ae6a571 100644 --- a/vendor/github.com/go-git/go-git/v5/config/config.go +++ b/vendor/github.com/go-git/go-git/v5/config/config.go @@ -61,6 +61,16 @@ type Config struct { CommentChar string // RepositoryFormatVersion identifies the repository format and layout version. RepositoryFormatVersion format.RepositoryFormatVersion + // ProtectNTFS controls whether NTFS-specific path protections are + // applied (e.g. rejecting .git trailing spaces/periods, alternate + // data streams, 8.3 short names). When unset, defaults to true on + // Windows. + ProtectNTFS OptBool + // ProtectHFS controls whether HFS+-specific path protections are + // applied (e.g. rejecting .git with Unicode zero-width or + // directional characters that HFS+ would normalize away). + // When unset, defaults to true on macOS. + ProtectHFS OptBool } User struct { @@ -266,6 +276,8 @@ const ( repositoryFormatVersionKey = "repositoryformatversion" objectFormat = "objectformat" mirrorKey = "mirror" + protectNTFSKey = "protectNTFS" + protectHFSKey = "protectHFS" // DefaultPackWindow holds the number of previous objects used to // generate deltas. The value 10 is the same used by git command. @@ -309,6 +321,14 @@ func (c *Config) unmarshalCore() { c.Core.Worktree = s.Options.Get(worktreeKey) c.Core.CommentChar = s.Options.Get(commentCharKey) + + if parsed := parseConfigBool(s.Options.Get(protectNTFSKey)); parsed.IsSet() { + c.Core.ProtectNTFS = parsed + } + + if parsed := parseConfigBool(s.Options.Get(protectHFSKey)); parsed.IsSet() { + c.Core.ProtectHFS = parsed + } } func (c *Config) unmarshalUser() { @@ -379,7 +399,8 @@ func unmarshalSubmodules(fc *format.Config, submodules map[string]*Submodule) { m := &Submodule{} m.unmarshal(sub) - if m.Validate() == ErrModuleBadPath { + if err := m.Validate(); errors.Is(err, ErrModuleBadPath) || + errors.Is(err, ErrModuleBadName) { continue } @@ -436,6 +457,14 @@ func (c *Config) marshalCore() { if c.Core.Worktree != "" { s.SetOption(worktreeKey, c.Core.Worktree) } + + if c.Core.ProtectNTFS.IsSet() { + s.SetOption(protectNTFSKey, c.Core.ProtectNTFS.FormatBool()) + } + + if c.Core.ProtectHFS.IsSet() { + s.SetOption(protectHFSKey, c.Core.ProtectHFS.FormatBool()) + } } func (c *Config) marshalExtensions() { diff --git a/vendor/github.com/go-git/go-git/v5/config/modules.go b/vendor/github.com/go-git/go-git/v5/config/modules.go index 1c10aa35..5fdd8386 100644 --- a/vendor/github.com/go-git/go-git/v5/config/modules.go +++ b/vendor/github.com/go-git/go-git/v5/config/modules.go @@ -3,8 +3,11 @@ package config import ( "bytes" "errors" + "fmt" "regexp" + "strings" + "github.com/go-git/go-git/v5/internal/pathutil" format "github.com/go-git/go-git/v5/plumbing/format/config" ) @@ -12,6 +15,7 @@ var ( ErrModuleEmptyURL = errors.New("module config: empty URL") ErrModuleEmptyPath = errors.New("module config: empty path") ErrModuleBadPath = errors.New("submodule has an invalid path") + ErrModuleBadName = errors.New("ignoring suspicious submodule name") ) var ( @@ -94,6 +98,10 @@ type Submodule struct { // Validate validates the fields and sets the default values. func (m *Submodule) Validate() error { + if err := validSubmoduleName(m.Name); err != nil { + return fmt.Errorf("%w: %q", ErrModuleBadName, m.Name) + } + if m.Path == "" { return ErrModuleEmptyPath } @@ -109,6 +117,50 @@ func (m *Submodule) Validate() error { return nil } +// validSubmoduleName mirrors canonical Git's check_submodule_name in +// submodule-config.c [1]: reject empty names and any name with a ".." +// path component, using both '/' and '\\' as separators so the rule +// is consistent across platforms. The component check is delegated to +// `pathutil.IsHFSDot` and `pathutil.IsNTFSDot` with `.` as the needle, +// which both cover the bare ".." case and reject components that +// resolve to ".." after HFS+ Unicode normalisation (ignored code +// points, e.g. `..`) or NTFS trailing-space/dot/ADS +// canonicalisation (e.g. `.. `, `..::$INDEX_ALLOCATION`). +// `.gitmodules` is attacker-controlled by definition, so both checks +// run unconditionally regardless of host OS. +// +// The additional checks (bare ".", NUL byte, leading or trailing +// separator, drive-letter prefix) close go-git-specific edge cases +// the canonical loop does not exercise: canonical Git treats names +// as opaque C strings, while Go strings carry NULs through and the +// billy filesystem layer is path-aware in ways Git's working storage +// is not. +// +// [1]: https://github.com/git/git/blob/v2.54.0/submodule-config.c#L214-L237 +func validSubmoduleName(name string) error { + if name == "" || name == "." { + return ErrModuleBadName + } + for _, seg := range strings.FieldsFunc(name, isPathSep) { + if pathutil.IsHFSDot(seg, ".") || pathutil.IsNTFSDot(seg, ".", "") { + return ErrModuleBadName + } + } + // go-git-specific defensive checks beyond canonical Git. + if strings.ContainsRune(name, 0) { + return ErrModuleBadName + } + if isPathSep(rune(name[0])) || isPathSep(rune(name[len(name)-1])) { + return ErrModuleBadName + } + if len(name) >= 2 && name[1] == ':' { + return ErrModuleBadName + } + return nil +} + +func isPathSep(r rune) bool { return r == '/' || r == '\\' } + func (m *Submodule) unmarshal(s *format.Subsection) { m.raw = s diff --git a/vendor/github.com/go-git/go-git/v5/config/optbool.go b/vendor/github.com/go-git/go-git/v5/config/optbool.go new file mode 100644 index 00000000..cb89fbf4 --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/config/optbool.go @@ -0,0 +1,82 @@ +package config + +import ( + "strconv" + "strings" +) + +// OptBool is a tri-state boolean: unset, explicitly false, or explicitly true. +// Its zero value (OptBoolUnset) means the setting was not specified, which +// allows merge logic based on reflect.Value.IsZero to skip unset fields while +// still letting an explicit "false" override a previously set "true". +type OptBool byte + +const ( + // OptBoolUnset indicates the setting was not specified. + OptBoolUnset OptBool = iota + // OptBoolFalse indicates the setting was explicitly set to false. + OptBoolFalse + // OptBoolTrue indicates the setting was explicitly set to true. + OptBoolTrue +) + +// NewOptBool converts a plain bool into an OptBool. +func NewOptBool(v bool) OptBool { + if v { + return OptBoolTrue + } + return OptBoolFalse +} + +// IsTrue returns whether the value is explicitly true. +func (o OptBool) IsTrue() bool { return o == OptBoolTrue } + +// IsSet returns whether the value was explicitly specified (true or false). +func (o OptBool) IsSet() bool { return o != OptBoolUnset } + +func (o OptBool) String() string { + switch o { + case OptBoolTrue: + return "true" + case OptBoolFalse: + return "false" + default: + return "unset" + } +} + +// FormatBool returns the strconv-formatted value. Only meaningful when IsSet. +func (o OptBool) FormatBool() string { + return strconv.FormatBool(o.IsTrue()) +} + +// parseConfigBool mirrors upstream Git's git_parse_maybe_bool: it +// accepts true/yes/on (→ OptBoolTrue) and false/no/off (→ +// OptBoolFalse) case-insensitively, plus any decimal integer (zero +// → OptBoolFalse, non-zero → OptBoolTrue). Empty or otherwise +// unrecognised values return OptBoolUnset, leaving the caller's +// platform default in place. The empty-string handling is the only +// intentional divergence from upstream, which returns false for +// empty: in our unmarshalCore caller, an empty value means the key +// is unset and the platform default should apply. +// +// Reference: upstream Git git_parse_maybe_bool_text at parse.c +// L157-L173 and git_parse_maybe_bool at parse.c L174-L182 in tag +// v2.54.0[1]. +// +// [1]: https://github.com/git/git/blob/v2.54.0/parse.c#L157-L182 +func parseConfigBool(v string) OptBool { + switch strings.ToLower(v) { + case "true", "yes", "on": + return OptBoolTrue + case "false", "no", "off": + return OptBoolFalse + } + if i, err := strconv.Atoi(v); err == nil { + if i != 0 { + return OptBoolTrue + } + return OptBoolFalse + } + return OptBoolUnset +} diff --git a/vendor/github.com/go-git/go-git/v5/internal/pathutil/dotgit.go b/vendor/github.com/go-git/go-git/v5/internal/pathutil/dotgit.go new file mode 100644 index 00000000..e50ee9ce --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/internal/pathutil/dotgit.go @@ -0,0 +1,21 @@ +package pathutil + +import "strings" + +// IsDotGitName reports whether name is `.git` or its 8.3 NTFS short +// alias `git~1`, case-insensitively. Both are forbidden as path +// components (and as submodule names) because they refer to the +// repository's own metadata directory. +// +// File names that do not conform to the 8.3 format (up to eight +// characters for the basename, three for the file extension) are +// associated with a so-called "short name" on NTFS — at least on +// the `C:` drive by default — which means that `git~1/` is a valid +// way to refer to `.git/`. +func IsDotGitName(name string) bool { + switch strings.ToLower(name) { + case ".git", "git~1": + return true + } + return false +} diff --git a/vendor/github.com/go-git/go-git/v5/internal/pathutil/hfs.go b/vendor/github.com/go-git/go-git/v5/internal/pathutil/hfs.go new file mode 100644 index 00000000..66fc12f8 --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/internal/pathutil/hfs.go @@ -0,0 +1,99 @@ +package pathutil + +import "unicode" + +// hfsIgnoredCodepoints contains Unicode code points that HFS+ ignores +// during path normalization. A path component containing these +// characters between the bytes of ".git" (or ".gitmodules", etc.) +// will be treated as that name by HFS+, so they have to be filtered +// out before comparison. +// +// See upstream Git utf8.c next_hfs_char in tag v2.54.0[1]. +// +// [1]: https://github.com/git/git/blob/v2.54.0/utf8.c#L703-L740 +var hfsIgnoredCodepoints = map[rune]struct{}{ + 0x200c: {}, // ZERO WIDTH NON-JOINER + 0x200d: {}, // ZERO WIDTH JOINER + 0x200e: {}, // LEFT-TO-RIGHT MARK + 0x200f: {}, // RIGHT-TO-LEFT MARK + 0x202a: {}, // LEFT-TO-RIGHT EMBEDDING + 0x202b: {}, // RIGHT-TO-LEFT EMBEDDING + 0x202c: {}, // POP DIRECTIONAL FORMATTING + 0x202d: {}, // LEFT-TO-RIGHT OVERRIDE + 0x202e: {}, // RIGHT-TO-LEFT OVERRIDE + 0x206a: {}, // INHIBIT SYMMETRIC SWAPPING + 0x206b: {}, // ACTIVATE SYMMETRIC SWAPPING + 0x206c: {}, // INHIBIT ARABIC FORM SHAPING + 0x206d: {}, // ACTIVATE ARABIC FORM SHAPING + 0x206e: {}, // NATIONAL DIGIT SHAPES + 0x206f: {}, // NOMINAL DIGIT SHAPES + 0xfeff: {}, // ZERO WIDTH NO-BREAK SPACE +} + +// IsHFSDot reports whether part would be treated as "." on an +// HFS+ filesystem after stripping ignored Unicode code points and +// folding ASCII to lower case. The needle is the lowercase ASCII +// suffix without the leading dot (e.g. "git", "gitmodules"). It +// mirrors upstream Git's is_hfs_dot_generic and is the building +// block of IsHFSDotGit / IsHFSDotGitmodules. +// +// Reference: upstream Git utf8.c is_hfs_dot_generic at L741-L774 and +// the dotgit family at L784-L809 in tag v2.54.0[1]. +// +// [1]: https://github.com/git/git/blob/v2.54.0/utf8.c#L741-L809 +func IsHFSDot(part, needle string) bool { + runes := []rune(part) + i := 0 + + // skip ignored code points, then expect '.' + for i < len(runes) { + if _, ok := hfsIgnoredCodepoints[runes[i]]; !ok { + break + } + i++ + } + if i >= len(runes) || runes[i] != '.' { + return false + } + i++ + + // match needle case-insensitively, skipping ignored code points + for _, expected := range needle { + for i < len(runes) { + if _, ok := hfsIgnoredCodepoints[runes[i]]; !ok { + break + } + i++ + } + if i >= len(runes) { + return false + } + r := runes[i] + if r > 127 { + return false + } + if unicode.ToLower(r) != expected { + return false + } + i++ + } + + // skip trailing ignored code points + for i < len(runes) { + if _, ok := hfsIgnoredCodepoints[runes[i]]; !ok { + break + } + i++ + } + + // must be at end of component + return i == len(runes) +} + +// IsHFSDotGit reports whether part is an HFS+ equivalent of ".git". +func IsHFSDotGit(part string) bool { return IsHFSDot(part, "git") } + +// IsHFSDotGitmodules reports whether part is an HFS+ equivalent of +// ".gitmodules", catching attempts to plant the file via Unicode +// code points that HFS+ would strip during normalisation. +func IsHFSDotGitmodules(part string) bool { return IsHFSDot(part, "gitmodules") } diff --git a/vendor/github.com/go-git/go-git/v5/internal/pathutil/ntfs.go b/vendor/github.com/go-git/go-git/v5/internal/pathutil/ntfs.go new file mode 100644 index 00000000..2ca6c283 --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/internal/pathutil/ntfs.go @@ -0,0 +1,187 @@ +package pathutil + +import "strings" + +// IsNTFSDotGit ports upstream Git's is_ntfs_dotgit. It detects path +// components that NTFS would resolve to ".git": the canonical name +// itself and its 8.3 short-name alias "git~1", each followed by any +// number of trailing spaces or periods (which NTFS silently trims) +// and an optional Alternate Data Stream suffix (":"). The +// bare strings ".git" and "git~1" also match, mirroring upstream. +// +// Reference: upstream Git path.c is_ntfs_dotgit at L1415-L1449 +// in tag v2.54.0[1]. +// +// [1]: https://github.com/git/git/blob/v2.54.0/path.c#L1415-L1449 +func IsNTFSDotGit(part string) bool { + var i int + switch { + case len(part) >= 4 && part[0] == '.' && + asciiToLower(part[1]) == 'g' && + asciiToLower(part[2]) == 'i' && + asciiToLower(part[3]) == 't': + i = 4 + case len(part) >= 5 && + asciiToLower(part[0]) == 'g' && + asciiToLower(part[1]) == 'i' && + asciiToLower(part[2]) == 't' && + part[3] == '~' && part[4] == '1': + i = 5 + default: + return false + } + + for ; i < len(part); i++ { + c := part[i] + if c == ':' { + return true + } + if c != '.' && c != ' ' { + return false + } + } + return true +} + +// WindowsValidPath reports whether part is a valid Windows / NTFS +// path component for the worktree filesystem abstraction. It rejects +// NTFS-disguised variants of `.git` and `git~1` (trailing spaces, +// periods, Alternate Data Streams) and Windows reserved device +// names. Bare `.git` and `git~1` are allowed at this layer; the +// caller decides whether they are permissible at the current path +// position. +func WindowsValidPath(part string) bool { + if IsNTFSDotGit(part) && !IsDotGitName(part) { + return false + } + return !isWindowsReservedName(part) +} + +// windowsReservedNames lists the Windows reserved device names. +// A path component is reserved if its base name (ignoring trailing +// spaces, extensions, and NTFS Alternate Data Streams) matches one of +// these case-insensitively. +// +// See upstream Git compat/mingw.c is_valid_win32_path(). +var windowsReservedNames = []string{ + "CON", "PRN", "AUX", "NUL", + "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", + "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", + "CONIN$", "CONOUT$", +} + +func isWindowsReservedName(part string) bool { + for _, name := range windowsReservedNames { + if len(part) < len(name) { + continue + } + if !strings.EqualFold(part[:len(name)], name) { + continue + } + // Exact match or followed by space, dot, colon (ADS), or separator. + if len(part) == len(name) { + return true + } + switch part[len(name)] { + case ' ', '.', ':': + return true + } + } + return false +} + +// IsNTFSDot ports upstream Git's is_ntfs_dot_generic. It detects NTFS +// path-component variants of a dotfile name that attackers can use to +// bypass case-insensitive comparisons against the canonical name on +// Windows. The dotgit parameter is the lowercase name without the +// leading dot (e.g. "gitmodules"); shortnamePrefix is the canonical +// 6-character NTFS short-name prefix used as a fall-back match +// (e.g. "gi7eba" for ".gitmodules"). +// +// Reference: upstream Git path.c is_ntfs_dot_generic at L1451-L1507 +// in tag v2.54.0[1]. +// +// [1]: https://github.com/git/git/blob/v2.54.0/path.c#L1451-L1507 +func IsNTFSDot(name, dotgit, shortnamePrefix string) bool { + // onlySpacesAndPeriods returns true when the suffix from start + // onwards consists only of trailing spaces and periods, possibly + // terminated by a NTFS Alternate Data Stream colon. Mirrors the + // only_spaces_and_periods label in upstream's is_ntfs_dot_generic. + onlySpacesAndPeriods := func(start int) bool { + for i := start; i < len(name); i++ { + c := name[i] + if c == ':' { + return true + } + if c != ' ' && c != '.' { + return false + } + } + return true + } + + // Pattern 1: "." prefix + trailing spaces / periods / ADS. + if len(name) >= len(dotgit)+1 && name[0] == '.' && + strings.EqualFold(name[1:1+len(dotgit)], dotgit) { + if onlySpacesAndPeriods(len(dotgit) + 1) { + return true + } + } + + // Pattern 2: standard NTFS short name ~[1-4]. + if len(dotgit) >= 6 && len(name) >= 8 && + strings.EqualFold(name[:6], dotgit[:6]) && + name[6] == '~' && name[7] >= '1' && name[7] <= '4' { + if onlySpacesAndPeriods(8) { + return true + } + } + + // Pattern 3: fall-back NTFS short name keyed by shortnamePrefix. + if len(shortnamePrefix) < 6 || len(name) < 8 { + return false + } + sawTilde := false + i := 0 + for i < 8 { + c := name[i] + switch { + case sawTilde: + if c < '0' || c > '9' { + return false + } + case c == '~': + i++ + if i >= len(name) || name[i] < '1' || name[i] > '9' { + return false + } + sawTilde = true + case i >= 6: + return false + case c&0x80 != 0: + return false + default: + if asciiToLower(c) != shortnamePrefix[i] { + return false + } + } + i++ + } + return onlySpacesAndPeriods(8) +} + +// IsNTFSDotGitmodules reports whether part is an NTFS-equivalent of +// ".gitmodules" — the file name (or any of its variants that NTFS +// would resolve to it) that attackers can use to plant submodule +// configuration disguised as a symlink. The 6-character canonical +// short-name prefix "gi7eba" mirrors upstream Git's is_ntfs_dotgitmodules. +func IsNTFSDotGitmodules(part string) bool { + return IsNTFSDot(part, "gitmodules", "gi7eba") +} + +func asciiToLower(c byte) byte { + if c >= 'A' && c <= 'Z' { + return c + ('a' - 'A') + } + return c +} diff --git a/vendor/github.com/go-git/go-git/v5/internal/pathutil/tree.go b/vendor/github.com/go-git/go-git/v5/internal/pathutil/tree.go new file mode 100644 index 00000000..e610cd4a --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/internal/pathutil/tree.go @@ -0,0 +1,66 @@ +package pathutil + +import ( + "fmt" + "path/filepath" + "strings" +) + +// ErrInvalidPath is returned by ValidTreePath when its argument is +// not a safe path to materialise into the worktree. +var ErrInvalidPath = fmt.Errorf("invalid path") + +// ValidTreePath rejects path strings that, if materialised into a +// worktree, would let an attacker-controlled tree entry escape the +// worktree or rewrite repository metadata. It rejects: +// +// - control characters (< 0x20, 0x7f); +// - empty paths and "." / ".." components; +// - Windows volume name prefixes (e.g. C:); +// - .git, its 8.3 NTFS short-name git~1, plus their HFS+ and NTFS +// variants — at every position, not just the root. +// +// HFS+/NTFS variants of `.git` are always rejected at this layer +// regardless of runtime config: tree paths are canonical UTF-8 with +// no zero-width characters or NTFS short-name forms, so an entry +// that looks like a disguised `.git` is suspicious anywhere. Windows +// reserved device names (CON, NUL, etc.) are not policed here — they +// are legitimate filenames on non-Windows filesystems and upstream +// Git accepts them. The wrapper layer (validPath in package git) +// rejects them at materialisation time when core.protectNTFS is on. +// +// Mirrors upstream Git's verify_path_internal at read-cache.c#L987 +// in tag v2.54.0[1] with protect_hfs / protect_ntfs treated as +// always-on for `.git`-disguise detection (tree paths are not +// application-supplied) and is_valid_win32_path left to the wrapper. +// +// [1]: https://github.com/git/git/blob/v2.54.0/read-cache.c#L987 +func ValidTreePath(p string) error { + for i := 0; i < len(p); i++ { + if p[i] < 0x20 || p[i] == 0x7f { + return fmt.Errorf("%w %q: contains control character", ErrInvalidPath, p) + } + } + + parts := strings.FieldsFunc(p, func(r rune) bool { return r == '\\' || r == '/' }) + if len(parts) == 0 { + return fmt.Errorf("%w: %q", ErrInvalidPath, p) + } + + // Volume names are not supported, in both formats: \\ and :. + if vol := filepath.VolumeName(p); vol != "" { + return fmt.Errorf("%w: %q", ErrInvalidPath, p) + } + + for _, part := range parts { + if part == "." || part == ".." { + return fmt.Errorf("%w %q: cannot use %q", ErrInvalidPath, p, part) + } + + if IsDotGitName(part) || IsHFSDotGit(part) || IsNTFSDotGit(part) { + return fmt.Errorf("%w component: %q", ErrInvalidPath, p) + } + } + + return nil +} diff --git a/vendor/github.com/go-git/go-git/v5/internal/url/url.go b/vendor/github.com/go-git/go-git/v5/internal/url/url.go index 26624486..e40947c9 100644 --- a/vendor/github.com/go-git/go-git/v5/internal/url/url.go +++ b/vendor/github.com/go-git/go-git/v5/internal/url/url.go @@ -2,12 +2,14 @@ package url import ( "regexp" + "runtime" + "strings" ) var ( isSchemeRegExp = regexp.MustCompile(`^[^:]+://`) - // Ref: https://github.com/git/git/blob/master/Documentation/urls.txt#L37 + // Ref: https://github.com/git/git/blob/v2.54.0/Documentation/urls.adoc#L41-L48 scpLikeUrlRegExp = regexp.MustCompile(`^(?:(?P[^@]+)@)?(?P[^:\s]+):(?:(?P[0-9]{1,5}):)?(?P[^\\].*)$`) ) @@ -20,7 +22,38 @@ func MatchesScheme(url string) bool { // MatchesScpLike returns true if the given string matches an SCP-like // format scheme. func MatchesScpLike(url string) bool { - return scpLikeUrlRegExp.MatchString(url) + if !scpLikeUrlRegExp.MatchString(url) { + return false + } + // Mirror canonical Git's url_is_local_not_ssh in connect.c[1] for + // the cases the regex above cannot disambiguate by itself: a URL + // is treated as a local path (not SCP-style SSH) when a `/` + // precedes the first `:` (e.g. `./relative:path`, + // `/abs/with:colon/file`), or — on Windows only — when it has a + // DOS drive prefix like `C:foo` where the host is a single + // ASCII letter. + // + // [1]: https://github.com/git/git/blob/v2.54.0/connect.c#L710-L716 + if before, _, _ := strings.Cut(url, ":"); strings.Contains(before, "/") { + return false + } + if runtime.GOOS == "windows" && hasDosDrivePrefix(url) { + return false + } + return true +} + +// hasDosDrivePrefix reports whether s begins with `:` (a +// Windows drive prefix such as `C:` or `c:`). Mirrors canonical Git's +// win32_has_dos_drive_prefix[1]. +// +// [1]: https://github.com/git/git/blob/v2.54.0/compat/win32/path-utils.c#L20-L29 +func hasDosDrivePrefix(s string) bool { + if len(s) < 2 || s[1] != ':' { + return false + } + c := s[0] + return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') } // FindScpLikeComponents returns the user, host, port and path of the diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/decoder.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/decoder.go index 9e006a72..825fad9a 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/decoder.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/decoder.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "io" + "io/fs" "github.com/go-git/go-git/v5/plumbing/hash" "github.com/go-git/go-git/v5/utils/binary" @@ -25,35 +26,88 @@ const ( objectIDLength = hash.Size ) +// Byte sizes of the idx v2 layout elements, used by the size formula +// in [validateIdxV2Size]. See [gitformat-pack] for the canonical +// layout. +// +// [gitformat-pack]: https://git-scm.com/docs/gitformat-pack +const ( + headerLen = 8 // magic + version + fanoutLen = fanout * 4 // uint32 per bucket + crc32Len = 4 // CRC32 per object + offset32Len = 4 // 32-bit offset per object + offset64Len = 8 // 64-bit overflow offset + trailerHashes = 2 // pack checksum + idx checksum, each hashsz +) + +// statInput is the optional shape the [Decoder] probes for at the +// start of [Decoder.Decode] to learn the on-disk length of the idx +// blob, which it uses to validate the canonical-Git size formula +// before any allocations driven by the fanout table. Callers that +// pass an [*os.File] or a `billy.File` backed by an `*os.File` +// (the production call sites in `storage/filesystem`) satisfy it +// directly; arbitrary [io.Reader]s do not, and decode for them +// retains the pre-existing behaviour of erroring out at the +// truncated-payload boundary instead. +// +// The interface is intentionally unexported so the public +// [NewDecoder] signature stays compatible with v5. +type statInput interface { + Stat() (fs.FileInfo, error) +} + // Decoder reads and decodes idx files from an input stream. type Decoder struct { io.Reader - h hash.Hash + src io.Reader + h hash.Hash } // NewDecoder builds a new idx stream decoder, that reads from r. func NewDecoder(r io.Reader) *Decoder { h := hash.New(crypto.SHA1) tr := io.TeeReader(r, h) - return &Decoder{tr, h} + return &Decoder{tr, r, h} } // Decode reads from the stream and decode the content into the MemoryIndex struct. func (d *Decoder) Decode(idx *MemoryIndex) error { + idxSize := int64(-1) + if in, ok := d.src.(statInput); ok { + fi, err := in.Stat() + if err != nil { + return fmt.Errorf("%w: stat input: %w", ErrMalformedIdxFile, err) + } + idxSize = fi.Size() + } + if err := validateHeader(d); err != nil { return err } - flow := []func(*MemoryIndex, io.Reader) error{ + headerFlow := []func(*MemoryIndex, io.Reader) error{ readVersion, readFanout, + } + for _, f := range headerFlow { + if err := f(idx, d); err != nil { + return err + } + } + + if idxSize >= 0 { + if err := validateIdxV2Size(idx, idxSize); err != nil { + return err + } + } + + bodyFlow := []func(*MemoryIndex, io.Reader) error{ readObjectNames, readCRC32, readOffsets, readPackChecksum, } - - for _, f := range flow { + for _, f := range bodyFlow { if err := f(idx, d); err != nil { return err } @@ -199,3 +253,103 @@ func readIdxChecksum(idx *MemoryIndex, r io.Reader) error { return nil } + +// validateIdxV2Size enforces the size formula used by canonical Git +// load_idx for idx v2 files: the on-disk length must lie within +// [minSize, maxSize] where +// +// perObject = hashsz + crc32Len + offset32Len +// minSize = headerLen + fanoutLen + trailerHashes*hashsz + nr*perObject +// maxSize = minSize + (nr-1)*offset64Len when nr > 0 +// +// with nr taken from the last fanout entry and hashsz fixed at +// [objectIDLength] (SHA-1 in v5). Multiplications use a self-checking +// overflow guard so inputs whose claimed object count overflows the +// formula are rejected rather than wrapping into a smaller value. +func validateIdxV2Size(idx *MemoryIndex, idxSize int64) error { + nr := int64(idx.Fanout[fanout-1]) + hashsz := int64(objectIDLength) + + minSize := minIdxV2Size(nr, hashsz) + maxSize := maxIdxV2Size(nr, hashsz) + if minSize < 0 || maxSize < 0 { + return fmt.Errorf("%w: object count %d is inconsistent with file size", ErrMalformedIdxFile, nr) + } + + if idxSize < minSize || idxSize > maxSize { + return fmt.Errorf("%w: file size %d is inconsistent with object count %d", ErrMalformedIdxFile, idxSize, nr) + } + return nil +} + +// minIdxV2Size returns the minimum on-disk size of an idx v2 file +// holding nr objects with the given hash size, mirroring the +// computation in canonical Git load_idx. Returns -1 when any +// intermediate multiplication or addition would overflow int64. +func minIdxV2Size(nr, hashsz int64) int64 { + perObject := hashsz + crc32Len + offset32Len + fixed := int64(headerLen+fanoutLen) + trailerHashes*hashsz + + objects, ok := mulInt64(nr, perObject) + if !ok { + return -1 + } + sum, ok := addInt64(fixed, objects) + if !ok { + return -1 + } + return sum +} + +// maxIdxV2Size returns the maximum on-disk size of an idx v2 file +// holding nr objects with the given hash size, mirroring the +// computation in canonical Git load_idx. Returns -1 on overflow. +func maxIdxV2Size(nr, hashsz int64) int64 { + minSize := minIdxV2Size(nr, hashsz) + if minSize < 0 { + return -1 + } + if nr == 0 { + return minSize + } + overflow, ok := mulInt64(nr-1, offset64Len) + if !ok { + return -1 + } + sum, ok := addInt64(minSize, overflow) + if !ok { + return -1 + } + return sum +} + +// mulInt64 returns a*b and whether the result fits in an int64 without +// overflow. Negative operands or overflow yield ok=false. The overflow +// check uses the standard self-inverse identity: a*b/b == a only when +// the multiplication did not wrap. +func mulInt64(a, b int64) (int64, bool) { + if a < 0 || b < 0 { + return 0, false + } + if a == 0 || b == 0 { + return 0, true + } + c := a * b + if c/b != a { + return 0, false + } + return c, true +} + +// addInt64 returns a+b and whether the result fits in an int64 without +// overflow. Negative operands or overflow yield ok=false. +func addInt64(a, b int64) (int64, bool) { + if a < 0 || b < 0 { + return 0, false + } + c := a + b + if c < a { + return 0, false + } + return c, true +} diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/idxfile.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/idxfile.go index 136c3e2a..f068c25e 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/idxfile.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/idxfile.go @@ -2,6 +2,7 @@ package idxfile import ( "bytes" + "fmt" "io" "sort" "sync" @@ -126,7 +127,10 @@ func (idx *MemoryIndex) FindOffset(h plumbing.Hash) (int64, error) { return 0, plumbing.ErrObjectNotFound } - offset := idx.getOffset(k, i) + offset, err := idx.getOffset(k, i) + if err != nil { + return 0, err + } // Save the offset for reverse lookup idx.mu.Lock() @@ -141,17 +145,19 @@ func (idx *MemoryIndex) FindOffset(h plumbing.Hash) (int64, error) { const isO64Mask = uint64(1) << 31 -func (idx *MemoryIndex) getOffset(firstLevel, secondLevel int) uint64 { +func (idx *MemoryIndex) getOffset(firstLevel, secondLevel int) (uint64, error) { offset := secondLevel << 2 ofs := encbin.BigEndian.Uint32(idx.Offset32[firstLevel][offset : offset+4]) if (uint64(ofs) & isO64Mask) != 0 { offset := 8 * (uint64(ofs) & ^isO64Mask) - n := encbin.BigEndian.Uint64(idx.Offset64[offset : offset+8]) - return n + if l := uint64(len(idx.Offset64)); l < 8 || offset > l-8 { + return 0, fmt.Errorf("%w: offset64 index out of range", ErrMalformedIdxFile) + } + return encbin.BigEndian.Uint64(idx.Offset64[offset : offset+8]), nil } - return uint64(ofs) + return uint64(ofs), nil } // FindCRC32 implements the Index interface. @@ -209,8 +215,11 @@ func (idx *MemoryIndex) genOffsetHash() error { mappedFirstLevel := idx.FanoutMapping[firstLevel] for secondLevel := uint32(0); i < fanoutValue; i++ { copy(hash[:], idx.Names[mappedFirstLevel][secondLevel*objectIDLength:]) - offset := int64(idx.getOffset(mappedFirstLevel, int(secondLevel))) - offsetHash[offset] = hash + off, err := idx.getOffset(mappedFirstLevel, int(secondLevel)) + if err != nil { + return err + } + offsetHash[int64(off)] = hash secondLevel++ } } @@ -291,7 +300,11 @@ func (i *idxfileEntryIter) Next() (*Entry, error) { mappedFirstLevel := i.idx.FanoutMapping[i.firstLevel] entry := new(Entry) copy(entry.Hash[:], i.idx.Names[mappedFirstLevel][i.secondLevel*objectIDLength:]) - entry.Offset = i.idx.getOffset(mappedFirstLevel, i.secondLevel) + var err error + entry.Offset, err = i.idx.getOffset(mappedFirstLevel, i.secondLevel) + if err != nil { + return nil, err + } entry.CRC32 = i.idx.getCRC32(mappedFirstLevel, i.secondLevel) i.secondLevel++ diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile/reader.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile/reader.go index 621883a6..f9842ed9 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile/reader.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile/reader.go @@ -11,9 +11,10 @@ import ( ) var ( - ErrClosed = errors.New("objfile: already closed") - ErrHeader = errors.New("objfile: invalid header") - ErrNegativeSize = errors.New("objfile: negative object size") + ErrClosed = errors.New("objfile: already closed") + ErrHeader = errors.New("objfile: invalid header") + ErrHeaderNotRead = errors.New("objfile: Header must be called before Read") + ErrNegativeSize = errors.New("objfile: negative object size") ) // Reader reads and decodes compressed objfile data from a provided io.Reader. @@ -100,12 +101,23 @@ func (r *Reader) prepareForRead(t plumbing.ObjectType, size int64) { // // If Read encounters the end of the data stream it will return err == io.EOF, // either in the current call if n > 0 or in a subsequent call. +// +// Read returns ErrHeaderNotRead if Header has not been called successfully. func (r *Reader) Read(p []byte) (n int, err error) { + if r.multi == nil { + return 0, ErrHeaderNotRead + } return r.multi.Read(p) } // Hash returns the hash of the object data stream that has been read so far. +// It returns the zero plumbing.Hash if Header has not been called +// successfully — guarding against the nil hasher that prepareForRead has +// not yet allocated. func (r *Reader) Hash() plumbing.Hash { + if r.multi == nil { + return plumbing.ZeroHash + } return r.hasher.Sum() } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/diff_delta.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/diff_delta.go index 8898e583..a24b63b4 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/diff_delta.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/diff_delta.go @@ -19,9 +19,6 @@ const ( // https://github.com/git/git/blob/f7466e94375b3be27f229c78873f0acf8301c0a5/diff-delta.c#L428 // Max size of a copy operation (64KB). maxCopySize = 64 * 1024 - - // Min size of a copy operation. - minCopySize = 4 ) // GetDelta returns an EncodedObject of type OFSDeltaObject. Base and Target object, diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/fsobject.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/fsobject.go index 238339da..93a6fafc 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/fsobject.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/fsobject.go @@ -78,7 +78,13 @@ func (o *FSObject) Reader() (io.ReadCloser, error) { _ = f.Close() return nil, err } - return ioutil.NewReadCloserWithCloser(r, f.Close), nil + // Cap the lazy stream at the resolved object size: well-formed + // content reaches EOF inside the bound, an inflated stream that + // runs past surfaces ErrInflatedSizeMismatch on the byte just + // past the limit. For delta-resolved objects o.size is the + // expanded size, which is what the caller is reading here. + bounded := newBoundedReadCloser(r, o.size) + return ioutil.NewReadCloserWithCloser(bounded, f.Close), nil } r, err := p.getObjectContent(o.offset) if err != nil { diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/packfile.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/packfile.go index 68527022..f7fb958f 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/packfile.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/packfile.go @@ -126,11 +126,17 @@ func (p *Packfile) nextObjectHeader() (*ObjectHeader, error) { return h, err } -func (p *Packfile) getDeltaObjectSize(buf *bytes.Buffer) int64 { +func (p *Packfile) getDeltaObjectSize(buf *bytes.Buffer) (int64, error) { delta := buf.Bytes() - _, delta = decodeLEB128(delta) // skip src size - sz, _ := decodeLEB128(delta) - return int64(sz) + _, delta, err := decodeLEB128(delta) // skip src size + if err != nil { + return 0, err + } + sz, _, err := decodeLEB128(delta) + if err != nil { + return 0, err + } + return int64(sz), nil } func (p *Packfile) getObjectSize(h *ObjectHeader) (int64, error) { @@ -145,7 +151,7 @@ func (p *Packfile) getObjectSize(h *ObjectHeader) (int64, error) { return 0, err } - return p.getDeltaObjectSize(buf), nil + return p.getDeltaObjectSize(buf) default: return 0, ErrInvalidObject.AddDetails("type %q", h.Type) } @@ -233,7 +239,10 @@ func (p *Packfile) getNextObject(h *ObjectHeader, hash plumbing.Hash) (plumbing. return nil, err } - size = p.getDeltaObjectSize(buf) + size, err = p.getDeltaObjectSize(buf) + if err != nil { + return nil, err + } if size <= smallObjectThreshold { var obj = new(plumbing.MemoryObject) obj.SetSize(size) diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/parser.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/parser.go index 2659c27e..7774d2dc 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/parser.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/parser.go @@ -26,6 +26,45 @@ var ( ErrDeltaNotCached = errors.New("delta could not be found in cache") ) +// maxObjectPreallocBytes caps the up-front size hint passed to +// bytes.Buffer.Grow when staging an object's contents, so a malformed length +// cannot trigger a huge or out-of-range allocation. The buffer still grows +// dynamically as data is written; this is purely a hint cap. +const maxObjectPreallocBytes = 1 << 30 // 1 GiB + +// maxObjectsPrealloc caps the up-front capacity reserved from the pack's +// declared object count, so a header advertising an absurd quantity cannot +// trigger a multi-gigabyte allocation. The slice and maps still grow +// organically beyond this hint. +const maxObjectsPrealloc = 1 << 16 // 64 Ki entries + +// Match upstream Git's pack depth ceiling: pack-objects.h OE_DEPTH_BITS, +// enforced in builtin/pack-objects.c as (1 << OE_DEPTH_BITS) - 1. +const maxDeltaChainDepth = 4095 + +// growHint returns a non-negative int64 size, clamped to a sane upper bound, +// suitable for passing to bytes.Buffer.Grow. +func growHint(n int64) int { + switch { + case n <= 0: + return 0 + case n > maxObjectPreallocBytes: + return maxObjectPreallocBytes + default: + return int(n) + } +} + +// objectsHint returns a non-negative count, clamped to maxObjectsPrealloc, +// suitable for passing to make() as the capacity hint for slices or maps +// sized from a pack's declared object count. +func objectsHint(n uint32) int { + if n > maxObjectsPrealloc { + return maxObjectsPrealloc + } + return int(n) +} + // Observer interface is implemented by index encoders. type Observer interface { // OnHeader is called when a new packfile is opened. @@ -166,9 +205,10 @@ func (p *Parser) init() error { } p.count = c - p.oiByHash = make(map[plumbing.Hash]*objectInfo, p.count) - p.oiByOffset = make(map[int64]*objectInfo, p.count) - p.oi = make([]*objectInfo, p.count) + hint := objectsHint(p.count) + p.oiByHash = make(map[plumbing.Hash]*objectInfo, hint) + p.oiByOffset = make(map[int64]*objectInfo, hint) + p.oi = make([]*objectInfo, 0, hint) return nil } @@ -261,7 +301,7 @@ func (p *Parser) indexObjects() error { } if delta && !p.scanner.IsSeekable { buf.Reset() - buf.Grow(int(oh.Length)) + buf.Grow(growHint(oh.Length)) writers = append(writers, buf) } @@ -306,7 +346,7 @@ func (p *Parser) indexObjects() error { } p.oiByOffset[oh.Offset] = ota - p.oi[i] = ota + p.oi = append(p.oi, ota) } return nil @@ -317,8 +357,12 @@ func (p *Parser) resolveDeltas() error { defer sync.PutBytesBuffer(buf) for _, obj := range p.oi { + if err := checkDeltaChainDepth(obj); err != nil { + return err + } + buf.Reset() - buf.Grow(int(obj.Length)) + buf.Grow(growHint(obj.Length)) err := p.get(obj, buf) if err != nil { return err @@ -337,6 +381,9 @@ func (p *Parser) resolveDeltas() error { // create it once and reuse across all children. r := bytes.NewReader(buf.Bytes()) for _, child := range obj.Children { + if err := checkDeltaChainDepth(child); err != nil { + return err + } // Even though we are discarding the output, we still need to read it to // so that the scanner can advance to the next object, and the SHA1 can be // calculated. @@ -356,6 +403,17 @@ func (p *Parser) resolveDeltas() error { return nil } +func checkDeltaChainDepth(o *objectInfo) error { + var depth int + for current := o; current != nil && current.DiskType.IsDelta(); current = current.Parent { + depth++ + if depth > maxDeltaChainDepth { + return fmt.Errorf("%w: delta chain depth exceeds %d", ErrMalformedPackFile, maxDeltaChainDepth) + } + } + return nil +} + func (p *Parser) resolveExternalRef(o *objectInfo) { if ref, ok := p.oiByHash[o.SHA1]; ok && ref.ExternalRef { p.oiByHash[o.SHA1] = o @@ -405,7 +463,7 @@ func (p *Parser) get(o *objectInfo, buf *bytes.Buffer) (err error) { if o.DiskType.IsDelta() { b := sync.GetBytesBuffer() defer sync.PutBytesBuffer(b) - buf.Grow(int(o.Length)) + buf.Grow(growHint(o.Length)) err := p.get(o.Parent, b) if err != nil { return err diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go index a9c6b9b5..4bcb4911 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go @@ -31,10 +31,15 @@ const ( // premptively made available for a patch operation. maxPatchPreemptionSize uint = 65536 - // minDeltaSize defines the smallest size for a delta. - minDeltaSize = 4 + // minDeltaSize is the smallest valid delta: a 1-byte srcSz LEB128 + // header followed by a 1-byte targetSz LEB128 header (the + // shortest case being targetSz=0 with no operations). + minDeltaSize = 2 ) +// uintBits is the bit width of uint on the current platform (32 or 64). +const uintBits = 32 << (^uint(0) >> 63) + type offset struct { mask byte shift uint @@ -142,7 +147,7 @@ func ReaderFromDelta(base plumbing.EncodedObject, deltaRC io.Reader) (io.ReadClo baseBuf := bufio.NewReader(baseRd) basePos := uint(0) - for { + for remainingTargetSz > 0 { cmd, err := deltaBuf.ReadByte() if err == io.EOF { _ = dstWr.CloseWithError(ErrInvalidDelta) @@ -166,9 +171,9 @@ func ReaderFromDelta(base plumbing.EncodedObject, deltaRC io.Reader) (io.ReadClo return } - if invalidSize(sz, targetSz) || + if invalidSize(sz, remainingTargetSz) || invalidOffsetSize(offset, sz, srcSz) { - _ = dstWr.Close() + _ = dstWr.CloseWithError(ErrInvalidDelta) return } @@ -210,7 +215,7 @@ func ReaderFromDelta(base plumbing.EncodedObject, deltaRC io.Reader) (io.ReadClo case isCopyFromDelta(cmd): sz := uint(cmd) // cmd is the size itself - if invalidSize(sz, targetSz) { + if invalidSize(sz, remainingTargetSz) { _ = dstWr.CloseWithError(ErrInvalidDelta) return } @@ -225,40 +230,48 @@ func ReaderFromDelta(base plumbing.EncodedObject, deltaRC io.Reader) (io.ReadClo _ = dstWr.CloseWithError(ErrDeltaCmd) return } - - if remainingTargetSz <= 0 { - _ = dstWr.Close() - return - } } + + // Mirror upstream's `data != top` post-loop check: every byte + // of the delta payload must be consumed. + if _, err := deltaBuf.ReadByte(); err == nil { + _ = dstWr.CloseWithError(ErrInvalidDelta) + return + } else if err != io.EOF { + _ = dstWr.CloseWithError(err) + return + } + + _ = dstWr.Close() }() return dstRd, nil } func patchDelta(dst *bytes.Buffer, src, delta []byte) error { - if len(delta) < minCopySize { - return ErrInvalidDelta + srcSz, delta, err := decodeLEB128(delta) + if err != nil { + return fmt.Errorf("%w: %w", ErrInvalidDelta, err) } - - srcSz, delta := decodeLEB128(delta) if srcSz != uint(len(src)) { return ErrInvalidDelta } - targetSz, delta := decodeLEB128(delta) + targetSz, delta, err := decodeLEB128(delta) + if err != nil { + return fmt.Errorf("%w: %w", ErrInvalidDelta, err) + } remainingTargetSz := targetSz - var cmd byte - growSz := min(targetSz, maxPatchPreemptionSize) dst.Grow(int(growSz)) - for { + + for remainingTargetSz > 0 { if len(delta) == 0 { return ErrInvalidDelta } - cmd = delta[0] + cmd := delta[0] delta = delta[1:] switch { @@ -275,16 +288,16 @@ func patchDelta(dst *bytes.Buffer, src, delta []byte) error { return err } - if invalidSize(sz, targetSz) || + if invalidSize(sz, remainingTargetSz) || invalidOffsetSize(offset, sz, srcSz) { - break + return ErrInvalidDelta } dst.Write(src[offset : offset+sz]) remainingTargetSz -= sz case isCopyFromDelta(cmd): sz := uint(cmd) // cmd is the size itself - if invalidSize(sz, targetSz) { + if invalidSize(sz, remainingTargetSz) { return ErrInvalidDelta } @@ -299,10 +312,12 @@ func patchDelta(dst *bytes.Buffer, src, delta []byte) error { default: return ErrDeltaCmd } + } - if remainingTargetSz <= 0 { - break - } + // Mirror upstream's `data != top` post-loop check: every byte of + // the delta payload must be consumed. + if len(delta) != 0 { + return ErrInvalidDelta } return nil @@ -354,7 +369,7 @@ func patchDeltaWriter(dst io.Writer, base io.ReaderAt, delta io.Reader, baselr := io.LimitReader(sr, 0).(*io.LimitedReader) deltalr := io.LimitReader(deltaBuf, 0).(*io.LimitedReader) - for { + for remainingTargetSz > 0 { buf := *bufp cmd, err := deltaBuf.ReadByte() if err == io.EOF { @@ -374,9 +389,9 @@ func patchDeltaWriter(dst io.Writer, base io.ReaderAt, delta io.Reader, return 0, plumbing.ZeroHash, err } - if invalidSize(sz, targetSz) || + if invalidSize(sz, remainingTargetSz) || invalidOffsetSize(offset, sz, srcSz) { - return 0, plumbing.ZeroHash, err + return 0, plumbing.ZeroHash, ErrInvalidDelta } if _, err := sr.Seek(int64(offset), io.SeekStart); err != nil { @@ -389,7 +404,7 @@ func patchDeltaWriter(dst io.Writer, base io.ReaderAt, delta io.Reader, remainingTargetSz -= sz } else if isCopyFromDelta(cmd) { sz := uint(cmd) // cmd is the size itself - if invalidSize(sz, targetSz) { + if invalidSize(sz, remainingTargetSz) { return 0, plumbing.ZeroHash, ErrInvalidDelta } deltalr.N = int64(sz) @@ -399,30 +414,41 @@ func patchDeltaWriter(dst io.Writer, base io.ReaderAt, delta io.Reader, remainingTargetSz -= sz } else { - return 0, plumbing.ZeroHash, err - } - if remainingTargetSz <= 0 { - break + return 0, plumbing.ZeroHash, ErrDeltaCmd } } + // Mirror upstream's `data != top` post-loop check: every byte of + // the delta payload must be consumed. + if _, err := deltaBuf.ReadByte(); err == nil { + return 0, plumbing.ZeroHash, ErrInvalidDelta + } else if err != io.EOF { + return 0, plumbing.ZeroHash, err + } + return targetSz, hasher.Sum(), nil } // Decodes a number encoded as an unsigned LEB128 at the start of some -// binary data and returns the decoded number and the rest of the -// stream. +// binary data and returns the decoded number, the rest of the stream, +// and an error if the encoded value does not fit in a uint. // // This must be called twice on the delta data buffer, first to get the // expected source buffer size, and again to get the target buffer size. -func decodeLEB128(input []byte) (uint, []byte) { +func decodeLEB128(input []byte) (uint, []byte, error) { if len(input) == 0 { - return 0, input + return 0, input, nil } var num, sz uint var b byte for { + // A continuation byte at shift > uintBits-7 cannot contribute + // without overflowing the accumulator. + if sz*7 > uintBits-7 { + return 0, input, ErrLengthOverflow + } + b = input[sz] num |= (uint(b) & payload) << (sz * 7) // concats 7 bits chunks sz++ @@ -432,12 +458,16 @@ func decodeLEB128(input []byte) (uint, []byte) { } } - return num, input[sz:] + return num, input[sz:], nil } func decodeLEB128ByteReader(input io.ByteReader) (uint, error) { var num, sz uint for { + if sz*7 > uintBits-7 { + return 0, ErrLengthOverflow + } + b, err := input.ReadByte() if err != nil { return 0, err @@ -529,8 +559,9 @@ func decodeSize(cmd byte, delta []byte) (uint, []byte, error) { return sz, delta, nil } -func invalidSize(sz, targetSz uint) bool { - return sz > targetSz +// invalidSize reports whether sz exceeds the remaining target size. +func invalidSize(sz, remaining uint) bool { + return sz > remaining } func invalidOffsetSize(offset, sz, srcSz uint) bool { diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/scanner.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/scanner.go index 8318aae4..6d2907ec 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/scanner.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/scanner.go @@ -29,8 +29,100 @@ var ( ErrSeekNotSupported = NewError("not seek support") // ErrMalformedPackFile is returned by the parser when the pack file is corrupted. ErrMalformedPackFile = errors.New("malformed PACK file") + // ErrLengthOverflow is returned when a variable-length integer would not + // fit into its accumulator because the input declares more continuation + // bytes than the type can hold. + ErrLengthOverflow = errors.New("variable-length integer overflow") + // ErrInflatedSizeMismatch is returned when a packfile object inflates to + // more bytes than the size declared in its object header. A well-formed + // packfile never produces more data than the declared size; exceeding it + // indicates a structurally invalid entry. + ErrInflatedSizeMismatch = errors.New("packfile: inflated object exceeds declared size") ) +// boundedWriter passes writes through to w up to limit bytes total, then +// returns ErrInflatedSizeMismatch. It is used to enforce that a packfile +// object's inflated length does not exceed the size declared in its header. +type boundedWriter struct { + w io.Writer + limit int64 + n int64 +} + +// Write forwards p to the underlying writer while keeping the running total +// at or below limit. On overrun it forwards the legal prefix and reports +// the number of bytes actually consumed alongside ErrInflatedSizeMismatch, +// matching the contract in io.Writer. A write error from the underlying +// writer during overrun-handling is joined with ErrInflatedSizeMismatch so +// it is not silently dropped. +func (b *boundedWriter) Write(p []byte) (int, error) { + if b.n+int64(len(p)) > b.limit { + remain := int(b.limit - b.n) + err := error(ErrInflatedSizeMismatch) + if remain > 0 { + n, werr := b.w.Write(p[:remain]) + b.n += int64(n) + if werr != nil { + err = errors.Join(ErrInflatedSizeMismatch, werr) + } + return n, err + } + return 0, err + } + n, err := b.w.Write(p) + b.n += int64(n) + return n, err +} + +// boundedReadCloser wraps a ReadCloser and reports ErrInflatedSizeMismatch +// once more than limit bytes have been read. It is used by the on-demand +// object reader returned from FSObject.Reader so that a lazy Read of a +// packfile object cannot stream past its declared inflated size. +// +// The implementation builds on io.LimitedReader with the standard +// overrun-detection trick: request limit+1 bytes from the underlying so +// that the moment the sentinel byte materializes (LimitedReader.N drops +// to zero) we know the source produced more than limit bytes. +type boundedReadCloser struct { + lr io.LimitedReader + closer io.Closer + overrun bool +} + +// newBoundedReadCloser wraps rc so that the cumulative bytes returned from +// Read never exceed limit. The first call that would have returned a byte +// past limit instead returns ErrInflatedSizeMismatch; subsequent calls +// keep returning the same error. A negative limit is treated as zero, so +// the first byte produced by rc surfaces ErrInflatedSizeMismatch. +func newBoundedReadCloser(rc io.ReadCloser, limit int64) *boundedReadCloser { + if limit < 0 { + limit = 0 + } + return &boundedReadCloser{ + lr: io.LimitedReader{R: rc, N: limit + 1}, + closer: rc, + } +} + +// Read forwards Read up to the configured byte limit. When the underlying +// stream produces the limit+1 sentinel byte, the legal prefix is returned +// alongside ErrInflatedSizeMismatch; on subsequent calls only the error +// is returned. +func (b *boundedReadCloser) Read(p []byte) (int, error) { + if b.overrun { + return 0, ErrInflatedSizeMismatch + } + n, err := b.lr.Read(p) + if b.lr.N == 0 { + b.overrun = true + return n - 1, ErrInflatedSizeMismatch + } + return n, err +} + +// Close closes the underlying ReadCloser. +func (b *boundedReadCloser) Close() error { return b.closer.Close() } + // ObjectHeader contains the information related to the object, this information // is collected from the previous bytes to the content of the object. type ObjectHeader struct { @@ -220,6 +312,13 @@ func (s *Scanner) nextObjectHeader() (*ObjectHeader, error) { return nil, err } + // An OFS-delta references a base object that appears earlier + // in the pack; the negative offset must be strictly positive + // and not larger than the current object's offset. + if no <= 0 || no > h.Offset { + return nil, fmt.Errorf("%w: invalid OFS delta offset", ErrMalformedPackFile) + } + h.OffsetReference = h.Offset - no case plumbing.REFDeltaObject: var err error @@ -303,6 +402,13 @@ func (s *Scanner) readLength(first byte) (int64, error) { shift := firstLengthBits var err error for c&maskContinue > 0 { + // Mirrors unpack_object_header_buffer in canonical Git's + // packfile.c: a continuation byte at shift > 64-7 cannot + // contribute without overflowing an int64. + if shift > 64-lengthBits { + return 0, fmt.Errorf("%w: %w", ErrMalformedPackFile, ErrLengthOverflow) + } + if c, err = s.r.ReadByte(); err != nil { return 0, err } @@ -315,10 +421,18 @@ func (s *Scanner) readLength(first byte) (int64, error) { } // NextObject writes the content of the next object into the reader, returns -// the number of bytes written, the CRC32 of the content and an error, if any +// the number of bytes written, the CRC32 of the content and an error, if any. +// +// When a prior NextObjectHeader has stashed the object header in +// pendingObject, the inflated stream is bounded by the header's declared +// length and surfaces ErrInflatedSizeMismatch on overrun. func (s *Scanner) NextObject(w io.Writer) (written int64, crc32 uint32, err error) { + declaredSize := int64(-1) + if s.pendingObject != nil { + declaredSize = s.pendingObject.Length + } s.pendingObject = nil - written, err = s.copyObject(w) + written, err = s.copyObject(w, declaredSize) s.r.Flush() crc32 = s.crc.Sum32() @@ -327,23 +441,39 @@ func (s *Scanner) NextObject(w io.Writer) (written int64, crc32 uint32, err erro return } -// ReadObject returns a reader for the object content and an error +// ReadObject returns a reader for the object content and an error. +// +// When a prior NextObjectHeader has stashed the object header in +// pendingObject, the returned reader is bounded by the header's declared +// length so callers cannot stream past the declared inflated size; an +// overrun surfaces ErrInflatedSizeMismatch on the byte just past the +// limit. func (s *Scanner) ReadObject() (io.ReadCloser, error) { + declaredSize := int64(-1) + if s.pendingObject != nil { + declaredSize = s.pendingObject.Length + } s.pendingObject = nil zr, err := sync.GetZlibReader(s.r) if err != nil { return nil, fmt.Errorf("zlib reset error: %s", err) } - return ioutil.NewReadCloserWithCloser(zr.Reader, func() error { + rc := ioutil.NewReadCloserWithCloser(zr.Reader, func() error { sync.PutZlibReader(zr) return nil - }), nil + }) + if declaredSize >= 0 { + return newBoundedReadCloser(rc, declaredSize), nil + } + return rc, nil } -// ReadRegularObject reads and write a non-deltified object -// from it zlib stream in an object entry in the packfile. -func (s *Scanner) copyObject(w io.Writer) (n int64, err error) { +// copyObject inflates a non-deltified object's zlib stream into w. When +// declaredSize is non-negative, the write sink is wrapped in a +// boundedWriter so an overrun surfaces ErrInflatedSizeMismatch instead +// of being silently appended. +func (s *Scanner) copyObject(w io.Writer, declaredSize int64) (n int64, err error) { zr, err := sync.GetZlibReader(s.r) defer sync.PutZlibReader(zr) @@ -352,8 +482,14 @@ func (s *Scanner) copyObject(w io.Writer) (n int64, err error) { } defer ioutil.CheckClose(zr.Reader, &err) + + sink := w + if declaredSize >= 0 { + sink = &boundedWriter{w: w, limit: declaredSize} + } + buf := sync.GetByteSlice() - n, err = io.CopyBuffer(w, zr.Reader, *buf) + n, err = io.CopyBuffer(sink, zr.Reader, *buf) sync.PutByteSlice(buf) return } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go index d0d0036d..3c004f5f 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go @@ -10,6 +10,7 @@ import ( "sort" "strings" + "github.com/go-git/go-git/v5/internal/pathutil" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/filemode" "github.com/go-git/go-git/v5/plumbing/storer" @@ -118,7 +119,16 @@ func (t *Tree) Tree(path string) (*Tree, error) { } // TreeEntryFile returns the *File for a given *TreeEntry. +// +// The entry's name is validated against pathutil.ValidTreePath for +// the same reason FindEntry validates: TreeEntryFile is a boundary +// where attacker-controlled tree data leaves the trusted store as a +// *File whose Name a caller can hand to filesystem ops. func (t *Tree) TreeEntryFile(e *TreeEntry) (*File, error) { + if err := pathutil.ValidTreePath(e.Name); err != nil { + return nil, err + } + blob, err := GetBlob(t.s, e.Hash) if err != nil { return nil, err @@ -128,7 +138,16 @@ func (t *Tree) TreeEntryFile(e *TreeEntry) (*File, error) { } // FindEntry search a TreeEntry in this tree or any subtree. +// +// The lookup path is validated against pathutil.ValidTreePath to +// prevent attacker-controlled tree contents from leaking past this +// boundary as `.git`-shaped or path-traversal-shaped names. Callers +// that legitimately need to look up unsafe paths should walk the +// tree manually. func (t *Tree) FindEntry(path string) (*TreeEntry, error) { + if err := pathutil.ValidTreePath(path); err != nil { + return nil, err + } if t.t == nil { t.t = make(map[string]*Tree) } @@ -517,6 +536,10 @@ func (w *TreeWalker) Next() (name string, entry TreeEntry, err error) { continue } + if err := pathutil.ValidTreePath(entry.Name); err != nil { + return name, entry, err + } + if entry.Mode == filemode.Dir { obj, err = GetTree(w.s, entry.Hash) } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/transport/ssh/common.go b/vendor/github.com/go-git/go-git/v5/plumbing/transport/ssh/common.go index ae6f2174..647955b2 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/transport/ssh/common.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/transport/ssh/common.go @@ -252,7 +252,39 @@ func (c *command) setAuthFromEndpoint() error { } func endpointToCommand(cmd string, ep *transport.Endpoint) string { - return fmt.Sprintf("%s '%s'", cmd, ep.Path) + var b strings.Builder + b.WriteString(cmd) + b.WriteByte(' ') + writeShellQuote(&b, ep.Path) + return b.String() +} + +// writeShellQuote writes s to b, wrapped in single quotes with +// embedded single quotes and exclamation marks escaped using the +// POSIX close-escape-reopen idiom: +// +// ' becomes '\'' +// ! becomes '\!' +// +// It is a direct port of canonical Git's sq_quote_buf (quote.c). +// The bang escape keeps the result safe when re-evaluated under +// csh-derived shells that perform history expansion. The output is +// safe to pass as a single argument through any POSIX shell and +// round-trips through git-shell's sq_dequote_to_argv. +func writeShellQuote(b *strings.Builder, s string) { + b.Grow(len(s) + 2) + b.WriteByte('\'') + for i := 0; i < len(s); i++ { + c := s[i] + if c == '\'' || c == '!' { + b.WriteString(`'\`) + b.WriteByte(c) + b.WriteByte('\'') + continue + } + b.WriteByte(c) + } + b.WriteByte('\'') } func overrideConfig(overrides *ssh.ClientConfig, c *ssh.ClientConfig) { diff --git a/vendor/github.com/go-git/go-git/v5/repository.go b/vendor/github.com/go-git/go-git/v5/repository.go index e0cefc49..12af1623 100644 --- a/vendor/github.com/go-git/go-git/v5/repository.go +++ b/vendor/github.com/go-git/go-git/v5/repository.go @@ -1530,7 +1530,18 @@ func (r *Repository) Worktree() (*Worktree, error) { return nil, ErrIsBareRepository } - return &Worktree{r: r, Filesystem: r.wt}, nil + protectNTFS := defaultProtectNTFS() + protectHFS := defaultProtectHFS() + if cfg, err := r.Config(); err == nil { + if cfg.Core.ProtectNTFS.IsSet() { + protectNTFS = cfg.Core.ProtectNTFS.IsTrue() + } + if cfg.Core.ProtectHFS.IsSet() { + protectHFS = cfg.Core.ProtectHFS.IsTrue() + } + } + + return &Worktree{r: r, Filesystem: newWorktreeFilesystem(r.wt, protectNTFS, protectHFS)}, nil } func expand_ref(s storer.ReferenceStorer, ref plumbing.ReferenceName) (*plumbing.Reference, error) { diff --git a/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go b/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go index 72c9ccfc..eb85a114 100644 --- a/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go +++ b/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go @@ -75,6 +75,10 @@ var ( // ErrEmptyRefFile is returned when a reference file is attempted to be read, // but the file is empty ErrEmptyRefFile = errors.New("ref file is empty") + // ErrModuleNameEscape is returned when a submodule name would + // resolve outside the modules/ subtree, mirroring canonical Git's + // "ignoring suspicious submodule name" defence. + ErrModuleNameEscape = errors.New("submodule name escapes modules/ directory") ) // Options holds configuration for the storage. @@ -1127,9 +1131,20 @@ func (d *DotGit) PackRefs() (err error) { return nil } -// Module return a billy.Filesystem pointing to the module folder +// Module returns a billy.Filesystem pointing to the module folder. +// +// As a defence in depth against submodule name path traversal, +// refuse names whose joined path leaves the modules/ subtree once +// cleaned. The config-layer parser also validates submodule names, +// but Module may be reached from any caller that constructs a +// Submodule struct programmatically and so bypasses the parser. func (d *DotGit) Module(name string) (billy.Filesystem, error) { - return d.fs.Chroot(d.fs.Join(modulePath, name)) + p := d.fs.Join(modulePath, name) + cleaned := path.Clean(filepath.ToSlash(p)) + if cleaned != modulePath && !strings.HasPrefix(cleaned, modulePath+"/") { + return nil, ErrModuleNameEscape + } + return d.fs.Chroot(p) } func (d *DotGit) AddAlternate(remote string) error { diff --git a/vendor/github.com/go-git/go-git/v5/submodule.go b/vendor/github.com/go-git/go-git/v5/submodule.go index afabb6ac..2fe4ca2d 100644 --- a/vendor/github.com/go-git/go-git/v5/submodule.go +++ b/vendor/github.com/go-git/go-git/v5/submodule.go @@ -6,9 +6,12 @@ import ( "errors" "fmt" "path" + "path/filepath" "github.com/go-git/go-billy/v5" "github.com/go-git/go-git/v5/config" + "github.com/go-git/go-git/v5/internal/pathutil" + giturl "github.com/go-git/go-git/v5/internal/url" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/format/index" "github.com/go-git/go-git/v5/plumbing/transport" @@ -119,6 +122,16 @@ func (s *Submodule) Repository() (*Repository, error) { exists = true } + // s.c.Path is sourced from the worktree's .gitmodules and is + // therefore tree-controlled. Apply the strict tree-path validator + // before chroot — the wrapper's tolerant validPath would let a + // final-position .git component through (e.g. "submodule/.git"), + // which a malicious .gitmodules could use to chroot the submodule + // worktree into the repository's actual .git directory. + if err := pathutil.ValidTreePath(s.c.Path); err != nil { + return nil, err + } + var worktree billy.Filesystem if worktree, err = s.w.Filesystem.Chroot(s.c.Path); err != nil { return nil, err @@ -138,18 +151,25 @@ func (s *Submodule) Repository() (*Repository, error) { return nil, err } - if !path.IsAbs(moduleEndpoint.Path) && moduleEndpoint.Protocol == "file" { - remotes, err := s.w.r.Remotes() + // A relative submodule URL such as "../X.git" must resolve against + // the parent repository's remote URL, not against the process CWD. + // Detect relativity from the raw configured URL because + // transport.NewEndpoint normalizes local paths to absolute form via + // filepath.Abs, which would otherwise mask the relative form here. + if giturl.IsLocalEndpoint(s.c.URL) && + !path.IsAbs(s.c.URL) && !filepath.IsAbs(s.c.URL) { + + base, err := defaultRemote(s.w.r) + if err != nil { + return nil, fmt.Errorf("resolving relative submodule URL: %w", err) + } + + rootEndpoint, err := transport.NewEndpoint(base.URLs[0]) if err != nil { return nil, err } - rootEndpoint, err := transport.NewEndpoint(remotes[0].c.URLs[0]) - if err != nil { - return nil, err - } - - rootEndpoint.Path = path.Join(rootEndpoint.Path, moduleEndpoint.Path) + rootEndpoint.Path = path.Join(rootEndpoint.Path, s.c.URL) *moduleEndpoint = *rootEndpoint } @@ -161,6 +181,52 @@ func (s *Submodule) Repository() (*Repository, error) { return r, err } +// defaultRemote returns the remote that relative submodule URLs are +// resolved against, mirroring canonical Git's repo_default_remote +// (remote.c) and resolve_relative_url (builtin/submodule--helper.c): +// +// 1. if HEAD is on a branch with branch..remote configured, +// use that remote; +// 2. else if exactly one remote is configured, use it; +// 3. otherwise fall back to DefaultRemoteName ("origin"). +// +// Each rule falls through unconditionally: a branch lookup that +// finds the branch but with an empty Remote does not short-circuit +// rule (2). Returns an error when the chosen remote is not configured. +func defaultRemote(r *Repository) (*config.RemoteConfig, error) { + cfg, err := r.Config() + if err != nil { + return nil, err + } + + if ref, err := r.Reference(plumbing.HEAD, false); err == nil && + ref.Type() == plumbing.SymbolicReference && + ref.Target().IsBranch() { + if b, ok := cfg.Branches[ref.Target().Short()]; ok && b.Remote != "" { + return lookupRemote(cfg, b.Remote) + } + } + + if len(cfg.Remotes) == 1 { + for name := range cfg.Remotes { + return lookupRemote(cfg, name) + } + } + + return lookupRemote(cfg, DefaultRemoteName) +} + +func lookupRemote(cfg *config.Config, name string) (*config.RemoteConfig, error) { + rc, ok := cfg.Remotes[name] + if !ok { + return nil, fmt.Errorf("remote %q not found", name) + } + if len(rc.URLs) == 0 { + return nil, fmt.Errorf("remote %q has no configured URL", name) + } + return rc, nil +} + // Update the registered submodule to match what the superproject expects, the // submodule should be initialized first calling the Init method or setting in // the options SubmoduleUpdateOptions.Init equals true diff --git a/vendor/github.com/go-git/go-git/v5/utils/binary/read.go b/vendor/github.com/go-git/go-git/v5/utils/binary/read.go index b8f9df1a..71d9ad60 100644 --- a/vendor/github.com/go-git/go-git/v5/utils/binary/read.go +++ b/vendor/github.com/go-git/go-git/v5/utils/binary/read.go @@ -5,11 +5,18 @@ package binary import ( "bufio" "encoding/binary" + "errors" "io" + "math" "github.com/go-git/go-git/v5/plumbing" ) +// ErrIntegerOverflow is returned when a Git-format variable-width integer +// would not fit into an int64 because the input declares more continuation +// bytes than the type can hold. +var ErrIntegerOverflow = errors.New("variable-width integer overflow") + // Read reads structured binary data from r into data. Bytes are read and // decoded in BigEndian order // https://golang.org/pkg/encoding/binary/#Read @@ -92,6 +99,14 @@ func ReadVariableWidthInt(r io.Reader) (int64, error) { var v = int64(c & maskLength) for c&maskContinue > 0 { + // Reject input that, after the v++ and shift below, would + // not fit in an int64. With v < (MaxInt64-127)>>7, the + // post-increment v is at most (MaxInt64-127)>>7 and the + // final (v << 7) + (c & 0x7F) stays within int64. + if v >= (math.MaxInt64-int64(maskLength))>>lengthBits { + return 0, ErrIntegerOverflow + } + v++ if err := Read(r, &c); err != nil { return 0, err diff --git a/vendor/github.com/go-git/go-git/v5/worktree.go b/vendor/github.com/go-git/go-git/v5/worktree.go index 55d7ebb1..d8ee9fdd 100644 --- a/vendor/github.com/go-git/go-git/v5/worktree.go +++ b/vendor/github.com/go-git/go-git/v5/worktree.go @@ -7,7 +7,6 @@ import ( "io" "os" "path/filepath" - "runtime" "strings" "github.com/go-git/go-billy/v5" @@ -458,10 +457,6 @@ func (w *Worktree) resetWorktree(t *object.Tree, files []string) error { filesMap := buildFilePathMap(files) for _, ch := range changes { - if err := w.validChange(ch); err != nil { - return err - } - if len(files) > 0 { file := "" if ch.From != nil { @@ -489,108 +484,6 @@ func (w *Worktree) resetWorktree(t *object.Tree, files []string) error { return w.r.Storer.SetIndex(idx) } -// worktreeDeny is a list of paths that are not allowed -// to be used when resetting the worktree. -var worktreeDeny = map[string]struct{}{ - // .git - GitDirName: {}, - - // For other historical reasons, file names that do not conform to the 8.3 - // format (up to eight characters for the basename, three for the file - // extension, certain characters not allowed such as `+`, etc) are associated - // with a so-called "short name", at least on the `C:` drive by default. - // Which means that `git~1/` is a valid way to refer to `.git/`. - "git~1": {}, -} - -// validPath checks whether paths are valid. -// The rules around invalid paths could differ from upstream based on how -// filesystems are managed within go-git, but they are largely the same. -// -// For upstream rules: -// https://github.com/git/git/blob/564d0252ca632e0264ed670534a51d18a689ef5d/read-cache.c#L946 -// https://github.com/git/git/blob/564d0252ca632e0264ed670534a51d18a689ef5d/path.c#L1383 -func validPath(paths ...string) error { - for _, p := range paths { - parts := strings.FieldsFunc(p, func(r rune) bool { return (r == '\\' || r == '/') }) - if len(parts) == 0 { - return fmt.Errorf("invalid path: %q", p) - } - - if _, denied := worktreeDeny[strings.ToLower(parts[0])]; denied { - return fmt.Errorf("invalid path prefix: %q", p) - } - - if runtime.GOOS == "windows" { - // Volume names are not supported, in both formats: \\ and :. - if vol := filepath.VolumeName(p); vol != "" { - return fmt.Errorf("invalid path: %q", p) - } - - if !windowsValidPath(parts[0]) { - return fmt.Errorf("invalid path: %q", p) - } - } - - for _, part := range parts { - if part == ".." { - return fmt.Errorf("invalid path %q: cannot use '..'", p) - } - } - } - return nil -} - -// windowsPathReplacer defines the chars that need to be replaced -// as part of windowsValidPath. -var windowsPathReplacer *strings.Replacer - -func init() { - windowsPathReplacer = strings.NewReplacer(" ", "", ".", "") -} - -func windowsValidPath(part string) bool { - if len(part) > 3 && strings.EqualFold(part[:4], GitDirName) { - // For historical reasons, file names that end in spaces or periods are - // automatically trimmed. Therefore, `.git . . ./` is a valid way to refer - // to `.git/`. - if windowsPathReplacer.Replace(part[4:]) == "" { - return false - } - - // For yet other historical reasons, NTFS supports so-called "Alternate Data - // Streams", i.e. metadata associated with a given file, referred to via - // `::`. There exists a default stream - // type for directories, allowing `.git/` to be accessed via - // `.git::$INDEX_ALLOCATION/`. - // - // For performance reasons, _all_ Alternate Data Streams of `.git/` are - // forbidden, not just `::$INDEX_ALLOCATION`. - if len(part) > 4 && part[4:5] == ":" { - return false - } - } - return true -} - -func (w *Worktree) validChange(ch merkletrie.Change) error { - action, err := ch.Action() - if err != nil { - return nil - } - - switch action { - case merkletrie.Delete: - return validPath(ch.From.String()) - case merkletrie.Insert: - return validPath(ch.To.String()) - case merkletrie.Modify: - return validPath(ch.From.String(), ch.To.String()) - } - - return nil -} - func (w *Worktree) checkoutChange(ch merkletrie.Change, t *object.Tree, idx *indexBuilder) error { a, err := ch.Action() if err != nil { @@ -763,10 +656,10 @@ func (w *Worktree) checkoutFile(f *object.File) (err error) { } func (w *Worktree) checkoutFileSymlink(f *object.File) (err error) { - // https://github.com/git/git/commit/10ecfa76491e4923988337b2e2243b05376b40de - if strings.EqualFold(f.Name, gitmodulesFile) { - return ErrGitModulesSymlink - } + // .gitmodules symlink rejection (and its NTFS / HFS variants) is + // enforced by the worktreeFilesystem wrapper's Symlink method via + // validSymlinkName. See https://github.com/git/git/commit/10ecfa7 + // for the upstream rationale. from, err := f.Reader() if err != nil { diff --git a/vendor/github.com/go-git/go-git/v5/worktree_fs.go b/vendor/github.com/go-git/go-git/v5/worktree_fs.go new file mode 100644 index 00000000..9bc2fd97 --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/worktree_fs.go @@ -0,0 +1,264 @@ +package git + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "runtime" + "strings" + + "github.com/go-git/go-billy/v5" + + "github.com/go-git/go-git/v5/internal/pathutil" +) + +// defaultProtectHFS returns the default value for core.protectHFS +// when not explicitly configured. Matches upstream Git's +// PROTECT_HFS_DEFAULT[1], which the Makefile sets to 1 on Darwin +// and leaves at 0 on every other platform. +// +// [1]: https://github.com/git/git/blob/v2.54.0/config.mak.uname#L146 +func defaultProtectHFS() bool { + return runtime.GOOS == "darwin" +} + +// defaultProtectNTFS returns the default value for core.protectNTFS +// when not explicitly configured. Matches upstream Git's +// PROTECT_NTFS_DEFAULT, which has been 1 on every platform since +// 9102f958ee5 (CVE-2019-1353)[1]: WSL allows Linux processes to +// reach NTFS-mounted worktrees on Windows hosts, so the +// is_ntfs_dotgit guard cannot safely be gated on the runtime OS. +// +// [1]: https://github.com/git/git/commit/9102f958ee5 +func defaultProtectNTFS() bool { + return true +} + +// worktreeFilesystem wraps a billy.Filesystem and validates every path passed +// to a mutating operation. This prevents writing to, or deleting from, +// dangerous locations (e.g. .git/*, ../) regardless of which worktree +// code path triggers the operation. +type worktreeFilesystem struct { + billy.Filesystem + protectNTFS bool + protectHFS bool +} + +func newWorktreeFilesystem(fs billy.Filesystem, protectNTFS, protectHFS bool) *worktreeFilesystem { + return &worktreeFilesystem{Filesystem: fs, protectNTFS: protectNTFS, protectHFS: protectHFS} +} + +func (sfs *worktreeFilesystem) Create(filename string) (billy.File, error) { + if err := sfs.validPath(filename); err != nil { + return nil, fmt.Errorf("create: %w", err) + } + return sfs.Filesystem.Create(filename) +} + +func (sfs *worktreeFilesystem) Open(filename string) (billy.File, error) { + if err := sfs.validReadPath(filename); err != nil { + return nil, fmt.Errorf("open: %w", err) + } + return sfs.Filesystem.Open(filename) +} + +func (sfs *worktreeFilesystem) OpenFile(filename string, flag int, perm os.FileMode) (billy.File, error) { + if err := sfs.validPath(filename); err != nil { + return nil, fmt.Errorf("openfile: %w", err) + } + return sfs.Filesystem.OpenFile(filename, flag, perm) +} + +func (sfs *worktreeFilesystem) Stat(filename string) (os.FileInfo, error) { + if err := sfs.validReadPath(filename); err != nil { + return nil, fmt.Errorf("stat: %w", err) + } + return sfs.Filesystem.Stat(filename) +} + +func (sfs *worktreeFilesystem) Remove(filename string) error { + if err := sfs.validPath(filename); err != nil { + return fmt.Errorf("remove: %w", err) + } + return sfs.Filesystem.Remove(filename) +} + +func (sfs *worktreeFilesystem) Rename(from, to string) error { + if err := sfs.validPath(from, to); err != nil { + return fmt.Errorf("rename: %w", err) + } + return sfs.Filesystem.Rename(from, to) +} + +func (sfs *worktreeFilesystem) ReadDir(path string) ([]os.FileInfo, error) { + if err := sfs.validReadPath(path); err != nil { + return nil, fmt.Errorf("readdir: %w", err) + } + return sfs.Filesystem.ReadDir(path) +} + +func (sfs *worktreeFilesystem) Lstat(filename string) (os.FileInfo, error) { + if err := sfs.validReadPath(filename); err != nil { + return nil, fmt.Errorf("lstat: %w", err) + } + return sfs.Filesystem.Lstat(filename) +} + +func (sfs *worktreeFilesystem) Symlink(target, link string) error { + if err := sfs.validPath(link); err != nil { + return fmt.Errorf("symlink: %w", err) + } + if err := sfs.validSymlinkName(link); err != nil { + return fmt.Errorf("symlink: %w", err) + } + return sfs.Filesystem.Symlink(target, link) +} + +func (sfs *worktreeFilesystem) Readlink(link string) (string, error) { + if err := sfs.validReadPath(link); err != nil { + return "", fmt.Errorf("readlink: %w", err) + } + return sfs.Filesystem.Readlink(link) +} + +func (sfs *worktreeFilesystem) MkdirAll(path string, perm os.FileMode) error { + // MkdirAll on the worktree root is a no-op: the root always exists, + // so there is nothing to materialise. Mirroring the tolerance that + // validReadPath gives to read-side operations avoids breaking callers + // that walk a directory tree and pass the relative-to-root prefix + // ("") through to the worktree FS. + if path == "" || path == "." || path == "/" { + return nil + } + if err := sfs.validPath(path); err != nil { + return fmt.Errorf("mkdirall: %w", err) + } + return sfs.Filesystem.MkdirAll(path, perm) +} + +func (sfs *worktreeFilesystem) TempFile(_, _ string) (billy.File, error) { + return nil, fmt.Errorf("tempfile: %w", errUnsupportedOperation) +} + +func (sfs *worktreeFilesystem) Chroot(path string) (billy.Filesystem, error) { + if err := sfs.validReadPath(path); err != nil { + return nil, fmt.Errorf("chroot: %w", err) + } + return sfs.Filesystem.Chroot(path) +} + +// validReadPath is like validPath but treats the empty string and "." as +// valid references to the worktree root. Read-side operations on the root +// (e.g. ReadDir(""), Lstat(".")) are legitimate; mutating the root itself +// is not, so write-side operations continue to use validPath directly. +func (sfs *worktreeFilesystem) validReadPath(p string) error { + if p == "" || p == "." || p == "/" { + return nil + } + return sfs.validPath(p) +} + +var errUnsupportedOperation = errors.New("unsupported operation") + +// isDotGitVariant reports whether part is .git, git~1, or an HFS+ +// equivalent of .git (when protectHFS is true). NTFS variants of .git +// (e.g. ".git " with trailing space, ".git::$INDEX_ALLOCATION") are +// detected separately by pathutil.WindowsValidPath, which applies +// regardless of position in the path. Both validators reuse this +// helper. +func isDotGitVariant(part string, protectHFS bool) bool { + if pathutil.IsDotGitName(part) { + return true + } + if protectHFS && pathutil.IsHFSDotGit(part) { + return true + } + return false +} + +// validPath checks whether paths are valid for the worktree +// filesystem abstraction. It is intentionally tolerant of .git as +// the final path component of a multi-component path +// (e.g. "submodule/.git"), so that legitimate gitlink pointer files +// can still be Stat'd, Read, and Removed via the wrapper during +// submodule cleanup. Attacker-controlled tree-entry paths are +// validated separately by pathutil.ValidTreePath at the boundaries +// where data leaves the trusted store (Tree.FindEntry, the explicit +// callers in CherryPick and Submodule.Repository). +// +// For upstream rules: +// https://github.com/git/git/blob/v2.54.0/read-cache.c#L987 +// https://github.com/git/git/blob/v2.54.0/path.c#L1419 +func (sfs *worktreeFilesystem) validPath(paths ...string) error { + for _, p := range paths { + for i := 0; i < len(p); i++ { + if p[i] < 0x20 || p[i] == 0x7f { + return fmt.Errorf("invalid path %q: contains control character", p) + } + } + + parts := strings.FieldsFunc(p, func(r rune) bool { return (r == '\\' || r == '/') }) + if len(parts) == 0 { + return fmt.Errorf("invalid path: %q", p) + } + + if sfs.protectNTFS { + // Volume names are not supported, in both formats: \\ and :. + if vol := filepath.VolumeName(p); vol != "" { + return fmt.Errorf("invalid path: %q", p) + } + } + + for i, part := range parts { + if part == "." || part == ".." { + return fmt.Errorf("invalid path %q: cannot use %q", p, part) + } + + // Reject .git (and equivalents) as a path component when it is + // either the first component (root-level .git) or a non-final + // component (traversal into a .git directory, e.g. "a/.git/config"). + // A final non-first .git component (e.g. "submodule/.git") is + // allowed because submodule worktrees contain a .git pointer file. + if isDotGitVariant(part, sfs.protectHFS) && (i == 0 || i < len(parts)-1) { + return fmt.Errorf("invalid path component: %q", p) + } + + if sfs.protectNTFS && !pathutil.WindowsValidPath(part) { + return fmt.Errorf("invalid path: %q", p) + } + } + } + return nil +} + +// validSymlinkName checks the per-component name of a symlink for +// dotfile names that attackers can use to trick a checkout into +// writing a dangerous symlink. Each path component is compared +// against .gitmodules case-insensitively, against its NTFS variants +// (e.g. ".gitmodules .", ".gitmodules::$INDEX_ALLOCATION", or 8.3 +// short-name forms) when protectNTFS is on, and against its HFS+ +// variants (Unicode ignored code points folded into ".gitmodules") +// when protectHFS is on. +// +// Reference: upstream Git verify_path_internal at read-cache.c#L1004-L1024 +// in tag v2.54.0[1]. +// +// [1]: https://github.com/git/git/blob/v2.54.0/read-cache.c#L1004-L1024 +func (sfs *worktreeFilesystem) validSymlinkName(name string) error { + parts := strings.FieldsFunc(name, func(r rune) bool { + return r == '/' || r == '\\' + }) + for _, part := range parts { + if strings.EqualFold(part, gitmodulesFile) { + return ErrGitModulesSymlink + } + if sfs.protectNTFS && pathutil.IsNTFSDotGitmodules(part) { + return ErrGitModulesSymlink + } + if sfs.protectHFS && pathutil.IsHFSDotGitmodules(part) { + return ErrGitModulesSymlink + } + } + return nil +} diff --git a/vendor/github.com/go-git/go-git/v5/worktree_status.go b/vendor/github.com/go-git/go-git/v5/worktree_status.go index e7a60747..ecc3d7ab 100644 --- a/vendor/github.com/go-git/go-git/v5/worktree_status.go +++ b/vendor/github.com/go-git/go-git/v5/worktree_status.go @@ -10,6 +10,7 @@ import ( "strings" "github.com/go-git/go-billy/v5/util" + "github.com/go-git/go-git/v5/internal/pathutil" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/filemode" "github.com/go-git/go-git/v5/plumbing/format/gitignore" @@ -545,6 +546,14 @@ func (w *Worktree) addOrUpdateFileToIndex(idx *index.Index, filename string, h p } func (w *Worktree) doAddFileToIndex(idx *index.Index, filename string, h plumbing.Hash) error { + // Mirror upstream's Index.Add gate at the v5 caller boundary: the + // index feeds future trees, so a name that the tree-side + // pathutil.ValidTreePath gate would reject must not enter the + // index in the first place. v5 keeps Index.Add's existing signature + // for API compatibility, so the validation happens here. + if err := pathutil.ValidTreePath(filename); err != nil { + return err + } return w.doUpdateFileToIndex(idx.Add(filename), filename, h) } diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index dd7770ce..1fe43ec4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 3569ebdf..af7f2e21 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm64 diff --git a/vendor/modules.txt b/vendor/modules.txt index b842c8a3..f1daf136 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -291,11 +291,12 @@ github.com/go-git/go-billy/v5/helper/polyfill github.com/go-git/go-billy/v5/memfs github.com/go-git/go-billy/v5/osfs github.com/go-git/go-billy/v5/util -# github.com/go-git/go-git/v5 v5.19.0 +# github.com/go-git/go-git/v5 v5.19.1 ## explicit; go 1.25.0 github.com/go-git/go-git/v5 github.com/go-git/go-git/v5/config github.com/go-git/go-git/v5/internal/path_util +github.com/go-git/go-git/v5/internal/pathutil github.com/go-git/go-git/v5/internal/revision github.com/go-git/go-git/v5/internal/url github.com/go-git/go-git/v5/plumbing From 4276337b0f878f8e8172444bfc8dcee9a56c8a7b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 May 2026 22:01:06 +0000 Subject: [PATCH 18/55] chore(deps): update golang docker tag --- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 1fe43ec4..dd7770ce 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index af7f2e21..3569ebdf 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b ENV GOOS=linux ENV GOARCH=arm64 From c7bd55e371447f15dd9e011c128127362b761b87 Mon Sep 17 00:00:00 2001 From: devydave Date: Wed, 13 May 2026 22:41:17 +0200 Subject: [PATCH 19/55] feat: adds nix flake --- flake.lock | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 37 ++++++++++++++++++++++++++++++++ package.nix | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 package.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..9448fe0f --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1778443072, + "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..fdc35b22 --- /dev/null +++ b/flake.nix @@ -0,0 +1,37 @@ +{ + description = "The Co-op Cloud utility belt"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = + { + self, + nixpkgs, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + packages = rec { + abra = pkgs.callPackage ./package.nix { }; + default = abra; + }; + apps = rec { + abra = flake-utils.lib.mkApp { drv = self.packages.${system}.abra; }; + default = abra; + }; + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + go_1_26 + gnumake + ]; + }; + } + ); +} diff --git a/package.nix b/package.nix new file mode 100644 index 00000000..ab5bd309 --- /dev/null +++ b/package.nix @@ -0,0 +1,54 @@ +{ + buildGo126Module, + fetchgit, + lib, + installShellFiles, +}: + +buildGo126Module rec { + pname = "abra"; + version = "0.13.0-beta"; + rev = "06a57ded025a43c80f94d4e65299add8a31830dc"; + + src = fetchgit { + url = "https://git.coopcloud.tech/toolshed/abra.git"; + tag = version; + hash = "sha256-rgoK0TY0WLSQ39lPvVM80zW/qJF40VFBSxYDOaKXZQo="; + }; + + vendorHash = null; + + nativeBuildInputs = [ + installShellFiles + ]; + + env.CGO_ENABLED = 0; + buildPhase = '' + runHook preBuild + go build -ldflags="-s -w -X 'main.Commit=${rev}' -X 'main.Version=${version}'" ./cmd/abra + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + install -D abra $out/bin/abra + runHook postInstall + ''; + + postInstall = '' + export ABRA_DIR="$out" + $out/bin/abra autocomplete bash >abra.bash + $out/bin/abra autocomplete fish >abra.fish + $out/bin/abra autocomplete zsh >abra.zsh + installShellCompletion abra.{bash,fish,zsh} + ''; + + meta = with lib; { + description = "The Co-op Cloud utility belt"; + homepage = "https://docs.coopcloud.tech/abra"; + changelog = "https://git.coopcloud.tech/toolshed/abra/releases/tag/${version}"; + mainProgram = "abra"; + license = licenses.gpl3Plus; + maintainers = "devydave"; + }; +} From 1d9a2898889d17ea3802d65ecf1e4f973accf722 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 May 2026 21:00:50 +0000 Subject: [PATCH 20/55] chore(deps): update nginx docker tag to v1.31.1 --- pkg/secret/testdir/compose.yaml | 2 +- tests/resources/test_recipe/compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secret/testdir/compose.yaml b/pkg/secret/testdir/compose.yaml index e3cbbf8d..b8f448df 100644 --- a/pkg/secret/testdir/compose.yaml +++ b/pkg/secret/testdir/compose.yaml @@ -3,7 +3,7 @@ version: "3.8" services: app: - image: nginx:1.31.0 + image: nginx:1.31.1 secrets: - test_pass_one - test_pass_two diff --git a/tests/resources/test_recipe/compose.yml b/tests/resources/test_recipe/compose.yml index d75796da..f74fb989 100644 --- a/tests/resources/test_recipe/compose.yml +++ b/tests/resources/test_recipe/compose.yml @@ -3,7 +3,7 @@ version: "3.8" services: app: - image: nginx:1.31.0 + image: nginx:1.31.1 networks: - proxy deploy: From 5dea5f7746effa5a88dfddb18fc39d5f4c405200 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 May 2026 22:01:49 +0000 Subject: [PATCH 21/55] chore(deps): update module golang.org/x/sys to v0.45.0 --- go.mod | 2 +- go.sum | 4 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- .../github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- vendor/golang.org/x/sys/cpu/cpu.go | 19 +- .../golang.org/x/sys/cpu/cpu_linux_riscv64.go | 2 + vendor/golang.org/x/sys/cpu/cpu_loong64.go | 16 +- vendor/golang.org/x/sys/cpu/cpu_riscv64.go | 1 + vendor/golang.org/x/sys/unix/mkerrors.sh | 3 + vendor/golang.org/x/sys/unix/readv_unix.go | 103 ++ .../golang.org/x/sys/unix/syscall_darwin.go | 89 -- vendor/golang.org/x/sys/unix/syscall_linux.go | 106 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 4 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 61 +- .../x/sys/unix/zerrors_linux_386.go | 7 +- .../x/sys/unix/zerrors_linux_amd64.go | 7 +- .../x/sys/unix/zerrors_linux_arm.go | 7 +- .../x/sys/unix/zerrors_linux_arm64.go | 7 +- .../x/sys/unix/zerrors_linux_loong64.go | 7 +- .../x/sys/unix/zerrors_linux_mips.go | 7 +- .../x/sys/unix/zerrors_linux_mips64.go | 7 +- .../x/sys/unix/zerrors_linux_mips64le.go | 7 +- .../x/sys/unix/zerrors_linux_mipsle.go | 7 +- .../x/sys/unix/zerrors_linux_ppc.go | 7 +- .../x/sys/unix/zerrors_linux_ppc64.go | 7 +- .../x/sys/unix/zerrors_linux_ppc64le.go | 7 +- .../x/sys/unix/zerrors_linux_riscv64.go | 1114 +++++++++-------- .../x/sys/unix/zerrors_linux_s390x.go | 7 +- .../x/sys/unix/zerrors_linux_sparc64.go | 7 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 8 +- .../x/sys/unix/zsyscall_openbsd_386.go | 84 ++ .../x/sys/unix/zsyscall_openbsd_386.s | 20 + .../x/sys/unix/zsyscall_openbsd_amd64.go | 84 ++ .../x/sys/unix/zsyscall_openbsd_amd64.s | 20 + .../x/sys/unix/zsyscall_openbsd_arm.go | 84 ++ .../x/sys/unix/zsyscall_openbsd_arm.s | 20 + .../x/sys/unix/zsyscall_openbsd_arm64.go | 84 ++ .../x/sys/unix/zsyscall_openbsd_arm64.s | 20 + .../x/sys/unix/zsyscall_openbsd_mips64.go | 84 ++ .../x/sys/unix/zsyscall_openbsd_mips64.s | 20 + .../x/sys/unix/zsyscall_openbsd_ppc64.go | 84 ++ .../x/sys/unix/zsyscall_openbsd_ppc64.s | 24 + .../x/sys/unix/zsyscall_openbsd_riscv64.go | 84 ++ .../x/sys/unix/zsyscall_openbsd_riscv64.s | 20 + .../x/sys/unix/zsysnum_linux_386.go | 4 + .../x/sys/unix/zsysnum_linux_amd64.go | 5 + .../x/sys/unix/zsysnum_linux_arm.go | 4 + .../x/sys/unix/zsysnum_linux_arm64.go | 4 + .../x/sys/unix/zsysnum_linux_loong64.go | 5 + .../x/sys/unix/zsysnum_linux_mips.go | 4 + .../x/sys/unix/zsysnum_linux_mips64.go | 4 + .../x/sys/unix/zsysnum_linux_mips64le.go | 4 + .../x/sys/unix/zsysnum_linux_mipsle.go | 4 + .../x/sys/unix/zsysnum_linux_ppc.go | 4 + .../x/sys/unix/zsysnum_linux_ppc64.go | 4 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 4 + .../x/sys/unix/zsysnum_linux_riscv64.go | 4 + .../x/sys/unix/zsysnum_linux_s390x.go | 4 + .../x/sys/unix/zsysnum_linux_sparc64.go | 5 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 47 +- .../golang.org/x/sys/unix/ztypes_linux_386.go | 8 + .../x/sys/unix/ztypes_linux_amd64.go | 8 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 8 + .../x/sys/unix/ztypes_linux_arm64.go | 8 + .../x/sys/unix/ztypes_linux_loong64.go | 8 + .../x/sys/unix/ztypes_linux_mips.go | 8 + .../x/sys/unix/ztypes_linux_mips64.go | 8 + .../x/sys/unix/ztypes_linux_mips64le.go | 8 + .../x/sys/unix/ztypes_linux_mipsle.go | 8 + .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 8 + .../x/sys/unix/ztypes_linux_ppc64.go | 8 + .../x/sys/unix/ztypes_linux_ppc64le.go | 8 + .../x/sys/unix/ztypes_linux_riscv64.go | 8 + .../x/sys/unix/ztypes_linux_s390x.go | 8 + .../x/sys/unix/ztypes_linux_sparc64.go | 8 + .../x/sys/windows/syscall_windows.go | 3 + .../golang.org/x/sys/windows/types_windows.go | 4 +- .../x/sys/windows/zsyscall_windows.go | 35 + vendor/modules.txt | 2 +- 79 files changed, 1856 insertions(+), 784 deletions(-) create mode 100644 vendor/golang.org/x/sys/unix/readv_unix.go diff --git a/go.mod b/go.mod index 24cd3f74..8617aa0a 100644 --- a/go.mod +++ b/go.mod @@ -155,7 +155,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/theupdateframework/notary v0.7.0 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - golang.org/x/sys v0.44.0 + golang.org/x/sys v0.45.0 ) replace github.com/docker/cli v28.4.0+incompatible => git.coopcloud.tech/toolshed/docker-cli v28.5.3-0.20260202112816-30df2d0b3a00+incompatible diff --git a/go.sum b/go.sum index 2f6687a0..a18a9dc8 100644 --- a/go.sum +++ b/go.sum @@ -1140,8 +1140,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index dd7770ce..1fe43ec4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 3569ebdf..af7f2e21 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm64 diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index 63541994..f1ce515d 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -152,13 +152,17 @@ var ARM struct { // The booleans in Loong64 contain the correspondingly named cpu feature bit. // The struct is padded to avoid false sharing. var Loong64 struct { - _ CacheLinePad - HasLSX bool // support 128-bit vector extension - HasLASX bool // support 256-bit vector extension - HasCRC32 bool // support CRC instruction - HasLAM_BH bool // support AM{SWAP/ADD}[_DB].{B/H} instruction - HasLAMCAS bool // support AMCAS[_DB].{B/H/W/D} instruction - _ CacheLinePad + _ CacheLinePad + HasLSX bool // support 128-bit vector extension + HasLASX bool // support 256-bit vector extension + HasCRC32 bool // support CRC instruction + HasLAMCAS bool // support AMCAS[_DB].{B/H/W/D} + HasLAM_BH bool // support AM{SWAP/ADD}[_DB].{B/H} instruction + HasLLACQ_SCREL bool // support LLACQ.{W/D}, SCREL.{W/D} instruction + HasSCQ bool // support SC.Q instruction + HasDBAR_HINTS bool // supports finer-grained DBAR hints + + _ CacheLinePad } // MIPS64X contains the supported CPU features of the current mips64/mips64le @@ -232,6 +236,7 @@ var RISCV64 struct { HasZba bool // Address generation instructions extension HasZbb bool // Basic bit-manipulation extension HasZbs bool // Single-bit instructions extension + HasZbc bool // Carryless multiplication extension HasZvbb bool // Vector Basic Bit-manipulation HasZvbc bool // Vector Carryless Multiplication HasZvkb bool // Vector Cryptography Bit-manipulation diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go index ad741536..f4fb52ee 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go @@ -58,6 +58,7 @@ const ( riscv_HWPROBE_EXT_ZBA = 0x8 riscv_HWPROBE_EXT_ZBB = 0x10 riscv_HWPROBE_EXT_ZBS = 0x20 + riscv_HWPROBE_EXT_ZBC = 0x80 riscv_HWPROBE_EXT_ZVBB = 0x20000 riscv_HWPROBE_EXT_ZVBC = 0x40000 riscv_HWPROBE_EXT_ZVKB = 0x80000 @@ -108,6 +109,7 @@ func doinit() { RISCV64.HasZba = isSet(v, riscv_HWPROBE_EXT_ZBA) RISCV64.HasZbb = isSet(v, riscv_HWPROBE_EXT_ZBB) RISCV64.HasZbs = isSet(v, riscv_HWPROBE_EXT_ZBS) + RISCV64.HasZbc = isSet(v, riscv_HWPROBE_EXT_ZBC) RISCV64.HasZvbb = isSet(v, riscv_HWPROBE_EXT_ZVBB) RISCV64.HasZvbc = isSet(v, riscv_HWPROBE_EXT_ZVBC) RISCV64.HasZvkb = isSet(v, riscv_HWPROBE_EXT_ZVKB) diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_loong64.go index 45ecb29a..8c234b44 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_loong64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.go @@ -15,8 +15,13 @@ const ( cpucfg1_CRC32 = 1 << 25 // CPUCFG2 bits - cpucfg2_LAM_BH = 1 << 27 - cpucfg2_LAMCAS = 1 << 28 + cpucfg2_LAM_BH = 1 << 27 + cpucfg2_LAMCAS = 1 << 28 + cpucfg2_LLACQ_SCREL = 1 << 29 + cpucfg2_SCQ = 1 << 30 + + // CPUCFG3 bits + cpucfg3_DBAR_HINTS = 1 << 17 ) func initOptions() { @@ -26,6 +31,9 @@ func initOptions() { {Name: "crc32", Feature: &Loong64.HasCRC32}, {Name: "lam_bh", Feature: &Loong64.HasLAM_BH}, {Name: "lamcas", Feature: &Loong64.HasLAMCAS}, + {Name: "llacq_screl", Feature: &Loong64.HasLLACQ_SCREL}, + {Name: "scq", Feature: &Loong64.HasSCQ}, + {Name: "dbar_hints", Feature: &Loong64.HasDBAR_HINTS}, } // The CPUCFG data on Loong64 only reflects the hardware capabilities, @@ -37,10 +45,14 @@ func initOptions() { // through CPUCFG cfg1 := get_cpucfg(1) cfg2 := get_cpucfg(2) + cfg3 := get_cpucfg(3) Loong64.HasCRC32 = cfgIsSet(cfg1, cpucfg1_CRC32) Loong64.HasLAMCAS = cfgIsSet(cfg2, cpucfg2_LAMCAS) Loong64.HasLAM_BH = cfgIsSet(cfg2, cpucfg2_LAM_BH) + Loong64.HasLLACQ_SCREL = cfgIsSet(cfg2, cpucfg2_LLACQ_SCREL) + Loong64.HasSCQ = cfgIsSet(cfg2, cpucfg2_SCQ) + Loong64.HasDBAR_HINTS = cfgIsSet(cfg3, cpucfg3_DBAR_HINTS) } func get_cpucfg(reg uint32) uint32 diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go index 0f617aef..d4e9885f 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go @@ -16,6 +16,7 @@ func initOptions() { {Name: "zba", Feature: &RISCV64.HasZba}, {Name: "zbb", Feature: &RISCV64.HasZbb}, {Name: "zbs", Feature: &RISCV64.HasZbs}, + {Name: "zbc", Feature: &RISCV64.HasZbc}, // RISC-V Cryptography Extensions {Name: "zvbb", Feature: &RISCV64.HasZvbb}, {Name: "zvbc", Feature: &RISCV64.HasZvbc}, diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index fd39be4e..fa74cfe9 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -354,6 +354,9 @@ struct ltchars { // Renamed in v6.16, commit c6d732c38f93 ("net: ethtool: remove duplicate defines for family info") #define ETHTOOL_FAMILY_NAME ETHTOOL_GENL_NAME #define ETHTOOL_FAMILY_VERSION ETHTOOL_GENL_VERSION + +// Removed in v6.17, commit 760e6f7befba ("futex: Remove support for IMMUTABLE") +#define PR_FUTEX_HASH_GET_IMMUTABLE 3 ' includes_NetBSD=' diff --git a/vendor/golang.org/x/sys/unix/readv_unix.go b/vendor/golang.org/x/sys/unix/readv_unix.go new file mode 100644 index 00000000..38a2be93 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/readv_unix.go @@ -0,0 +1,103 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin || linux || openbsd + +package unix + +import "unsafe" + +// minIovec is the size of the small initial allocation used by +// Readv, Writev, etc. +// +// This small allocation gets stack allocated, which lets the +// common use case of len(iovs) <= minIovec avoid more expensive +// heap allocations. +const minIovec = 8 + +// appendBytes converts bs to Iovecs and appends them to vecs. +func appendBytes(vecs []Iovec, bs [][]byte) []Iovec { + for _, b := range bs { + var v Iovec + v.SetLen(len(b)) + if len(b) > 0 { + v.Base = &b[0] + } else { + v.Base = (*byte)(unsafe.Pointer(&_zero)) + } + vecs = append(vecs, v) + } + return vecs +} + +// writevRaceDetect tells the race detector that the program +// has read the first n bytes stored in iovecs. +func writevRaceDetect(iovecs []Iovec, n int) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := min(int(iovecs[i].Len), n) + n -= m + if m > 0 { + raceReadRange(unsafe.Pointer(iovecs[i].Base), m) + } + } +} + +// readvRaceDetect tells the race detector that the program +// has written to the first n bytes stored in iovecs. +func readvRaceDetect(iovecs []Iovec, n int, err error) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := min(int(iovecs[i].Len), n) + n -= m + if m > 0 { + raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) + } + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } +} + +func Readv(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = readv(fd, iovecs) + readvRaceDetect(iovecs, n, err) + return n, err +} + +func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = preadv(fd, iovecs, offset) + readvRaceDetect(iovecs, n, err) + return n, err +} + +func Writev(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = writev(fd, iovecs) + writevRaceDetect(iovecs, n) + return n, err +} + +func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = pwritev(fd, iovecs, offset) + writevRaceDetect(iovecs, n) + return n, err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 7838ca5d..38590ca8 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -602,95 +602,6 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI return } -const minIovec = 8 - -func Readv(fd int, iovs [][]byte) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) - n, err = readv(fd, iovecs) - readvRacedetect(iovecs, n, err) - return n, err -} - -func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) - n, err = preadv(fd, iovecs, offset) - readvRacedetect(iovecs, n, err) - return n, err -} - -func Writev(fd int, iovs [][]byte) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - n, err = writev(fd, iovecs) - writevRacedetect(iovecs, n) - return n, err -} - -func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - n, err = pwritev(fd, iovecs, offset) - writevRacedetect(iovecs, n) - return n, err -} - -func appendBytes(vecs []Iovec, bs [][]byte) []Iovec { - for _, b := range bs { - var v Iovec - v.SetLen(len(b)) - if len(b) > 0 { - v.Base = &b[0] - } else { - v.Base = (*byte)(unsafe.Pointer(&_zero)) - } - vecs = append(vecs, v) - } - return vecs -} - -func writevRacedetect(iovecs []Iovec, n int) { - if !raceenabled { - return - } - for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } - n -= m - if m > 0 { - raceReadRange(unsafe.Pointer(iovecs[i].Base), m) - } - } -} - -func readvRacedetect(iovecs []Iovec, n int, err error) { - if !raceenabled { - return - } - for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } - n -= m - if m > 0 { - raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) - } - } - if err == nil { - raceAcquire(unsafe.Pointer(&ioSync)) - } -} - //sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index f7b82bcc..ce4d7ab1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -2150,33 +2150,10 @@ func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) { //sys exitThread(code int) (err error) = SYS_EXIT //sys readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV //sys writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV -//sys preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV -//sys pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV -//sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2 -//sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2 - -// minIovec is the size of the small initial allocation used by -// Readv, Writev, etc. -// -// This small allocation gets stack allocated, which lets the -// common use case of len(iovs) <= minIovs avoid more expensive -// heap allocations. -const minIovec = 8 - -// appendBytes converts bs to Iovecs and appends them to vecs. -func appendBytes(vecs []Iovec, bs [][]byte) []Iovec { - for _, b := range bs { - var v Iovec - v.SetLen(len(b)) - if len(b) > 0 { - v.Base = &b[0] - } else { - v.Base = (*byte)(unsafe.Pointer(&_zero)) - } - vecs = append(vecs, v) - } - return vecs -} +//sys preadvSyscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV +//sys pwritevSyscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV +//sys preadv2Syscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2 +//sys pwritev2Syscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2 // offs2lohi splits offs into its low and high order bits. func offs2lohi(offs int64) (lo, hi uintptr) { @@ -2184,69 +2161,23 @@ func offs2lohi(offs int64) (lo, hi uintptr) { return uintptr(offs), uintptr(uint64(offs) >> (longBits - 1) >> 1) // two shifts to avoid false positive in vet } -func Readv(fd int, iovs [][]byte) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) - n, err = readv(fd, iovecs) - readvRacedetect(iovecs, n, err) - return n, err -} - -func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { lo, hi := offs2lohi(offset) - n, err = preadv(fd, iovecs, lo, hi) - readvRacedetect(iovecs, n, err) - return n, err + return preadvSyscall(fd, iovecs, lo, hi) } func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { iovecs := make([]Iovec, 0, minIovec) iovecs = appendBytes(iovecs, iovs) lo, hi := offs2lohi(offset) - n, err = preadv2(fd, iovecs, lo, hi, flags) - readvRacedetect(iovecs, n, err) + n, err = preadv2Syscall(fd, iovecs, lo, hi, flags) + readvRaceDetect(iovecs, n, err) return n, err } -func readvRacedetect(iovecs []Iovec, n int, err error) { - if !raceenabled { - return - } - for i := 0; n > 0 && i < len(iovecs); i++ { - m := min(int(iovecs[i].Len), n) - n -= m - if m > 0 { - raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) - } - } - if err == nil { - raceAcquire(unsafe.Pointer(&ioSync)) - } -} - -func Writev(fd int, iovs [][]byte) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - n, err = writev(fd, iovecs) - writevRacedetect(iovecs, n) - return n, err -} - -func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { - iovecs := make([]Iovec, 0, minIovec) - iovecs = appendBytes(iovecs, iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { lo, hi := offs2lohi(offset) - n, err = pwritev(fd, iovecs, lo, hi) - writevRacedetect(iovecs, n) - return n, err + return pwritevSyscall(fd, iovecs, lo, hi) } func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { @@ -2256,24 +2187,11 @@ func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) raceReleaseMerge(unsafe.Pointer(&ioSync)) } lo, hi := offs2lohi(offset) - n, err = pwritev2(fd, iovecs, lo, hi, flags) - writevRacedetect(iovecs, n) + n, err = pwritev2Syscall(fd, iovecs, lo, hi, flags) + writevRaceDetect(iovecs, n) return n, err } -func writevRacedetect(iovecs []Iovec, n int) { - if !raceenabled { - return - } - for i := 0; n > 0 && i < len(iovecs); i++ { - m := min(int(iovecs[i].Len), n) - n -= m - if m > 0 { - raceReadRange(unsafe.Pointer(iovecs[i].Base), m) - } - } -} - // mmap varies by architecture; see syscall_linux_*.go. //sys munmap(addr uintptr, length uintptr) (err error) //sys mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index b86ded54..7b0ef8e1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -300,6 +300,10 @@ func Uname(uname *Utsname) error { //sys Pathconf(path string, name int) (val int, err error) //sys pread(fd int, p []byte, offset int64) (n int, err error) //sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys readv(fd int, iovecs []Iovec) (n int, err error) +//sys writev(fd int, iovecs []Iovec) (n int, err error) +//sys preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) +//sys pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 120a7b35..9d72a6b7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -353,8 +353,10 @@ const ( AUDIT_MAC_IPSEC_EVENT = 0x587 AUDIT_MAC_MAP_ADD = 0x581 AUDIT_MAC_MAP_DEL = 0x582 + AUDIT_MAC_OBJ_CONTEXTS = 0x592 AUDIT_MAC_POLICY_LOAD = 0x57b AUDIT_MAC_STATUS = 0x57c + AUDIT_MAC_TASK_CONTEXTS = 0x591 AUDIT_MAC_UNLBL_ALLOW = 0x57e AUDIT_MAC_UNLBL_STCADD = 0x588 AUDIT_MAC_UNLBL_STCDEL = 0x589 @@ -591,8 +593,13 @@ const ( CAN_CTRLMODE_LOOPBACK = 0x1 CAN_CTRLMODE_ONE_SHOT = 0x8 CAN_CTRLMODE_PRESUME_ACK = 0x40 + CAN_CTRLMODE_RESTRICTED = 0x800 CAN_CTRLMODE_TDC_AUTO = 0x200 CAN_CTRLMODE_TDC_MANUAL = 0x400 + CAN_CTRLMODE_XL = 0x1000 + CAN_CTRLMODE_XL_TDC_AUTO = 0x2000 + CAN_CTRLMODE_XL_TDC_MANUAL = 0x4000 + CAN_CTRLMODE_XL_TMS = 0x8000 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff @@ -800,6 +807,8 @@ const ( DEVLINK_PORT_FN_CAP_IPSEC_PACKET = 0x8 DEVLINK_PORT_FN_CAP_MIGRATABLE = 0x2 DEVLINK_PORT_FN_CAP_ROCE = 0x1 + DEVLINK_RATE_TCS_MAX = 0x8 + DEVLINK_RATE_TC_INDEX_MAX = 0x7 DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3 DEVMEM_MAGIC = 0x454d444d @@ -1186,6 +1195,7 @@ const ( ETH_P_MPLS_UC = 0x8847 ETH_P_MRP = 0x88e3 ETH_P_MVRP = 0x88f5 + ETH_P_MXLGSW = 0x88c3 ETH_P_NCSI = 0x88f8 ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e @@ -1218,6 +1228,7 @@ const ( ETH_P_WCCP = 0x883e ETH_P_X25 = 0x805 ETH_P_XDSA = 0xf8 + ETH_P_YT921X = 0x9988 ET_CORE = 0x4 ET_DYN = 0x3 ET_EXEC = 0x2 @@ -1258,6 +1269,7 @@ const ( FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_WRITE_ZEROES = 0x80 FALLOC_FL_ZERO_RANGE = 0x10 FANOTIFY_METADATA_VERSION = 0x3 FAN_ACCESS = 0x1 @@ -1477,6 +1489,7 @@ const ( GRND_INSECURE = 0x4 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 + GUEST_MEMFD_MAGIC = 0x474d454d HDIO_DRIVE_CMD = 0x31f HDIO_DRIVE_CMD_AEB = 0x31e HDIO_DRIVE_CMD_HDR_SIZE = 0x4 @@ -1517,6 +1530,7 @@ const ( HDIO_SET_XFER = 0x306 HDIO_TRISTATE_HWIF = 0x31b HDIO_UNREGISTER_HWIF = 0x32a + HIDIOCTL_LAST = 0xd HID_MAX_DESCRIPTOR_SIZE = 0x1000 HOSTFS_SUPER_MAGIC = 0xc0ffee HPFS_SUPER_MAGIC = 0xf995e849 @@ -1809,6 +1823,8 @@ const ( KEXEC_ARCH_X86_64 = 0x3e0000 KEXEC_CRASH_HOTPLUG_SUPPORT = 0x8 KEXEC_FILE_DEBUG = 0x8 + KEXEC_FILE_FORCE_DTB = 0x20 + KEXEC_FILE_NO_CMA = 0x10 KEXEC_FILE_NO_INITRAMFS = 0x4 KEXEC_FILE_ON_CRASH = 0x2 KEXEC_FILE_UNLOAD = 0x1 @@ -1905,6 +1921,7 @@ const ( LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2 LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF = 0x1 LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF = 0x4 + LANDLOCK_RESTRICT_SELF_TSYNC = 0x8 LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET = 0x1 LANDLOCK_SCOPE_SIGNAL = 0x2 LINUX_REBOOT_CMD_CAD_OFF = 0x0 @@ -2412,6 +2429,7 @@ const ( NN_PRXFPREG = "LINUX" NN_RISCV_CSR = "LINUX" NN_RISCV_TAGGED_ADDR_CTRL = "LINUX" + NN_RISCV_USER_CFI = "LINUX" NN_RISCV_VECTOR = "LINUX" NN_S390_CTRS = "LINUX" NN_S390_GS_BC = "LINUX" @@ -2493,6 +2511,7 @@ const ( NT_PRXFPREG = 0x46e62b7f NT_RISCV_CSR = 0x900 NT_RISCV_TAGGED_ADDR_CTRL = 0x902 + NT_RISCV_USER_CFI = 0x903 NT_RISCV_VECTOR = 0x901 NT_S390_CTRS = 0x304 NT_S390_GS_BC = 0x30c @@ -2515,6 +2534,7 @@ const ( NT_X86_SHSTK = 0x204 NT_X86_XSAVE_LAYOUT = 0x205 NT_X86_XSTATE = 0x202 + NULL_FS_MAGIC = 0x4e554c4c OCFS2_SUPER_MAGIC = 0x7461636f OCRNL = 0x8 OFDEL = 0x80 @@ -2594,6 +2614,7 @@ const ( PERF_ATTR_SIZE_VER6 = 0x78 PERF_ATTR_SIZE_VER7 = 0x80 PERF_ATTR_SIZE_VER8 = 0x88 + PERF_ATTR_SIZE_VER9 = 0x90 PERF_AUX_FLAG_COLLISION = 0x8 PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0 PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100 @@ -2629,6 +2650,7 @@ const ( PERF_MEM_LVLNUM_ANY_CACHE = 0xb PERF_MEM_LVLNUM_CXL = 0x9 PERF_MEM_LVLNUM_IO = 0xa + PERF_MEM_LVLNUM_L0 = 0x7 PERF_MEM_LVLNUM_L1 = 0x1 PERF_MEM_LVLNUM_L2 = 0x2 PERF_MEM_LVLNUM_L2_MHB = 0x5 @@ -2662,6 +2684,23 @@ const ( PERF_MEM_OP_PFETCH = 0x8 PERF_MEM_OP_SHIFT = 0x0 PERF_MEM_OP_STORE = 0x4 + PERF_MEM_REGION_L_NON_SHARE = 0x3 + PERF_MEM_REGION_L_SHARE = 0x2 + PERF_MEM_REGION_MEM0 = 0x8 + PERF_MEM_REGION_MEM1 = 0x9 + PERF_MEM_REGION_MEM2 = 0xa + PERF_MEM_REGION_MEM3 = 0xb + PERF_MEM_REGION_MEM4 = 0xc + PERF_MEM_REGION_MEM5 = 0xd + PERF_MEM_REGION_MEM6 = 0xe + PERF_MEM_REGION_MEM7 = 0xf + PERF_MEM_REGION_MMIO = 0x7 + PERF_MEM_REGION_NA = 0x0 + PERF_MEM_REGION_O_IO = 0x4 + PERF_MEM_REGION_O_NON_SHARE = 0x6 + PERF_MEM_REGION_O_SHARE = 0x5 + PERF_MEM_REGION_RSVD = 0x1 + PERF_MEM_REGION_SHIFT = 0x2e PERF_MEM_REMOTE_REMOTE = 0x1 PERF_MEM_REMOTE_SHIFT = 0x25 PERF_MEM_SNOOPX_FWD = 0x1 @@ -2776,6 +2815,10 @@ const ( PR_CAP_AMBIENT_IS_SET = 0x1 PR_CAP_AMBIENT_LOWER = 0x3 PR_CAP_AMBIENT_RAISE = 0x2 + PR_CFI_BRANCH_LANDING_PADS = 0x0 + PR_CFI_DISABLE = 0x2 + PR_CFI_ENABLE = 0x1 + PR_CFI_LOCK = 0x4 PR_ENDIAN_BIG = 0x0 PR_ENDIAN_LITTLE = 0x1 PR_ENDIAN_PPC_LITTLE = 0x2 @@ -2798,6 +2841,7 @@ const ( PR_FUTEX_HASH_GET_SLOTS = 0x2 PR_FUTEX_HASH_SET_SLOTS = 0x1 PR_GET_AUXV = 0x41555856 + PR_GET_CFI = 0x50 PR_GET_CHILD_SUBREAPER = 0x25 PR_GET_DUMPABLE = 0x3 PR_GET_ENDIAN = 0x13 @@ -2834,6 +2878,7 @@ const ( PR_MDWE_REFUSE_EXEC_GAIN = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_MTE_STORE_ONLY = 0x80000 PR_MTE_TAG_MASK = 0x7fff8 PR_MTE_TAG_SHIFT = 0x3 PR_MTE_TCF_ASYNC = 0x4 @@ -2877,6 +2922,10 @@ const ( PR_RISCV_V_VSTATE_CTRL_NEXT_MASK = 0xc PR_RISCV_V_VSTATE_CTRL_OFF = 0x1 PR_RISCV_V_VSTATE_CTRL_ON = 0x2 + PR_RSEQ_SLICE_EXTENSION = 0x4f + PR_RSEQ_SLICE_EXTENSION_GET = 0x1 + PR_RSEQ_SLICE_EXTENSION_SET = 0x2 + PR_RSEQ_SLICE_EXT_ENABLE = 0x1 PR_SCHED_CORE = 0x3e PR_SCHED_CORE_CREATE = 0x1 PR_SCHED_CORE_GET = 0x0 @@ -2886,6 +2935,7 @@ const ( PR_SCHED_CORE_SCOPE_THREAD_GROUP = 0x1 PR_SCHED_CORE_SHARE_FROM = 0x3 PR_SCHED_CORE_SHARE_TO = 0x2 + PR_SET_CFI = 0x51 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2951,11 +3001,14 @@ const ( PR_SVE_SET_VL_ONEXEC = 0x40000 PR_SVE_VL_INHERIT = 0x20000 PR_SVE_VL_LEN_MASK = 0xffff + PR_SYS_DISPATCH_EXCLUSIVE_ON = 0x1 + PR_SYS_DISPATCH_INCLUSIVE_ON = 0x2 PR_SYS_DISPATCH_OFF = 0x0 PR_SYS_DISPATCH_ON = 0x1 PR_TAGGED_ADDR_ENABLE = 0x1 PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_THP_DISABLE_EXCEPT_ADVISED = 0x2 PR_TIMER_CREATE_RESTORE_IDS = 0x4d PR_TIMER_CREATE_RESTORE_IDS_GET = 0x2 PR_TIMER_CREATE_RESTORE_IDS_OFF = 0x0 @@ -2987,8 +3040,10 @@ const ( PTP_STRICT_FLAGS = 0x8 PTP_SYS_OFFSET_EXTENDED = 0xc4c03d09 PTP_SYS_OFFSET_EXTENDED2 = 0xc4c03d12 + PTP_SYS_OFFSET_EXTENDED_CYCLES = 0xc4c03d16 PTP_SYS_OFFSET_PRECISE = 0xc0403d08 PTP_SYS_OFFSET_PRECISE2 = 0xc0403d11 + PTP_SYS_OFFSET_PRECISE_CYCLES = 0xc0403d15 PTRACE_ATTACH = 0x10 PTRACE_CONT = 0x7 PTRACE_DETACH = 0x11 @@ -3330,8 +3385,9 @@ const ( RWF_DSYNC = 0x2 RWF_HIPRI = 0x1 RWF_NOAPPEND = 0x20 + RWF_NOSIGNAL = 0x100 RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0xff + RWF_SUPPORTED = 0x1ff RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 SCHED_BATCH = 0x3 @@ -3714,7 +3770,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0x10 + TASKSTATS_VERSION = 0x11 TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 @@ -4052,6 +4108,7 @@ const ( XDP_FLAGS_REPLACE = 0x10 XDP_FLAGS_SKB_MODE = 0x2 XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MAX_TX_SKB_BUDGET = 0x9 XDP_MMAP_OFFSETS = 0x1 XDP_OPTIONS = 0x8 XDP_OPTIONS_ZEROCOPY = 0x1 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 97a61fc5..c0a8ea1d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -159,6 +159,7 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x8008b70d NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 @@ -305,6 +306,7 @@ const ( RTC_WKALM_SET = 0x4028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -352,6 +354,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -596,6 +599,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -819,7 +824,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index a0d6d498..ff927c83 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -159,6 +159,7 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x8008b70d NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 @@ -306,6 +307,7 @@ const ( RTC_WKALM_SET = 0x4028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -353,6 +355,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -596,6 +599,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -819,7 +824,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index dd9c903f..55294eda 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -156,6 +156,7 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x8008b70d NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 @@ -311,6 +312,7 @@ const ( RTC_WKALM_SET = 0x4028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -358,6 +360,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -601,6 +604,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -824,7 +829,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 384c61ca..5dac54c3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -161,6 +161,7 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x8008b70d NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 @@ -304,6 +305,7 @@ const ( RTC_WKALM_SET = 0x4028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -351,6 +353,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -598,6 +601,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -821,7 +826,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 6384c983..46ac1fcb 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -160,6 +160,7 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x8008b70d NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 @@ -298,6 +299,7 @@ const ( RTC_WKALM_SET = 0x4028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -345,6 +347,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -588,6 +591,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -811,7 +816,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 553c1c6f..b55483e8 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -156,6 +156,7 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -304,6 +305,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -351,6 +353,7 @@ const ( SO_ERROR = 0x1007 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c @@ -597,6 +600,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x60) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x46d) + EFSBADCRC = syscall.Errno(0x4d) + EFSCORRUPTED = syscall.Errno(0x87) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -814,7 +819,7 @@ var errorList = [...]struct { {132, "ENOBUFS", "no buffer space available"}, {133, "EISCONN", "transport endpoint is already connected"}, {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, + {135, "EFSCORRUPTED", "structure needs cleaning"}, {137, "ENOTNAM", "not a XENIX named type file"}, {138, "ENAVAIL", "no XENIX semaphores available"}, {139, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index b3339f20..71890c98 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -156,6 +156,7 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -304,6 +305,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -351,6 +353,7 @@ const ( SO_ERROR = 0x1007 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c @@ -597,6 +600,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x60) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x46d) + EFSBADCRC = syscall.Errno(0x4d) + EFSCORRUPTED = syscall.Errno(0x87) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -814,7 +819,7 @@ var errorList = [...]struct { {132, "ENOBUFS", "no buffer space available"}, {133, "EISCONN", "transport endpoint is already connected"}, {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, + {135, "EFSCORRUPTED", "structure needs cleaning"}, {137, "ENOTNAM", "not a XENIX named type file"}, {138, "ENAVAIL", "no XENIX semaphores available"}, {139, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 177091d2..a78b6cc1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -156,6 +156,7 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -304,6 +305,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -351,6 +353,7 @@ const ( SO_ERROR = 0x1007 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c @@ -597,6 +600,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x60) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x46d) + EFSBADCRC = syscall.Errno(0x4d) + EFSCORRUPTED = syscall.Errno(0x87) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -814,7 +819,7 @@ var errorList = [...]struct { {132, "ENOBUFS", "no buffer space available"}, {133, "EISCONN", "transport endpoint is already connected"}, {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, + {135, "EFSCORRUPTED", "structure needs cleaning"}, {137, "ENOTNAM", "not a XENIX named type file"}, {138, "ENAVAIL", "no XENIX semaphores available"}, {139, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index c5abf156..d0e38ca7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -156,6 +156,7 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -304,6 +305,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -351,6 +353,7 @@ const ( SO_ERROR = 0x1007 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c @@ -597,6 +600,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x60) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x46d) + EFSBADCRC = syscall.Errno(0x4d) + EFSCORRUPTED = syscall.Errno(0x87) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -814,7 +819,7 @@ var errorList = [...]struct { {132, "ENOBUFS", "no buffer space available"}, {133, "EISCONN", "transport endpoint is already connected"}, {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, + {135, "EFSCORRUPTED", "structure needs cleaning"}, {137, "ENOTNAM", "not a XENIX named type file"}, {138, "ENAVAIL", "no XENIX semaphores available"}, {139, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index f1f3fadf..c883e14c 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -158,6 +158,7 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -359,6 +360,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -406,6 +408,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -653,6 +656,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -877,7 +882,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 203ad9c5..1834273d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -158,6 +158,7 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -363,6 +364,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -410,6 +412,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -657,6 +660,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -881,7 +886,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 4b9abcb2..39945dd9 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -158,6 +158,7 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -363,6 +364,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -410,6 +412,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -657,6 +660,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -881,7 +886,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index f8798303..bc0f3724 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -11,553 +11,569 @@ package unix import "syscall" const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 - BLKDISCARD = 0x1277 - BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 - BLKIOMIN = 0x1278 - BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f - BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - DM_MPATH_PROBE_PATHS = 0xfd12 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPIOCGPARAMS = 0x80088a02 - EPIOCSPARAMS = 0x40088a01 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0x5 - F_GETLK64 = 0x5 - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HIDIOCREVOKE = 0x4004480d - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_MEI_NOTIFY_GET = 0x80044803 - IOCTL_MEI_NOTIFY_SET = 0x40044802 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_MNTNS_ID = 0x8008b705 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_PID_FROM_PIDNS = 0x8004b706 - NS_GET_PID_IN_PIDNS = 0x8004b708 - NS_GET_TGID_FROM_PIDNS = 0x8004b707 - NS_GET_TGID_IN_PIDNS = 0x8004b709 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x4000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8010743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40107446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x4010744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40107447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTP_CLOCK_GETCAPS = 0x80503d01 - PTP_CLOCK_GETCAPS2 = 0x80503d0a - PTP_ENABLE_PPS = 0x40043d04 - PTP_ENABLE_PPS2 = 0x40043d0d - PTP_EXTTS_REQUEST = 0x40103d02 - PTP_EXTTS_REQUEST2 = 0x40103d0b - PTP_MASK_CLEAR_ALL = 0x3d13 - PTP_MASK_EN_SINGLE = 0x40043d14 - PTP_PEROUT_REQUEST = 0x40383d03 - PTP_PEROUT_REQUEST2 = 0x40383d0c - PTP_PIN_SETFUNC = 0x40603d07 - PTP_PIN_SETFUNC2 = 0x40603d10 - PTP_SYS_OFFSET = 0x43403d05 - PTP_SYS_OFFSET2 = 0x43403d0e - PTRACE_GETFDPIC = 0x21 - PTRACE_GETFDPIC_EXEC = 0x0 - PTRACE_GETFDPIC_INTERP = 0x1 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8008700d - RTC_EPOCH_SET = 0x4008700e - RTC_IRQP_READ = 0x8008700b - RTC_IRQP_SET = 0x4008700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x80207011 - RTC_PLL_SET = 0x40207012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_DEVMEM_DMABUF = 0x4f - SCM_DEVMEM_LINEAR = 0x4e - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TS_OPT_ID = 0x51 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 - SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102 - SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DEVMEM_DMABUF = 0x4f - SO_DEVMEM_DONTNEED = 0x50 - SO_DEVMEM_LINEAR = 0x4e - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSPIDFD = 0x4c - SO_PASSRIGHTS = 0x53 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVPRIORITY = 0x52 - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x401054d5 - TUNDETACHFILTER = 0x401054d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x801054db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKALIGNOFF = 0x127a + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKROTATIONAL = 0x127e + BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREAD = 0xc0404d1a + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_ID = 0x8008b70d + NS_GET_MNTNS_ID = 0x8008b705 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8010743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40107446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x4010744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40107447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e + PTRACE_CFI_BRANCH_EXPECTED_LANDING_PAD_BIT = 0x2 + PTRACE_CFI_BRANCH_EXPECTED_LANDING_PAD_STATE = 0x4 + PTRACE_CFI_BRANCH_LANDING_PAD_EN_BIT = 0x0 + PTRACE_CFI_BRANCH_LANDING_PAD_EN_STATE = 0x1 + PTRACE_CFI_BRANCH_LANDING_PAD_LOCK_BIT = 0x1 + PTRACE_CFI_BRANCH_LANDING_PAD_LOCK_STATE = 0x2 + PTRACE_CFI_SHADOW_STACK_EN_BIT = 0x3 + PTRACE_CFI_SHADOW_STACK_EN_STATE = 0x8 + PTRACE_CFI_SHADOW_STACK_LOCK_BIT = 0x4 + PTRACE_CFI_SHADOW_STACK_LOCK_STATE = 0x10 + PTRACE_CFI_SHADOW_STACK_PTR_BIT = 0x5 + PTRACE_CFI_SHADOW_STACK_PTR_STATE = 0x20 + PTRACE_CFI_STATE_INVALID_MASK = 0xffffffffffffffc0 + PTRACE_GETFDPIC = 0x21 + PTRACE_GETFDPIC_EXEC = 0x0 + PTRACE_GETFDPIC_INTERP = 0x1 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 + SECCOMP_IOCTL_NOTIF_ID_VALID = 0x40082102 + SECCOMP_IOCTL_NOTIF_SET_FLAGS = 0x40082104 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERPIDFD = 0x4d + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 ) // Errors @@ -585,6 +601,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -808,7 +826,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 64347eb3..6e87bd65 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -156,6 +156,7 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x8008b70d NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 @@ -367,6 +368,7 @@ const ( RTC_WKALM_SET = 0x4028700f SCM_DEVMEM_DMABUF = 0x4f SCM_DEVMEM_LINEAR = 0x4e + SCM_INQ = 0x54 SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -414,6 +416,7 @@ const ( SO_ERROR = 0x4 SO_INCOMING_CPU = 0x31 SO_INCOMING_NAPI_ID = 0x38 + SO_INQ = 0x54 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c @@ -657,6 +660,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x59) EDOTDOT = syscall.Errno(0x49) EDQUOT = syscall.Errno(0x7a) + EFSBADCRC = syscall.Errno(0x4a) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -880,7 +885,7 @@ var errorList = [...]struct { {114, "EALREADY", "operation already in progress"}, {115, "EINPROGRESS", "operation now in progress"}, {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 7d719117..7e2b2e8a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -161,6 +161,7 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_ID = 0x4008b70d NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 @@ -358,6 +359,7 @@ const ( RTC_WKALM_SET = 0x8028700f SCM_DEVMEM_DMABUF = 0x58 SCM_DEVMEM_LINEAR = 0x57 + SCM_INQ = 0x5d SCM_TIMESTAMPING = 0x23 SCM_TIMESTAMPING_OPT_STATS = 0x38 SCM_TIMESTAMPING_PKTINFO = 0x3c @@ -453,6 +455,7 @@ const ( SO_ERROR = 0x1007 SO_INCOMING_CPU = 0x33 SO_INCOMING_NAPI_ID = 0x3a + SO_INQ = 0x5d SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x28 @@ -694,6 +697,8 @@ const ( EDESTADDRREQ = syscall.Errno(0x27) EDOTDOT = syscall.Errno(0x58) EDQUOT = syscall.Errno(0x45) + EFSBADCRC = syscall.Errno(0x4c) + EFSCORRUPTED = syscall.Errno(0x75) EHOSTDOWN = syscall.Errno(0x40) EHOSTUNREACH = syscall.Errno(0x41) EHWPOISON = syscall.Errno(0x87) @@ -921,7 +926,7 @@ var errorList = [...]struct { {114, "ELIBACC", "can not access a needed shared library"}, {115, "ENOTUNIQ", "name not unique on network"}, {116, "ERESTART", "interrupted system call should be restarted"}, - {117, "EUCLEAN", "structure needs cleaning"}, + {117, "EFSCORRUPTED", "structure needs cleaning"}, {118, "ENOTNAM", "not a XENIX named type file"}, {119, "ENAVAIL", "no XENIX semaphores available"}, {120, "EISNAM", "is a named type file"}, diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 886f5de5..80f40e40 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -1785,7 +1785,7 @@ func writev(fd int, iovs []Iovec) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { +func preadvSyscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { var _p0 unsafe.Pointer if len(iovs) > 0 { _p0 = unsafe.Pointer(&iovs[0]) @@ -1802,7 +1802,7 @@ func preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err er // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { +func pwritevSyscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { var _p0 unsafe.Pointer if len(iovs) > 0 { _p0 = unsafe.Pointer(&iovs[0]) @@ -1819,7 +1819,7 @@ func pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err e // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { +func preadv2Syscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(iovs) > 0 { _p0 = unsafe.Pointer(&iovs[0]) @@ -1836,7 +1836,7 @@ func preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { +func pwritev2Syscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(iovs) > 0 { _p0 = unsafe.Pointer(&iovs[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 1851df14..6487475f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 0b43c693..f10201da 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $4 +DATA ·libc_readv_trampoline_addr(SB)/4, $libc_readv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $4 +DATA ·libc_writev_trampoline_addr(SB)/4, $libc_writev_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $4 +DATA ·libc_preadv_trampoline_addr(SB)/4, $libc_preadv_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pwritev_trampoline_addr(SB)/4, $libc_pwritev_trampoline<>(SB) + TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index e1ec0dbe..50980475 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 880c6d6e..9de2cbaa 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index 7c8452a6..33c9c3a4 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index b8ef95b0..c6b9175a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $4 +DATA ·libc_readv_trampoline_addr(SB)/4, $libc_readv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $4 +DATA ·libc_writev_trampoline_addr(SB)/4, $libc_writev_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $4 +DATA ·libc_preadv_trampoline_addr(SB)/4, $libc_preadv_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pwritev_trampoline_addr(SB)/4, $libc_pwritev_trampoline<>(SB) + TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index 2ffdf861..d3410262 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index 2af3b5c7..1be10bb4 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index 1da08d52..dea19d54 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index b7a25135..a9fec24d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 6e85b0aa..436efb58 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index f15dadf0..441ed4e4 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -597,6 +597,30 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_readv(SB) + RET +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_writev(SB) + RET +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_preadv(SB) + RET +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_pwritev(SB) + RET +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_read(SB) RET diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index 28b487df..d801e4b4 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index 1e7f321e..b15cc017 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index aca56ee4..49d1b880 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -463,4 +463,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 2ea1ef58..f11f1de7 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -342,6 +342,7 @@ const ( SYS_IO_PGETEVENTS = 333 SYS_RSEQ = 334 SYS_URETPROBE = 335 + SYS_UPROBE = 336 SYS_PIDFD_SEND_SIGNAL = 424 SYS_IO_URING_SETUP = 425 SYS_IO_URING_ENTER = 426 @@ -386,4 +387,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index d22c8af3..bad740b7 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -427,4 +427,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 5ee264ae..fe646d18 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -330,4 +330,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index f9f03ebf..4362f6d5 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -306,6 +306,7 @@ const ( SYS_LANDLOCK_CREATE_RULESET = 444 SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 @@ -326,4 +327,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index 87c2118e..b63d155a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -447,4 +447,8 @@ const ( SYS_LISTXATTRAT = 4465 SYS_REMOVEXATTRAT = 4466 SYS_OPEN_TREE_ATTR = 4467 + SYS_FILE_GETATTR = 4468 + SYS_FILE_SETATTR = 4469 + SYS_LISTNS = 4470 + SYS_RSEQ_SLICE_YIELD = 4471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 391ad102..435d4331 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -377,4 +377,8 @@ const ( SYS_LISTXATTRAT = 5465 SYS_REMOVEXATTRAT = 5466 SYS_OPEN_TREE_ATTR = 5467 + SYS_FILE_GETATTR = 5468 + SYS_FILE_SETATTR = 5469 + SYS_LISTNS = 5470 + SYS_RSEQ_SLICE_YIELD = 5471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index 56561577..dcc0468d 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -377,4 +377,8 @@ const ( SYS_LISTXATTRAT = 5465 SYS_REMOVEXATTRAT = 5466 SYS_OPEN_TREE_ATTR = 5467 + SYS_FILE_GETATTR = 5468 + SYS_FILE_SETATTR = 5469 + SYS_LISTNS = 5470 + SYS_RSEQ_SLICE_YIELD = 5471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index 0482b52e..b96f85eb 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -447,4 +447,8 @@ const ( SYS_LISTXATTRAT = 4465 SYS_REMOVEXATTRAT = 4466 SYS_OPEN_TREE_ATTR = 4467 + SYS_FILE_GETATTR = 4468 + SYS_FILE_SETATTR = 4469 + SYS_LISTNS = 4470 + SYS_RSEQ_SLICE_YIELD = 4471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 71806f08..bffa2bd1 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -454,4 +454,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index e35a7105..57bfc6b2 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -426,4 +426,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 2aea4767..750f706d 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -426,4 +426,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 6c9bb4e5..303ccbf4 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -331,4 +331,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 680bc991..5e5dd4cc 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -392,4 +392,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 620f2710..f7c4fb3d 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -374,6 +374,7 @@ const ( SYS_FSMOUNT = 432 SYS_FSPICK = 433 SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 SYS_CLOSE_RANGE = 436 SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 @@ -405,4 +406,8 @@ const ( SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 SYS_OPEN_TREE_ATTR = 467 + SYS_FILE_GETATTR = 468 + SYS_FILE_SETATTR = 469 + SYS_LISTNS = 470 + SYS_RSEQ_SLICE_YIELD = 471 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 45476a73..d11d5b96 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -18,6 +18,11 @@ type ( _C_long_long int64 ) +type KernelTimespec struct { + Sec int64 + Nsec int64 +} + type ItimerSpec struct { Interval Timespec Value Timespec @@ -521,6 +526,14 @@ type TCPInfo struct { Total_rto uint16 Total_rto_recoveries uint16 Total_rto_time uint32 + Received_ce uint32 + Delivered_e1_bytes uint32 + Delivered_e0_bytes uint32 + Delivered_ce_bytes uint32 + Received_e1_bytes uint32 + Received_e0_bytes uint32 + Received_ce_bytes uint32 + _ [4]byte } type TCPVegasInfo struct { @@ -586,7 +599,7 @@ const ( SizeofIPv6MTUInfo = 0x20 SizeofICMPv6Filter = 0x20 SizeofUcred = 0xc - SizeofTCPInfo = 0xf8 + SizeofTCPInfo = 0x118 SizeofTCPCCInfo = 0x14 SizeofCanFilter = 0x8 SizeofTCPRepairOpt = 0x8 @@ -1324,7 +1337,7 @@ const ( PERF_RECORD_CGROUP = 0x13 PERF_RECORD_TEXT_POKE = 0x14 PERF_RECORD_AUX_OUTPUT_HW_ID = 0x15 - PERF_RECORD_MAX = 0x16 + PERF_RECORD_MAX = 0x17 PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0x0 PERF_RECORD_KSYMBOL_TYPE_BPF = 0x1 PERF_RECORD_KSYMBOL_TYPE_OOL = 0x2 @@ -3566,7 +3579,7 @@ const ( DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 0xae DEVLINK_ATTR_NESTED_DEVLINK = 0xaf DEVLINK_ATTR_SELFTESTS = 0xb0 - DEVLINK_ATTR_MAX = 0xb3 + DEVLINK_ATTR_MAX = 0xb7 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 @@ -3888,7 +3901,7 @@ const ( ETHTOOL_MSG_PHY_GET = 0x2d ETHTOOL_MSG_TSCONFIG_GET = 0x2e ETHTOOL_MSG_TSCONFIG_SET = 0x2f - ETHTOOL_MSG_USER_MAX = 0x2f + ETHTOOL_MSG_USER_MAX = 0x33 ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3938,7 +3951,7 @@ const ( ETHTOOL_MSG_PHY_NTF = 0x2e ETHTOOL_MSG_TSCONFIG_GET_REPLY = 0x2f ETHTOOL_MSG_TSCONFIG_SET_REPLY = 0x30 - ETHTOOL_MSG_KERNEL_MAX = 0x30 + ETHTOOL_MSG_KERNEL_MAX = 0x36 ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 ETHTOOL_FLAG_OMIT_REPLY = 0x2 ETHTOOL_FLAG_STATS = 0x4 @@ -4867,7 +4880,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x151 + NL80211_ATTR_MAX = 0x15c NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143 @@ -5082,12 +5095,12 @@ const ( NL80211_ATTR_WOWLAN_TRIGGERS = 0x75 NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76 NL80211_ATTR_WPA_VERSIONS = 0x4b - NL80211_AUTHTYPE_AUTOMATIC = 0x8 + NL80211_AUTHTYPE_AUTOMATIC = 0x9 NL80211_AUTHTYPE_FILS_PK = 0x7 NL80211_AUTHTYPE_FILS_SK = 0x5 NL80211_AUTHTYPE_FILS_SK_PFS = 0x6 NL80211_AUTHTYPE_FT = 0x2 - NL80211_AUTHTYPE_MAX = 0x7 + NL80211_AUTHTYPE_MAX = 0x8 NL80211_AUTHTYPE_NETWORK_EAP = 0x3 NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0 NL80211_AUTHTYPE_SAE = 0x4 @@ -5120,7 +5133,7 @@ const ( NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY = 0x3 NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 0x5 NL80211_BAND_IFTYPE_ATTR_IFTYPES = 0x1 - NL80211_BAND_IFTYPE_ATTR_MAX = 0xb + NL80211_BAND_IFTYPE_ATTR_MAX = 0xd NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS = 0x7 NL80211_BAND_LC = 0x5 NL80211_BAND_S1GHZ = 0x4 @@ -5255,7 +5268,7 @@ const ( NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d NL80211_CMD_LINKS_REMOVED = 0x9a - NL80211_CMD_MAX = 0x9d + NL80211_CMD_MAX = 0x9f NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5501,7 +5514,7 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x22 + NL80211_FREQUENCY_ATTR_MAX = 0x27 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc @@ -5766,7 +5779,7 @@ const ( NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1 NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6 NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7 - NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0xa + NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0x12 NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8 NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2 NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa @@ -5788,7 +5801,7 @@ const ( NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc - NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xd + NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xe NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3 NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7 @@ -5806,7 +5819,7 @@ const ( NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1 NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8 NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13 - NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x15 + NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x16 NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6 NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3 NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4 @@ -5913,7 +5926,7 @@ const ( NL80211_RATE_INFO_HE_RU_ALLOC_52 = 0x1 NL80211_RATE_INFO_HE_RU_ALLOC_996 = 0x5 NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 - NL80211_RATE_INFO_MAX = 0x1d + NL80211_RATE_INFO_MAX = 0x20 NL80211_RATE_INFO_MCS = 0x2 NL80211_RATE_INFO_S1G_MCS = 0x17 NL80211_RATE_INFO_S1G_NSS = 0x18 @@ -6167,7 +6180,7 @@ const ( NL80211_TXRATE_HT = 0x2 NL80211_TXRATE_LEGACY = 0x1 NL80211_TX_RATE_LIMITED = 0x1 - NL80211_TXRATE_MAX = 0x7 + NL80211_TXRATE_MAX = 0xa NL80211_TXRATE_MCS = 0x2 NL80211_TXRATE_VHT = 0x3 NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT = 0x1 @@ -6183,7 +6196,7 @@ const ( NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE = 0x2 NL80211_WIPHY_RADIO_ATTR_INDEX = 0x1 NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION = 0x3 - NL80211_WIPHY_RADIO_ATTR_MAX = 0x4 + NL80211_WIPHY_RADIO_ATTR_MAX = 0x5 NL80211_WIPHY_RADIO_FREQ_ATTR_END = 0x2 NL80211_WIPHY_RADIO_FREQ_ATTR_MAX = 0x2 NL80211_WIPHY_RADIO_FREQ_ATTR_START = 0x1 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 485f2d3a..97ef790d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -354,6 +354,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index ecbd1ad8..90b50da6 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -367,6 +367,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 02f0463a..acda1368 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -345,6 +345,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 6f4d400d..ef7a99e1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -346,6 +346,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index cd532cfa..966063df 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -347,6 +347,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 41336208..dc53b20b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -350,6 +350,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index eaa37eb7..9ad0aa8c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -349,6 +349,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 98ae6a1e..29d55493 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -349,6 +349,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index cae19615..a4d9e158 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -350,6 +350,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 6ce3b4e0..f8a29777 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -357,6 +357,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index c7429c6a..4158d6c4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -356,6 +356,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 4bf4baf4..1035af49 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -356,6 +356,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index e9709d70..2297125d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -374,6 +374,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index fb44268c..8481e9bd 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -369,6 +369,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 9c38265c..a6828a03 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -351,6 +351,14 @@ type Taskstats struct { Wpcopy_delay_min uint64 Irq_delay_max uint64 Irq_delay_min uint64 + Cpu_delay_max_ts KernelTimespec + Blkio_delay_max_ts KernelTimespec + Swapin_delay_max_ts KernelTimespec + Freepages_delay_max_ts KernelTimespec + Thrashing_delay_max_ts KernelTimespec + Compact_delay_max_ts KernelTimespec + Wpcopy_delay_max_ts KernelTimespec + Irq_delay_max_ts KernelTimespec } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 453a7b97..9755bca9 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -452,6 +452,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys RtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString //sys NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile //sys NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile +//sys NtQueryInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, outBuffer *byte, outBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtQueryInformationFile //sys NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile //sys RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus //sys RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus @@ -460,6 +461,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess //sys NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation //sys NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation +//sys NtQueryEaFile(handle Handle, iosb *IO_STATUS_BLOCK, outBuffer *byte, outBufferLen uint32, returnSingleEntry bool, eaList *byte, eaListLen uint32, eaIndex *uint32, restartScan bool) (ntstatus error) = ntdll.NtQueryEaFile +//sys NtSetEaFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32) (ntstatus error) = ntdll.NtSetEaFile //sys RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable //sys RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index d82299e3..d2574a73 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -3043,8 +3043,10 @@ const ( ) const ( - // FileInformationClass for NtSetInformationFile + // FileInformationClass for NtSetInformationFile/NtQueryInformationFile, see + // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ne-wdm-_file_information_class FileBasicInformation = 4 + FileEaInformation = 7 FileRenameInformation = 10 FileDispositionInformation = 13 FilePositionInformation = 14 diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index a506ac0f..192d1930 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -428,8 +428,11 @@ var ( procNetUserGetInfo = modnetapi32.NewProc("NetUserGetInfo") procNtCreateFile = modntdll.NewProc("NtCreateFile") procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") + procNtQueryEaFile = modntdll.NewProc("NtQueryEaFile") + procNtQueryInformationFile = modntdll.NewProc("NtQueryInformationFile") procNtQueryInformationProcess = modntdll.NewProc("NtQueryInformationProcess") procNtQuerySystemInformation = modntdll.NewProc("NtQuerySystemInformation") + procNtSetEaFile = modntdll.NewProc("NtSetEaFile") procNtSetInformationFile = modntdll.NewProc("NtSetInformationFile") procNtSetInformationProcess = modntdll.NewProc("NtSetInformationProcess") procNtSetSystemInformation = modntdll.NewProc("NtSetSystemInformation") @@ -3740,6 +3743,30 @@ func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, i return } +func NtQueryEaFile(handle Handle, iosb *IO_STATUS_BLOCK, outBuffer *byte, outBufferLen uint32, returnSingleEntry bool, eaList *byte, eaListLen uint32, eaIndex *uint32, restartScan bool) (ntstatus error) { + var _p0 uint32 + if returnSingleEntry { + _p0 = 1 + } + var _p1 uint32 + if restartScan { + _p1 = 1 + } + r0, _, _ := syscall.SyscallN(procNtQueryEaFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), uintptr(_p0), uintptr(unsafe.Pointer(eaList)), uintptr(eaListLen), uintptr(unsafe.Pointer(eaIndex)), uintptr(_p1)) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtQueryInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, outBuffer *byte, outBufferLen uint32, class uint32) (ntstatus error) { + r0, _, _ := syscall.SyscallN(procNtQueryInformationFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), uintptr(class)) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) { r0, _, _ := syscall.SyscallN(procNtQueryInformationProcess.Addr(), uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen))) if r0 != 0 { @@ -3756,6 +3783,14 @@ func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInf return } +func NtSetEaFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32) (ntstatus error) { + r0, _, _ := syscall.SyscallN(procNtSetEaFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen)) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) { r0, _, _ := syscall.SyscallN(procNtSetInformationFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class)) if r0 != 0 { diff --git a/vendor/modules.txt b/vendor/modules.txt index f1daf136..566f7401 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -700,7 +700,7 @@ golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace -# golang.org/x/sys v0.44.0 +# golang.org/x/sys v0.45.0 ## explicit; go 1.25.0 golang.org/x/sys/cpu golang.org/x/sys/execabs From 776693acc05f8ed83f0fa2175fbe8acb50439097 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 May 2026 23:01:07 +0000 Subject: [PATCH 22/55] chore(deps): update golang docker tag --- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 1fe43ec4..796691d2 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:6df14f4a4bc9d979a3721f488981e0d1b318006377e473ed23d026796f5f4c0a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index af7f2e21..14c7a5d4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:6df14f4a4bc9d979a3721f488981e0d1b318006377e473ed23d026796f5f4c0a ENV GOOS=linux ENV GOARCH=arm64 From f50a57af7acaa146ab3f712de4c5c304b00e5058 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 8 Jun 2026 13:01:32 +0000 Subject: [PATCH 23/55] chore(deps): update module golang.org/x/sys to v0.46.0 --- go.mod | 2 +- go.sum | 4 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- .../github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- vendor/golang.org/x/sys/unix/ztypes_linux.go | 76 +++++++++++++++++++ .../golang.org/x/sys/unix/ztypes_linux_386.go | 4 + .../x/sys/unix/ztypes_linux_amd64.go | 4 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 4 + .../x/sys/unix/ztypes_linux_arm64.go | 4 + .../x/sys/unix/ztypes_linux_loong64.go | 4 + .../x/sys/unix/ztypes_linux_mips.go | 4 + .../x/sys/unix/ztypes_linux_mips64.go | 4 + .../x/sys/unix/ztypes_linux_mips64le.go | 4 + .../x/sys/unix/ztypes_linux_mipsle.go | 4 + .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 4 + .../x/sys/unix/ztypes_linux_ppc64.go | 4 + .../x/sys/unix/ztypes_linux_ppc64le.go | 4 + .../x/sys/unix/ztypes_linux_riscv64.go | 4 + .../x/sys/unix/ztypes_linux_s390x.go | 4 + .../x/sys/unix/ztypes_linux_sparc64.go | 4 + vendor/modules.txt | 2 +- 21 files changed, 142 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 8617aa0a..99c4c888 100644 --- a/go.mod +++ b/go.mod @@ -155,7 +155,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/theupdateframework/notary v0.7.0 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - golang.org/x/sys v0.45.0 + golang.org/x/sys v0.46.0 ) replace github.com/docker/cli v28.4.0+incompatible => git.coopcloud.tech/toolshed/docker-cli v28.5.3-0.20260202112816-30df2d0b3a00+incompatible diff --git a/go.sum b/go.sum index a18a9dc8..7cecd546 100644 --- a/go.sum +++ b/go.sum @@ -1140,8 +1140,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 796691d2..1fe43ec4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:6df14f4a4bc9d979a3721f488981e0d1b318006377e473ed23d026796f5f4c0a +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 14c7a5d4..af7f2e21 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:6df14f4a4bc9d979a3721f488981e0d1b318006377e473ed23d026796f5f4c0a +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index d11d5b96..526a0d5f 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -6397,3 +6397,79 @@ const ( MPOL_PREFERRED_MANY = 0x5 MPOL_WEIGHTED_INTERLEAVE = 0x6 ) + +const ( + GPIO_V2_GET_LINEINFO_IOCTL = 0xc100b405 + GPIO_V2_GET_LINE_IOCTL = 0xc250b407 + GPIO_V2_LINE_GET_VALUES_IOCTL = 0xc010b40e + GPIO_V2_LINE_SET_VALUES_IOCTL = 0xc010b40f + GPIO_V2_GET_LINEINFO_WATCH_IOCTL = 0xc100b406 + GPIO_GET_LINEINFO_UNWATCH_IOCTL = 0xc004b40c +) +const ( + GPIO_V2_LINE_ATTR_ID_FLAGS = 0x1 + GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 0x2 + GPIO_V2_LINE_ATTR_ID_DEBOUNCE = 0x3 + GPIO_V2_LINE_CHANGED_REQUESTED = 0x1 + GPIO_V2_LINE_CHANGED_RELEASED = 0x2 + GPIO_V2_LINE_CHANGED_CONFIG = 0x3 + GPIO_V2_LINE_EVENT_RISING_EDGE = 0x1 + GPIO_V2_LINE_EVENT_FALLING_EDGE = 0x2 +) + +type GPIOChipInfo struct { + Name [32]byte + Label [32]byte + Lines uint32 +} +type GPIOV2LineValues struct { + Bits uint64 + Mask uint64 +} +type GPIOV2LineAttribute struct { + Id uint32 + _ uint32 + Flags uint64 +} +type GPIOV2LineConfigAttribute struct { + Attr GPIOV2LineAttribute + Mask uint64 +} +type GPIOV2LineConfig struct { + Flags uint64 + Num_attrs uint32 + _ [5]uint32 + Attrs [10]GPIOV2LineConfigAttribute +} +type GPIOV2LineRequest struct { + Offsets [64]uint32 + Consumer [32]byte + Config GPIOV2LineConfig + Num_lines uint32 + Event_buffer_size uint32 + _ [5]uint32 + Fd int32 +} +type GPIOV2LineInfo struct { + Name [32]byte + Consumer [32]byte + Offset uint32 + Num_attrs uint32 + Flags uint64 + Attrs [10]GPIOV2LineAttribute + _ [4]uint32 +} +type GPIOV2LineInfoChanged struct { + Info GPIOV2LineInfo + Timestamp_ns uint64 + Event_type uint32 + _ [5]uint32 +} +type GPIOV2LineEvent struct { + Timestamp_ns uint64 + Id uint32 + Offset uint32 + Seqno uint32 + Line_seqno uint32 + _ [6]uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 97ef790d..aede1de7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -711,3 +711,7 @@ type SysvShmDesc struct { _ uint32 _ uint32 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index 90b50da6..bb3bc4dc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -725,3 +725,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index acda1368..1fdf4c51 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -705,3 +705,7 @@ type SysvShmDesc struct { _ uint32 _ uint32 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index ef7a99e1..063e6f0b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -704,3 +704,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 966063df..9cf836c7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -705,3 +705,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index dc53b20b..1d222fcb 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -710,3 +710,7 @@ type SysvShmDesc struct { Ctime_high uint16 _ uint16 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 9ad0aa8c..912cc4ab 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -707,3 +707,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 29d55493..1e358ef3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -707,3 +707,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index a4d9e158..df59f32f 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -710,3 +710,7 @@ type SysvShmDesc struct { Ctime_high uint16 _ uint16 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index f8a29777..29355aa0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -718,3 +718,7 @@ type SysvShmDesc struct { _ uint32 _ [4]byte } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 4158d6c4..c6083a15 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -713,3 +713,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 1035af49..6321cc76 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -713,3 +713,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 2297125d..b44f402f 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -792,3 +792,7 @@ const ( RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE = 0x6 RISCV_HWPROBE_WHICH_CPUS = 0x1 ) + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 8481e9bd..b22c795a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -727,3 +727,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index a6828a03..0b18075b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -708,3 +708,7 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +const ( + GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 +) diff --git a/vendor/modules.txt b/vendor/modules.txt index 566f7401..237ee9dd 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -700,7 +700,7 @@ golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace -# golang.org/x/sys v0.45.0 +# golang.org/x/sys v0.46.0 ## explicit; go 1.25.0 golang.org/x/sys/cpu golang.org/x/sys/execabs From acec067d765c9efb0ed97e05c6420464af60e09e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 8 Jun 2026 14:01:12 +0000 Subject: [PATCH 24/55] chore(deps): update golang docker tag --- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 1fe43ec4..2b0227d1 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index af7f2e21..9e2d8e4d 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 ENV GOOS=linux ENV GOARCH=arm64 From 11e6f28a6018d25e3067d2b13e33c1ad4335048b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 8 Jun 2026 16:01:46 +0000 Subject: [PATCH 25/55] chore(deps): update module golang.org/x/term to v0.44.0 --- go.mod | 2 +- go.sum | 4 ++-- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- vendor/modules.txt | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 99c4c888..40e4852a 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/moby/term v0.5.2 github.com/pkg/errors v0.9.1 github.com/schollz/progressbar/v3 v3.19.0 - golang.org/x/term v0.43.0 + golang.org/x/term v0.44.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools/v3 v3.5.2 ) diff --git a/go.sum b/go.sum index 7cecd546..9da0be8f 100644 --- a/go.sum +++ b/go.sum @@ -1145,8 +1145,8 @@ golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 2b0227d1..1fe43ec4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 9e2d8e4d..af7f2e21 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm64 diff --git a/vendor/modules.txt b/vendor/modules.txt index 237ee9dd..02a23669 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -708,7 +708,7 @@ golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/term v0.43.0 +# golang.org/x/term v0.44.0 ## explicit; go 1.25.0 golang.org/x/term # golang.org/x/text v0.36.0 From e623f558529f976a6cf53d85c787d1a702e98db1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 8 Jun 2026 17:01:04 +0000 Subject: [PATCH 26/55] chore(deps): update golang docker tag --- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 1fe43ec4..2b0227d1 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index af7f2e21..9e2d8e4d 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 ENV GOOS=linux ENV GOARCH=arm64 From a44fde2df2ba449858c67049cc62df7a270eb772 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 9 Jun 2026 13:19:05 +0200 Subject: [PATCH 27/55] fix(new): checkout given recipeVersion before generating env closes #862 --- cli/app/new.go | 6 +++++- tests/integration/app_new.bats | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/cli/app/new.go b/cli/app/new.go index cdb54355..67b69d09 100644 --- a/cli/app/new.go +++ b/cli/app/new.go @@ -112,7 +112,11 @@ var AppNewCommand = &cobra.Command{ } } - if len(recipeVersions) > 0 { + if recipeVersion != "" { + if _, err := recipe.EnsureVersion(recipeVersion); err != nil { + log.Fatal(err) + } + } else if len(recipeVersions) > 0 { latest := recipeVersions[len(recipeVersions)-1] for tag := range latest { recipeVersion = tag diff --git a/tests/integration/app_new.bats b/tests/integration/app_new.bats index c7721c3a..4ef94aac 100644 --- a/tests/integration/app_new.bats +++ b/tests/integration/app_new.bats @@ -61,6 +61,16 @@ teardown(){ run grep -q "TYPE=$TEST_RECIPE:0.3.0+1.21.0" \ "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" assert_success + + # 0.3.0-only + run grep -q "NETWORK_WITH_COMMENT=BAZ" \ + "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" + assert_success + + # latest-only + run grep -q "TIMEOUT=120" \ + "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" + assert_failure } @test "ensure recipe is up-to-date" { @@ -100,6 +110,16 @@ teardown(){ run grep -q "TYPE=$TEST_RECIPE:${tagHash}" \ "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" assert_success + + # 0.3.0-only + run grep -q "NETWORK_WITH_COMMENT=BAZ" \ + "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" + assert_success + + # latest-only + run grep -q "TIMEOUT=120" \ + "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" + assert_failure } @test "does not overwrite existing env files" { From 8e4ed7b689220c8c8b0f799d84c0ec0867e58db4 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 9 Jun 2026 16:30:08 +0200 Subject: [PATCH 28/55] chore: make i18n --- pkg/i18n/locales/abra.pot | 66 ++-- pkg/i18n/locales/es.po | 782 ++++++++++++++++++++++++++------------ 2 files changed, 562 insertions(+), 286 deletions(-) diff --git a/pkg/i18n/locales/abra.pot b/pkg/i18n/locales/abra.pot index 0c039967..f07e260a 100644 --- a/pkg/i18n/locales/abra.pot +++ b/pkg/i18n/locales/abra.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" - "POT-Creation-Date: 2026-04-11 11:34+0200\n" + "POT-Creation-Date: 2026-06-09 16:29+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -214,7 +214,7 @@ msgstr "" msgid "%s already exists?" msgstr "" -#: ./cli/app/new.go:202 +#: ./cli/app/new.go:206 #, c-format msgid "%s created (version: %s)" msgstr "" @@ -299,7 +299,7 @@ msgstr "" msgid "%s has no published versions?" msgstr "" -#: ./cli/app/new.go:311 +#: ./cli/app/new.go:315 #, c-format msgid "%s has no secrets to generate, skipping..." msgstr "" @@ -404,17 +404,17 @@ msgstr "" msgid "%s removed from pass store" msgstr "" -#: ./cli/app/new.go:220 +#: ./cli/app/new.go:224 #, c-format msgid "%s requires secret generation before deploy, run \"abra app secret generate %s --all\"" msgstr "" -#: ./cli/app/new.go:224 +#: ./cli/app/new.go:228 #, c-format msgid "%s requires secret insertion before deploy (#generate=false)" msgstr "" -#: ./cli/app/new.go:151 +#: ./cli/app/new.go:155 #, c-format msgid "%s sanitised as %s for new app" msgstr "" @@ -626,7 +626,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:414 ./cli/app/labels.go:143 ./cli/app/list.go:335 ./cli/app/new.go:407 ./cli/app/ps.go:213 ./cli/app/restart.go:163 ./cli/app/restore.go:138 ./cli/app/secret.go:569 ./cli/app/secret.go:609 ./cli/app/secret.go:633 ./cli/app/secret.go:641 ./cli/catalogue/catalogue.go:318 ./cli/recipe/lint.go:137 +#: ./cli/app/backup.go:319 ./cli/app/backup.go:335 ./cli/app/check.go:95 ./cli/app/cmd.go:285 ./cli/app/cp.go:385 ./cli/app/deploy.go:414 ./cli/app/labels.go:143 ./cli/app/list.go:335 ./cli/app/new.go:411 ./cli/app/ps.go:213 ./cli/app/restart.go:163 ./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 "" @@ -767,7 +767,7 @@ msgid "Creates a new app from a default recipe.\n" "on your $PATH." msgstr "" -#: ./cli/app/deploy.go:430 ./cli/app/new.go:383 ./cli/app/rollback.go:361 ./cli/app/upgrade.go:470 +#: ./cli/app/deploy.go:430 ./cli/app/new.go:387 ./cli/app/rollback.go:361 ./cli/app/upgrade.go:470 msgid "D" msgstr "" @@ -878,7 +878,7 @@ msgid "Generate a report of all managed apps.\n" "Use \"--status/-S\" flag to query all servers for the live deployment status." msgstr "" -#: ./cli/app/new.go:317 +#: ./cli/app/new.go:321 msgid "Generate app secrets?" msgstr "" @@ -1257,7 +1257,7 @@ msgstr "" msgid "Run app commands" msgstr "" -#: ./cli/app/backup.go:303 ./cli/app/list.go:296 ./cli/app/logs.go:109 ./cli/app/new.go:399 +#: ./cli/app/backup.go:303 ./cli/app/list.go:296 ./cli/app/logs.go:109 ./cli/app/new.go:403 msgid "S" msgstr "" @@ -1265,7 +1265,7 @@ msgstr "" msgid "SECRETS" msgstr "" -#: ./cli/app/new.go:234 +#: ./cli/app/new.go:238 msgid "SECRETS OVERVIEW" msgstr "" @@ -1298,7 +1298,7 @@ msgstr "" msgid "STATUS" msgstr "" -#: ./cli/app/new.go:342 +#: ./cli/app/new.go:346 msgid "Select app server:" msgstr "" @@ -1330,7 +1330,7 @@ msgstr "" msgid "Specify a server name" msgstr "" -#: ./cli/app/new.go:293 +#: ./cli/app/new.go:297 msgid "Specify app domain" msgstr "" @@ -1865,7 +1865,7 @@ msgstr "" msgid "autocomplete failed: %s" msgstr "" -#: ./cli/app/new.go:401 +#: ./cli/app/new.go:405 msgid "automatically generate secrets" msgstr "" @@ -2054,7 +2054,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:413 ./cli/app/labels.go:142 ./cli/app/list.go:334 ./cli/app/new.go:406 ./cli/app/ps.go:212 ./cli/app/restart.go:162 ./cli/app/restore.go:137 ./cli/app/secret.go:568 ./cli/app/secret.go:608 ./cli/app/secret.go:632 ./cli/app/secret.go:640 ./cli/catalogue/catalogue.go:317 ./cli/recipe/lint.go:136 +#: ./cli/app/backup.go:318 ./cli/app/backup.go:334 ./cli/app/check.go:94 ./cli/app/cmd.go:284 ./cli/app/cp.go:384 ./cli/app/deploy.go:413 ./cli/app/labels.go:142 ./cli/app/list.go:334 ./cli/app/new.go:410 ./cli/app/ps.go:212 ./cli/app/restart.go:162 ./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 "" @@ -2544,11 +2544,11 @@ msgstr "" msgid "docker: is the daemon running / your user has docker permissions?" msgstr "" -#: ./cli/app/new.go:382 +#: ./cli/app/new.go:386 msgid "domain" msgstr "" -#: ./cli/app/new.go:385 +#: ./cli/app/new.go:389 msgid "domain name for app" msgstr "" @@ -2898,7 +2898,7 @@ msgstr "" msgid "failed to resize tty, using default size" msgstr "" -#: ./cli/app/new.go:134 +#: ./cli/app/new.go:138 #, c-format msgid "failed to retrieve latest commit for %s: %s" msgstr "" @@ -3202,7 +3202,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:416 ./cli/app/labels.go:145 ./cli/app/list.go:337 ./cli/app/new.go:409 ./cli/app/ps.go:215 ./cli/app/restart.go:165 ./cli/app/restore.go:140 ./cli/app/secret.go:571 ./cli/app/secret.go:611 ./cli/app/secret.go:635 ./cli/app/secret.go:643 ./cli/catalogue/catalogue.go:320 ./cli/recipe/lint.go:139 +#: ./cli/app/backup.go:321 ./cli/app/backup.go:337 ./cli/app/check.go:97 ./cli/app/cmd.go:287 ./cli/app/cp.go:387 ./cli/app/deploy.go:416 ./cli/app/labels.go:145 ./cli/app/list.go:337 ./cli/app/new.go:413 ./cli/app/ps.go:215 ./cli/app/restart.go:165 ./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 "" @@ -3752,7 +3752,7 @@ msgstr "" msgid "no containers matching the %v filter found?" msgstr "" -#: ./cli/app/new.go:302 ./cli/internal/validate.go:129 +#: ./cli/app/new.go:306 ./cli/internal/validate.go:129 msgid "no domain provided" msgstr "" @@ -3810,7 +3810,7 @@ msgstr "" msgid "no secrets to remove?" msgstr "" -#: ./cli/app/new.go:351 ./cli/internal/validate.go:167 +#: ./cli/app/new.go:355 ./cli/internal/validate.go:167 msgid "no server provided" msgstr "" @@ -3952,7 +3952,7 @@ msgstr "" #. with no spaces in between #. translators: `abra server prune` aliases. use a comma separated list of #. aliases with no spaces in between -#: ./cli/app/backup.go:295 ./cli/app/new.go:391 ./cli/app/ps.go:29 ./cli/app/secret.go:561 ./cli/app/secret.go:585 ./cli/app/secret.go:625 ./cli/app/undeploy.go:169 ./cli/catalogue/catalogue.go:294 ./cli/recipe/list.go:112 ./cli/server/prune.go:18 +#: ./cli/app/backup.go:295 ./cli/app/new.go:395 ./cli/app/ps.go:29 ./cli/app/secret.go:561 ./cli/app/secret.go:585 ./cli/app/secret.go:625 ./cli/app/undeploy.go:169 ./cli/catalogue/catalogue.go:294 ./cli/recipe/list.go:112 ./cli/server/prune.go:18 msgid "p" msgstr "" @@ -3991,7 +3991,7 @@ msgstr "" msgid "parsing recipe version failed: %s" msgstr "" -#: ./cli/app/new.go:390 ./cli/app/secret.go:560 ./cli/app/secret.go:584 ./cli/app/secret.go:624 +#: ./cli/app/new.go:394 ./cli/app/secret.go:560 ./cli/app/secret.go:584 ./cli/app/secret.go:624 msgid "pass" msgstr "" @@ -4584,7 +4584,7 @@ msgstr "" #. no spaces in between #. translators: `abra server` aliases. use a comma separated list of aliases #. with no spaces in between -#: ./cli/app/backup.go:198 ./cli/app/backup.go:263 ./cli/app/backup.go:287 ./cli/app/env.go:333 ./cli/app/list.go:327 ./cli/app/logs.go:101 ./cli/app/new.go:368 ./cli/app/restore.go:114 ./cli/app/secret.go:535 ./cli/catalogue/catalogue.go:27 ./cli/catalogue/catalogue.go:310 ./cli/recipe/fetch.go:130 ./cli/server/server.go:12 +#: ./cli/app/backup.go:198 ./cli/app/backup.go:263 ./cli/app/backup.go:287 ./cli/app/env.go:333 ./cli/app/list.go:327 ./cli/app/logs.go:101 ./cli/app/new.go:372 ./cli/app/restore.go:114 ./cli/app/secret.go:535 ./cli/catalogue/catalogue.go:27 ./cli/catalogue/catalogue.go:310 ./cli/recipe/fetch.go:130 ./cli/server/server.go:12 msgid "s" msgstr "" @@ -4641,11 +4641,11 @@ msgstr "" msgid "secret: %s removed" msgstr "" -#: ./cli/app/backup.go:302 ./cli/app/new.go:398 +#: ./cli/app/backup.go:302 ./cli/app/new.go:402 msgid "secrets" msgstr "" -#: ./cli/app/new.go:238 +#: ./cli/app/new.go:242 #, c-format msgid "secrets are %s shown again, please save them %s" msgstr "" @@ -4655,13 +4655,13 @@ msgstr "" msgid "selected latest recipe version: %s (from %d available versions)" msgstr "" -#: ./cli/app/new.go:121 +#: ./cli/app/new.go:125 #, c-format msgid "selected recipe version: %s (from %d available versions)" msgstr "" #. translators: `abra server` command for autocompletion -#: ./cli/app/env.go:332 ./cli/app/env.go:339 ./cli/app/list.go:326 ./cli/app/list.go:341 ./cli/app/new.go:367 ./cli/app/new.go:374 ./cli/run.go:101 +#: ./cli/app/env.go:332 ./cli/app/env.go:339 ./cli/app/list.go:326 ./cli/app/list.go:341 ./cli/app/new.go:371 ./cli/app/new.go:378 ./cli/run.go:101 msgid "server" msgstr "" @@ -4807,7 +4807,7 @@ msgstr "" msgid "since" msgstr "" -#: ./cli/app/new.go:336 +#: ./cli/app/new.go:340 #, c-format msgid "single server detected, choosing %s automatically" msgstr "" @@ -4907,7 +4907,7 @@ msgstr "" msgid "specify secret value" msgstr "" -#: ./cli/app/new.go:370 +#: ./cli/app/new.go:374 msgid "specify server for new app" msgstr "" @@ -4965,7 +4965,7 @@ msgstr "" msgid "store generated secrets in a local pass store" msgstr "" -#: ./cli/app/new.go:393 +#: ./cli/app/new.go:397 msgid "store secrets in a local pass store" msgstr "" @@ -5115,7 +5115,7 @@ msgstr "" msgid "trim input" msgstr "" -#: ./cli/app/new.go:263 ./pkg/app/app.go:141 +#: ./cli/app/new.go:267 ./pkg/app/app.go:141 #, c-format msgid "trimming %s to %s to avoid runtime limits" msgstr "" @@ -5801,7 +5801,7 @@ msgstr "" msgid "writer: %v, " msgstr "" -#: ./cli/app/deploy.go:288 ./cli/app/new.go:251 ./cli/app/rollback.go:256 ./cli/app/undeploy.go:120 ./cli/app/upgrade.go:301 +#: ./cli/app/deploy.go:288 ./cli/app/new.go:255 ./cli/app/rollback.go:256 ./cli/app/undeploy.go:120 ./cli/app/upgrade.go:301 #, c-format msgid "writing recipe version failed: %s" msgstr "" diff --git a/pkg/i18n/locales/es.po b/pkg/i18n/locales/es.po index f4ea02d4..cc70dac0 100644 --- a/pkg/i18n/locales/es.po +++ b/pkg/i18n/locales/es.po @@ -2,10 +2,11 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" -"POT-Creation-Date: 2026-04-11 11:34+0200\n" +"POT-Creation-Date: 2026-06-09 16:29+0200\n" "PO-Revision-Date: 2026-02-28 13:52+0000\n" "Last-Translator: chasqui \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -100,7 +101,8 @@ msgstr "" " abra aplicacion secreto insertar 1312.net my_secret v1 secreto.txt -f\n" "\n" " # insertar secreto desde stdin\n" -" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net my_secret v1" +" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net " +"my_secret v1" #: cli/app/list.go:54 msgid "" @@ -151,7 +153,8 @@ msgstr "" " 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" +" 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" @@ -164,7 +167,8 @@ msgid "" " # pull lost app .env file\n" " abra app env pull my.gitea.net --server 1312.net" msgstr "" -" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones locales\n" +" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones " +"locales\n" " abra aplicacion entorno obtener 1312.net --force\n" "\n" " # Extraer el archivo .env perdido de la aplicación\n" @@ -318,7 +322,7 @@ msgstr "%s ya existe" msgid "%s already exists?" msgstr "%s ¿ya existe?" -#: cli/app/new.go:202 +#: cli/app/new.go:206 #, c-format msgid "%s created (version: %s)" msgstr "%s creado (versión: %s)" @@ -390,8 +394,12 @@ msgstr "%s se ha escalado a 1" #: pkg/catalogue/catalogue.go:40 #, c-format -msgid "%s has locally unstaged changes? please commit/remove your changes before proceeding" -msgstr "¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus cambios antes de continuar" +msgid "" +"%s has locally unstaged changes? please commit/remove your changes before " +"proceeding" +msgstr "" +"¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus " +"cambios antes de continuar" #: cli/internal/recipe.go:114 #, c-format @@ -403,7 +411,7 @@ msgstr "¿%s no tiene una aplicación principal?" msgid "%s has no published versions?" msgstr "¿%s no tiene versiones publicadas?" -#: cli/app/new.go:311 +#: cli/app/new.go:315 #, c-format msgid "%s has no secrets to generate, skipping..." msgstr "%s no tiene secretos para generar, omitiendo..." @@ -411,7 +419,9 @@ msgstr "%s no tiene secretos para generar, omitiendo..." #: pkg/recipe/compose.go:107 #, c-format msgid "%s has no version label? try running \"abra recipe sync %s\" first?" -msgstr "¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta sincronizar %s\" primero?" +msgstr "" +"¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta " +"sincronizar %s\" primero?" #: pkg/secret/pass.go:29 #, c-format @@ -510,17 +520,22 @@ msgstr "notas de la versión %s:" msgid "%s removed from pass store" msgstr "%s eliminado del almacén de contraseñas" -#: cli/app/new.go:220 -#, c-format -msgid "%s requires secret generation before deploy, run \"abra app secret generate %s --all\"" -msgstr "%s requiere generación de secretos antes del despliegue, ejecuta \"abra aplicacion secreto generar %s --all\"" - #: cli/app/new.go:224 #, c-format -msgid "%s requires secret insertion before deploy (#generate=false)" -msgstr "%s requiere inserción de secretos antes del despliegue (#generate=false)" +msgid "" +"%s requires secret generation before deploy, run \"abra app secret generate " +"%s --all\"" +msgstr "" +"%s requiere generación de secretos antes del despliegue, ejecuta \"abra " +"aplicacion secreto generar %s --all\"" -#: cli/app/new.go:151 +#: cli/app/new.go:228 +#, c-format +msgid "%s requires secret insertion before deploy (#generate=false)" +msgstr "" +"%s requiere inserción de secretos antes del despliegue (#generate=false)" + +#: cli/app/new.go:155 #, c-format msgid "%s sanitised as %s for new app" msgstr "%s sanitisado como %s para nueva aplicación" @@ -666,8 +681,12 @@ msgid "'%s' is not a known version for %s" msgstr "'%s' no es una versión conocida para %s" #: cli/app/volume.go:175 -msgid "'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode is enabled" -msgstr "'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, el modo vim está activado" +msgid "" +"'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode " +"is enabled" +msgstr "" +"'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, " +"el modo vim está activado" #: cli/app/cmd.go:125 #, c-format @@ -691,27 +710,35 @@ msgstr "Se utiliza una plantilla de receta gestionada por la comunidad." msgid "" "A recipe is a blueprint for an app.\n" "\n" -"It is a bunch of config files which describe how to deploy and maintain an app.\n" +"It is a bunch of config files which describe how to deploy and maintain an " +"app.\n" "Recipes are maintained by the Co-op Cloud community and you can use Abra to\n" "read them, deploy them and create apps for you.\n" "\n" -"Anyone who uses a recipe can become a maintainer. Maintainers typically make\n" -"sure the recipe is in good working order and the config upgraded in a timely\n" +"Anyone who uses a recipe can become a maintainer. Maintainers typically " +"make\n" +"sure the recipe is in good working order and the config upgraded in a " +"timely\n" "manner." msgstr "" "Una receta son las instrucciones para crear una aplicación.\n" "\n" -"Es un conjunto de archivos de configuración, que describen cómo desplegar y mantener una aplicación.\n" -"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra para\n" +"Es un conjunto de archivos de configuración, que describen cómo desplegar y " +"mantener una aplicación.\n" +"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra " +"para\n" "leerlas, desplegarlas y crear aplicaciones para ti.\n" "\n" -"Cualquiera que use una receta puede convertirse en mantenedor. Los mantenedores típicamente se\n" -"aseguran de que la receta funcione correctamente y de que la configuración se actualice de manera oportuna." +"Cualquiera que use una receta puede convertirse en mantenedor. Los " +"mantenedores típicamente se\n" +"aseguran de que la receta funcione correctamente y de que la configuración " +"se actualice de manera oportuna." #: cli/app/remove.go:57 #, c-format msgid "ALERTA ALERTA: deleting %s data and config (local/remote)" -msgstr "ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" +msgstr "" +"ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" #. translators: Short description for `server add` command #: cli/server/add.go:30 @@ -723,7 +750,8 @@ msgid "" "Add a new server to your configuration so that it can be managed by Abra.\n" "\n" "Abra relies on the standard SSH command-line and ~/.ssh/config for client\n" -"connection details. You must configure an entry per-host in your ~/.ssh/config\n" +"connection details. You must configure an entry per-host in your ~/.ssh/" +"config\n" "for each server:\n" "\n" " Host 1312.net 1312\n" @@ -732,15 +760,19 @@ msgid "" " Port 12345\n" " IdentityFile ~/.ssh/antifa@somewhere\n" "\n" -"If \"--local\" is passed, then Abra assumes that the current local server is\n" -"intended as the target server. This is useful when you want to have your entire\n" +"If \"--local\" is passed, then Abra assumes that the current local server " +"is\n" +"intended as the target server. This is useful when you want to have your " +"entire\n" "Co-op Cloud config located on the server itself, and not on your local\n" "developer machine. The domain is then set to \"default\"." msgstr "" -"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado por Abra.\n" +"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado " +"por Abra.\n" "\n" "Para agregar servidor Remoto:\n" -"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de conexión al servidor. \n" +"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de " +"conexión al servidor. \n" "Debes configurar una entrada en ~/.ssh/config para cada servidor:\n" "\n" " Host 1312.net 1312\n" @@ -750,17 +782,19 @@ msgstr "" " IdentityFile ~/.ssh/antifa@1312.net\n" "\n" "Para agregar servidor local;\n" -"Si agregas \"--local\", Abra asumirá que la computadora local actual es el servidor que quieres agregar. \n" +"Si agregas \"--local\", Abra asumirá que la computadora local actual es el " +"servidor que quieres agregar. \n" "Esto es útil cuando quieres tener Abra en el mismo servidor. \n" "El dominio se establece entonces como \"default\"." #: cli/app/labels.go:33 msgid "Both local recipe and live deployment labels are shown." -msgstr "Se muestran tanto la receta local como las etiquetas del despliegue en vivo." +msgstr "" +"Se muestran tanto la receta local como las etiquetas del despliegue en vivo." #: 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:414 -#: cli/app/labels.go:143 cli/app/list.go:335 cli/app/new.go:407 +#: cli/app/labels.go:143 cli/app/list.go:335 cli/app/new.go:411 #: cli/app/ps.go:213 cli/app/restart.go:163 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 @@ -820,12 +854,16 @@ msgstr "💕 Clona la 📜 receta(s) en local" msgid "" "Compare env vars in both the app \".env\" and recipe \".env.sample\" file.\n" "\n" -"The goal is to ensure that recipe \".env.sample\" env vars are defined in your\n" -"app \".env\" file. Only env var definitions in the \".env.sample\" which are\n" -"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not include\n" +"The goal is to ensure that recipe \".env.sample\" env vars are defined in " +"your\n" +"app \".env\" file. Only env var definitions in the \".env.sample\" which " +"are\n" +"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not " +"include\n" "these env vars, then \"check\" will complain.\n" "\n" -"Recipe maintainers may or may not provide defaults for env vars within their\n" +"Recipe maintainers may or may not provide defaults for env vars within " +"their\n" "recipes regardless of commenting or not (e.g. through the use of\n" "${FOO:} syntax). \"check\" does not confirm or deny this for you." msgstr "" @@ -868,24 +906,31 @@ msgstr "Crea una nueva 📸 instantánea (respaldo)" msgid "" "Create a new version of a recipe.\n" "\n" -"These versions are then published on the Co-op Cloud recipe catalogue. These\n" +"These versions are then published on the Co-op Cloud recipe catalogue. " +"These\n" "versions take the following form:\n" "\n" " a.b.c+x.y.z\n" "\n" -"Where the \"a.b.c\" part is a semantic version determined by the maintainer. The\n" -"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main container\n" +"Where the \"a.b.c\" part is a semantic version determined by the maintainer. " +"The\n" +"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main " +"container\n" "which contains the software to be used, by naming convention).\n" "\n" "We maintain a semantic versioning scheme (\"a.b.c\") alongside the recipe\n" -"versioning scheme (\"x.y.z\") in order to maximise the chances that the nature of\n" +"versioning scheme (\"x.y.z\") in order to maximise the chances that the " +"nature of\n" "recipe updates are properly communicated. I.e. developers of an app might\n" -"publish a minor version but that might lead to changes in the recipe which are\n" +"publish a minor version but that might lead to changes in the recipe which " +"are\n" "major and therefore require intervention while doing the upgrade work.\n" "\n" "This command will publish your new release to git.coopcloud.tech. This\n" -"requires that you have permission to git push to these repositories and have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" +"requires that you have permission to git push to these repositories and " +"have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to " +"add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -901,14 +946,20 @@ msgstr "" "Donde \"a.b.c\" es la versión semántica que decide el mantenedor. La parte \n" "\"x.y.z\" es la versión semántica oficial de la imagen de la aplicación .\n" "\n" -"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta (\"x.y.z\") \n" -"para que sea más claro qué tipo de cambios trae cada actualización. Por ejemplo, \n" -"los desarrolladores de una aplicación pueden publicar una versión menor, pero \n" -"la receta podría necesitar cambios importantes que requieran atención al actualizar.\n" +"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta " +"(\"x.y.z\") \n" +"para que sea más claro qué tipo de cambios trae cada actualización. Por " +"ejemplo, \n" +"los desarrolladores de una aplicación pueden publicar una versión menor, " +"pero \n" +"la receta podría necesitar cambios importantes que requieran atención al " +"actualizar.\n" "\n" "Este comando publicará tu nuevo release en git.coopcloud.tech. Necesitas \n" -"permiso para hacer git push en esos repositorios y tener tus claves SSH configuradas \n" -"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu contraseña antes \n" +"permiso para hacer git push en esos repositorios y tener tus claves SSH " +"configuradas \n" +"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu " +"contraseña antes \n" "de ejecutar:\n" "\n" " eval `ssh-agent`\n" @@ -925,21 +976,27 @@ msgid "" "This new app configuration is stored in your $ABRA_DIR directory under the\n" "appropriate server.\n" "\n" -"This command does not deploy your app for you. You will need to run \"abra app\n" +"This command does not deploy your app for you. You will need to run \"abra " +"app\n" "deploy \" to do so.\n" "\n" -"You can see what recipes are available (i.e. values for the [recipe] argument)\n" +"You can see what recipes are available (i.e. values for the [recipe] " +"argument)\n" "by running \"abra recipe ls\".\n" "\n" "Recipe commit hashes are supported values for \"[version]\".\n" "\n" -"Passing the \"--secrets/-S\" flag will automatically generate secrets for your\n" +"Passing the \"--secrets/-S\" flag will automatically generate secrets for " +"your\n" "app and store them encrypted at rest on the chosen target server. These\n" -"generated secrets are only visible at generation time, so please take care to\n" +"generated secrets are only visible at generation time, so please take care " +"to\n" "store them somewhere safe.\n" "\n" -"You can use the \"--pass/-P\" to store these generated passwords locally in a\n" -"pass store (see passwordstore.org for more). The pass command must be available\n" +"You can use the \"--pass/-P\" to store these generated passwords locally in " +"a\n" +"pass store (see passwordstore.org for more). The pass command must be " +"available\n" "on your $PATH." msgstr "" "Crea una nueva aplicación a partir de una receta.\n" @@ -949,17 +1006,19 @@ msgstr "" "Ojo: Este comando no despliega la aplicación.\n" "\n" "Si pasas la opción \"--secrets/-S\" se generarán automáticamente secretos \n" -"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos secretos \n" +"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos " +"secretos \n" "generados solo se muestran al momento de crearlos, así que guárdalos \n" "en un lugar seguro.\n" "\n" "Los hashes de commit de la receta son valores válidos para \"[version]\".\n" "\n" -"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas localmente \n" +"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas " +"localmente \n" "en un almacén pass (ver passwordstore.org). El comando pass debe estar \n" "disponible en tu $PATH." -#: cli/app/deploy.go:430 cli/app/new.go:383 cli/app/rollback.go:361 +#: cli/app/deploy.go:430 cli/app/new.go:387 cli/app/rollback.go:361 #: cli/app/upgrade.go:470 msgid "D" msgstr "" @@ -989,9 +1048,11 @@ msgstr "📤 Despliega una 🚀 aplicación" msgid "" "Deploy an app.\n" "\n" -"This command supports chaos operations. Use \"--chaos/-C\" to deploy your recipe\n" +"This command supports chaos operations. Use \"--chaos/-C\" to deploy your " +"recipe\n" "checkout as-is. Recipe commit hashes are also supported as values for\n" -"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos operations." +"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos " +"operations." msgstr "" "Despliega una aplicación.\n" "\n" @@ -1014,7 +1075,8 @@ msgstr "⬇️ Descarga una 📸 instantánea" msgid "" "Downloads a backup.tar.gz to the current working directory.\n" "\n" -"\"--volumes/-v\" includes data contained in volumes alongide paths specified in\n" +"\"--volumes/-v\" includes data contained in volumes alongide paths specified " +"in\n" "\"backupbot.backup.path\" labels." msgstr "" "Descarga un backup.tar.gz al directorio de trabajo actual.\n" @@ -1058,21 +1120,28 @@ msgstr "NOMBRE GENERADO" msgid "" "Generate a new copy of the recipe catalogue.\n" "\n" -"N.B. this command **will** wipe local unstaged changes from your local recipes\n" -"if present. \"--chaos/-C\" on this command refers to the catalogue repository\n" -"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose your\n" +"N.B. this command **will** wipe local unstaged changes from your local " +"recipes\n" +"if present. \"--chaos/-C\" on this command refers to the catalogue " +"repository\n" +"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose " +"your\n" "changes.\n" "\n" "It is possible to generate new metadata for a single recipe by passing\n" "[recipe]. The existing local catalogue will be updated, not overwritten.\n" "\n" -"It is quite easy to get rate limited by Docker Hub when running this command.\n" -"If you have a Hub account you can \"docker login\" and Abra will automatically\n" +"It is quite easy to get rate limited by Docker Hub when running this " +"command.\n" +"If you have a Hub account you can \"docker login\" and Abra will " +"automatically\n" "use those details.\n" "\n" "Publish your new release to git.coopcloud.tech with \"--publish/-p\". This\n" -"requires that you have permission to git push to these repositories and have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" +"requires that you have permission to git push to these repositories and " +"have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to " +"add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -1110,9 +1179,10 @@ msgid "" msgstr "" "Genera un informe de todas las aplicaciones gestionadas.\n" "\n" -"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre el estado de despliegue." +"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre " +"el estado de despliegue." -#: cli/app/new.go:317 +#: cli/app/new.go:321 msgid "Generate app secrets?" msgstr "¿Generar secretos de la aplicación?" @@ -1139,7 +1209,8 @@ msgstr "📋 Muestra el catálogo de 📜 recetas" #: pkg/recipe/git.go:459 #, c-format msgid "GetRecipeVersions encountered error for %s: %s (collected %d versions)" -msgstr "GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" +msgstr "" +"GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" #: cli/recipe/new.go:125 msgid "Git (user) name to do commits with" @@ -1289,17 +1360,22 @@ msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas" msgid "" "Move an app to a differnt server.\n" "\n" -"This command will migrate an app config and copy secrets and volumes from the\n" -"old server to the new one. The app MUST be deployed on the old server before\n" +"This command will migrate an app config and copy secrets and volumes from " +"the\n" +"old server to the new one. The app MUST be deployed on the old server " +"before\n" "doing the move. The app will be undeployed from the current server but not\n" "deployed on the new server.\n" "\n" -"The \"tar\" command is required on both the old and new server as well as \"sudo\"\n" +"The \"tar\" command is required on both the old and new server as well as " +"\"sudo\"\n" "permissions. The \"rsync\" command is required on your local machine for\n" "transferring volumes.\n" "\n" -"Do not forget to update your DNS records. Don't panic, it might take a while\n" -"for the dust to settle after you move an app. If anything goes wrong, you can\n" +"Do not forget to update your DNS records. Don't panic, it might take a " +"while\n" +"for the dust to settle after you move an app. If anything goes wrong, you " +"can\n" "always move the app config file to the original server and deploy it there\n" "again. No data is removed from the old server.\n" "\n" @@ -1324,7 +1400,8 @@ msgstr "" "de vuelta al servidor original y desplegarlo otra vez. No se elimina \n" "ningún dato del servidor antiguo.\n" "\n" -"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se moverán." +"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se " +"moverán." #. translators: Short description for `app move` command #: cli/app/move.go:41 @@ -1381,7 +1458,8 @@ msgstr "🧹 Limpiar recursos en un 🕋 servidor" msgid "" "Prunes unused containers, networks, and dangling images.\n" "\n" -"Use \"--volumes/-v\" to remove volumes that are not associated with a deployed\n" +"Use \"--volumes/-v\" to remove volumes that are not associated with a " +"deployed\n" "app. This can result in unwanted data loss if not used carefully." msgstr "" "Elimina contenedores, redes e imágenes que no se usan.\n" @@ -1393,13 +1471,16 @@ msgstr "" #. translators: Short description for `app env pull` command #: cli/app/env.go:80 msgid "Pull app environment values from a deployed app" -msgstr "Obtener (pull) valores de entorno de la aplicación desde una aplicación desplegada" +msgstr "" +"Obtener (pull) valores de entorno de la aplicación desde una aplicación " +"desplegada" #: cli/app/env.go:81 msgid "" "Pull app environment values from a deploymed app.\n" "\n" -"A convenient command for when you've lost your app environment file or want to\n" +"A convenient command for when you've lost your app environment file or want " +"to\n" "synchronize your local app environment values with what is deployed live." msgstr "" "Extrae los valores de entorno de una aplicación desplegada.\n" @@ -1435,7 +1516,8 @@ msgid "" "Remove a managed server.\n" "\n" "Abra will remove the internal bookkeeping ($ABRA_DIR/servers/...) and\n" -"underlying client connection context. This server will then be lost in time,\n" +"underlying client connection context. This server will then be lost in " +"time,\n" "like tears in rain." msgstr "" "Eliminar un servidor gestionado.\n" @@ -1457,7 +1539,8 @@ msgstr "💀 Borrar completamente una 🚀 aplicación (local y remotamente)" #. translators: Short description for `recipe reset` command #: cli/recipe/reset.go:23 msgid "Remove all unstaged changes from recipe config" -msgstr "💀 Borra los cambios no actualizados de la configuración de la 📜 receta" +msgstr "" +"💀 Borra los cambios no actualizados de la configuración de la 📜 receta" #: cli/app/remove.go:29 msgid "" @@ -1466,16 +1549,19 @@ msgid "" "By default, it will prompt for confirmation before proceeding. All secrets,\n" "volumes and the local app env file will be deleted.\n" "\n" -"Only run this command when you are sure you want to completely remove the app\n" +"Only run this command when you are sure you want to completely remove the " +"app\n" "and all associated app data. This is a destructive action, Be Careful!\n" "\n" "If you would like to delete specific volumes or secrets, please use removal\n" "sub-commands under \"app volume\" and \"app secret\" instead.\n" "\n" -"Please note, if you delete the local app env file without removing volumes and\n" +"Please note, if you delete the local app env file without removing volumes " +"and\n" "secrets first, Abra will *not* be able to help you remove them afterwards.\n" "\n" -"To delete everything without prompt, use the \"--force/-f\" or the \"--no-input/n\"\n" +"To delete everything without prompt, use the \"--force/-f\" or the \"--no-" +"input/n\"\n" "flag." msgstr "" "Elimina todo lo relacionado con una aplicación que ya está plegada.\n" @@ -1506,11 +1592,14 @@ msgstr "💀 Elimina 📦 volúmen(es) asociados a una 🚀 aplicación" msgid "" "Remove volumes associated with an app.\n" "\n" -"The app in question must be undeployed before you try to remove volumes. See\n" +"The app in question must be undeployed before you try to remove volumes. " +"See\n" "\"abra app undeploy \" for more.\n" "\n" -"The command is interactive and will show a multiple select input which allows\n" -"you to make a seclection. Use the \"?\" key to see more help on navigating this\n" +"The command is interactive and will show a multiple select input which " +"allows\n" +"you to make a seclection. Use the \"?\" key to see more help on navigating " +"this\n" "interface.\n" "\n" "Passing \"--force/-f\" will select all volumes for removal. Be careful." @@ -1546,19 +1635,25 @@ msgstr "⏪ Revertir una 🚀 aplicación una versión anterior" #. translators: Short description for `app run` command #: cli/app/run.go:30 msgid "Run a command inside a service container" -msgstr "Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" +msgstr "" +"Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" #: cli/app/cmd.go:31 msgid "" "Run an app specific command.\n" "\n" -"These commands are bash functions, defined in the abra.sh of the recipe itself.\n" -"They can be run within the context of a service (e.g. app) or locally on your\n" +"These commands are bash functions, defined in the abra.sh of the recipe " +"itself.\n" +"They can be run within the context of a service (e.g. app) or locally on " +"your\n" "work station by passing \"--local/-l\".\n" "\n" -"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-l\") must\n" -"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" +"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-" +"l\") must\n" +"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" @@ -1579,7 +1674,7 @@ msgid "Run app commands" msgstr "Ejecutar 💻 comando dentro una 🚀aplicación" #: cli/app/backup.go:303 cli/app/list.go:296 cli/app/logs.go:109 -#: cli/app/new.go:399 +#: cli/app/new.go:403 msgid "S" msgstr "" @@ -1587,7 +1682,7 @@ msgstr "" msgid "SECRETS" msgstr "🥷 SECRETOS" -#: cli/app/new.go:234 +#: cli/app/new.go:238 msgid "SECRETS OVERVIEW" msgstr "RESUMEN DE LOS 🥷 SECRETOS" @@ -1621,7 +1716,7 @@ msgstr "" msgid "STATUS" msgstr "🩻 ESTADO" -#: cli/app/new.go:342 +#: cli/app/new.go:346 msgid "Select app server:" msgstr "Seleccionar servidor para la aplicación:" @@ -1659,7 +1754,7 @@ msgstr "Especifica un 🌐 nombre de dominio (DNS)" msgid "Specify a server name" msgstr "Especifica un nombre de servidor" -#: cli/app/new.go:293 +#: cli/app/new.go:297 msgid "Specify app domain" msgstr "Especifica un 🌐 nombre de dominio (DNS) para la aplicación" @@ -1709,8 +1804,10 @@ msgid "" "Arbitrary secret insertion is not supported. Secrets that are inserted must\n" "match those configured in the recipe beforehand.\n" "\n" -"This command can be useful when you want to manually generate secrets for an app\n" -"environment. Typically, you can let Abra generate them for you on app creation\n" +"This command can be useful when you want to manually generate secrets for an " +"app\n" +"environment. Typically, you can let Abra generate them for you on app " +"creation\n" "(see \"abra app new --secrets/-S\" for more)." msgstr "" "Este comando inserta un secreto en el entorno de una aplicación.\n" @@ -1761,17 +1858,22 @@ msgstr "" msgid "" "This command rolls an app back to a previous version.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only " +"recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a specific\n" +"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a " +"specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what downgrades\n" -"are available. The live deployment version is the \"source of truth\" in this\n" +"Only the deployed version is consulted when trying to determine what " +"downgrades\n" +"are available. The live deployment version is the \"source of truth\" in " +"this\n" "case. The stored .env version is not consulted.\n" "\n" -"A downgrade can be destructive, please ensure you have a copy of your app data\n" +"A downgrade can be destructive, please ensure you have a copy of your app " +"data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Este comando revierte una aplicación a una versión anterior.\n" @@ -1795,7 +1897,8 @@ msgstr "" msgid "" "This does not destroy any application data.\n" "\n" -"However, you should remain vigilant, as your swarm installation will consider\n" +"However, you should remain vigilant, as your swarm installation will " +"consider\n" "any previously attached volumes as eligible for pruning once undeployed.\n" "\n" "Passing \"--prune/-p\" does not remove those volumes." @@ -1821,7 +1924,8 @@ msgid "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" +"abra\n" "\n" "Zsh:\n" " # If shell autocompletion is not already enabled in your environment,\n" @@ -1857,7 +1961,8 @@ msgstr "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" +"abra\n" "\n" "Zsh:\n" " # Si la autocompletación no está habilitada, actívala una vez:\n" @@ -1908,7 +2013,8 @@ msgid "" "It will update the relevant compose file tags on the local file system.\n" "\n" "Some image tags cannot be parsed because they do not follow some sort of\n" -"semver-like convention. In this case, all possible tags will be listed and it\n" +"semver-like convention. In this case, all possible tags will be listed and " +"it\n" "is up to the end-user to decide.\n" "\n" "The command is interactive and will show a select input which allows you to\n" @@ -1940,8 +2046,10 @@ msgid "" "\n" "By default, the latest stable release is downloaded.\n" "\n" -"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind that\n" -"it may contain absolutely catastrophic deal-breaker bugs. Thank you very much\n" +"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind " +"that\n" +"it may contain absolutely catastrophic deal-breaker bugs. Thank you very " +"much\n" "for the testing efforts 💗" msgstr "" "Actualiza abra in situ con la última versión estable \n" @@ -1962,17 +2070,22 @@ msgstr "📨 Actualizar una 🚀 aplicación" msgid "" "Upgrade an app.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only " +"recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a specific\n" +"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a " +"specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what upgrades\n" -"are available. The live deployment version is the \"source of truth\" in this\n" +"Only the deployed version is consulted when trying to determine what " +"upgrades\n" +"are available. The live deployment version is the \"source of truth\" in " +"this\n" "case. The stored .env version is not consulted.\n" "\n" -"An upgrade can be destructive, please ensure you have a copy of your app data\n" +"An upgrade can be destructive, please ensure you have a copy of your app " +"data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Actualizar una aplicación.\n" @@ -2011,19 +2124,26 @@ msgid "" "Examples:\n" "{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n" -" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n" +"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name " +"\"help\"))}}\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" -" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n" +"Additional help topics:{{range .Commands}}{{if ." +"IsAdditionalHelpTopicCommand}}\n" +" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}" +"{{if .HasAvailableSubCommands}}\n" "\n" -"Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n" +"Use \"{{.CommandPath}} [command] --help\" for more information about a " +"command.{{end}}\n" msgstr "" "Uso:{{if .Runnable}}\n" " {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n" @@ -2038,23 +2158,34 @@ msgstr "" "\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" +"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" +"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if ." +"HasAvailableInheritedFlags}}\n" "\n" "Opciones globales:\n" -"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\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" +"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" +"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." -msgstr "Usando \"--force/-f\", Git sincroniza una receta existente. No borra los cambios no preparados." +msgid "" +"Using \"--force/-f\" Git syncs an existing recipe. It does not erase " +"unstaged changes." +msgstr "" +"Usando \"--force/-f\", Git sincroniza una receta existente. No borra los " +"cambios no preparados." #: cli/app/secret.go:117 msgid "VALUE" @@ -2085,20 +2216,27 @@ msgstr "[hijack] Fin de stdout" #, c-format msgid "" "\n" -"The following options are two types of initial semantic version that you can\n" -"pick for %s that will be published in the recipe catalogue. This follows the\n" +"The following options are two types of initial semantic version that you " +"can\n" +"pick for %s that will be published in the recipe catalogue. This follows " +"the\n" "semver convention (more on https://semver.org), here is a short cheatsheet\n" "\n" -" 0.1.0: development release, still hacking. when you make a major upgrade\n" -" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move to\n" +" 0.1.0: development release, still hacking. when you make a major " +"upgrade\n" +" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move " +"to\n" " using the \"x\" part when things are stable.\n" "\n" " 1.0.0: public release, assumed to be working. you already have a stable\n" -" and reliable deployment of this app and feel relatively confident\n" +" and reliable deployment of this app and feel relatively " +"confident\n" " about it.\n" "\n" -"If you want people to be able alpha test your current config for %s but don't\n" -"think it is quite reliable, go with 0.1.0 and people will know that things are\n" +"If you want people to be able alpha test your current config for %s but " +"don't\n" +"think it is quite reliable, go with 0.1.0 and people will know that things " +"are\n" "likely to change.\n" "\n" msgstr "" @@ -2109,7 +2247,8 @@ msgstr "" "Resumen rápido:\n" "\n" " 0.1.0: versión de desarrollo, todavía en prueba. Cuando hagas una \n" -"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás a \n" +"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás " +"a \n" "usar la parte \"x\" cuando las cosas estén estables.\n" "\n" " 1.0.0: versión pública, se asume que funciona. Ya tienes un \n" @@ -2127,7 +2266,8 @@ msgid "" "\n" "You need to make a decision about what kind of an update this new recipe\n" "version is. If someone else performs this upgrade, do they have to do some\n" -"migration work or take care of some breaking changes? This can be signaled in\n" +"migration work or take care of some breaking changes? This can be signaled " +"in\n" "the version you specify on the recipe deploy label and is called a semantic\n" "version.\n" "\n" @@ -2137,21 +2277,27 @@ msgid "" "\n" "Here is a semver cheat sheet (more on https://semver.org):\n" "\n" -" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> 2.0.0).\n" -" the upgrade won't work without some preparation work and others need\n" +" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> " +"2.0.0).\n" +" the upgrade won't work without some preparation work and others " +"need\n" " to take care when performing it. \"it could go wrong\".\n" "\n" -" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> 0.2.0).\n" -" the upgrade should Just Work and there are no breaking changes in\n" +" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> " +"0.2.0).\n" +" the upgrade should Just Work and there are no breaking changes " +"in\n" " the app and the recipe config. \"it should go fine\".\n" "\n" -" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this upgrade\n" +" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this " +"upgrade\n" " should also Just Work and is mostly to do with minor bug fixes\n" " and/or security patches. \"nothing to worry about\".\n" "\n" msgstr "" "\n" -"Necesitas decidir qué tipo de actualización es esta nueva versión de la receta. \n" +"Necesitas decidir qué tipo de actualización es esta nueva versión de la " +"receta. \n" "Si otra persona realiza esta actualización, ¿tendrá que hacer migraciones \n" "o atender cambios incompatibles? Eso se indica con la versión semántica \n" "que especifiques en la etiqueta de despliegue de la receta.\n" @@ -2162,17 +2308,25 @@ msgstr "" "\n" "Semántica de semver (más en https://semver.org):\n" "\n" -" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 -> 2.0.0).\n" -" la actualización no funcionará sin trabajo de preparación y otros deben\n" +" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 " +"-> 2.0.0).\n" +" la actualización no funcionará sin trabajo de preparación y otros " +"deben\n" " tener cuidado al realizarla. \"podría salir mal\".\n" "\n" -" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -> 0.2.0).\n" -" la actualización debería funcionar sin problemas y no hay cambios\n" -" incompatibles en la app ni en la configuración de la receta. \"debería ir bien\".\n" +" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -" +"> 0.2.0).\n" +" la actualización debería funcionar sin problemas y no hay " +"cambios\n" +" incompatibles en la app ni en la configuración de la receta. " +"\"debería ir bien\".\n" "\n" -" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> 0.0.2).\n" -" esta actualización también debería funcionar sin problemas y trata\n" -" principalmente de arreglos menores y/o parches de seguridad. \"nada de qué preocuparse\".\n" +" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> " +"0.0.2).\n" +" esta actualización también debería funcionar sin problemas y " +"trata\n" +" principalmente de arreglos menores y/o parches de seguridad. " +"\"nada de qué preocuparse\".\n" "\n" #: pkg/lint/recipe.go:203 @@ -2338,7 +2492,9 @@ msgstr "aplicacion [comando] [argumento] [opciones]" #: pkg/dns/dns.go:52 #, c-format 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)?" +msgstr "" +"¿El dominio de la aplicación %s (%s) no parece resolverse al servidor de la " +"aplicación %s (%s)?" #: cli/recipe/release.go:349 msgid "app service is missing image tag?" @@ -2404,7 +2560,7 @@ msgstr "autocompletar [bash|zsh|fish|powershell]" msgid "autocomplete failed: %s" msgstr "autocompletar falló: %s" -#: cli/app/new.go:401 +#: cli/app/new.go:405 msgid "automatically generate secrets" msgstr "generar secretos automáticamente" @@ -2494,7 +2650,9 @@ msgstr "cancelado" #: pkg/catalogue/catalogue.go:59 pkg/recipe/git.go:251 #, c-format msgid "cannot ensure %s is up-to-date, no git remotes configured" -msgstr "no se puede asegurar que %s esté actualizado, no hay remotos de git configurados" +msgstr "" +"no se puede asegurar que %s esté actualizado, no hay remotos de git " +"configurados" #: cli/app/config.go:43 pkg/app/app.go:52 #, c-format @@ -2508,17 +2666,24 @@ msgstr "no se puede obtener la etiqueta %s para %s" #: pkg/recipe/git.go:58 #, c-format -msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" -msgstr "no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"?" +msgid "" +"cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" +msgstr "" +"no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención " +"usar \"--caos\"?" #: cli/app/deploy.go:388 #, c-format 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\"" +"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\"? \n" -"para volver a un lanzamiento regular, especifica una etiqueta de lanzamiento, SHA de commit o agrega el comando \"--latest\"" +"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 @@ -2527,7 +2692,8 @@ msgstr "no se puede resolver ipv4 para %s?" #: 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" +msgstr "" +"no se puede especificar una etiqueta y un tipo de incremento al mismo tiempo" #: cli/app/secret.go:68 msgid "cannot use '[secret] [version]' and '--all' together" @@ -2599,7 +2765,7 @@ 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:413 -#: cli/app/labels.go:142 cli/app/list.go:334 cli/app/new.go:406 +#: cli/app/labels.go:142 cli/app/list.go:334 cli/app/new.go:410 #: cli/app/ps.go:212 cli/app/restart.go:162 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 @@ -2608,7 +2774,9 @@ msgstr "caos" #: pkg/secret/secret.go:235 #, c-format -msgid "charset=bytes only supports encoding=base64, got encoding=%s for secret %s, defaulting to base64" +msgid "" +"charset=bytes only supports encoding=base64, got encoding=%s for secret %s, " +"defaulting to base64" msgstr "" #. translators: `app check` command @@ -2691,13 +2859,21 @@ msgstr "el comando %v no salió después de %v: stderr=%q" #: pkg/upstream/commandconn/commandconn.go:172 #, c-format -msgid "command %v has exited with %v, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s" -msgstr "el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" +msgid "" +"command %v has exited with %v, please make sure the URL is valid, and Docker " +"18.09 or later is installed on the remote host: stderr=%s" +msgstr "" +"el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida " +"y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" #. translators: `app command` command #: cli/app/cmd.go:27 -msgid "command [service | --local] [[args] [flags] | [flags] -- [args]]" -msgstr "ejecutar [servicio | --local] [[argumento] [opciones] | [opciones] -- [argumento]]" +msgid "" +"command [service | --local] [[args] [flags] | [flags] -- " +"[args]]" +msgstr "" +"ejecutar [servicio | --local] [[argumento] [opciones] " +"| [opciones] -- [argumento]]" #: pkg/upstream/commandconn/commandconn.go:239 #, c-format @@ -2781,12 +2957,15 @@ msgstr "tiempo de conexión agotado para %s" #: pkg/recipe/compose.go:191 #, c-format msgid "considering %s config(s) for label update" -msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas" +msgstr "" +"considerando la(s) configuración(es) %s para la actualización de etiquetas" #: pkg/recipe/compose.go:123 #, c-format msgid "considering %s config(s) for tag update" -msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas (tags)" +msgstr "" +"considerando la(s) configuración(es) %s para la actualización de etiquetas " +"(tags)" #: cli/app/undeploy.go:141 cli/server/prune.go:53 #, c-format @@ -3091,13 +3270,14 @@ msgstr "no solicitar un TTY" #: pkg/ssh/ssh.go:26 msgid "docker: is the daemon running / your user has docker permissions?" -msgstr "docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" +msgstr "" +"docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" -#: cli/app/new.go:382 +#: cli/app/new.go:386 msgid "domain" msgstr "dominio" -#: cli/app/new.go:385 +#: cli/app/new.go:389 msgid "domain name for app" msgstr "nombre de dominio para la aplicación" @@ -3149,7 +3329,8 @@ msgstr "ejecución de prueba: no se creó etiqueta de git (%s)" #: 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" +msgstr "" +"ejecución de prueba: no se sincronizará la etiqueta %s para la receta %s" #: pkg/git/remote.go:15 #, c-format @@ -3187,11 +3368,14 @@ msgstr "habilitar ejecución de comandos pre/post-hook" #: cli/internal/validate.go:82 #, c-format msgid "ensure %s recipe compose.* files include \"version: '3.8'\"" -msgstr "asegúrate de que los archivos compose.* de la receta %s incluyan \"version: '3.8'\"" +msgstr "" +"asegúrate de que los archivos compose.* de la receta %s incluyan \"version: " +"'3.8'\"" #: pkg/lint/recipe.go:69 msgid "ensure 'version: \"3.8\"' in compose configs" -msgstr "asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" +msgstr "" +"asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" #: pkg/lint/recipe.go:163 msgid "ensure \"image: ...\" set on all services" @@ -3208,8 +3392,12 @@ msgid "ensuring env version %s" msgstr "asegurando la versión del entorno (env) %s" #: cli/recipe/upgrade.go:285 -msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled" -msgstr "presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta etiqueta; modo vim habilitado" +msgid "" +"enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode " +"is enabled" +msgstr "" +"presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta " +"etiqueta; modo vim habilitado" #. translators: `app env` command group #: cli/app/env.go:311 @@ -3322,12 +3510,14 @@ msgstr "🛑 error al hacer commit: %s" #: cli/app/move.go:167 #, c-format msgid "failed to copy %s from %s to local machine: output:%s err:%s" -msgstr "🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" +msgstr "" +"🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" #: cli/app/move.go:173 #, c-format msgid "failed to copy %s from local machine to %s: output:%s err:%s" -msgstr "🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" +msgstr "" +"🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" #: pkg/upstream/stack/stack.go:535 #, c-format @@ -3451,7 +3641,7 @@ msgstr "🛑 No se pudo eliminar algunos recursos del stock: %s" msgid "failed to resize tty, using default size" msgstr "🛑 No se pudo redimensionar el TTY; se usará el tamaño predeterminado" -#: cli/app/new.go:134 +#: cli/app/new.go:138 #, c-format msgid "failed to retrieve latest commit for %s: %s" msgstr "🛑 No se pudo obtener el último commit de %s: %s" @@ -3459,7 +3649,8 @@ msgstr "🛑 No se pudo obtener el último commit de %s: %s" #: pkg/upstream/stack/stack.go:472 #, c-format msgid "failed to retrieve registry auth for image %s: %s" -msgstr "🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" +msgstr "" +"🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" #: pkg/git/branch.go:68 #, c-format @@ -3600,7 +3791,9 @@ msgstr "catálogo de recetas generado: %s" #: cli/app/secret.go:145 #, c-format msgid "generated secrets %s shown again, please take note of them %s" -msgstr "los secretos generados %s; se muestran nuevamente, por favor toma nota de ellos %s" +msgstr "" +"los secretos generados %s; se muestran nuevamente, por favor toma nota de " +"ellos %s" #: pkg/app/compose.go:63 #, c-format @@ -3759,7 +3952,7 @@ 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:416 -#: cli/app/labels.go:145 cli/app/list.go:337 cli/app/new.go:409 +#: cli/app/labels.go:145 cli/app/list.go:337 cli/app/new.go:413 #: cli/app/ps.go:215 cli/app/restart.go:165 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 @@ -3866,7 +4059,9 @@ msgstr "incrementar la parte de parche de la versión" #: pkg/git/init.go:50 #, c-format msgid "init committed all files for new git repo in %s" -msgstr "inicializado y comiteados todos los archivos para el nuevo repositorio git en %s" +msgstr "" +"inicializado y comiteados todos los archivos para el nuevo repositorio git " +"en %s" #: pkg/git/init.go:24 #, c-format @@ -3912,22 +4107,31 @@ msgstr "fuente de enlace inválida, la fuente no puede estar vacía" #: pkg/upstream/convert/service.go:813 #, c-format msgid "invalid credential spec: cannot specify both %s and %s" -msgstr "especificación de credencial inválida: no se pueden especificar ambos %s y %s" +msgstr "" +"especificación de credencial inválida: no se pueden especificar ambos %s y %s" #: pkg/upstream/convert/service.go:815 #, c-format msgid "invalid credential spec: cannot specify both %s, and %s" -msgstr "especificación de credencial inválida: no se pueden especificar tanto %s, como %s" +msgstr "" +"especificación de credencial inválida: no se pueden especificar tanto %s, " +"como %s" #: pkg/upstream/convert/service.go:834 #, c-format -msgid "invalid credential spec: spec specifies config %v, but no such config can be found" -msgstr "especificación de credencial inválida: la especificación indica la configuración %v, pero no se puede encontrar tal configuración" +msgid "" +"invalid credential spec: spec specifies config %v, but no such config can be " +"found" +msgstr "" +"especificación de credencial inválida: la especificación indica la " +"configuración %v, pero no se puede encontrar tal configuración" #: pkg/upstream/container/hijack.go:100 #, c-format msgid "invalid detach escape keys, using default: %s" -msgstr "teclas de escape de separación inválidas, utilizando el valor predeterminado: %s" +msgstr "" +"teclas de escape de separación inválidas, utilizando el valor " +"predeterminado: %s" #: pkg/lint/recipe.go:504 msgid "invalid lightweight tag detected" @@ -4114,7 +4318,8 @@ msgstr "maquina" #: cli/recipe/release.go:97 #, c-format 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?" +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:631 @@ -4215,13 +4420,23 @@ msgstr "se necesitan 3 o 4 argumentos" #: pkg/upstream/stack/stack.go:352 #, c-format -msgid "network %q is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed, which you can do by running this on the server: docker network create -d overlay proxy" -msgstr "La red %q está declarada como externa, pero no se pudo encontrar. Debes crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo en el servidor mismo con: docker network create -d overlay proxy" +msgid "" +"network %q is declared as external, but could not be found. You need to " +"create a swarm-scoped network before the stack is deployed, which you can do " +"by running this on the server: docker network create -d overlay proxy" +msgstr "" +"La red %q está declarada como externa, pero no se pudo encontrar. Debes " +"crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo " +"en el servidor mismo con: docker network create -d overlay proxy" #: pkg/upstream/stack/stack.go:356 #, c-format -msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" -msgstr "la red %q se declara como externa, pero no está en el alcance correcto: %q en lugar de \"swarm\"" +msgid "" +"network %q is declared as external, but it is not in the right scope: %q " +"instead of \"swarm\"" +msgstr "" +"la red %q se declara como externa, pero no está en el alcance correcto: %q " +"en lugar de \"swarm\"" #: cli/app/undeploy.go:148 cli/server/prune.go:60 #, c-format @@ -4261,7 +4476,8 @@ msgstr "secretos nuevos: %v" #: pkg/git/read.go:88 #, c-format msgid "no %s exists, not reading any global gitignore config" -msgstr "no existe %s, no se está leyendo ninguna configuración global de gitignore" +msgstr "" +"no existe %s, no se está leyendo ninguna configuración global de gitignore" #: pkg/git/read.go:130 #, c-format @@ -4325,13 +4541,15 @@ msgstr "no hay configuraciones para eliminar" msgid "no containers matching the %v filter found?" msgstr "no se encontraron contenedores que coincidan con el filtro %v?" -#: cli/app/new.go:302 cli/internal/validate.go:129 +#: cli/app/new.go:306 cli/internal/validate.go:129 msgid "no domain provided" msgstr "no se proporcionó dominio" #: pkg/recipe/compose.go:248 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" +msgstr "" +"no se encontró ninguna etiqueta existente, la inserción automágica no es " +"compatible aún" #: cli/recipe/release.go:134 #, c-format @@ -4340,8 +4558,12 @@ msgstr "no se encontraron etiquetas de git para %s" #: cli/recipe/upgrade.go:182 #, c-format -msgid "no new versions available for %s, assuming %s is the latest (use -a/--all-tags to see all anyway)" -msgstr "no hay nuevas versiones disponibles para %s; asumiendo que %s es la más reciente (usa -a/--all-tags para ver todas)" +msgid "" +"no new versions available for %s, assuming %s is the latest (use -a/--all-" +"tags to see all anyway)" +msgstr "" +"no hay nuevas versiones disponibles para %s; asumiendo que %s es la más " +"reciente (usa -a/--all-tags para ver todas)" #: cli/internal/validate.go:64 #, c-format @@ -4383,7 +4605,7 @@ msgstr "no hay secretos para eliminar" msgid "no secrets to remove?" msgstr "¿No hay secretos para eliminar?" -#: cli/app/new.go:351 cli/internal/validate.go:167 +#: cli/app/new.go:355 cli/internal/validate.go:167 msgid "no server provided" msgstr "no se proporcionó servidor" @@ -4464,7 +4686,9 @@ msgstr "no hay suficientes argumentos: %s" #: pkg/secret/secret.go:145 msgid "not generating app secrets, none enabled in recipe config" -msgstr "no se están generando secretos de la aplicación; ninguno habilitado en la configuración de la receta" +msgstr "" +"no se están generando secretos de la aplicación; ninguno habilitado en la " +"configuración de la receta" #: cli/internal/command.go:93 msgid "not requesting a remote TTY" @@ -4477,8 +4701,12 @@ msgstr "no se actualizará %s; se omite, como fue solicitado" #: cli/recipe/upgrade.go:244 #, c-format -msgid "not upgrading from %s to %s for %s, because the upgrade type is more serious than what user wants" -msgstr "no se actualizará %s a %s para %s, porque el tipo de actualización es más serio de lo que el usuario desea" +msgid "" +"not upgrading from %s to %s for %s, because the upgrade type is more serious " +"than what user wants" +msgstr "" +"no se actualizará %s a %s para %s, porque el tipo de actualización es más " +"serio de lo que el usuario desea" #: pkg/upstream/stack/remove.go:73 #, c-format @@ -4525,7 +4753,7 @@ msgstr "solo cola de stderr" #. with no spaces in between #. translators: `abra server prune` aliases. use a comma separated list of #. aliases with no spaces in between -#: cli/app/backup.go:295 cli/app/new.go:391 cli/app/ps.go:29 +#: cli/app/backup.go:295 cli/app/new.go:395 cli/app/ps.go:29 #: cli/app/secret.go:561 cli/app/secret.go:585 cli/app/secret.go:625 #: cli/app/undeploy.go:169 cli/catalogue/catalogue.go:294 #: cli/recipe/list.go:112 cli/server/prune.go:18 @@ -4567,7 +4795,7 @@ msgstr "parsing fallido de la versión de despliegue: %s" msgid "parsing recipe version failed: %s" msgstr "parsing fallido de la versión de la receta: %s" -#: cli/app/new.go:390 cli/app/secret.go:560 cli/app/secret.go:584 +#: cli/app/new.go:394 cli/app/secret.go:560 cli/app/secret.go:584 #: cli/app/secret.go:624 msgid "pass" msgstr "" @@ -4609,7 +4837,9 @@ msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s):" #: cli/app/rollback.go:272 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" -msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: %s):" +msgstr "" +"por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: " +"%s):" #: cli/app/upgrade.go:312 #, c-format @@ -5061,7 +5291,8 @@ msgstr "versiones recuperadas del repositorio local de recetas" #: pkg/upstream/stack/stack.go:468 #, c-format msgid "retrieving docker auth token: failed create docker cli: %s" -msgstr "recuperando token de autenticación de Docker: error al crear docker cli: %s" +msgstr "" +"recuperando token de autenticación de Docker: error al crear docker cli: %s" #: pkg/recipe/recipe.go:659 msgid "retrieving recipes" @@ -5122,7 +5353,9 @@ msgstr "regla" #. translators: `app run` command #: cli/app/run.go:27 msgid "run [[args] [flags] | [flags] -- [args]]" -msgstr "lanzar [[argumento] [opciones] | [opciones] -- [argumento]]" +msgstr "" +"lanzar [[argumento] [opciones] | " +"[opciones] -- [argumento]]" #: cli/app/run.go:120 msgid "run command as user" @@ -5175,7 +5408,7 @@ msgstr "ejecutando el comando posterior '%s %s' en el contenedor %s" #. with no spaces in between #: cli/app/backup.go:198 cli/app/backup.go:263 cli/app/backup.go:287 #: cli/app/env.go:333 cli/app/list.go:327 cli/app/logs.go:101 -#: cli/app/new.go:368 cli/app/restore.go:114 cli/app/secret.go:535 +#: cli/app/new.go:372 cli/app/restore.go:114 cli/app/secret.go:535 #: cli/catalogue/catalogue.go:27 cli/catalogue/catalogue.go:310 #: cli/recipe/fetch.go:130 cli/server/server.go:12 msgid "s" @@ -5212,7 +5445,9 @@ msgstr "secreto [comando] [argumento] [opciones]" #: cli/app/secret.go:295 msgid "secret data not provided on command-line or stdin, prompting" -msgstr "datos del secreto no proporcionados en la línea de comandos o stdin, solicitando" +msgstr "" +"datos del secreto no proporcionados en la línea de comandos o stdin, " +"solicitando" #: pkg/upstream/convert/service.go:72 #, c-format @@ -5234,11 +5469,11 @@ msgstr "secreto no insertado (#generate=false): %s" msgid "secret: %s removed" msgstr "secreto: %s eliminado" -#: cli/app/backup.go:302 cli/app/new.go:398 +#: cli/app/backup.go:302 cli/app/new.go:402 msgid "secrets" msgstr "secretos" -#: cli/app/new.go:238 +#: cli/app/new.go:242 #, c-format msgid "secrets are %s shown again, please save them %s" msgstr "los secretos se muestran %s nuevamente, por favor guárdalos %s" @@ -5246,23 +5481,25 @@ msgstr "los secretos se muestran %s nuevamente, por favor guárdalos %s" #: cli/app/deploy.go:306 #, c-format msgid "selected latest recipe version: %s (from %d available versions)" -msgstr "versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" +msgstr "" +"versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" -#: cli/app/new.go:121 +#: cli/app/new.go:125 #, c-format msgid "selected recipe version: %s (from %d available versions)" msgstr "versión de receta seleccionada: %s (de %d versiones disponibles)" #. translators: `abra server` command for autocompletion #: cli/app/env.go:332 cli/app/env.go:339 cli/app/list.go:326 -#: cli/app/list.go:341 cli/app/new.go:367 cli/app/new.go:374 cli/run.go:101 +#: cli/app/list.go:341 cli/app/new.go:371 cli/app/new.go:378 cli/run.go:101 msgid "server" msgstr "servidor" #: pkg/app/app.go:301 #, c-format msgid "server %s doesn't exist? Run \"abra server ls\" to check" -msgstr "el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" +msgstr "" +"el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" #. translators: `server` command group #: cli/server/server.go:17 @@ -5290,7 +5527,8 @@ msgstr "falta contexto del servidor, la creación de contexto falló: %s" #: pkg/client/client.go:58 #, c-format msgid "server missing context, run \"abra server add %s\"?" -msgstr "falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" +msgstr "" +"falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" #: pkg/client/client.go:47 #, c-format @@ -5319,13 +5557,18 @@ msgstr "serverAdd: cleanUp: no se pueden listar los archivos en %s: %s" #: cli/recipe/upgrade.go:227 #, c-format -msgid "service %s is at version %s, but pinned to %s, please correct your compose.yml file manually!" -msgstr "el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige manualmente tu archivo compose.yml!" +msgid "" +"service %s is at version %s, but pinned to %s, please correct your compose." +"yml file manually!" +msgstr "" +"el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige " +"manualmente tu archivo compose.yml!" #: cli/recipe/upgrade.go:223 #, c-format msgid "service %s, image %s pinned to %s, no compatible upgrade found" -msgstr "servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" +msgstr "" +"servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" #: cli/app/restore.go:113 msgid "services" @@ -5371,7 +5614,8 @@ msgstr "gravedad" #: cli/app/deploy.go:456 cli/app/rollback.go:379 cli/app/upgrade.go:496 msgid "show all configs & images, including unchanged ones" -msgstr "mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" +msgstr "" +"mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" #: cli/app/backup.go:273 msgid "show all paths" @@ -5401,7 +5645,7 @@ msgstr "mostrar-sin-cambios" msgid "since" msgstr "desde" -#: cli/app/new.go:336 +#: cli/app/new.go:340 #, c-format msgid "single server detected, choosing %s automatically" msgstr "se ha detectado un único servidor, eligiendo %s automáticamente" @@ -5472,7 +5716,8 @@ msgstr "omitiendo la etiqueta %s: configuración de compose inválida: %s" #: pkg/recipe/git.go:432 #, c-format msgid "skipping tag %s: invalid image reference in service %s: %s" -msgstr "omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" +msgstr "" +"omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" #: pkg/app/app.go:697 #, c-format @@ -5501,7 +5746,7 @@ msgstr "especificar archivo de secreto" msgid "specify secret value" msgstr "especificar valor de secreto" -#: cli/app/new.go:370 +#: cli/app/new.go:374 msgid "specify server for new app" msgstr "especificar servidor para la nueva aplicación" @@ -5536,11 +5781,17 @@ msgstr "" #: 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" +msgstr "" +"ssh-agent no encontrado. consulta \"abra receta publicar --ayuda\" y vuelve " +"a intentarlo" #: cli/catalogue/catalogue.go:98 -msgid "ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue generate --help\"" -msgstr "ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo regenerar --ayuda\"" +msgid "" +"ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue " +"generate --help\"" +msgstr "" +"ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo " +"regenerar --ayuda\"" #: cli/app/list.go:295 cli/recipe/list.go:45 msgid "status" @@ -5559,7 +5810,7 @@ msgstr "" msgid "store generated secrets in a local pass store" msgstr "almacenar secretos generados en un almacén de contraseñas local" -#: cli/app/new.go:393 +#: cli/app/new.go:397 msgid "store secrets in a local pass store" msgstr "almacenar secretos en un almacén de contraseñas local" @@ -5710,7 +5961,7 @@ msgstr "recortar" msgid "trim input" msgstr "recortar entrada" -#: cli/app/new.go:263 pkg/app/app.go:141 +#: cli/app/new.go:267 pkg/app/app.go:141 #, c-format msgid "trimming %s to %s to avoid runtime limits" msgstr "recortando %s a %s para evitar límites de tiempo de ejecución" @@ -5806,12 +6057,16 @@ msgstr "no se pudo determinar el tipo de receta a partir de %s, env: %v" #: cli/app/env.go:106 #, c-format msgid "unable to determine server of app %s, please pass --server/-s" -msgstr "no se pudo determinar el servidor de la aplicación %s; agrega al comando --server/-s" +msgstr "" +"no se pudo determinar el servidor de la aplicación %s; agrega al comando --" +"server/-s" #: cli/recipe/upgrade.go:252 #, c-format msgid "unable to determine versioning semantics of %s, listing all tags" -msgstr "no se pudieron determinar las reglas de versionado de %s; listando todas las etiquetas" +msgstr "" +"no se pudieron determinar las reglas de versionado de %s; listando todas las " +"etiquetas" #: cli/recipe/fetch.go:71 #, c-format @@ -5886,7 +6141,8 @@ msgstr "no se pudo abrir el work tree de %s: %s" #: cli/recipe/upgrade.go:159 #, c-format msgid "unable to parse %s, error was: %s, skipping upgrade for %s" -msgstr "no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" +msgstr "" +"no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" #: pkg/recipe/compose.go:153 #, c-format @@ -5931,7 +6187,9 @@ msgstr "no se pudieron leer los remotos en %s: %s" #: cli/recipe/upgrade.go:153 #, c-format msgid "unable to read tag for image %s, is it missing? skipping upgrade for %s" -msgstr "no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo actualización para %s" +msgstr "" +"no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo " +"actualización para %s" #: cli/app/move.go:210 #, c-format @@ -5946,7 +6204,8 @@ msgstr "no se pudo eliminar el remoto predeterminado en %s: %s" #: cli/app/volume.go:158 #, c-format msgid "unable to remove volume: no volume with name '%s'?" -msgstr "no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" +msgstr "" +"no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" #: cli/app/secret.go:135 cli/app/secret.go:515 cli/recipe/list.go:83 #: cli/recipe/version.go:113 cli/server/list.go:88 @@ -6229,8 +6488,10 @@ msgstr "versión %s guardada en %s.env" #: cli/app/deploy.go:126 #, c-format -msgid "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" -msgstr "la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" +msgid "" +"version '%s' appears to be a chaos commit, but --chaos/-C was not provided" +msgstr "" +"la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" #: pkg/recipe/recipe.go:200 #, c-format @@ -6278,7 +6539,8 @@ msgstr "versión: tomando la versión desde el archivo .env: %s" #: cli/app/deploy.go:378 #, c-format msgid "version: taking version from cli arg: %s" -msgstr "versión: tomando la versión desde el argumento de la línea de comandos: %s" +msgstr "" +"versión: tomando la versión desde el argumento de la línea de comandos: %s" #. translators: `recipe versions` command #: cli/recipe/version.go:23 @@ -6406,7 +6668,7 @@ msgstr "el directorio de trabajo no está limpio en %s, abortando" msgid "writer: %v, " msgstr "" -#: cli/app/deploy.go:288 cli/app/new.go:251 cli/app/rollback.go:256 +#: cli/app/deploy.go:288 cli/app/new.go:255 cli/app/rollback.go:256 #: cli/app/undeploy.go:120 cli/app/upgrade.go:301 #, c-format msgid "writing recipe version failed: %s" @@ -6465,21 +6727,31 @@ msgstr "{nombre: %s, " #, c-format #~ msgid "latest git tag (%s) and synced label (%s) are the same?" -#~ msgstr "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las mismas?" +#~ msgstr "" +#~ "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las " +#~ "mismas?" #~ msgid "no -p/--publish passed, not publishing" #~ msgstr "no pasó -p/--publish, no se publicará" #, c-format -#~ msgid "no tag specified and no previous tag available for %s, assuming initial release" -#~ msgstr "no se especificó etiqueta y no hay etiqueta previa disponible para %s; asumiendo lanzamiento inicial" +#~ msgid "" +#~ "no tag specified and no previous tag available for %s, assuming initial " +#~ "release" +#~ msgstr "" +#~ "no se especificó etiqueta y no hay etiqueta previa disponible para %s; " +#~ "asumiendo lanzamiento inicial" #, c-format #~ msgid "please fix your synced label for %s and re-run this command" -#~ msgstr "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar este comando" +#~ msgstr "" +#~ "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar " +#~ "este comando" #~ msgid "previous git tags detected, assuming new semver release" -#~ msgstr "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento semver" +#~ msgstr "" +#~ "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento " +#~ "semver" #~ msgid "publish new release?" #~ msgstr "¿publicar nueva versión?" @@ -6488,8 +6760,12 @@ msgstr "{nombre: %s, " #~ msgstr "sincronizar [version] [flags]" #, c-format -#~ msgid "unable to read version for %s from synced label. Did you try running \"abra recipe sync %s\" already?" -#~ msgstr "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya ejecutaste \"abra receta sincronizar %s\"?" +#~ msgid "" +#~ "unable to read version for %s from synced label. Did you try running " +#~ "\"abra recipe sync %s\" already?" +#~ msgstr "" +#~ "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya " +#~ "ejecutaste \"abra receta sincronizar %s\"?" #, c-format #~ msgid "use %s as the new version?" From e1b10f602021ec4ade40115eda8a3cb4de6f11d1 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 9 Jun 2026 14:36:32 +0000 Subject: [PATCH 29/55] chore: update translation files Updated by "Update PO files to match POT (msgmerge)" add-on in Weblate. Translation: Co-op Cloud/abra Translate-URL: https://translate.coopcloud.tech/projects/co-op-cloud/abra/ --- pkg/i18n/locales/es.po | 712 +++++++++++++---------------------------- 1 file changed, 218 insertions(+), 494 deletions(-) diff --git a/pkg/i18n/locales/es.po b/pkg/i18n/locales/es.po index cc70dac0..501b37f2 100644 --- a/pkg/i18n/locales/es.po +++ b/pkg/i18n/locales/es.po @@ -5,8 +5,7 @@ msgstr "" "POT-Creation-Date: 2026-06-09 16:29+0200\n" "PO-Revision-Date: 2026-02-28 13:52+0000\n" "Last-Translator: chasqui \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -101,8 +100,7 @@ msgstr "" " abra aplicacion secreto insertar 1312.net my_secret v1 secreto.txt -f\n" "\n" " # insertar secreto desde stdin\n" -" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net " -"my_secret v1" +" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net my_secret v1" #: cli/app/list.go:54 msgid "" @@ -153,8 +151,7 @@ msgstr "" " 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" +" 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" @@ -167,8 +164,7 @@ msgid "" " # pull lost app .env file\n" " abra app env pull my.gitea.net --server 1312.net" msgstr "" -" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones " -"locales\n" +" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones locales\n" " abra aplicacion entorno obtener 1312.net --force\n" "\n" " # Extraer el archivo .env perdido de la aplicación\n" @@ -394,12 +390,8 @@ msgstr "%s se ha escalado a 1" #: pkg/catalogue/catalogue.go:40 #, c-format -msgid "" -"%s has locally unstaged changes? please commit/remove your changes before " -"proceeding" -msgstr "" -"¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus " -"cambios antes de continuar" +msgid "%s has locally unstaged changes? please commit/remove your changes before proceeding" +msgstr "¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus cambios antes de continuar" #: cli/internal/recipe.go:114 #, c-format @@ -419,9 +411,7 @@ msgstr "%s no tiene secretos para generar, omitiendo..." #: pkg/recipe/compose.go:107 #, c-format msgid "%s has no version label? try running \"abra recipe sync %s\" first?" -msgstr "" -"¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta " -"sincronizar %s\" primero?" +msgstr "¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta sincronizar %s\" primero?" #: pkg/secret/pass.go:29 #, c-format @@ -522,18 +512,13 @@ msgstr "%s eliminado del almacén de contraseñas" #: cli/app/new.go:224 #, c-format -msgid "" -"%s requires secret generation before deploy, run \"abra app secret generate " -"%s --all\"" -msgstr "" -"%s requiere generación de secretos antes del despliegue, ejecuta \"abra " -"aplicacion secreto generar %s --all\"" +msgid "%s requires secret generation before deploy, run \"abra app secret generate %s --all\"" +msgstr "%s requiere generación de secretos antes del despliegue, ejecuta \"abra aplicacion secreto generar %s --all\"" #: cli/app/new.go:228 #, c-format msgid "%s requires secret insertion before deploy (#generate=false)" -msgstr "" -"%s requiere inserción de secretos antes del despliegue (#generate=false)" +msgstr "%s requiere inserción de secretos antes del despliegue (#generate=false)" #: cli/app/new.go:155 #, c-format @@ -681,12 +666,8 @@ msgid "'%s' is not a known version for %s" msgstr "'%s' no es una versión conocida para %s" #: cli/app/volume.go:175 -msgid "" -"'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode " -"is enabled" -msgstr "" -"'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, " -"el modo vim está activado" +msgid "'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode is enabled" +msgstr "'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, el modo vim está activado" #: cli/app/cmd.go:125 #, c-format @@ -710,35 +691,27 @@ msgstr "Se utiliza una plantilla de receta gestionada por la comunidad." msgid "" "A recipe is a blueprint for an app.\n" "\n" -"It is a bunch of config files which describe how to deploy and maintain an " -"app.\n" +"It is a bunch of config files which describe how to deploy and maintain an app.\n" "Recipes are maintained by the Co-op Cloud community and you can use Abra to\n" "read them, deploy them and create apps for you.\n" "\n" -"Anyone who uses a recipe can become a maintainer. Maintainers typically " -"make\n" -"sure the recipe is in good working order and the config upgraded in a " -"timely\n" +"Anyone who uses a recipe can become a maintainer. Maintainers typically make\n" +"sure the recipe is in good working order and the config upgraded in a timely\n" "manner." msgstr "" "Una receta son las instrucciones para crear una aplicación.\n" "\n" -"Es un conjunto de archivos de configuración, que describen cómo desplegar y " -"mantener una aplicación.\n" -"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra " -"para\n" +"Es un conjunto de archivos de configuración, que describen cómo desplegar y mantener una aplicación.\n" +"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra para\n" "leerlas, desplegarlas y crear aplicaciones para ti.\n" "\n" -"Cualquiera que use una receta puede convertirse en mantenedor. Los " -"mantenedores típicamente se\n" -"aseguran de que la receta funcione correctamente y de que la configuración " -"se actualice de manera oportuna." +"Cualquiera que use una receta puede convertirse en mantenedor. Los mantenedores típicamente se\n" +"aseguran de que la receta funcione correctamente y de que la configuración se actualice de manera oportuna." #: cli/app/remove.go:57 #, c-format msgid "ALERTA ALERTA: deleting %s data and config (local/remote)" -msgstr "" -"ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" +msgstr "ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" #. translators: Short description for `server add` command #: cli/server/add.go:30 @@ -750,8 +723,7 @@ msgid "" "Add a new server to your configuration so that it can be managed by Abra.\n" "\n" "Abra relies on the standard SSH command-line and ~/.ssh/config for client\n" -"connection details. You must configure an entry per-host in your ~/.ssh/" -"config\n" +"connection details. You must configure an entry per-host in your ~/.ssh/config\n" "for each server:\n" "\n" " Host 1312.net 1312\n" @@ -760,19 +732,15 @@ msgid "" " Port 12345\n" " IdentityFile ~/.ssh/antifa@somewhere\n" "\n" -"If \"--local\" is passed, then Abra assumes that the current local server " -"is\n" -"intended as the target server. This is useful when you want to have your " -"entire\n" +"If \"--local\" is passed, then Abra assumes that the current local server is\n" +"intended as the target server. This is useful when you want to have your entire\n" "Co-op Cloud config located on the server itself, and not on your local\n" "developer machine. The domain is then set to \"default\"." msgstr "" -"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado " -"por Abra.\n" +"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado por Abra.\n" "\n" "Para agregar servidor Remoto:\n" -"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de " -"conexión al servidor. \n" +"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de conexión al servidor. \n" "Debes configurar una entrada en ~/.ssh/config para cada servidor:\n" "\n" " Host 1312.net 1312\n" @@ -782,15 +750,13 @@ msgstr "" " IdentityFile ~/.ssh/antifa@1312.net\n" "\n" "Para agregar servidor local;\n" -"Si agregas \"--local\", Abra asumirá que la computadora local actual es el " -"servidor que quieres agregar. \n" +"Si agregas \"--local\", Abra asumirá que la computadora local actual es el servidor que quieres agregar. \n" "Esto es útil cuando quieres tener Abra en el mismo servidor. \n" "El dominio se establece entonces como \"default\"." #: cli/app/labels.go:33 msgid "Both local recipe and live deployment labels are shown." -msgstr "" -"Se muestran tanto la receta local como las etiquetas del despliegue en vivo." +msgstr "Se muestran tanto la receta local como las etiquetas del despliegue en vivo." #: 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:414 @@ -854,16 +820,12 @@ msgstr "💕 Clona la 📜 receta(s) en local" msgid "" "Compare env vars in both the app \".env\" and recipe \".env.sample\" file.\n" "\n" -"The goal is to ensure that recipe \".env.sample\" env vars are defined in " -"your\n" -"app \".env\" file. Only env var definitions in the \".env.sample\" which " -"are\n" -"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not " -"include\n" +"The goal is to ensure that recipe \".env.sample\" env vars are defined in your\n" +"app \".env\" file. Only env var definitions in the \".env.sample\" which are\n" +"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not include\n" "these env vars, then \"check\" will complain.\n" "\n" -"Recipe maintainers may or may not provide defaults for env vars within " -"their\n" +"Recipe maintainers may or may not provide defaults for env vars within their\n" "recipes regardless of commenting or not (e.g. through the use of\n" "${FOO:} syntax). \"check\" does not confirm or deny this for you." msgstr "" @@ -906,31 +868,24 @@ msgstr "Crea una nueva 📸 instantánea (respaldo)" msgid "" "Create a new version of a recipe.\n" "\n" -"These versions are then published on the Co-op Cloud recipe catalogue. " -"These\n" +"These versions are then published on the Co-op Cloud recipe catalogue. These\n" "versions take the following form:\n" "\n" " a.b.c+x.y.z\n" "\n" -"Where the \"a.b.c\" part is a semantic version determined by the maintainer. " -"The\n" -"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main " -"container\n" +"Where the \"a.b.c\" part is a semantic version determined by the maintainer. The\n" +"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main container\n" "which contains the software to be used, by naming convention).\n" "\n" "We maintain a semantic versioning scheme (\"a.b.c\") alongside the recipe\n" -"versioning scheme (\"x.y.z\") in order to maximise the chances that the " -"nature of\n" +"versioning scheme (\"x.y.z\") in order to maximise the chances that the nature of\n" "recipe updates are properly communicated. I.e. developers of an app might\n" -"publish a minor version but that might lead to changes in the recipe which " -"are\n" +"publish a minor version but that might lead to changes in the recipe which are\n" "major and therefore require intervention while doing the upgrade work.\n" "\n" "This command will publish your new release to git.coopcloud.tech. This\n" -"requires that you have permission to git push to these repositories and " -"have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to " -"add\n" +"requires that you have permission to git push to these repositories and have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -946,20 +901,14 @@ msgstr "" "Donde \"a.b.c\" es la versión semántica que decide el mantenedor. La parte \n" "\"x.y.z\" es la versión semántica oficial de la imagen de la aplicación .\n" "\n" -"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta " -"(\"x.y.z\") \n" -"para que sea más claro qué tipo de cambios trae cada actualización. Por " -"ejemplo, \n" -"los desarrolladores de una aplicación pueden publicar una versión menor, " -"pero \n" -"la receta podría necesitar cambios importantes que requieran atención al " -"actualizar.\n" +"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta (\"x.y.z\") \n" +"para que sea más claro qué tipo de cambios trae cada actualización. Por ejemplo, \n" +"los desarrolladores de una aplicación pueden publicar una versión menor, pero \n" +"la receta podría necesitar cambios importantes que requieran atención al actualizar.\n" "\n" "Este comando publicará tu nuevo release en git.coopcloud.tech. Necesitas \n" -"permiso para hacer git push en esos repositorios y tener tus claves SSH " -"configuradas \n" -"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu " -"contraseña antes \n" +"permiso para hacer git push en esos repositorios y tener tus claves SSH configuradas \n" +"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu contraseña antes \n" "de ejecutar:\n" "\n" " eval `ssh-agent`\n" @@ -976,27 +925,21 @@ msgid "" "This new app configuration is stored in your $ABRA_DIR directory under the\n" "appropriate server.\n" "\n" -"This command does not deploy your app for you. You will need to run \"abra " -"app\n" +"This command does not deploy your app for you. You will need to run \"abra app\n" "deploy \" to do so.\n" "\n" -"You can see what recipes are available (i.e. values for the [recipe] " -"argument)\n" +"You can see what recipes are available (i.e. values for the [recipe] argument)\n" "by running \"abra recipe ls\".\n" "\n" "Recipe commit hashes are supported values for \"[version]\".\n" "\n" -"Passing the \"--secrets/-S\" flag will automatically generate secrets for " -"your\n" +"Passing the \"--secrets/-S\" flag will automatically generate secrets for your\n" "app and store them encrypted at rest on the chosen target server. These\n" -"generated secrets are only visible at generation time, so please take care " -"to\n" +"generated secrets are only visible at generation time, so please take care to\n" "store them somewhere safe.\n" "\n" -"You can use the \"--pass/-P\" to store these generated passwords locally in " -"a\n" -"pass store (see passwordstore.org for more). The pass command must be " -"available\n" +"You can use the \"--pass/-P\" to store these generated passwords locally in a\n" +"pass store (see passwordstore.org for more). The pass command must be available\n" "on your $PATH." msgstr "" "Crea una nueva aplicación a partir de una receta.\n" @@ -1006,15 +949,13 @@ msgstr "" "Ojo: Este comando no despliega la aplicación.\n" "\n" "Si pasas la opción \"--secrets/-S\" se generarán automáticamente secretos \n" -"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos " -"secretos \n" +"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos secretos \n" "generados solo se muestran al momento de crearlos, así que guárdalos \n" "en un lugar seguro.\n" "\n" "Los hashes de commit de la receta son valores válidos para \"[version]\".\n" "\n" -"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas " -"localmente \n" +"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas localmente \n" "en un almacén pass (ver passwordstore.org). El comando pass debe estar \n" "disponible en tu $PATH." @@ -1048,11 +989,9 @@ msgstr "📤 Despliega una 🚀 aplicación" msgid "" "Deploy an app.\n" "\n" -"This command supports chaos operations. Use \"--chaos/-C\" to deploy your " -"recipe\n" +"This command supports chaos operations. Use \"--chaos/-C\" to deploy your recipe\n" "checkout as-is. Recipe commit hashes are also supported as values for\n" -"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos " -"operations." +"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos operations." msgstr "" "Despliega una aplicación.\n" "\n" @@ -1075,8 +1014,7 @@ msgstr "⬇️ Descarga una 📸 instantánea" msgid "" "Downloads a backup.tar.gz to the current working directory.\n" "\n" -"\"--volumes/-v\" includes data contained in volumes alongide paths specified " -"in\n" +"\"--volumes/-v\" includes data contained in volumes alongide paths specified in\n" "\"backupbot.backup.path\" labels." msgstr "" "Descarga un backup.tar.gz al directorio de trabajo actual.\n" @@ -1120,28 +1058,21 @@ msgstr "NOMBRE GENERADO" msgid "" "Generate a new copy of the recipe catalogue.\n" "\n" -"N.B. this command **will** wipe local unstaged changes from your local " -"recipes\n" -"if present. \"--chaos/-C\" on this command refers to the catalogue " -"repository\n" -"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose " -"your\n" +"N.B. this command **will** wipe local unstaged changes from your local recipes\n" +"if present. \"--chaos/-C\" on this command refers to the catalogue repository\n" +"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose your\n" "changes.\n" "\n" "It is possible to generate new metadata for a single recipe by passing\n" "[recipe]. The existing local catalogue will be updated, not overwritten.\n" "\n" -"It is quite easy to get rate limited by Docker Hub when running this " -"command.\n" -"If you have a Hub account you can \"docker login\" and Abra will " -"automatically\n" +"It is quite easy to get rate limited by Docker Hub when running this command.\n" +"If you have a Hub account you can \"docker login\" and Abra will automatically\n" "use those details.\n" "\n" "Publish your new release to git.coopcloud.tech with \"--publish/-p\". This\n" -"requires that you have permission to git push to these repositories and " -"have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to " -"add\n" +"requires that you have permission to git push to these repositories and have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -1179,8 +1110,7 @@ msgid "" msgstr "" "Genera un informe de todas las aplicaciones gestionadas.\n" "\n" -"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre " -"el estado de despliegue." +"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre el estado de despliegue." #: cli/app/new.go:321 msgid "Generate app secrets?" @@ -1209,8 +1139,7 @@ msgstr "📋 Muestra el catálogo de 📜 recetas" #: pkg/recipe/git.go:459 #, c-format msgid "GetRecipeVersions encountered error for %s: %s (collected %d versions)" -msgstr "" -"GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" +msgstr "GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" #: cli/recipe/new.go:125 msgid "Git (user) name to do commits with" @@ -1360,22 +1289,17 @@ msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas" msgid "" "Move an app to a differnt server.\n" "\n" -"This command will migrate an app config and copy secrets and volumes from " -"the\n" -"old server to the new one. The app MUST be deployed on the old server " -"before\n" +"This command will migrate an app config and copy secrets and volumes from the\n" +"old server to the new one. The app MUST be deployed on the old server before\n" "doing the move. The app will be undeployed from the current server but not\n" "deployed on the new server.\n" "\n" -"The \"tar\" command is required on both the old and new server as well as " -"\"sudo\"\n" +"The \"tar\" command is required on both the old and new server as well as \"sudo\"\n" "permissions. The \"rsync\" command is required on your local machine for\n" "transferring volumes.\n" "\n" -"Do not forget to update your DNS records. Don't panic, it might take a " -"while\n" -"for the dust to settle after you move an app. If anything goes wrong, you " -"can\n" +"Do not forget to update your DNS records. Don't panic, it might take a while\n" +"for the dust to settle after you move an app. If anything goes wrong, you can\n" "always move the app config file to the original server and deploy it there\n" "again. No data is removed from the old server.\n" "\n" @@ -1400,8 +1324,7 @@ msgstr "" "de vuelta al servidor original y desplegarlo otra vez. No se elimina \n" "ningún dato del servidor antiguo.\n" "\n" -"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se " -"moverán." +"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se moverán." #. translators: Short description for `app move` command #: cli/app/move.go:41 @@ -1458,8 +1381,7 @@ msgstr "🧹 Limpiar recursos en un 🕋 servidor" msgid "" "Prunes unused containers, networks, and dangling images.\n" "\n" -"Use \"--volumes/-v\" to remove volumes that are not associated with a " -"deployed\n" +"Use \"--volumes/-v\" to remove volumes that are not associated with a deployed\n" "app. This can result in unwanted data loss if not used carefully." msgstr "" "Elimina contenedores, redes e imágenes que no se usan.\n" @@ -1471,16 +1393,13 @@ msgstr "" #. translators: Short description for `app env pull` command #: cli/app/env.go:80 msgid "Pull app environment values from a deployed app" -msgstr "" -"Obtener (pull) valores de entorno de la aplicación desde una aplicación " -"desplegada" +msgstr "Obtener (pull) valores de entorno de la aplicación desde una aplicación desplegada" #: cli/app/env.go:81 msgid "" "Pull app environment values from a deploymed app.\n" "\n" -"A convenient command for when you've lost your app environment file or want " -"to\n" +"A convenient command for when you've lost your app environment file or want to\n" "synchronize your local app environment values with what is deployed live." msgstr "" "Extrae los valores de entorno de una aplicación desplegada.\n" @@ -1516,8 +1435,7 @@ msgid "" "Remove a managed server.\n" "\n" "Abra will remove the internal bookkeeping ($ABRA_DIR/servers/...) and\n" -"underlying client connection context. This server will then be lost in " -"time,\n" +"underlying client connection context. This server will then be lost in time,\n" "like tears in rain." msgstr "" "Eliminar un servidor gestionado.\n" @@ -1539,8 +1457,7 @@ msgstr "💀 Borrar completamente una 🚀 aplicación (local y remotamente)" #. translators: Short description for `recipe reset` command #: cli/recipe/reset.go:23 msgid "Remove all unstaged changes from recipe config" -msgstr "" -"💀 Borra los cambios no actualizados de la configuración de la 📜 receta" +msgstr "💀 Borra los cambios no actualizados de la configuración de la 📜 receta" #: cli/app/remove.go:29 msgid "" @@ -1549,19 +1466,16 @@ msgid "" "By default, it will prompt for confirmation before proceeding. All secrets,\n" "volumes and the local app env file will be deleted.\n" "\n" -"Only run this command when you are sure you want to completely remove the " -"app\n" +"Only run this command when you are sure you want to completely remove the app\n" "and all associated app data. This is a destructive action, Be Careful!\n" "\n" "If you would like to delete specific volumes or secrets, please use removal\n" "sub-commands under \"app volume\" and \"app secret\" instead.\n" "\n" -"Please note, if you delete the local app env file without removing volumes " -"and\n" +"Please note, if you delete the local app env file without removing volumes and\n" "secrets first, Abra will *not* be able to help you remove them afterwards.\n" "\n" -"To delete everything without prompt, use the \"--force/-f\" or the \"--no-" -"input/n\"\n" +"To delete everything without prompt, use the \"--force/-f\" or the \"--no-input/n\"\n" "flag." msgstr "" "Elimina todo lo relacionado con una aplicación que ya está plegada.\n" @@ -1592,14 +1506,11 @@ msgstr "💀 Elimina 📦 volúmen(es) asociados a una 🚀 aplicación" msgid "" "Remove volumes associated with an app.\n" "\n" -"The app in question must be undeployed before you try to remove volumes. " -"See\n" +"The app in question must be undeployed before you try to remove volumes. See\n" "\"abra app undeploy \" for more.\n" "\n" -"The command is interactive and will show a multiple select input which " -"allows\n" -"you to make a seclection. Use the \"?\" key to see more help on navigating " -"this\n" +"The command is interactive and will show a multiple select input which allows\n" +"you to make a seclection. Use the \"?\" key to see more help on navigating this\n" "interface.\n" "\n" "Passing \"--force/-f\" will select all volumes for removal. Be careful." @@ -1635,25 +1546,19 @@ msgstr "⏪ Revertir una 🚀 aplicación una versión anterior" #. translators: Short description for `app run` command #: cli/app/run.go:30 msgid "Run a command inside a service container" -msgstr "" -"Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" +msgstr "Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" #: cli/app/cmd.go:31 msgid "" "Run an app specific command.\n" "\n" -"These commands are bash functions, defined in the abra.sh of the recipe " -"itself.\n" -"They can be run within the context of a service (e.g. app) or locally on " -"your\n" +"These commands are bash functions, defined in the abra.sh of the recipe itself.\n" +"They can be run within the context of a service (e.g. app) or locally on your\n" "work station by passing \"--local/-l\".\n" "\n" -"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-" -"l\") must\n" -"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" +"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-l\") must\n" +"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" @@ -1804,10 +1709,8 @@ msgid "" "Arbitrary secret insertion is not supported. Secrets that are inserted must\n" "match those configured in the recipe beforehand.\n" "\n" -"This command can be useful when you want to manually generate secrets for an " -"app\n" -"environment. Typically, you can let Abra generate them for you on app " -"creation\n" +"This command can be useful when you want to manually generate secrets for an app\n" +"environment. Typically, you can let Abra generate them for you on app creation\n" "(see \"abra app new --secrets/-S\" for more)." msgstr "" "Este comando inserta un secreto en el entorno de una aplicación.\n" @@ -1858,22 +1761,17 @@ msgstr "" msgid "" "This command rolls an app back to a previous version.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only " -"recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a " -"specific\n" +"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what " -"downgrades\n" -"are available. The live deployment version is the \"source of truth\" in " -"this\n" +"Only the deployed version is consulted when trying to determine what downgrades\n" +"are available. The live deployment version is the \"source of truth\" in this\n" "case. The stored .env version is not consulted.\n" "\n" -"A downgrade can be destructive, please ensure you have a copy of your app " -"data\n" +"A downgrade can be destructive, please ensure you have a copy of your app data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Este comando revierte una aplicación a una versión anterior.\n" @@ -1897,8 +1795,7 @@ msgstr "" msgid "" "This does not destroy any application data.\n" "\n" -"However, you should remain vigilant, as your swarm installation will " -"consider\n" +"However, you should remain vigilant, as your swarm installation will consider\n" "any previously attached volumes as eligible for pruning once undeployed.\n" "\n" "Passing \"--prune/-p\" does not remove those volumes." @@ -1924,8 +1821,7 @@ msgid "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" -"abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" "\n" "Zsh:\n" " # If shell autocompletion is not already enabled in your environment,\n" @@ -1961,8 +1857,7 @@ msgstr "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" -"abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" "\n" "Zsh:\n" " # Si la autocompletación no está habilitada, actívala una vez:\n" @@ -2013,8 +1908,7 @@ msgid "" "It will update the relevant compose file tags on the local file system.\n" "\n" "Some image tags cannot be parsed because they do not follow some sort of\n" -"semver-like convention. In this case, all possible tags will be listed and " -"it\n" +"semver-like convention. In this case, all possible tags will be listed and it\n" "is up to the end-user to decide.\n" "\n" "The command is interactive and will show a select input which allows you to\n" @@ -2046,10 +1940,8 @@ msgid "" "\n" "By default, the latest stable release is downloaded.\n" "\n" -"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind " -"that\n" -"it may contain absolutely catastrophic deal-breaker bugs. Thank you very " -"much\n" +"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind that\n" +"it may contain absolutely catastrophic deal-breaker bugs. Thank you very much\n" "for the testing efforts 💗" msgstr "" "Actualiza abra in situ con la última versión estable \n" @@ -2070,22 +1962,17 @@ msgstr "📨 Actualizar una 🚀 aplicación" msgid "" "Upgrade an app.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only " -"recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a " -"specific\n" +"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what " -"upgrades\n" -"are available. The live deployment version is the \"source of truth\" in " -"this\n" +"Only the deployed version is consulted when trying to determine what upgrades\n" +"are available. The live deployment version is the \"source of truth\" in this\n" "case. The stored .env version is not consulted.\n" "\n" -"An upgrade can be destructive, please ensure you have a copy of your app " -"data\n" +"An upgrade can be destructive, please ensure you have a copy of your app data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Actualizar una aplicación.\n" @@ -2124,26 +2011,19 @@ msgid "" "Examples:\n" "{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name " -"\"help\"))}}\n" -" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if ." -"HasAvailableLocalFlags}}\n" +"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\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" -" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}" -"{{if .HasAvailableSubCommands}}\n" +"Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n" +" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Use \"{{.CommandPath}} [command] --help\" for more information about a " -"command.{{end}}\n" +"Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n" msgstr "" "Uso:{{if .Runnable}}\n" " {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n" @@ -2158,34 +2038,23 @@ msgstr "" "\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" +"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" +"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n" "\n" "Opciones globales:\n" -"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if ." -"HasHelpSubCommands}}\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" +"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" +"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." -msgstr "" -"Usando \"--force/-f\", Git sincroniza una receta existente. No borra los " -"cambios no preparados." +msgid "Using \"--force/-f\" Git syncs an existing recipe. It does not erase unstaged changes." +msgstr "Usando \"--force/-f\", Git sincroniza una receta existente. No borra los cambios no preparados." #: cli/app/secret.go:117 msgid "VALUE" @@ -2216,27 +2085,20 @@ msgstr "[hijack] Fin de stdout" #, c-format msgid "" "\n" -"The following options are two types of initial semantic version that you " -"can\n" -"pick for %s that will be published in the recipe catalogue. This follows " -"the\n" +"The following options are two types of initial semantic version that you can\n" +"pick for %s that will be published in the recipe catalogue. This follows the\n" "semver convention (more on https://semver.org), here is a short cheatsheet\n" "\n" -" 0.1.0: development release, still hacking. when you make a major " -"upgrade\n" -" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move " -"to\n" +" 0.1.0: development release, still hacking. when you make a major upgrade\n" +" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move to\n" " using the \"x\" part when things are stable.\n" "\n" " 1.0.0: public release, assumed to be working. you already have a stable\n" -" and reliable deployment of this app and feel relatively " -"confident\n" +" and reliable deployment of this app and feel relatively confident\n" " about it.\n" "\n" -"If you want people to be able alpha test your current config for %s but " -"don't\n" -"think it is quite reliable, go with 0.1.0 and people will know that things " -"are\n" +"If you want people to be able alpha test your current config for %s but don't\n" +"think it is quite reliable, go with 0.1.0 and people will know that things are\n" "likely to change.\n" "\n" msgstr "" @@ -2247,8 +2109,7 @@ msgstr "" "Resumen rápido:\n" "\n" " 0.1.0: versión de desarrollo, todavía en prueba. Cuando hagas una \n" -"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás " -"a \n" +"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás a \n" "usar la parte \"x\" cuando las cosas estén estables.\n" "\n" " 1.0.0: versión pública, se asume que funciona. Ya tienes un \n" @@ -2266,8 +2127,7 @@ msgid "" "\n" "You need to make a decision about what kind of an update this new recipe\n" "version is. If someone else performs this upgrade, do they have to do some\n" -"migration work or take care of some breaking changes? This can be signaled " -"in\n" +"migration work or take care of some breaking changes? This can be signaled in\n" "the version you specify on the recipe deploy label and is called a semantic\n" "version.\n" "\n" @@ -2277,27 +2137,21 @@ msgid "" "\n" "Here is a semver cheat sheet (more on https://semver.org):\n" "\n" -" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> " -"2.0.0).\n" -" the upgrade won't work without some preparation work and others " -"need\n" +" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> 2.0.0).\n" +" the upgrade won't work without some preparation work and others need\n" " to take care when performing it. \"it could go wrong\".\n" "\n" -" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> " -"0.2.0).\n" -" the upgrade should Just Work and there are no breaking changes " -"in\n" +" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> 0.2.0).\n" +" the upgrade should Just Work and there are no breaking changes in\n" " the app and the recipe config. \"it should go fine\".\n" "\n" -" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this " -"upgrade\n" +" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this upgrade\n" " should also Just Work and is mostly to do with minor bug fixes\n" " and/or security patches. \"nothing to worry about\".\n" "\n" msgstr "" "\n" -"Necesitas decidir qué tipo de actualización es esta nueva versión de la " -"receta. \n" +"Necesitas decidir qué tipo de actualización es esta nueva versión de la receta. \n" "Si otra persona realiza esta actualización, ¿tendrá que hacer migraciones \n" "o atender cambios incompatibles? Eso se indica con la versión semántica \n" "que especifiques en la etiqueta de despliegue de la receta.\n" @@ -2308,25 +2162,17 @@ msgstr "" "\n" "Semántica de semver (más en https://semver.org):\n" "\n" -" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 " -"-> 2.0.0).\n" -" la actualización no funcionará sin trabajo de preparación y otros " -"deben\n" +" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 -> 2.0.0).\n" +" la actualización no funcionará sin trabajo de preparación y otros deben\n" " tener cuidado al realizarla. \"podría salir mal\".\n" "\n" -" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -" -"> 0.2.0).\n" -" la actualización debería funcionar sin problemas y no hay " -"cambios\n" -" incompatibles en la app ni en la configuración de la receta. " -"\"debería ir bien\".\n" +" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -> 0.2.0).\n" +" la actualización debería funcionar sin problemas y no hay cambios\n" +" incompatibles en la app ni en la configuración de la receta. \"debería ir bien\".\n" "\n" -" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> " -"0.0.2).\n" -" esta actualización también debería funcionar sin problemas y " -"trata\n" -" principalmente de arreglos menores y/o parches de seguridad. " -"\"nada de qué preocuparse\".\n" +" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> 0.0.2).\n" +" esta actualización también debería funcionar sin problemas y trata\n" +" principalmente de arreglos menores y/o parches de seguridad. \"nada de qué preocuparse\".\n" "\n" #: pkg/lint/recipe.go:203 @@ -2492,9 +2338,7 @@ msgstr "aplicacion [comando] [argumento] [opciones]" #: pkg/dns/dns.go:52 #, c-format 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)?" +msgstr "¿El dominio de la aplicación %s (%s) no parece resolverse al servidor de la aplicación %s (%s)?" #: cli/recipe/release.go:349 msgid "app service is missing image tag?" @@ -2650,9 +2494,7 @@ msgstr "cancelado" #: pkg/catalogue/catalogue.go:59 pkg/recipe/git.go:251 #, c-format msgid "cannot ensure %s is up-to-date, no git remotes configured" -msgstr "" -"no se puede asegurar que %s esté actualizado, no hay remotos de git " -"configurados" +msgstr "no se puede asegurar que %s esté actualizado, no hay remotos de git configurados" #: cli/app/config.go:43 pkg/app/app.go:52 #, c-format @@ -2666,24 +2508,17 @@ msgstr "no se puede obtener la etiqueta %s para %s" #: pkg/recipe/git.go:58 #, c-format -msgid "" -"cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" -msgstr "" -"no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención " -"usar \"--caos\"?" +msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" +msgstr "no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"?" #: cli/app/deploy.go:388 #, c-format 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\"" +"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\"? \n" -"para volver a un lanzamiento regular, especifica una etiqueta de " -"lanzamiento, SHA de commit o agrega el comando \"--latest\"" +"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 @@ -2692,8 +2527,7 @@ msgstr "no se puede resolver ipv4 para %s?" #: 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" +msgstr "no se puede especificar una etiqueta y un tipo de incremento al mismo tiempo" #: cli/app/secret.go:68 msgid "cannot use '[secret] [version]' and '--all' together" @@ -2774,9 +2608,7 @@ msgstr "caos" #: pkg/secret/secret.go:235 #, c-format -msgid "" -"charset=bytes only supports encoding=base64, got encoding=%s for secret %s, " -"defaulting to base64" +msgid "charset=bytes only supports encoding=base64, got encoding=%s for secret %s, defaulting to base64" msgstr "" #. translators: `app check` command @@ -2859,21 +2691,13 @@ msgstr "el comando %v no salió después de %v: stderr=%q" #: pkg/upstream/commandconn/commandconn.go:172 #, c-format -msgid "" -"command %v has exited with %v, please make sure the URL is valid, and Docker " -"18.09 or later is installed on the remote host: stderr=%s" -msgstr "" -"el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida " -"y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" +msgid "command %v has exited with %v, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s" +msgstr "el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" #. translators: `app command` command #: cli/app/cmd.go:27 -msgid "" -"command [service | --local] [[args] [flags] | [flags] -- " -"[args]]" -msgstr "" -"ejecutar [servicio | --local] [[argumento] [opciones] " -"| [opciones] -- [argumento]]" +msgid "command [service | --local] [[args] [flags] | [flags] -- [args]]" +msgstr "ejecutar [servicio | --local] [[argumento] [opciones] | [opciones] -- [argumento]]" #: pkg/upstream/commandconn/commandconn.go:239 #, c-format @@ -2957,15 +2781,12 @@ msgstr "tiempo de conexión agotado para %s" #: pkg/recipe/compose.go:191 #, c-format msgid "considering %s config(s) for label update" -msgstr "" -"considerando la(s) configuración(es) %s para la actualización de etiquetas" +msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas" #: pkg/recipe/compose.go:123 #, c-format msgid "considering %s config(s) for tag update" -msgstr "" -"considerando la(s) configuración(es) %s para la actualización de etiquetas " -"(tags)" +msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas (tags)" #: cli/app/undeploy.go:141 cli/server/prune.go:53 #, c-format @@ -3270,8 +3091,7 @@ msgstr "no solicitar un TTY" #: pkg/ssh/ssh.go:26 msgid "docker: is the daemon running / your user has docker permissions?" -msgstr "" -"docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" +msgstr "docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" #: cli/app/new.go:386 msgid "domain" @@ -3329,8 +3149,7 @@ msgstr "ejecución de prueba: no se creó etiqueta de git (%s)" #: 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" +msgstr "ejecución de prueba: no se sincronizará la etiqueta %s para la receta %s" #: pkg/git/remote.go:15 #, c-format @@ -3368,14 +3187,11 @@ msgstr "habilitar ejecución de comandos pre/post-hook" #: cli/internal/validate.go:82 #, c-format msgid "ensure %s recipe compose.* files include \"version: '3.8'\"" -msgstr "" -"asegúrate de que los archivos compose.* de la receta %s incluyan \"version: " -"'3.8'\"" +msgstr "asegúrate de que los archivos compose.* de la receta %s incluyan \"version: '3.8'\"" #: pkg/lint/recipe.go:69 msgid "ensure 'version: \"3.8\"' in compose configs" -msgstr "" -"asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" +msgstr "asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" #: pkg/lint/recipe.go:163 msgid "ensure \"image: ...\" set on all services" @@ -3392,12 +3208,8 @@ msgid "ensuring env version %s" msgstr "asegurando la versión del entorno (env) %s" #: cli/recipe/upgrade.go:285 -msgid "" -"enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode " -"is enabled" -msgstr "" -"presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta " -"etiqueta; modo vim habilitado" +msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled" +msgstr "presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta etiqueta; modo vim habilitado" #. translators: `app env` command group #: cli/app/env.go:311 @@ -3510,14 +3322,12 @@ msgstr "🛑 error al hacer commit: %s" #: cli/app/move.go:167 #, c-format msgid "failed to copy %s from %s to local machine: output:%s err:%s" -msgstr "" -"🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" +msgstr "🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" #: cli/app/move.go:173 #, c-format msgid "failed to copy %s from local machine to %s: output:%s err:%s" -msgstr "" -"🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" +msgstr "🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" #: pkg/upstream/stack/stack.go:535 #, c-format @@ -3649,8 +3459,7 @@ msgstr "🛑 No se pudo obtener el último commit de %s: %s" #: pkg/upstream/stack/stack.go:472 #, c-format msgid "failed to retrieve registry auth for image %s: %s" -msgstr "" -"🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" +msgstr "🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" #: pkg/git/branch.go:68 #, c-format @@ -3791,9 +3600,7 @@ msgstr "catálogo de recetas generado: %s" #: cli/app/secret.go:145 #, c-format msgid "generated secrets %s shown again, please take note of them %s" -msgstr "" -"los secretos generados %s; se muestran nuevamente, por favor toma nota de " -"ellos %s" +msgstr "los secretos generados %s; se muestran nuevamente, por favor toma nota de ellos %s" #: pkg/app/compose.go:63 #, c-format @@ -4059,9 +3866,7 @@ msgstr "incrementar la parte de parche de la versión" #: pkg/git/init.go:50 #, c-format msgid "init committed all files for new git repo in %s" -msgstr "" -"inicializado y comiteados todos los archivos para el nuevo repositorio git " -"en %s" +msgstr "inicializado y comiteados todos los archivos para el nuevo repositorio git en %s" #: pkg/git/init.go:24 #, c-format @@ -4107,31 +3912,22 @@ msgstr "fuente de enlace inválida, la fuente no puede estar vacía" #: pkg/upstream/convert/service.go:813 #, c-format msgid "invalid credential spec: cannot specify both %s and %s" -msgstr "" -"especificación de credencial inválida: no se pueden especificar ambos %s y %s" +msgstr "especificación de credencial inválida: no se pueden especificar ambos %s y %s" #: pkg/upstream/convert/service.go:815 #, c-format msgid "invalid credential spec: cannot specify both %s, and %s" -msgstr "" -"especificación de credencial inválida: no se pueden especificar tanto %s, " -"como %s" +msgstr "especificación de credencial inválida: no se pueden especificar tanto %s, como %s" #: pkg/upstream/convert/service.go:834 #, c-format -msgid "" -"invalid credential spec: spec specifies config %v, but no such config can be " -"found" -msgstr "" -"especificación de credencial inválida: la especificación indica la " -"configuración %v, pero no se puede encontrar tal configuración" +msgid "invalid credential spec: spec specifies config %v, but no such config can be found" +msgstr "especificación de credencial inválida: la especificación indica la configuración %v, pero no se puede encontrar tal configuración" #: pkg/upstream/container/hijack.go:100 #, c-format msgid "invalid detach escape keys, using default: %s" -msgstr "" -"teclas de escape de separación inválidas, utilizando el valor " -"predeterminado: %s" +msgstr "teclas de escape de separación inválidas, utilizando el valor predeterminado: %s" #: pkg/lint/recipe.go:504 msgid "invalid lightweight tag detected" @@ -4318,8 +4114,7 @@ msgstr "maquina" #: cli/recipe/release.go:97 #, c-format 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?" +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:631 @@ -4420,23 +4215,13 @@ msgstr "se necesitan 3 o 4 argumentos" #: pkg/upstream/stack/stack.go:352 #, c-format -msgid "" -"network %q is declared as external, but could not be found. You need to " -"create a swarm-scoped network before the stack is deployed, which you can do " -"by running this on the server: docker network create -d overlay proxy" -msgstr "" -"La red %q está declarada como externa, pero no se pudo encontrar. Debes " -"crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo " -"en el servidor mismo con: docker network create -d overlay proxy" +msgid "network %q is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed, which you can do by running this on the server: docker network create -d overlay proxy" +msgstr "La red %q está declarada como externa, pero no se pudo encontrar. Debes crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo en el servidor mismo con: docker network create -d overlay proxy" #: pkg/upstream/stack/stack.go:356 #, c-format -msgid "" -"network %q is declared as external, but it is not in the right scope: %q " -"instead of \"swarm\"" -msgstr "" -"la red %q se declara como externa, pero no está en el alcance correcto: %q " -"en lugar de \"swarm\"" +msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" +msgstr "la red %q se declara como externa, pero no está en el alcance correcto: %q en lugar de \"swarm\"" #: cli/app/undeploy.go:148 cli/server/prune.go:60 #, c-format @@ -4476,8 +4261,7 @@ msgstr "secretos nuevos: %v" #: pkg/git/read.go:88 #, c-format msgid "no %s exists, not reading any global gitignore config" -msgstr "" -"no existe %s, no se está leyendo ninguna configuración global de gitignore" +msgstr "no existe %s, no se está leyendo ninguna configuración global de gitignore" #: pkg/git/read.go:130 #, c-format @@ -4547,9 +4331,7 @@ msgstr "no se proporcionó dominio" #: pkg/recipe/compose.go:248 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" +msgstr "no se encontró ninguna etiqueta existente, la inserción automágica no es compatible aún" #: cli/recipe/release.go:134 #, c-format @@ -4558,12 +4340,8 @@ msgstr "no se encontraron etiquetas de git para %s" #: cli/recipe/upgrade.go:182 #, c-format -msgid "" -"no new versions available for %s, assuming %s is the latest (use -a/--all-" -"tags to see all anyway)" -msgstr "" -"no hay nuevas versiones disponibles para %s; asumiendo que %s es la más " -"reciente (usa -a/--all-tags para ver todas)" +msgid "no new versions available for %s, assuming %s is the latest (use -a/--all-tags to see all anyway)" +msgstr "no hay nuevas versiones disponibles para %s; asumiendo que %s es la más reciente (usa -a/--all-tags para ver todas)" #: cli/internal/validate.go:64 #, c-format @@ -4686,9 +4464,7 @@ msgstr "no hay suficientes argumentos: %s" #: pkg/secret/secret.go:145 msgid "not generating app secrets, none enabled in recipe config" -msgstr "" -"no se están generando secretos de la aplicación; ninguno habilitado en la " -"configuración de la receta" +msgstr "no se están generando secretos de la aplicación; ninguno habilitado en la configuración de la receta" #: cli/internal/command.go:93 msgid "not requesting a remote TTY" @@ -4701,12 +4477,8 @@ msgstr "no se actualizará %s; se omite, como fue solicitado" #: cli/recipe/upgrade.go:244 #, c-format -msgid "" -"not upgrading from %s to %s for %s, because the upgrade type is more serious " -"than what user wants" -msgstr "" -"no se actualizará %s a %s para %s, porque el tipo de actualización es más " -"serio de lo que el usuario desea" +msgid "not upgrading from %s to %s for %s, because the upgrade type is more serious than what user wants" +msgstr "no se actualizará %s a %s para %s, porque el tipo de actualización es más serio de lo que el usuario desea" #: pkg/upstream/stack/remove.go:73 #, c-format @@ -4837,9 +4609,7 @@ msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s):" #: cli/app/rollback.go:272 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" -msgstr "" -"por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: " -"%s):" +msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: %s):" #: cli/app/upgrade.go:312 #, c-format @@ -5291,8 +5061,7 @@ msgstr "versiones recuperadas del repositorio local de recetas" #: pkg/upstream/stack/stack.go:468 #, c-format msgid "retrieving docker auth token: failed create docker cli: %s" -msgstr "" -"recuperando token de autenticación de Docker: error al crear docker cli: %s" +msgstr "recuperando token de autenticación de Docker: error al crear docker cli: %s" #: pkg/recipe/recipe.go:659 msgid "retrieving recipes" @@ -5353,9 +5122,7 @@ msgstr "regla" #. translators: `app run` command #: cli/app/run.go:27 msgid "run [[args] [flags] | [flags] -- [args]]" -msgstr "" -"lanzar [[argumento] [opciones] | " -"[opciones] -- [argumento]]" +msgstr "lanzar [[argumento] [opciones] | [opciones] -- [argumento]]" #: cli/app/run.go:120 msgid "run command as user" @@ -5445,9 +5212,7 @@ msgstr "secreto [comando] [argumento] [opciones]" #: cli/app/secret.go:295 msgid "secret data not provided on command-line or stdin, prompting" -msgstr "" -"datos del secreto no proporcionados en la línea de comandos o stdin, " -"solicitando" +msgstr "datos del secreto no proporcionados en la línea de comandos o stdin, solicitando" #: pkg/upstream/convert/service.go:72 #, c-format @@ -5481,8 +5246,7 @@ msgstr "los secretos se muestran %s nuevamente, por favor guárdalos %s" #: cli/app/deploy.go:306 #, c-format msgid "selected latest recipe version: %s (from %d available versions)" -msgstr "" -"versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" +msgstr "versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" #: cli/app/new.go:125 #, c-format @@ -5498,8 +5262,7 @@ msgstr "servidor" #: pkg/app/app.go:301 #, c-format msgid "server %s doesn't exist? Run \"abra server ls\" to check" -msgstr "" -"el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" +msgstr "el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" #. translators: `server` command group #: cli/server/server.go:17 @@ -5527,8 +5290,7 @@ msgstr "falta contexto del servidor, la creación de contexto falló: %s" #: pkg/client/client.go:58 #, c-format msgid "server missing context, run \"abra server add %s\"?" -msgstr "" -"falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" +msgstr "falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" #: pkg/client/client.go:47 #, c-format @@ -5557,18 +5319,13 @@ msgstr "serverAdd: cleanUp: no se pueden listar los archivos en %s: %s" #: cli/recipe/upgrade.go:227 #, c-format -msgid "" -"service %s is at version %s, but pinned to %s, please correct your compose." -"yml file manually!" -msgstr "" -"el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige " -"manualmente tu archivo compose.yml!" +msgid "service %s is at version %s, but pinned to %s, please correct your compose.yml file manually!" +msgstr "el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige manualmente tu archivo compose.yml!" #: cli/recipe/upgrade.go:223 #, c-format msgid "service %s, image %s pinned to %s, no compatible upgrade found" -msgstr "" -"servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" +msgstr "servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" #: cli/app/restore.go:113 msgid "services" @@ -5614,8 +5371,7 @@ msgstr "gravedad" #: cli/app/deploy.go:456 cli/app/rollback.go:379 cli/app/upgrade.go:496 msgid "show all configs & images, including unchanged ones" -msgstr "" -"mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" +msgstr "mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" #: cli/app/backup.go:273 msgid "show all paths" @@ -5716,8 +5472,7 @@ msgstr "omitiendo la etiqueta %s: configuración de compose inválida: %s" #: pkg/recipe/git.go:432 #, c-format msgid "skipping tag %s: invalid image reference in service %s: %s" -msgstr "" -"omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" +msgstr "omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" #: pkg/app/app.go:697 #, c-format @@ -5781,17 +5536,11 @@ msgstr "" #: 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" +msgstr "ssh-agent no encontrado. consulta \"abra receta publicar --ayuda\" y vuelve a intentarlo" #: cli/catalogue/catalogue.go:98 -msgid "" -"ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue " -"generate --help\"" -msgstr "" -"ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo " -"regenerar --ayuda\"" +msgid "ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue generate --help\"" +msgstr "ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo regenerar --ayuda\"" #: cli/app/list.go:295 cli/recipe/list.go:45 msgid "status" @@ -6057,16 +5806,12 @@ msgstr "no se pudo determinar el tipo de receta a partir de %s, env: %v" #: cli/app/env.go:106 #, c-format msgid "unable to determine server of app %s, please pass --server/-s" -msgstr "" -"no se pudo determinar el servidor de la aplicación %s; agrega al comando --" -"server/-s" +msgstr "no se pudo determinar el servidor de la aplicación %s; agrega al comando --server/-s" #: cli/recipe/upgrade.go:252 #, c-format msgid "unable to determine versioning semantics of %s, listing all tags" -msgstr "" -"no se pudieron determinar las reglas de versionado de %s; listando todas las " -"etiquetas" +msgstr "no se pudieron determinar las reglas de versionado de %s; listando todas las etiquetas" #: cli/recipe/fetch.go:71 #, c-format @@ -6141,8 +5886,7 @@ msgstr "no se pudo abrir el work tree de %s: %s" #: cli/recipe/upgrade.go:159 #, c-format msgid "unable to parse %s, error was: %s, skipping upgrade for %s" -msgstr "" -"no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" +msgstr "no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" #: pkg/recipe/compose.go:153 #, c-format @@ -6187,9 +5931,7 @@ msgstr "no se pudieron leer los remotos en %s: %s" #: cli/recipe/upgrade.go:153 #, c-format msgid "unable to read tag for image %s, is it missing? skipping upgrade for %s" -msgstr "" -"no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo " -"actualización para %s" +msgstr "no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo actualización para %s" #: cli/app/move.go:210 #, c-format @@ -6204,8 +5946,7 @@ msgstr "no se pudo eliminar el remoto predeterminado en %s: %s" #: cli/app/volume.go:158 #, c-format msgid "unable to remove volume: no volume with name '%s'?" -msgstr "" -"no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" +msgstr "no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" #: cli/app/secret.go:135 cli/app/secret.go:515 cli/recipe/list.go:83 #: cli/recipe/version.go:113 cli/server/list.go:88 @@ -6488,10 +6229,8 @@ msgstr "versión %s guardada en %s.env" #: cli/app/deploy.go:126 #, c-format -msgid "" -"version '%s' appears to be a chaos commit, but --chaos/-C was not provided" -msgstr "" -"la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" +msgid "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" +msgstr "la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" #: pkg/recipe/recipe.go:200 #, c-format @@ -6539,8 +6278,7 @@ msgstr "versión: tomando la versión desde el archivo .env: %s" #: cli/app/deploy.go:378 #, c-format msgid "version: taking version from cli arg: %s" -msgstr "" -"versión: tomando la versión desde el argumento de la línea de comandos: %s" +msgstr "versión: tomando la versión desde el argumento de la línea de comandos: %s" #. translators: `recipe versions` command #: cli/recipe/version.go:23 @@ -6727,31 +6465,21 @@ msgstr "{nombre: %s, " #, c-format #~ msgid "latest git tag (%s) and synced label (%s) are the same?" -#~ msgstr "" -#~ "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las " -#~ "mismas?" +#~ msgstr "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las mismas?" #~ msgid "no -p/--publish passed, not publishing" #~ msgstr "no pasó -p/--publish, no se publicará" #, c-format -#~ msgid "" -#~ "no tag specified and no previous tag available for %s, assuming initial " -#~ "release" -#~ msgstr "" -#~ "no se especificó etiqueta y no hay etiqueta previa disponible para %s; " -#~ "asumiendo lanzamiento inicial" +#~ msgid "no tag specified and no previous tag available for %s, assuming initial release" +#~ msgstr "no se especificó etiqueta y no hay etiqueta previa disponible para %s; asumiendo lanzamiento inicial" #, c-format #~ msgid "please fix your synced label for %s and re-run this command" -#~ msgstr "" -#~ "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar " -#~ "este comando" +#~ msgstr "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar este comando" #~ msgid "previous git tags detected, assuming new semver release" -#~ msgstr "" -#~ "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento " -#~ "semver" +#~ msgstr "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento semver" #~ msgid "publish new release?" #~ msgstr "¿publicar nueva versión?" @@ -6760,12 +6488,8 @@ msgstr "{nombre: %s, " #~ msgstr "sincronizar [version] [flags]" #, c-format -#~ msgid "" -#~ "unable to read version for %s from synced label. Did you try running " -#~ "\"abra recipe sync %s\" already?" -#~ msgstr "" -#~ "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya " -#~ "ejecutaste \"abra receta sincronizar %s\"?" +#~ msgid "unable to read version for %s from synced label. Did you try running \"abra recipe sync %s\" already?" +#~ msgstr "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya ejecutaste \"abra receta sincronizar %s\"?" #, c-format #~ msgid "use %s as the new version?" From e5c65b8fa060ccf6a8dd22e600ed08493bda2d85 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 9 Jun 2026 21:00:57 +0000 Subject: [PATCH 30/55] chore(deps): update alpine docker tag to v3.24 --- Dockerfile | 2 +- vendor/github.com/docker/distribution/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index f8823c64..50f7ae4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ WORKDIR /app RUN CGO_ENABLED=0 make build -FROM alpine:3.23 +FROM alpine:3.24 RUN apk add --no-cache \ ca-certificates \ diff --git a/vendor/github.com/docker/distribution/Dockerfile b/vendor/github.com/docker/distribution/Dockerfile index ebd42c24..588d658a 100644 --- a/vendor/github.com/docker/distribution/Dockerfile +++ b/vendor/github.com/docker/distribution/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 ARG GO_VERSION=1.20.8 -ARG ALPINE_VERSION=3.18 +ARG ALPINE_VERSION=3.24 ARG XX_VERSION=1.2.1 FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx From 14ee80582aff2802723f2194bba9a73d3515de81 Mon Sep 17 00:00:00 2001 From: Linus Gasser Date: Sun, 14 Jun 2026 18:28:45 +0200 Subject: [PATCH 31/55] Use go run for xgettext-go Before: on a mac, the Makefile downloaded a linux file, which did not work for updating the i18n. Now: use 'go run' to run the xgettext-go file. go caches it, so it compiles only once. --- Makefile | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index be3dc7bf..b46181de 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ABRA := ./cmd/abra -XGETTEXT := ./bin/xgettext-go +XGETTEXT := go run git.coopcloud.tech/toolshed/xgettext-go@latest COMMIT := $(shell git rev-list -1 HEAD) GOPATH := $(shell go env GOPATH) GOVERSION := 1.26 @@ -62,8 +62,8 @@ update-po: done .PHONY: update-pot -update-pot: $(XGETTEXT) - @${XGETTEXT} \ +update-pot: + @$(XGETTEXT) \ -o pkg/i18n/locales/$(DOMAIN).pot \ --keyword=i18n.G \ --keyword-ctx=i18n.GC \ @@ -71,11 +71,6 @@ update-pot: $(XGETTEXT) --add-comments-tag="translators" \ $$(find . -name "*.go" -not -path "*vendor*" | sort) -${XGETTEXT}: - @mkdir -p ./bin && \ - wget -O ./bin/xgettext-go https://git.coopcloud.tech/toolshed/xgettext-go/raw/branch/main/xgettext-go && \ - chmod +x ./bin/xgettext-go - .PHONY: update-pot-po-metadata update-pot-po-metadata: @sed -i "s/charset=CHARSET/charset=UTF-8/g" pkg/i18n/locales/*.po pkg/i18n/locales/*.pot From 1541e6aa6a3afcfb5f0531c681b1f4d574690cb6 Mon Sep 17 00:00:00 2001 From: Linus Gasser Date: Sun, 14 Jun 2026 18:37:34 +0200 Subject: [PATCH 32/55] Also use xgettext-go@latest for .drone.yml --- .drone.yml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.drone.yml b/.drone.yml index 75096bfb..f197f196 100644 --- a/.drone.yml +++ b/.drone.yml @@ -8,12 +8,17 @@ steps: - make check - name: xgettext-go - image: git.coopcloud.tech/toolshed/drone-xgettext-go:latest - settings: - keyword: i18n.G - keyword_ctx: i18n.GC - out: pkg/i18n/locales/abra.pot - comments_tag: translators + image: golang:1.26 + environment: + GOPRIVATE: coopcloud.tech + commands: + - go run git.coopcloud.tech/toolshed/xgettext-go@latest + -o pkg/i18n/locales/abra.pot + --keyword=i18n.G + --keyword-ctx=i18n.GC + --sort-output + --add-comments-tag="translators" + $(find . -name "*.go" -not -path "*vendor*" | sort) depends_on: - make check when: From 1111b69f1298f54b90d2f4c4089f2dbdfb8cb562 Mon Sep 17 00:00:00 2001 From: Linus Gasser Date: Fri, 29 May 2026 09:36:45 +0200 Subject: [PATCH 33/55] Use docker login credentials from host I had a lot of failures for pulling the docker images lately, so I was looking for a way to connect using docker login. This PR sends the docker login credentials from the host to the swarm server. --- cli/app/deploy.go | 11 ++++++----- cli/app/rollback.go | 11 ++++++----- cli/app/upgrade.go | 11 ++++++----- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 6fbf7cfa..1d10ccff 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -151,11 +151,12 @@ checkout as-is. Recipe commit hashes are also supported as values for stackName := app.StackName() deployOpts := stack.Deploy{ - Composefiles: composeFiles, - Namespace: stackName, - Prune: false, - ResolveImage: stack.ResolveImageAlways, - Detach: false, + Composefiles: composeFiles, + Namespace: stackName, + Prune: false, + ResolveImage: stack.ResolveImageAlways, + Detach: false, + SendRegistryAuth: true, } compose, err := appPkg.GetAppComposeConfig(app.Name, deployOpts, app.Env) if err != nil { diff --git a/cli/app/rollback.go b/cli/app/rollback.go index 9fd06a0b..f87ed7b4 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -166,11 +166,12 @@ beforehand. See "abra app backup" for more.`), stackName := app.StackName() deployOpts := stack.Deploy{ - Composefiles: composeFiles, - Namespace: stackName, - Prune: false, - ResolveImage: stack.ResolveImageAlways, - Detach: false, + Composefiles: composeFiles, + Namespace: stackName, + Prune: false, + ResolveImage: stack.ResolveImageAlways, + Detach: false, + SendRegistryAuth: true, } compose, err := appPkg.GetAppComposeConfig(app.Name, deployOpts, app.Env) diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index 595f6d85..96dc057a 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -178,11 +178,12 @@ beforehand. See "abra app backup" for more.`), stackName := app.StackName() deployOpts := stack.Deploy{ - Composefiles: composeFiles, - Namespace: stackName, - Prune: false, - ResolveImage: stack.ResolveImageAlways, - Detach: false, + Composefiles: composeFiles, + Namespace: stackName, + Prune: false, + ResolveImage: stack.ResolveImageAlways, + Detach: false, + SendRegistryAuth: true, } compose, err := appPkg.GetAppComposeConfig(app.Name, deployOpts, app.Env) From 427ec22cab00497c4d69094fe8ddbe45f6dd7438 Mon Sep 17 00:00:00 2001 From: Linus Gasser Date: Sun, 14 Jun 2026 17:57:17 +0200 Subject: [PATCH 34/55] Running i18n --- pkg/i18n/locales/abra.pot | 112 ++--- pkg/i18n/locales/es.po | 836 +++++++++++++++++++++++++------------- 2 files changed, 612 insertions(+), 336 deletions(-) diff --git a/pkg/i18n/locales/abra.pot b/pkg/i18n/locales/abra.pot index f07e260a..ea1e291f 100644 --- a/pkg/i18n/locales/abra.pot +++ b/pkg/i18n/locales/abra.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" - "POT-Creation-Date: 2026-06-09 16:29+0200\n" + "POT-Creation-Date: 2026-06-14 17:56+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -339,17 +339,17 @@ msgstr "" msgid "%s is missing the TYPE env var?" msgstr "" -#: ./cli/app/rollback.go:309 ./cli/app/rollback.go:313 +#: ./cli/app/rollback.go:310 ./cli/app/rollback.go:314 #, c-format msgid "%s is not a downgrade for %s?" msgstr "" -#: ./cli/app/upgrade.go:429 ./cli/app/upgrade.go:433 +#: ./cli/app/upgrade.go:430 ./cli/app/upgrade.go:434 #, c-format msgid "%s is not an upgrade for %s?" msgstr "" -#: ./cli/app/env.go:146 ./cli/app/logs.go:65 ./cli/app/ps.go:62 ./cli/app/restart.go:100 ./cli/app/services.go:55 ./cli/app/undeploy.go:66 ./cli/app/upgrade.go:450 +#: ./cli/app/env.go:146 ./cli/app/logs.go:65 ./cli/app/ps.go:62 ./cli/app/restart.go:100 ./cli/app/services.go:55 ./cli/app/undeploy.go:66 ./cli/app/upgrade.go:451 #, c-format msgid "%s is not deployed?" msgstr "" @@ -369,7 +369,7 @@ msgstr "" msgid "%s missing context, run \"abra server add %s\"?" msgstr "" -#: ./cli/app/deploy.go:194 ./cli/app/upgrade.go:210 +#: ./cli/app/deploy.go:195 ./cli/app/upgrade.go:211 #, c-format msgid "%s missing from %s.env" msgstr "" @@ -549,12 +549,12 @@ msgstr "" msgid "%s: waiting %d seconds before next retry" msgstr "" -#: ./cli/app/upgrade.go:424 +#: ./cli/app/upgrade.go:425 #, c-format msgid "'%s' is not a known version" msgstr "" -#: ./cli/app/rollback.go:304 ./cli/app/upgrade.go:419 +#: ./cli/app/rollback.go:305 ./cli/app/upgrade.go:420 #, c-format msgid "'%s' is not a known version for %s" msgstr "" @@ -626,7 +626,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:414 ./cli/app/labels.go:143 ./cli/app/list.go:335 ./cli/app/new.go:411 ./cli/app/ps.go:213 ./cli/app/restart.go:163 ./cli/app/restore.go:138 ./cli/app/secret.go:569 ./cli/app/secret.go:609 ./cli/app/secret.go:633 ./cli/app/secret.go:641 ./cli/catalogue/catalogue.go:318 ./cli/recipe/lint.go:137 +#: ./cli/app/backup.go:319 ./cli/app/backup.go:335 ./cli/app/check.go:95 ./cli/app/cmd.go:285 ./cli/app/cp.go:385 ./cli/app/deploy.go:415 ./cli/app/labels.go:143 ./cli/app/list.go:335 ./cli/app/new.go:411 ./cli/app/ps.go:213 ./cli/app/restart.go:163 ./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 "" @@ -767,7 +767,7 @@ msgid "Creates a new app from a default recipe.\n" "on your $PATH." msgstr "" -#: ./cli/app/deploy.go:430 ./cli/app/new.go:387 ./cli/app/rollback.go:361 ./cli/app/upgrade.go:470 +#: ./cli/app/deploy.go:431 ./cli/app/new.go:387 ./cli/app/rollback.go:362 ./cli/app/upgrade.go:471 msgid "D" msgstr "" @@ -1462,7 +1462,7 @@ msgid "To load completions:\n" " # and source this file from your PowerShell profile." msgstr "" -#: ./cli/app/deploy.go:454 ./cli/app/rollback.go:377 ./cli/app/upgrade.go:494 +#: ./cli/app/deploy.go:455 ./cli/app/rollback.go:378 ./cli/app/upgrade.go:495 msgid "U" msgstr "" @@ -1835,7 +1835,7 @@ msgstr "" msgid "attempting to run %s" msgstr "" -#: ./cli/app/deploy.go:283 ./cli/app/upgrade.go:296 +#: ./cli/app/deploy.go:284 ./cli/app/upgrade.go:297 #, c-format msgid "attempting to run post deploy commands, saw: %s" msgstr "" @@ -1915,7 +1915,7 @@ msgstr "" #. no spaces in between #. translators: `abra app cp` aliases. use a comma separated list of aliases with #. no spaces in between -#: ./cli/app/backup.go:148 ./cli/app/cp.go:30 ./cli/app/deploy.go:438 ./cli/app/rollback.go:369 ./cli/app/upgrade.go:478 +#: ./cli/app/backup.go:148 ./cli/app/cp.go:30 ./cli/app/deploy.go:439 ./cli/app/rollback.go:370 ./cli/app/upgrade.go:479 msgid "c" msgstr "" @@ -1971,7 +1971,7 @@ msgstr "" msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" msgstr "" -#: ./cli/app/deploy.go:388 +#: ./cli/app/deploy.go:389 #, c-format 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\"" @@ -1990,7 +1990,7 @@ msgstr "" msgid "cannot use '[secret] [version]' and '--all' together" msgstr "" -#: ./cli/app/deploy.go:330 +#: ./cli/app/deploy.go:331 msgid "cannot use --chaos and --latest together" msgstr "" @@ -2014,11 +2014,11 @@ msgstr "" msgid "cannot use [service] and --all-services/-a together" msgstr "" -#: ./cli/app/deploy.go:322 ./cli/app/new.go:80 +#: ./cli/app/deploy.go:323 ./cli/app/new.go:80 msgid "cannot use [version] and --chaos together" msgstr "" -#: ./cli/app/deploy.go:326 +#: ./cli/app/deploy.go:327 msgid "cannot use [version] and --latest together" msgstr "" @@ -2054,7 +2054,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:413 ./cli/app/labels.go:142 ./cli/app/list.go:334 ./cli/app/new.go:410 ./cli/app/ps.go:212 ./cli/app/restart.go:162 ./cli/app/restore.go:137 ./cli/app/secret.go:568 ./cli/app/secret.go:608 ./cli/app/secret.go:632 ./cli/app/secret.go:640 ./cli/catalogue/catalogue.go:317 ./cli/recipe/lint.go:136 +#: ./cli/app/backup.go:318 ./cli/app/backup.go:334 ./cli/app/check.go:94 ./cli/app/cmd.go:284 ./cli/app/cp.go:384 ./cli/app/deploy.go:414 ./cli/app/labels.go:142 ./cli/app/list.go:334 ./cli/app/new.go:410 ./cli/app/ps.go:212 ./cli/app/restart.go:162 ./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 "" @@ -2068,7 +2068,7 @@ msgstr "" msgid "check [flags]" msgstr "" -#: ./cli/app/deploy.go:95 ./cli/app/undeploy.go:58 ./cli/app/upgrade.go:442 +#: ./cli/app/deploy.go:95 ./cli/app/undeploy.go:58 ./cli/app/upgrade.go:443 #, c-format msgid "checking whether %s is already deployed" msgstr "" @@ -2371,7 +2371,7 @@ msgstr "" msgid "critical errors present in %s config" msgstr "" -#: ./cli/app/rollback.go:299 +#: ./cli/app/rollback.go:300 #, c-format msgid "current deployment '%s' is not a known version for %s" msgstr "" @@ -2422,7 +2422,7 @@ msgstr "" msgid "deploy labels stanza present" msgstr "" -#: ./cli/app/deploy.go:448 +#: ./cli/app/deploy.go:449 msgid "deploy latest recipe version" msgstr "" @@ -2524,11 +2524,11 @@ msgstr "" msgid "dirty: %v, " msgstr "" -#: ./cli/app/deploy.go:440 ./cli/app/rollback.go:371 ./cli/app/upgrade.go:480 +#: ./cli/app/deploy.go:441 ./cli/app/rollback.go:372 ./cli/app/upgrade.go:481 msgid "disable converge logic checks" msgstr "" -#: ./cli/app/deploy.go:432 ./cli/app/rollback.go:363 ./cli/app/upgrade.go:472 +#: ./cli/app/deploy.go:433 ./cli/app/rollback.go:364 ./cli/app/upgrade.go:473 msgid "disable public DNS checks" msgstr "" @@ -2737,7 +2737,7 @@ msgstr "" #. translators: `abra recipe fetch` aliases. use a comma separated list of aliases #. with no spaces in between -#: ./cli/app/deploy.go:422 ./cli/app/env.go:325 ./cli/app/remove.go:163 ./cli/app/rollback.go:353 ./cli/app/secret.go:593 ./cli/app/upgrade.go:462 ./cli/app/volume.go:217 ./cli/recipe/fetch.go:20 ./cli/recipe/fetch.go:138 +#: ./cli/app/deploy.go:423 ./cli/app/env.go:325 ./cli/app/remove.go:163 ./cli/app/rollback.go:354 ./cli/app/secret.go:593 ./cli/app/upgrade.go:463 ./cli/app/volume.go:217 ./cli/recipe/fetch.go:20 ./cli/recipe/fetch.go:138 msgid "f" msgstr "" @@ -2988,7 +2988,7 @@ msgstr "" msgid "final merged env values for %s are: %s" msgstr "" -#: ./cli/app/deploy.go:421 ./cli/app/env.go:324 ./cli/app/remove.go:162 ./cli/app/rollback.go:352 ./cli/app/upgrade.go:461 ./cli/app/volume.go:216 ./cli/recipe/fetch.go:137 +#: ./cli/app/deploy.go:422 ./cli/app/env.go:324 ./cli/app/remove.go:162 ./cli/app/rollback.go:353 ./cli/app/upgrade.go:462 ./cli/app/volume.go:216 ./cli/recipe/fetch.go:137 msgid "force" msgstr "" @@ -3202,7 +3202,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:416 ./cli/app/labels.go:145 ./cli/app/list.go:337 ./cli/app/new.go:413 ./cli/app/ps.go:215 ./cli/app/restart.go:165 ./cli/app/restore.go:140 ./cli/app/secret.go:571 ./cli/app/secret.go:611 ./cli/app/secret.go:635 ./cli/app/secret.go:643 ./cli/catalogue/catalogue.go:320 ./cli/recipe/lint.go:139 +#: ./cli/app/backup.go:321 ./cli/app/backup.go:337 ./cli/app/check.go:97 ./cli/app/cmd.go:287 ./cli/app/cp.go:387 ./cli/app/deploy.go:417 ./cli/app/labels.go:145 ./cli/app/list.go:337 ./cli/app/new.go:413 ./cli/app/ps.go:215 ./cli/app/restart.go:165 ./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 "" @@ -3400,7 +3400,7 @@ msgstr "" #. no spaces in between #. translators: `abra recipe lint` aliases. use a comma separated list of #. aliases with no spaces in between -#: ./cli/app/cmd.go:261 ./cli/app/deploy.go:446 ./cli/app/logs.go:20 ./cli/recipe/lint.go:17 ./cli/server/add.go:207 +#: ./cli/app/cmd.go:261 ./cli/app/deploy.go:447 ./cli/app/logs.go:20 ./cli/recipe/lint.go:17 ./cli/server/add.go:207 msgid "l" msgstr "" @@ -3415,7 +3415,7 @@ msgstr "" msgid "labels [flags]" msgstr "" -#: ./cli/app/deploy.go:445 ./cli/app/list.go:186 +#: ./cli/app/deploy.go:446 ./cli/app/list.go:186 msgid "latest" msgstr "" @@ -3779,7 +3779,7 @@ msgstr "" msgid "no recipe name provided" msgstr "" -#: ./cli/app/upgrade.go:241 +#: ./cli/app/upgrade.go:242 #, c-format msgid "no release notes for upgrading from %s to %s" msgstr "" @@ -3868,11 +3868,11 @@ msgstr "" msgid "no volumes to remove" msgstr "" -#: ./cli/app/deploy.go:437 ./cli/app/rollback.go:368 ./cli/app/upgrade.go:477 +#: ./cli/app/deploy.go:438 ./cli/app/rollback.go:369 ./cli/app/upgrade.go:478 msgid "no-converge-checks" msgstr "" -#: ./cli/app/deploy.go:429 ./cli/app/rollback.go:360 ./cli/app/upgrade.go:469 +#: ./cli/app/deploy.go:430 ./cli/app/rollback.go:361 ./cli/app/upgrade.go:470 msgid "no-domain-checks" msgstr "" @@ -3940,7 +3940,7 @@ msgstr "" msgid "only show errors" msgstr "" -#: ./cli/app/upgrade.go:488 +#: ./cli/app/upgrade.go:489 msgid "only show release notes" msgstr "" @@ -3971,22 +3971,22 @@ msgstr "" msgid "parsed following command arguments: %s" msgstr "" -#: ./cli/app/upgrade.go:345 +#: ./cli/app/upgrade.go:346 #, c-format msgid "parsing chosen upgrade version failed: %s" msgstr "" -#: ./cli/app/upgrade.go:389 +#: ./cli/app/upgrade.go:390 #, c-format msgid "parsing deployed version failed: %s" msgstr "" -#: ./cli/app/upgrade.go:350 +#: ./cli/app/upgrade.go:351 #, c-format msgid "parsing deployment version failed: %s" msgstr "" -#: ./cli/app/upgrade.go:356 ./cli/app/upgrade.go:395 +#: ./cli/app/upgrade.go:357 ./cli/app/upgrade.go:396 #, c-format msgid "parsing recipe version failed: %s" msgstr "" @@ -4011,7 +4011,7 @@ msgstr "" msgid "pattern" msgstr "" -#: ./cli/app/deploy.go:424 ./cli/app/env.go:327 ./cli/app/remove.go:165 ./cli/app/rollback.go:355 ./cli/app/upgrade.go:464 ./cli/app/volume.go:219 +#: ./cli/app/deploy.go:425 ./cli/app/env.go:327 ./cli/app/remove.go:165 ./cli/app/rollback.go:356 ./cli/app/upgrade.go:465 ./cli/app/volume.go:219 msgid "perform action without further prompt" msgstr "" @@ -4021,22 +4021,22 @@ msgstr "" msgid "pl,p" msgstr "" -#: ./cli/app/rollback.go:267 +#: ./cli/app/rollback.go:268 #, c-format msgid "please select a downgrade (version: %s):" msgstr "" -#: ./cli/app/rollback.go:272 +#: ./cli/app/rollback.go:273 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" msgstr "" -#: ./cli/app/upgrade.go:312 +#: ./cli/app/upgrade.go:313 #, c-format msgid "please select an upgrade (version: %s):" msgstr "" -#: ./cli/app/upgrade.go:317 +#: ./cli/app/upgrade.go:318 #, c-format msgid "please select an upgrade (version: %s, chaos: %s):" msgstr "" @@ -4119,7 +4119,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:624 +#: ./cli/app/backup.go:327 ./cli/app/list.go:304 ./cli/app/move.go:350 ./cli/app/run.go:23 ./cli/app/upgrade.go:487 ./cli/catalogue/catalogue.go:302 ./cli/recipe/recipe.go:12 ./cli/recipe/release.go:624 msgid "r" msgstr "" @@ -4239,7 +4239,7 @@ msgstr "" msgid "release failed. any changes made have been reverted" msgstr "" -#: ./cli/app/upgrade.go:485 +#: ./cli/app/upgrade.go:486 msgid "releasenotes" msgstr "" @@ -4543,7 +4543,7 @@ msgstr "" msgid "run command locally" msgstr "" -#: ./cli/app/deploy.go:281 ./cli/app/upgrade.go:293 +#: ./cli/app/deploy.go:282 ./cli/app/upgrade.go:294 #, c-format msgid "run the following post-deploy commands: %s" msgstr "" @@ -4626,12 +4626,12 @@ msgstr "" msgid "secret not found: %s" msgstr "" -#: ./cli/app/deploy.go:358 +#: ./cli/app/deploy.go:359 #, c-format msgid "secret not generated: %s" msgstr "" -#: ./cli/app/deploy.go:356 +#: ./cli/app/deploy.go:357 #, c-format msgid "secret not inserted (#generate=false): %s" msgstr "" @@ -4650,7 +4650,7 @@ msgstr "" msgid "secrets are %s shown again, please save them %s" msgstr "" -#: ./cli/app/deploy.go:306 +#: ./cli/app/deploy.go:307 #, c-format msgid "selected latest recipe version: %s (from %d available versions)" msgstr "" @@ -4775,7 +4775,7 @@ msgstr "" msgid "severity" msgstr "" -#: ./cli/app/deploy.go:456 ./cli/app/rollback.go:379 ./cli/app/upgrade.go:496 +#: ./cli/app/deploy.go:457 ./cli/app/rollback.go:380 ./cli/app/upgrade.go:497 msgid "show all configs & images, including unchanged ones" msgstr "" @@ -4799,7 +4799,7 @@ msgstr "" msgid "show debug messages" msgstr "" -#: ./cli/app/deploy.go:453 ./cli/app/rollback.go:376 ./cli/app/upgrade.go:493 +#: ./cli/app/deploy.go:454 ./cli/app/rollback.go:377 ./cli/app/upgrade.go:494 msgid "show-unchanged" msgstr "" @@ -4847,11 +4847,11 @@ msgstr "" msgid "skipping converge logic checks" msgstr "" -#: ./cli/app/deploy.go:208 +#: ./cli/app/deploy.go:209 msgid "skipping domain checks" msgstr "" -#: ./cli/app/deploy.go:205 +#: ./cli/app/deploy.go:206 msgid "skipping domain checks, no DOMAIN=... configured" msgstr "" @@ -5653,27 +5653,27 @@ msgstr "" msgid "version wiped from %s.env" msgstr "" -#: ./cli/app/deploy.go:372 +#: ./cli/app/deploy.go:373 #, c-format msgid "version: taking chaos version: %s" msgstr "" -#: ./cli/app/deploy.go:398 +#: ./cli/app/deploy.go:399 #, c-format msgid "version: taking deployed version: %s" msgstr "" -#: ./cli/app/deploy.go:403 +#: ./cli/app/deploy.go:404 #, c-format msgid "version: taking new recipe version: %s" msgstr "" -#: ./cli/app/deploy.go:392 +#: ./cli/app/deploy.go:393 #, c-format msgid "version: taking version from .env file: %s" msgstr "" -#: ./cli/app/deploy.go:378 +#: ./cli/app/deploy.go:379 #, c-format msgid "version: taking version from cli arg: %s" msgstr "" @@ -5801,7 +5801,7 @@ msgstr "" msgid "writer: %v, " msgstr "" -#: ./cli/app/deploy.go:288 ./cli/app/new.go:255 ./cli/app/rollback.go:256 ./cli/app/undeploy.go:120 ./cli/app/upgrade.go:301 +#: ./cli/app/deploy.go:289 ./cli/app/new.go:255 ./cli/app/rollback.go:257 ./cli/app/undeploy.go:120 ./cli/app/upgrade.go:302 #, c-format msgid "writing recipe version failed: %s" msgstr "" diff --git a/pkg/i18n/locales/es.po b/pkg/i18n/locales/es.po index 501b37f2..8ff1b6ff 100644 --- a/pkg/i18n/locales/es.po +++ b/pkg/i18n/locales/es.po @@ -2,10 +2,11 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: EMAIL\n" -"POT-Creation-Date: 2026-06-09 16:29+0200\n" +"POT-Creation-Date: 2026-06-14 17:56+0200\n" "PO-Revision-Date: 2026-02-28 13:52+0000\n" "Last-Translator: chasqui \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -100,7 +101,8 @@ msgstr "" " abra aplicacion secreto insertar 1312.net my_secret v1 secreto.txt -f\n" "\n" " # insertar secreto desde stdin\n" -" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net my_secret v1" +" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net " +"my_secret v1" #: cli/app/list.go:54 msgid "" @@ -151,7 +153,8 @@ msgstr "" " 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" +" 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" @@ -164,7 +167,8 @@ msgid "" " # pull lost app .env file\n" " abra app env pull my.gitea.net --server 1312.net" msgstr "" -" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones locales\n" +" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones " +"locales\n" " abra aplicacion entorno obtener 1312.net --force\n" "\n" " # Extraer el archivo .env perdido de la aplicación\n" @@ -390,8 +394,12 @@ msgstr "%s se ha escalado a 1" #: pkg/catalogue/catalogue.go:40 #, c-format -msgid "%s has locally unstaged changes? please commit/remove your changes before proceeding" -msgstr "¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus cambios antes de continuar" +msgid "" +"%s has locally unstaged changes? please commit/remove your changes before " +"proceeding" +msgstr "" +"¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus " +"cambios antes de continuar" #: cli/internal/recipe.go:114 #, c-format @@ -411,7 +419,9 @@ msgstr "%s no tiene secretos para generar, omitiendo..." #: pkg/recipe/compose.go:107 #, c-format msgid "%s has no version label? try running \"abra recipe sync %s\" first?" -msgstr "¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta sincronizar %s\" primero?" +msgstr "" +"¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta " +"sincronizar %s\" primero?" #: pkg/secret/pass.go:29 #, c-format @@ -443,19 +453,19 @@ msgstr "¿%s no tiene un archivo compose.yml o compose.*.yml?" msgid "%s is missing the TYPE env var?" msgstr "¿A %s le falta la variable de entorno TYPE?" -#: cli/app/rollback.go:309 cli/app/rollback.go:313 +#: cli/app/rollback.go:310 cli/app/rollback.go:314 #, c-format msgid "%s is not a downgrade for %s?" msgstr "¿%s no es un downgrade para %s?" -#: cli/app/upgrade.go:429 cli/app/upgrade.go:433 +#: cli/app/upgrade.go:430 cli/app/upgrade.go:434 #, c-format msgid "%s is not an upgrade for %s?" msgstr "¿%s no es una actualización para %s?" #: cli/app/env.go:146 cli/app/logs.go:65 cli/app/ps.go:62 #: cli/app/restart.go:100 cli/app/services.go:55 cli/app/undeploy.go:66 -#: cli/app/upgrade.go:450 +#: cli/app/upgrade.go:451 #, c-format msgid "%s is not deployed?" msgstr "¿%s no está desplegado?" @@ -475,7 +485,7 @@ msgstr "%s todavía está desplegado. Ejecuta \"abra aplicacion plegar %s\"" msgid "%s missing context, run \"abra server add %s\"?" msgstr "falta contexto %s, ¿ejecutar \"abra servidor agregar %s\"?" -#: cli/app/deploy.go:194 cli/app/upgrade.go:210 +#: cli/app/deploy.go:195 cli/app/upgrade.go:211 #, c-format msgid "%s missing from %s.env" msgstr "falta %s de %s.env" @@ -512,13 +522,18 @@ msgstr "%s eliminado del almacén de contraseñas" #: cli/app/new.go:224 #, c-format -msgid "%s requires secret generation before deploy, run \"abra app secret generate %s --all\"" -msgstr "%s requiere generación de secretos antes del despliegue, ejecuta \"abra aplicacion secreto generar %s --all\"" +msgid "" +"%s requires secret generation before deploy, run \"abra app secret generate " +"%s --all\"" +msgstr "" +"%s requiere generación de secretos antes del despliegue, ejecuta \"abra " +"aplicacion secreto generar %s --all\"" #: cli/app/new.go:228 #, c-format msgid "%s requires secret insertion before deploy (#generate=false)" -msgstr "%s requiere inserción de secretos antes del despliegue (#generate=false)" +msgstr "" +"%s requiere inserción de secretos antes del despliegue (#generate=false)" #: cli/app/new.go:155 #, c-format @@ -655,19 +670,23 @@ msgstr "%s: no se puede resolver la dirección IPv4: %s" msgid "%s: waiting %d seconds before next retry" msgstr "%s: esperando %d segundos antes del siguiente reintento" -#: cli/app/upgrade.go:424 +#: cli/app/upgrade.go:425 #, c-format msgid "'%s' is not a known version" msgstr "'%s' no es una versión conocida" -#: cli/app/rollback.go:304 cli/app/upgrade.go:419 +#: cli/app/rollback.go:305 cli/app/upgrade.go:420 #, c-format msgid "'%s' is not a known version for %s" msgstr "'%s' no es una versión conocida para %s" #: cli/app/volume.go:175 -msgid "'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode is enabled" -msgstr "'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, el modo vim está activado" +msgid "" +"'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode " +"is enabled" +msgstr "" +"'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, " +"el modo vim está activado" #: cli/app/cmd.go:125 #, c-format @@ -691,27 +710,35 @@ msgstr "Se utiliza una plantilla de receta gestionada por la comunidad." msgid "" "A recipe is a blueprint for an app.\n" "\n" -"It is a bunch of config files which describe how to deploy and maintain an app.\n" +"It is a bunch of config files which describe how to deploy and maintain an " +"app.\n" "Recipes are maintained by the Co-op Cloud community and you can use Abra to\n" "read them, deploy them and create apps for you.\n" "\n" -"Anyone who uses a recipe can become a maintainer. Maintainers typically make\n" -"sure the recipe is in good working order and the config upgraded in a timely\n" +"Anyone who uses a recipe can become a maintainer. Maintainers typically " +"make\n" +"sure the recipe is in good working order and the config upgraded in a " +"timely\n" "manner." msgstr "" "Una receta son las instrucciones para crear una aplicación.\n" "\n" -"Es un conjunto de archivos de configuración, que describen cómo desplegar y mantener una aplicación.\n" -"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra para\n" +"Es un conjunto de archivos de configuración, que describen cómo desplegar y " +"mantener una aplicación.\n" +"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra " +"para\n" "leerlas, desplegarlas y crear aplicaciones para ti.\n" "\n" -"Cualquiera que use una receta puede convertirse en mantenedor. Los mantenedores típicamente se\n" -"aseguran de que la receta funcione correctamente y de que la configuración se actualice de manera oportuna." +"Cualquiera que use una receta puede convertirse en mantenedor. Los " +"mantenedores típicamente se\n" +"aseguran de que la receta funcione correctamente y de que la configuración " +"se actualice de manera oportuna." #: cli/app/remove.go:57 #, c-format msgid "ALERTA ALERTA: deleting %s data and config (local/remote)" -msgstr "ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" +msgstr "" +"ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" #. translators: Short description for `server add` command #: cli/server/add.go:30 @@ -723,7 +750,8 @@ msgid "" "Add a new server to your configuration so that it can be managed by Abra.\n" "\n" "Abra relies on the standard SSH command-line and ~/.ssh/config for client\n" -"connection details. You must configure an entry per-host in your ~/.ssh/config\n" +"connection details. You must configure an entry per-host in your ~/.ssh/" +"config\n" "for each server:\n" "\n" " Host 1312.net 1312\n" @@ -732,15 +760,19 @@ msgid "" " Port 12345\n" " IdentityFile ~/.ssh/antifa@somewhere\n" "\n" -"If \"--local\" is passed, then Abra assumes that the current local server is\n" -"intended as the target server. This is useful when you want to have your entire\n" +"If \"--local\" is passed, then Abra assumes that the current local server " +"is\n" +"intended as the target server. This is useful when you want to have your " +"entire\n" "Co-op Cloud config located on the server itself, and not on your local\n" "developer machine. The domain is then set to \"default\"." msgstr "" -"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado por Abra.\n" +"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado " +"por Abra.\n" "\n" "Para agregar servidor Remoto:\n" -"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de conexión al servidor. \n" +"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de " +"conexión al servidor. \n" "Debes configurar una entrada en ~/.ssh/config para cada servidor:\n" "\n" " Host 1312.net 1312\n" @@ -750,16 +782,18 @@ msgstr "" " IdentityFile ~/.ssh/antifa@1312.net\n" "\n" "Para agregar servidor local;\n" -"Si agregas \"--local\", Abra asumirá que la computadora local actual es el servidor que quieres agregar. \n" +"Si agregas \"--local\", Abra asumirá que la computadora local actual es el " +"servidor que quieres agregar. \n" "Esto es útil cuando quieres tener Abra en el mismo servidor. \n" "El dominio se establece entonces como \"default\"." #: cli/app/labels.go:33 msgid "Both local recipe and live deployment labels are shown." -msgstr "Se muestran tanto la receta local como las etiquetas del despliegue en vivo." +msgstr "" +"Se muestran tanto la receta local como las etiquetas del despliegue en vivo." #: 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:414 +#: cli/app/cmd.go:285 cli/app/cp.go:385 cli/app/deploy.go:415 #: cli/app/labels.go:143 cli/app/list.go:335 cli/app/new.go:411 #: cli/app/ps.go:213 cli/app/restart.go:163 cli/app/restore.go:138 #: cli/app/secret.go:569 cli/app/secret.go:609 cli/app/secret.go:633 @@ -820,12 +854,16 @@ msgstr "💕 Clona la 📜 receta(s) en local" msgid "" "Compare env vars in both the app \".env\" and recipe \".env.sample\" file.\n" "\n" -"The goal is to ensure that recipe \".env.sample\" env vars are defined in your\n" -"app \".env\" file. Only env var definitions in the \".env.sample\" which are\n" -"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not include\n" +"The goal is to ensure that recipe \".env.sample\" env vars are defined in " +"your\n" +"app \".env\" file. Only env var definitions in the \".env.sample\" which " +"are\n" +"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not " +"include\n" "these env vars, then \"check\" will complain.\n" "\n" -"Recipe maintainers may or may not provide defaults for env vars within their\n" +"Recipe maintainers may or may not provide defaults for env vars within " +"their\n" "recipes regardless of commenting or not (e.g. through the use of\n" "${FOO:} syntax). \"check\" does not confirm or deny this for you." msgstr "" @@ -868,24 +906,31 @@ msgstr "Crea una nueva 📸 instantánea (respaldo)" msgid "" "Create a new version of a recipe.\n" "\n" -"These versions are then published on the Co-op Cloud recipe catalogue. These\n" +"These versions are then published on the Co-op Cloud recipe catalogue. " +"These\n" "versions take the following form:\n" "\n" " a.b.c+x.y.z\n" "\n" -"Where the \"a.b.c\" part is a semantic version determined by the maintainer. The\n" -"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main container\n" +"Where the \"a.b.c\" part is a semantic version determined by the maintainer. " +"The\n" +"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main " +"container\n" "which contains the software to be used, by naming convention).\n" "\n" "We maintain a semantic versioning scheme (\"a.b.c\") alongside the recipe\n" -"versioning scheme (\"x.y.z\") in order to maximise the chances that the nature of\n" +"versioning scheme (\"x.y.z\") in order to maximise the chances that the " +"nature of\n" "recipe updates are properly communicated. I.e. developers of an app might\n" -"publish a minor version but that might lead to changes in the recipe which are\n" +"publish a minor version but that might lead to changes in the recipe which " +"are\n" "major and therefore require intervention while doing the upgrade work.\n" "\n" "This command will publish your new release to git.coopcloud.tech. This\n" -"requires that you have permission to git push to these repositories and have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" +"requires that you have permission to git push to these repositories and " +"have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to " +"add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -901,14 +946,20 @@ msgstr "" "Donde \"a.b.c\" es la versión semántica que decide el mantenedor. La parte \n" "\"x.y.z\" es la versión semántica oficial de la imagen de la aplicación .\n" "\n" -"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta (\"x.y.z\") \n" -"para que sea más claro qué tipo de cambios trae cada actualización. Por ejemplo, \n" -"los desarrolladores de una aplicación pueden publicar una versión menor, pero \n" -"la receta podría necesitar cambios importantes que requieran atención al actualizar.\n" +"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta " +"(\"x.y.z\") \n" +"para que sea más claro qué tipo de cambios trae cada actualización. Por " +"ejemplo, \n" +"los desarrolladores de una aplicación pueden publicar una versión menor, " +"pero \n" +"la receta podría necesitar cambios importantes que requieran atención al " +"actualizar.\n" "\n" "Este comando publicará tu nuevo release en git.coopcloud.tech. Necesitas \n" -"permiso para hacer git push en esos repositorios y tener tus claves SSH configuradas \n" -"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu contraseña antes \n" +"permiso para hacer git push en esos repositorios y tener tus claves SSH " +"configuradas \n" +"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu " +"contraseña antes \n" "de ejecutar:\n" "\n" " eval `ssh-agent`\n" @@ -925,21 +976,27 @@ msgid "" "This new app configuration is stored in your $ABRA_DIR directory under the\n" "appropriate server.\n" "\n" -"This command does not deploy your app for you. You will need to run \"abra app\n" +"This command does not deploy your app for you. You will need to run \"abra " +"app\n" "deploy \" to do so.\n" "\n" -"You can see what recipes are available (i.e. values for the [recipe] argument)\n" +"You can see what recipes are available (i.e. values for the [recipe] " +"argument)\n" "by running \"abra recipe ls\".\n" "\n" "Recipe commit hashes are supported values for \"[version]\".\n" "\n" -"Passing the \"--secrets/-S\" flag will automatically generate secrets for your\n" +"Passing the \"--secrets/-S\" flag will automatically generate secrets for " +"your\n" "app and store them encrypted at rest on the chosen target server. These\n" -"generated secrets are only visible at generation time, so please take care to\n" +"generated secrets are only visible at generation time, so please take care " +"to\n" "store them somewhere safe.\n" "\n" -"You can use the \"--pass/-P\" to store these generated passwords locally in a\n" -"pass store (see passwordstore.org for more). The pass command must be available\n" +"You can use the \"--pass/-P\" to store these generated passwords locally in " +"a\n" +"pass store (see passwordstore.org for more). The pass command must be " +"available\n" "on your $PATH." msgstr "" "Crea una nueva aplicación a partir de una receta.\n" @@ -949,18 +1006,20 @@ msgstr "" "Ojo: Este comando no despliega la aplicación.\n" "\n" "Si pasas la opción \"--secrets/-S\" se generarán automáticamente secretos \n" -"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos secretos \n" +"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos " +"secretos \n" "generados solo se muestran al momento de crearlos, así que guárdalos \n" "en un lugar seguro.\n" "\n" "Los hashes de commit de la receta son valores válidos para \"[version]\".\n" "\n" -"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas localmente \n" +"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas " +"localmente \n" "en un almacén pass (ver passwordstore.org). El comando pass debe estar \n" "disponible en tu $PATH." -#: cli/app/deploy.go:430 cli/app/new.go:387 cli/app/rollback.go:361 -#: cli/app/upgrade.go:470 +#: cli/app/deploy.go:431 cli/app/new.go:387 cli/app/rollback.go:362 +#: cli/app/upgrade.go:471 msgid "D" msgstr "" @@ -989,9 +1048,11 @@ msgstr "📤 Despliega una 🚀 aplicación" msgid "" "Deploy an app.\n" "\n" -"This command supports chaos operations. Use \"--chaos/-C\" to deploy your recipe\n" +"This command supports chaos operations. Use \"--chaos/-C\" to deploy your " +"recipe\n" "checkout as-is. Recipe commit hashes are also supported as values for\n" -"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos operations." +"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos " +"operations." msgstr "" "Despliega una aplicación.\n" "\n" @@ -1014,7 +1075,8 @@ msgstr "⬇️ Descarga una 📸 instantánea" msgid "" "Downloads a backup.tar.gz to the current working directory.\n" "\n" -"\"--volumes/-v\" includes data contained in volumes alongide paths specified in\n" +"\"--volumes/-v\" includes data contained in volumes alongide paths specified " +"in\n" "\"backupbot.backup.path\" labels." msgstr "" "Descarga un backup.tar.gz al directorio de trabajo actual.\n" @@ -1058,21 +1120,28 @@ msgstr "NOMBRE GENERADO" msgid "" "Generate a new copy of the recipe catalogue.\n" "\n" -"N.B. this command **will** wipe local unstaged changes from your local recipes\n" -"if present. \"--chaos/-C\" on this command refers to the catalogue repository\n" -"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose your\n" +"N.B. this command **will** wipe local unstaged changes from your local " +"recipes\n" +"if present. \"--chaos/-C\" on this command refers to the catalogue " +"repository\n" +"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose " +"your\n" "changes.\n" "\n" "It is possible to generate new metadata for a single recipe by passing\n" "[recipe]. The existing local catalogue will be updated, not overwritten.\n" "\n" -"It is quite easy to get rate limited by Docker Hub when running this command.\n" -"If you have a Hub account you can \"docker login\" and Abra will automatically\n" +"It is quite easy to get rate limited by Docker Hub when running this " +"command.\n" +"If you have a Hub account you can \"docker login\" and Abra will " +"automatically\n" "use those details.\n" "\n" "Publish your new release to git.coopcloud.tech with \"--publish/-p\". This\n" -"requires that you have permission to git push to these repositories and have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" +"requires that you have permission to git push to these repositories and " +"have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to " +"add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -1110,7 +1179,8 @@ msgid "" msgstr "" "Genera un informe de todas las aplicaciones gestionadas.\n" "\n" -"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre el estado de despliegue." +"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre " +"el estado de despliegue." #: cli/app/new.go:321 msgid "Generate app secrets?" @@ -1139,7 +1209,8 @@ msgstr "📋 Muestra el catálogo de 📜 recetas" #: pkg/recipe/git.go:459 #, c-format msgid "GetRecipeVersions encountered error for %s: %s (collected %d versions)" -msgstr "GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" +msgstr "" +"GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" #: cli/recipe/new.go:125 msgid "Git (user) name to do commits with" @@ -1289,17 +1360,22 @@ msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas" msgid "" "Move an app to a differnt server.\n" "\n" -"This command will migrate an app config and copy secrets and volumes from the\n" -"old server to the new one. The app MUST be deployed on the old server before\n" +"This command will migrate an app config and copy secrets and volumes from " +"the\n" +"old server to the new one. The app MUST be deployed on the old server " +"before\n" "doing the move. The app will be undeployed from the current server but not\n" "deployed on the new server.\n" "\n" -"The \"tar\" command is required on both the old and new server as well as \"sudo\"\n" +"The \"tar\" command is required on both the old and new server as well as " +"\"sudo\"\n" "permissions. The \"rsync\" command is required on your local machine for\n" "transferring volumes.\n" "\n" -"Do not forget to update your DNS records. Don't panic, it might take a while\n" -"for the dust to settle after you move an app. If anything goes wrong, you can\n" +"Do not forget to update your DNS records. Don't panic, it might take a " +"while\n" +"for the dust to settle after you move an app. If anything goes wrong, you " +"can\n" "always move the app config file to the original server and deploy it there\n" "again. No data is removed from the old server.\n" "\n" @@ -1324,7 +1400,8 @@ msgstr "" "de vuelta al servidor original y desplegarlo otra vez. No se elimina \n" "ningún dato del servidor antiguo.\n" "\n" -"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se moverán." +"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se " +"moverán." #. translators: Short description for `app move` command #: cli/app/move.go:41 @@ -1381,7 +1458,8 @@ msgstr "🧹 Limpiar recursos en un 🕋 servidor" msgid "" "Prunes unused containers, networks, and dangling images.\n" "\n" -"Use \"--volumes/-v\" to remove volumes that are not associated with a deployed\n" +"Use \"--volumes/-v\" to remove volumes that are not associated with a " +"deployed\n" "app. This can result in unwanted data loss if not used carefully." msgstr "" "Elimina contenedores, redes e imágenes que no se usan.\n" @@ -1393,13 +1471,16 @@ msgstr "" #. translators: Short description for `app env pull` command #: cli/app/env.go:80 msgid "Pull app environment values from a deployed app" -msgstr "Obtener (pull) valores de entorno de la aplicación desde una aplicación desplegada" +msgstr "" +"Obtener (pull) valores de entorno de la aplicación desde una aplicación " +"desplegada" #: cli/app/env.go:81 msgid "" "Pull app environment values from a deploymed app.\n" "\n" -"A convenient command for when you've lost your app environment file or want to\n" +"A convenient command for when you've lost your app environment file or want " +"to\n" "synchronize your local app environment values with what is deployed live." msgstr "" "Extrae los valores de entorno de una aplicación desplegada.\n" @@ -1435,7 +1516,8 @@ msgid "" "Remove a managed server.\n" "\n" "Abra will remove the internal bookkeeping ($ABRA_DIR/servers/...) and\n" -"underlying client connection context. This server will then be lost in time,\n" +"underlying client connection context. This server will then be lost in " +"time,\n" "like tears in rain." msgstr "" "Eliminar un servidor gestionado.\n" @@ -1457,7 +1539,8 @@ msgstr "💀 Borrar completamente una 🚀 aplicación (local y remotamente)" #. translators: Short description for `recipe reset` command #: cli/recipe/reset.go:23 msgid "Remove all unstaged changes from recipe config" -msgstr "💀 Borra los cambios no actualizados de la configuración de la 📜 receta" +msgstr "" +"💀 Borra los cambios no actualizados de la configuración de la 📜 receta" #: cli/app/remove.go:29 msgid "" @@ -1466,16 +1549,19 @@ msgid "" "By default, it will prompt for confirmation before proceeding. All secrets,\n" "volumes and the local app env file will be deleted.\n" "\n" -"Only run this command when you are sure you want to completely remove the app\n" +"Only run this command when you are sure you want to completely remove the " +"app\n" "and all associated app data. This is a destructive action, Be Careful!\n" "\n" "If you would like to delete specific volumes or secrets, please use removal\n" "sub-commands under \"app volume\" and \"app secret\" instead.\n" "\n" -"Please note, if you delete the local app env file without removing volumes and\n" +"Please note, if you delete the local app env file without removing volumes " +"and\n" "secrets first, Abra will *not* be able to help you remove them afterwards.\n" "\n" -"To delete everything without prompt, use the \"--force/-f\" or the \"--no-input/n\"\n" +"To delete everything without prompt, use the \"--force/-f\" or the \"--no-" +"input/n\"\n" "flag." msgstr "" "Elimina todo lo relacionado con una aplicación que ya está plegada.\n" @@ -1506,11 +1592,14 @@ msgstr "💀 Elimina 📦 volúmen(es) asociados a una 🚀 aplicación" msgid "" "Remove volumes associated with an app.\n" "\n" -"The app in question must be undeployed before you try to remove volumes. See\n" +"The app in question must be undeployed before you try to remove volumes. " +"See\n" "\"abra app undeploy \" for more.\n" "\n" -"The command is interactive and will show a multiple select input which allows\n" -"you to make a seclection. Use the \"?\" key to see more help on navigating this\n" +"The command is interactive and will show a multiple select input which " +"allows\n" +"you to make a seclection. Use the \"?\" key to see more help on navigating " +"this\n" "interface.\n" "\n" "Passing \"--force/-f\" will select all volumes for removal. Be careful." @@ -1546,19 +1635,25 @@ msgstr "⏪ Revertir una 🚀 aplicación una versión anterior" #. translators: Short description for `app run` command #: cli/app/run.go:30 msgid "Run a command inside a service container" -msgstr "Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" +msgstr "" +"Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" #: cli/app/cmd.go:31 msgid "" "Run an app specific command.\n" "\n" -"These commands are bash functions, defined in the abra.sh of the recipe itself.\n" -"They can be run within the context of a service (e.g. app) or locally on your\n" +"These commands are bash functions, defined in the abra.sh of the recipe " +"itself.\n" +"They can be run within the context of a service (e.g. app) or locally on " +"your\n" "work station by passing \"--local/-l\".\n" "\n" -"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-l\") must\n" -"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" +"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-" +"l\") must\n" +"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" @@ -1709,8 +1804,10 @@ msgid "" "Arbitrary secret insertion is not supported. Secrets that are inserted must\n" "match those configured in the recipe beforehand.\n" "\n" -"This command can be useful when you want to manually generate secrets for an app\n" -"environment. Typically, you can let Abra generate them for you on app creation\n" +"This command can be useful when you want to manually generate secrets for an " +"app\n" +"environment. Typically, you can let Abra generate them for you on app " +"creation\n" "(see \"abra app new --secrets/-S\" for more)." msgstr "" "Este comando inserta un secreto en el entorno de una aplicación.\n" @@ -1761,17 +1858,22 @@ msgstr "" msgid "" "This command rolls an app back to a previous version.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only " +"recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a specific\n" +"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a " +"specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what downgrades\n" -"are available. The live deployment version is the \"source of truth\" in this\n" +"Only the deployed version is consulted when trying to determine what " +"downgrades\n" +"are available. The live deployment version is the \"source of truth\" in " +"this\n" "case. The stored .env version is not consulted.\n" "\n" -"A downgrade can be destructive, please ensure you have a copy of your app data\n" +"A downgrade can be destructive, please ensure you have a copy of your app " +"data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Este comando revierte una aplicación a una versión anterior.\n" @@ -1795,7 +1897,8 @@ msgstr "" msgid "" "This does not destroy any application data.\n" "\n" -"However, you should remain vigilant, as your swarm installation will consider\n" +"However, you should remain vigilant, as your swarm installation will " +"consider\n" "any previously attached volumes as eligible for pruning once undeployed.\n" "\n" "Passing \"--prune/-p\" does not remove those volumes." @@ -1821,7 +1924,8 @@ msgid "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" +"abra\n" "\n" "Zsh:\n" " # If shell autocompletion is not already enabled in your environment,\n" @@ -1857,7 +1961,8 @@ msgstr "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" +"abra\n" "\n" "Zsh:\n" " # Si la autocompletación no está habilitada, actívala una vez:\n" @@ -1881,7 +1986,7 @@ msgstr "" " PS> abra autocomplete powershell > abra.ps1\n" " # y fuente (source) ese archivo desde tu perfil de PowerShell." -#: cli/app/deploy.go:454 cli/app/rollback.go:377 cli/app/upgrade.go:494 +#: cli/app/deploy.go:455 cli/app/rollback.go:378 cli/app/upgrade.go:495 msgid "U" msgstr "" @@ -1908,7 +2013,8 @@ msgid "" "It will update the relevant compose file tags on the local file system.\n" "\n" "Some image tags cannot be parsed because they do not follow some sort of\n" -"semver-like convention. In this case, all possible tags will be listed and it\n" +"semver-like convention. In this case, all possible tags will be listed and " +"it\n" "is up to the end-user to decide.\n" "\n" "The command is interactive and will show a select input which allows you to\n" @@ -1940,8 +2046,10 @@ msgid "" "\n" "By default, the latest stable release is downloaded.\n" "\n" -"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind that\n" -"it may contain absolutely catastrophic deal-breaker bugs. Thank you very much\n" +"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind " +"that\n" +"it may contain absolutely catastrophic deal-breaker bugs. Thank you very " +"much\n" "for the testing efforts 💗" msgstr "" "Actualiza abra in situ con la última versión estable \n" @@ -1962,17 +2070,22 @@ msgstr "📨 Actualizar una 🚀 aplicación" msgid "" "Upgrade an app.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only " +"recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a specific\n" +"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a " +"specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what upgrades\n" -"are available. The live deployment version is the \"source of truth\" in this\n" +"Only the deployed version is consulted when trying to determine what " +"upgrades\n" +"are available. The live deployment version is the \"source of truth\" in " +"this\n" "case. The stored .env version is not consulted.\n" "\n" -"An upgrade can be destructive, please ensure you have a copy of your app data\n" +"An upgrade can be destructive, please ensure you have a copy of your app " +"data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Actualizar una aplicación.\n" @@ -2011,19 +2124,26 @@ msgid "" "Examples:\n" "{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n" -" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n" +"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name " +"\"help\"))}}\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" -" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n" +"Additional help topics:{{range .Commands}}" +"{{if .IsAdditionalHelpTopicCommand}}\n" +" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}" +"{{if .HasAvailableSubCommands}}\n" "\n" -"Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n" +"Use \"{{.CommandPath}} [command] --help\" for more information about a " +"command.{{end}}\n" msgstr "" "Uso:{{if .Runnable}}\n" " {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n" @@ -2038,23 +2158,34 @@ msgstr "" "\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" +"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" +"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}" +"{{if .HasAvailableInheritedFlags}}\n" "\n" "Opciones globales:\n" -"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\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" +"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" +"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." -msgstr "Usando \"--force/-f\", Git sincroniza una receta existente. No borra los cambios no preparados." +msgid "" +"Using \"--force/-f\" Git syncs an existing recipe. It does not erase " +"unstaged changes." +msgstr "" +"Usando \"--force/-f\", Git sincroniza una receta existente. No borra los " +"cambios no preparados." #: cli/app/secret.go:117 msgid "VALUE" @@ -2085,20 +2216,27 @@ msgstr "[hijack] Fin de stdout" #, c-format msgid "" "\n" -"The following options are two types of initial semantic version that you can\n" -"pick for %s that will be published in the recipe catalogue. This follows the\n" +"The following options are two types of initial semantic version that you " +"can\n" +"pick for %s that will be published in the recipe catalogue. This follows " +"the\n" "semver convention (more on https://semver.org), here is a short cheatsheet\n" "\n" -" 0.1.0: development release, still hacking. when you make a major upgrade\n" -" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move to\n" +" 0.1.0: development release, still hacking. when you make a major " +"upgrade\n" +" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move " +"to\n" " using the \"x\" part when things are stable.\n" "\n" " 1.0.0: public release, assumed to be working. you already have a stable\n" -" and reliable deployment of this app and feel relatively confident\n" +" and reliable deployment of this app and feel relatively " +"confident\n" " about it.\n" "\n" -"If you want people to be able alpha test your current config for %s but don't\n" -"think it is quite reliable, go with 0.1.0 and people will know that things are\n" +"If you want people to be able alpha test your current config for %s but " +"don't\n" +"think it is quite reliable, go with 0.1.0 and people will know that things " +"are\n" "likely to change.\n" "\n" msgstr "" @@ -2109,7 +2247,8 @@ msgstr "" "Resumen rápido:\n" "\n" " 0.1.0: versión de desarrollo, todavía en prueba. Cuando hagas una \n" -"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás a \n" +"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás " +"a \n" "usar la parte \"x\" cuando las cosas estén estables.\n" "\n" " 1.0.0: versión pública, se asume que funciona. Ya tienes un \n" @@ -2127,7 +2266,8 @@ msgid "" "\n" "You need to make a decision about what kind of an update this new recipe\n" "version is. If someone else performs this upgrade, do they have to do some\n" -"migration work or take care of some breaking changes? This can be signaled in\n" +"migration work or take care of some breaking changes? This can be signaled " +"in\n" "the version you specify on the recipe deploy label and is called a semantic\n" "version.\n" "\n" @@ -2137,21 +2277,27 @@ msgid "" "\n" "Here is a semver cheat sheet (more on https://semver.org):\n" "\n" -" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> 2.0.0).\n" -" the upgrade won't work without some preparation work and others need\n" +" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> " +"2.0.0).\n" +" the upgrade won't work without some preparation work and others " +"need\n" " to take care when performing it. \"it could go wrong\".\n" "\n" -" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> 0.2.0).\n" -" the upgrade should Just Work and there are no breaking changes in\n" +" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> " +"0.2.0).\n" +" the upgrade should Just Work and there are no breaking changes " +"in\n" " the app and the recipe config. \"it should go fine\".\n" "\n" -" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this upgrade\n" +" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this " +"upgrade\n" " should also Just Work and is mostly to do with minor bug fixes\n" " and/or security patches. \"nothing to worry about\".\n" "\n" msgstr "" "\n" -"Necesitas decidir qué tipo de actualización es esta nueva versión de la receta. \n" +"Necesitas decidir qué tipo de actualización es esta nueva versión de la " +"receta. \n" "Si otra persona realiza esta actualización, ¿tendrá que hacer migraciones \n" "o atender cambios incompatibles? Eso se indica con la versión semántica \n" "que especifiques en la etiqueta de despliegue de la receta.\n" @@ -2162,17 +2308,25 @@ msgstr "" "\n" "Semántica de semver (más en https://semver.org):\n" "\n" -" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 -> 2.0.0).\n" -" la actualización no funcionará sin trabajo de preparación y otros deben\n" +" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 " +"-> 2.0.0).\n" +" la actualización no funcionará sin trabajo de preparación y otros " +"deben\n" " tener cuidado al realizarla. \"podría salir mal\".\n" "\n" -" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -> 0.2.0).\n" -" la actualización debería funcionar sin problemas y no hay cambios\n" -" incompatibles en la app ni en la configuración de la receta. \"debería ir bien\".\n" +" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 " +"-> 0.2.0).\n" +" la actualización debería funcionar sin problemas y no hay " +"cambios\n" +" incompatibles en la app ni en la configuración de la receta. " +"\"debería ir bien\".\n" "\n" -" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> 0.0.2).\n" -" esta actualización también debería funcionar sin problemas y trata\n" -" principalmente de arreglos menores y/o parches de seguridad. \"nada de qué preocuparse\".\n" +" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> " +"0.0.2).\n" +" esta actualización también debería funcionar sin problemas y " +"trata\n" +" principalmente de arreglos menores y/o parches de seguridad. " +"\"nada de qué preocuparse\".\n" "\n" #: pkg/lint/recipe.go:203 @@ -2338,7 +2492,9 @@ msgstr "aplicacion [comando] [argumento] [opciones]" #: pkg/dns/dns.go:52 #, c-format 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)?" +msgstr "" +"¿El dominio de la aplicación %s (%s) no parece resolverse al servidor de la " +"aplicación %s (%s)?" #: cli/recipe/release.go:349 msgid "app service is missing image tag?" @@ -2368,7 +2524,7 @@ msgstr "Intentando generar y almacenar %s en %s" msgid "attempting to run %s" msgstr "Intentando ejecutar %s" -#: cli/app/deploy.go:283 cli/app/upgrade.go:296 +#: cli/app/deploy.go:284 cli/app/upgrade.go:297 #, c-format msgid "attempting to run post deploy commands, saw: %s" msgstr "Intentando ejecutar los comandos posteriores al despliegue: %s" @@ -2454,8 +2610,8 @@ msgstr "enlace symlink roto en tus carpetas de configuración de abra: %s" #. no spaces in between #. translators: `abra app cp` aliases. use a comma separated list of aliases with #. no spaces in between -#: cli/app/backup.go:148 cli/app/cp.go:30 cli/app/deploy.go:438 -#: cli/app/rollback.go:369 cli/app/upgrade.go:478 +#: cli/app/backup.go:148 cli/app/cp.go:30 cli/app/deploy.go:439 +#: cli/app/rollback.go:370 cli/app/upgrade.go:479 msgid "c" msgstr "" @@ -2494,7 +2650,9 @@ msgstr "cancelado" #: pkg/catalogue/catalogue.go:59 pkg/recipe/git.go:251 #, c-format msgid "cannot ensure %s is up-to-date, no git remotes configured" -msgstr "no se puede asegurar que %s esté actualizado, no hay remotos de git configurados" +msgstr "" +"no se puede asegurar que %s esté actualizado, no hay remotos de git " +"configurados" #: cli/app/config.go:43 pkg/app/app.go:52 #, c-format @@ -2508,17 +2666,24 @@ msgstr "no se puede obtener la etiqueta %s para %s" #: pkg/recipe/git.go:58 #, c-format -msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" -msgstr "no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"?" +msgid "" +"cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" +msgstr "" +"no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención " +"usar \"--caos\"?" -#: cli/app/deploy.go:388 +#: cli/app/deploy.go:389 #, c-format 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\"" +"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\"? \n" -"para volver a un lanzamiento regular, especifica una etiqueta de lanzamiento, SHA de commit o agrega el comando \"--latest\"" +"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 @@ -2527,13 +2692,14 @@ msgstr "no se puede resolver ipv4 para %s?" #: 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" +msgstr "" +"no se puede especificar una etiqueta y un tipo de incremento al mismo tiempo" #: cli/app/secret.go:68 msgid "cannot use '[secret] [version]' and '--all' together" msgstr "no se puede usar '[secreto] [versión]' y '--todos' juntos" -#: cli/app/deploy.go:330 +#: cli/app/deploy.go:331 msgid "cannot use --chaos and --latest together" msgstr "no se puede usar --caos y --latest juntos" @@ -2557,11 +2723,11 @@ msgstr "no se puede usar [server] y --local al mismo tiempo" msgid "cannot use [service] and --all-services/-a together" msgstr "no se puede usar [servicio] y --todos-los-servicios/-a juntos" -#: cli/app/deploy.go:322 cli/app/new.go:80 +#: cli/app/deploy.go:323 cli/app/new.go:80 msgid "cannot use [version] and --chaos together" msgstr "no se puede usar [versión] y --caos juntos" -#: cli/app/deploy.go:326 +#: cli/app/deploy.go:327 msgid "cannot use [version] and --latest together" msgstr "no se puede usar [versión] y --latest juntos" @@ -2598,7 +2764,7 @@ 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:413 +#: cli/app/cmd.go:284 cli/app/cp.go:384 cli/app/deploy.go:414 #: cli/app/labels.go:142 cli/app/list.go:334 cli/app/new.go:410 #: cli/app/ps.go:212 cli/app/restart.go:162 cli/app/restore.go:137 #: cli/app/secret.go:568 cli/app/secret.go:608 cli/app/secret.go:632 @@ -2608,7 +2774,9 @@ msgstr "caos" #: pkg/secret/secret.go:235 #, c-format -msgid "charset=bytes only supports encoding=base64, got encoding=%s for secret %s, defaulting to base64" +msgid "" +"charset=bytes only supports encoding=base64, got encoding=%s for secret %s, " +"defaulting to base64" msgstr "" #. translators: `app check` command @@ -2616,7 +2784,7 @@ msgstr "" msgid "check [flags]" msgstr "verificar [opciones]" -#: cli/app/deploy.go:95 cli/app/undeploy.go:58 cli/app/upgrade.go:442 +#: cli/app/deploy.go:95 cli/app/undeploy.go:58 cli/app/upgrade.go:443 #, c-format msgid "checking whether %s is already deployed" msgstr "verificando si %s ya está desplegado" @@ -2691,13 +2859,21 @@ msgstr "el comando %v no salió después de %v: stderr=%q" #: pkg/upstream/commandconn/commandconn.go:172 #, c-format -msgid "command %v has exited with %v, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s" -msgstr "el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" +msgid "" +"command %v has exited with %v, please make sure the URL is valid, and Docker " +"18.09 or later is installed on the remote host: stderr=%s" +msgstr "" +"el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida " +"y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" #. translators: `app command` command #: cli/app/cmd.go:27 -msgid "command [service | --local] [[args] [flags] | [flags] -- [args]]" -msgstr "ejecutar [servicio | --local] [[argumento] [opciones] | [opciones] -- [argumento]]" +msgid "" +"command [service | --local] [[args] [flags] | [flags] -- " +"[args]]" +msgstr "" +"ejecutar [servicio | --local] [[argumento] [opciones] " +"| [opciones] -- [argumento]]" #: pkg/upstream/commandconn/commandconn.go:239 #, c-format @@ -2781,12 +2957,15 @@ msgstr "tiempo de conexión agotado para %s" #: pkg/recipe/compose.go:191 #, c-format msgid "considering %s config(s) for label update" -msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas" +msgstr "" +"considerando la(s) configuración(es) %s para la actualización de etiquetas" #: pkg/recipe/compose.go:123 #, c-format msgid "considering %s config(s) for tag update" -msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas (tags)" +msgstr "" +"considerando la(s) configuración(es) %s para la actualización de etiquetas " +"(tags)" #: cli/app/undeploy.go:141 cli/server/prune.go:53 #, c-format @@ -2919,7 +3098,7 @@ msgstr "crítico" msgid "critical errors present in %s config" msgstr "errores críticos presentes en la configuración de %s" -#: cli/app/rollback.go:299 +#: cli/app/rollback.go:300 #, c-format msgid "current deployment '%s' is not a known version for %s" msgstr "el despliegue actual '%s' no es una versión conocida para %s" @@ -2971,7 +3150,7 @@ msgstr "despliegue en proceso 🟠" msgid "deploy labels stanza present" msgstr "stanza de etiquetas de despliegue presente" -#: cli/app/deploy.go:448 +#: cli/app/deploy.go:449 msgid "deploy latest recipe version" msgstr "desplegar la última versión de la receta" @@ -3073,11 +3252,11 @@ msgstr "el directorio está vacío: %s" msgid "dirty: %v, " msgstr "" -#: cli/app/deploy.go:440 cli/app/rollback.go:371 cli/app/upgrade.go:480 +#: cli/app/deploy.go:441 cli/app/rollback.go:372 cli/app/upgrade.go:481 msgid "disable converge logic checks" msgstr "desactivar comprobaciones de lógica de convergencia" -#: cli/app/deploy.go:432 cli/app/rollback.go:363 cli/app/upgrade.go:472 +#: cli/app/deploy.go:433 cli/app/rollback.go:364 cli/app/upgrade.go:473 msgid "disable public DNS checks" msgstr "desactivar comprobaciones de DNS público" @@ -3091,7 +3270,8 @@ msgstr "no solicitar un TTY" #: pkg/ssh/ssh.go:26 msgid "docker: is the daemon running / your user has docker permissions?" -msgstr "docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" +msgstr "" +"docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" #: cli/app/new.go:386 msgid "domain" @@ -3149,7 +3329,8 @@ msgstr "ejecución de prueba: no se creó etiqueta de git (%s)" #: 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" +msgstr "" +"ejecución de prueba: no se sincronizará la etiqueta %s para la receta %s" #: pkg/git/remote.go:15 #, c-format @@ -3187,11 +3368,14 @@ msgstr "habilitar ejecución de comandos pre/post-hook" #: cli/internal/validate.go:82 #, c-format msgid "ensure %s recipe compose.* files include \"version: '3.8'\"" -msgstr "asegúrate de que los archivos compose.* de la receta %s incluyan \"version: '3.8'\"" +msgstr "" +"asegúrate de que los archivos compose.* de la receta %s incluyan \"version: " +"'3.8'\"" #: pkg/lint/recipe.go:69 msgid "ensure 'version: \"3.8\"' in compose configs" -msgstr "asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" +msgstr "" +"asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" #: pkg/lint/recipe.go:163 msgid "ensure \"image: ...\" set on all services" @@ -3208,8 +3392,12 @@ msgid "ensuring env version %s" msgstr "asegurando la versión del entorno (env) %s" #: cli/recipe/upgrade.go:285 -msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled" -msgstr "presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta etiqueta; modo vim habilitado" +msgid "" +"enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode " +"is enabled" +msgstr "" +"presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta " +"etiqueta; modo vim habilitado" #. translators: `app env` command group #: cli/app/env.go:311 @@ -3288,8 +3476,8 @@ msgstr "extrayendo secreto %s en %s" #. translators: `abra recipe fetch` aliases. use a comma separated list of aliases #. with no spaces in between -#: cli/app/deploy.go:422 cli/app/env.go:325 cli/app/remove.go:163 -#: cli/app/rollback.go:353 cli/app/secret.go:593 cli/app/upgrade.go:462 +#: cli/app/deploy.go:423 cli/app/env.go:325 cli/app/remove.go:163 +#: cli/app/rollback.go:354 cli/app/secret.go:593 cli/app/upgrade.go:463 #: cli/app/volume.go:217 cli/recipe/fetch.go:20 cli/recipe/fetch.go:138 msgid "f" msgstr "" @@ -3322,12 +3510,14 @@ msgstr "🛑 error al hacer commit: %s" #: cli/app/move.go:167 #, c-format msgid "failed to copy %s from %s to local machine: output:%s err:%s" -msgstr "🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" +msgstr "" +"🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" #: cli/app/move.go:173 #, c-format msgid "failed to copy %s from local machine to %s: output:%s err:%s" -msgstr "🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" +msgstr "" +"🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" #: pkg/upstream/stack/stack.go:535 #, c-format @@ -3459,7 +3649,8 @@ msgstr "🛑 No se pudo obtener el último commit de %s: %s" #: pkg/upstream/stack/stack.go:472 #, c-format msgid "failed to retrieve registry auth for image %s: %s" -msgstr "🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" +msgstr "" +"🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" #: pkg/git/branch.go:68 #, c-format @@ -3541,8 +3732,8 @@ msgstr "Filtrar por receta" msgid "final merged env values for %s are: %s" msgstr "Los valores finales combinados de entorno para %s son: %s" -#: cli/app/deploy.go:421 cli/app/env.go:324 cli/app/remove.go:162 -#: cli/app/rollback.go:352 cli/app/upgrade.go:461 cli/app/volume.go:216 +#: cli/app/deploy.go:422 cli/app/env.go:324 cli/app/remove.go:162 +#: cli/app/rollback.go:353 cli/app/upgrade.go:462 cli/app/volume.go:216 #: cli/recipe/fetch.go:137 msgid "force" msgstr "forzar" @@ -3600,7 +3791,9 @@ msgstr "catálogo de recetas generado: %s" #: cli/app/secret.go:145 #, c-format msgid "generated secrets %s shown again, please take note of them %s" -msgstr "los secretos generados %s; se muestran nuevamente, por favor toma nota de ellos %s" +msgstr "" +"los secretos generados %s; se muestran nuevamente, por favor toma nota de " +"ellos %s" #: pkg/app/compose.go:63 #, c-format @@ -3758,7 +3951,7 @@ 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:416 +#: cli/app/cmd.go:287 cli/app/cp.go:387 cli/app/deploy.go:417 #: cli/app/labels.go:145 cli/app/list.go:337 cli/app/new.go:413 #: cli/app/ps.go:215 cli/app/restart.go:165 cli/app/restore.go:140 #: cli/app/secret.go:571 cli/app/secret.go:611 cli/app/secret.go:635 @@ -3866,7 +4059,9 @@ msgstr "incrementar la parte de parche de la versión" #: pkg/git/init.go:50 #, c-format msgid "init committed all files for new git repo in %s" -msgstr "inicializado y comiteados todos los archivos para el nuevo repositorio git en %s" +msgstr "" +"inicializado y comiteados todos los archivos para el nuevo repositorio git " +"en %s" #: pkg/git/init.go:24 #, c-format @@ -3912,22 +4107,31 @@ msgstr "fuente de enlace inválida, la fuente no puede estar vacía" #: pkg/upstream/convert/service.go:813 #, c-format msgid "invalid credential spec: cannot specify both %s and %s" -msgstr "especificación de credencial inválida: no se pueden especificar ambos %s y %s" +msgstr "" +"especificación de credencial inválida: no se pueden especificar ambos %s y %s" #: pkg/upstream/convert/service.go:815 #, c-format msgid "invalid credential spec: cannot specify both %s, and %s" -msgstr "especificación de credencial inválida: no se pueden especificar tanto %s, como %s" +msgstr "" +"especificación de credencial inválida: no se pueden especificar tanto %s, " +"como %s" #: pkg/upstream/convert/service.go:834 #, c-format -msgid "invalid credential spec: spec specifies config %v, but no such config can be found" -msgstr "especificación de credencial inválida: la especificación indica la configuración %v, pero no se puede encontrar tal configuración" +msgid "" +"invalid credential spec: spec specifies config %v, but no such config can be " +"found" +msgstr "" +"especificación de credencial inválida: la especificación indica la " +"configuración %v, pero no se puede encontrar tal configuración" #: pkg/upstream/container/hijack.go:100 #, c-format msgid "invalid detach escape keys, using default: %s" -msgstr "teclas de escape de separación inválidas, utilizando el valor predeterminado: %s" +msgstr "" +"teclas de escape de separación inválidas, utilizando el valor " +"predeterminado: %s" #: pkg/lint/recipe.go:504 msgid "invalid lightweight tag detected" @@ -3960,7 +4164,7 @@ msgstr "versión %s especificada inválida" #. no spaces in between #. translators: `abra recipe lint` aliases. use a comma separated list of #. aliases with no spaces in between -#: cli/app/cmd.go:261 cli/app/deploy.go:446 cli/app/logs.go:20 +#: cli/app/cmd.go:261 cli/app/deploy.go:447 cli/app/logs.go:20 #: cli/recipe/lint.go:17 cli/server/add.go:207 msgid "l" msgstr "" @@ -3976,7 +4180,7 @@ msgstr "" msgid "labels [flags]" msgstr "etiquetas [opciones]" -#: cli/app/deploy.go:445 cli/app/list.go:186 +#: cli/app/deploy.go:446 cli/app/list.go:186 msgid "latest" msgstr "ultima" @@ -4114,7 +4318,8 @@ msgstr "maquina" #: cli/recipe/release.go:97 #, c-format 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?" +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:631 @@ -4215,13 +4420,23 @@ msgstr "se necesitan 3 o 4 argumentos" #: pkg/upstream/stack/stack.go:352 #, c-format -msgid "network %q is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed, which you can do by running this on the server: docker network create -d overlay proxy" -msgstr "La red %q está declarada como externa, pero no se pudo encontrar. Debes crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo en el servidor mismo con: docker network create -d overlay proxy" +msgid "" +"network %q is declared as external, but could not be found. You need to " +"create a swarm-scoped network before the stack is deployed, which you can do " +"by running this on the server: docker network create -d overlay proxy" +msgstr "" +"La red %q está declarada como externa, pero no se pudo encontrar. Debes " +"crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo " +"en el servidor mismo con: docker network create -d overlay proxy" #: pkg/upstream/stack/stack.go:356 #, c-format -msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" -msgstr "la red %q se declara como externa, pero no está en el alcance correcto: %q en lugar de \"swarm\"" +msgid "" +"network %q is declared as external, but it is not in the right scope: %q " +"instead of \"swarm\"" +msgstr "" +"la red %q se declara como externa, pero no está en el alcance correcto: %q " +"en lugar de \"swarm\"" #: cli/app/undeploy.go:148 cli/server/prune.go:60 #, c-format @@ -4261,7 +4476,8 @@ msgstr "secretos nuevos: %v" #: pkg/git/read.go:88 #, c-format msgid "no %s exists, not reading any global gitignore config" -msgstr "no existe %s, no se está leyendo ninguna configuración global de gitignore" +msgstr "" +"no existe %s, no se está leyendo ninguna configuración global de gitignore" #: pkg/git/read.go:130 #, c-format @@ -4331,7 +4547,9 @@ msgstr "no se proporcionó dominio" #: pkg/recipe/compose.go:248 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" +msgstr "" +"no se encontró ninguna etiqueta existente, la inserción automágica no es " +"compatible aún" #: cli/recipe/release.go:134 #, c-format @@ -4340,8 +4558,12 @@ msgstr "no se encontraron etiquetas de git para %s" #: cli/recipe/upgrade.go:182 #, c-format -msgid "no new versions available for %s, assuming %s is the latest (use -a/--all-tags to see all anyway)" -msgstr "no hay nuevas versiones disponibles para %s; asumiendo que %s es la más reciente (usa -a/--all-tags para ver todas)" +msgid "" +"no new versions available for %s, assuming %s is the latest (use -a/--all-" +"tags to see all anyway)" +msgstr "" +"no hay nuevas versiones disponibles para %s; asumiendo que %s es la más " +"reciente (usa -a/--all-tags para ver todas)" #: cli/internal/validate.go:64 #, c-format @@ -4352,7 +4574,7 @@ msgstr "¿no existe la receta '%s'?" msgid "no recipe name provided" msgstr "no se proporcionó el nombre de la receta" -#: cli/app/upgrade.go:241 +#: cli/app/upgrade.go:242 #, fuzzy, c-format msgid "no release notes for upgrading from %s to %s" msgstr "ejecución de prueba: mover la nota de la versión de 'next' a %s" @@ -4441,11 +4663,11 @@ msgstr "no se eliminaron volúmenes" msgid "no volumes to remove" msgstr "no hay volúmenes para eliminar" -#: cli/app/deploy.go:437 cli/app/rollback.go:368 cli/app/upgrade.go:477 +#: cli/app/deploy.go:438 cli/app/rollback.go:369 cli/app/upgrade.go:478 msgid "no-converge-checks" msgstr "sin-verificaciones-de-convergencia" -#: cli/app/deploy.go:429 cli/app/rollback.go:360 cli/app/upgrade.go:469 +#: cli/app/deploy.go:430 cli/app/rollback.go:361 cli/app/upgrade.go:470 msgid "no-domain-checks" msgstr "sin-verificaciones-de-dominio" @@ -4464,7 +4686,9 @@ msgstr "no hay suficientes argumentos: %s" #: pkg/secret/secret.go:145 msgid "not generating app secrets, none enabled in recipe config" -msgstr "no se están generando secretos de la aplicación; ninguno habilitado en la configuración de la receta" +msgstr "" +"no se están generando secretos de la aplicación; ninguno habilitado en la " +"configuración de la receta" #: cli/internal/command.go:93 msgid "not requesting a remote TTY" @@ -4477,8 +4701,12 @@ msgstr "no se actualizará %s; se omite, como fue solicitado" #: cli/recipe/upgrade.go:244 #, c-format -msgid "not upgrading from %s to %s for %s, because the upgrade type is more serious than what user wants" -msgstr "no se actualizará %s a %s para %s, porque el tipo de actualización es más serio de lo que el usuario desea" +msgid "" +"not upgrading from %s to %s for %s, because the upgrade type is more serious " +"than what user wants" +msgstr "" +"no se actualizará %s a %s para %s, porque el tipo de actualización es más " +"serio de lo que el usuario desea" #: pkg/upstream/stack/remove.go:73 #, c-format @@ -4513,7 +4741,7 @@ msgstr "solo se usaron etiquetas anotadas para la versión de la receta" msgid "only show errors" msgstr "mostrar solo errores" -#: cli/app/upgrade.go:488 +#: cli/app/upgrade.go:489 msgid "only show release notes" msgstr "solo mostrar notas de la versión" @@ -4547,22 +4775,22 @@ msgstr "parseado %s de %s" msgid "parsed following command arguments: %s" msgstr "parseados los siguientes argumentos del comando: %s" -#: cli/app/upgrade.go:345 +#: cli/app/upgrade.go:346 #, c-format msgid "parsing chosen upgrade version failed: %s" msgstr "falló la actualización de versión elegida para el parsing: %s" -#: cli/app/upgrade.go:389 +#: cli/app/upgrade.go:390 #, c-format msgid "parsing deployed version failed: %s" msgstr "parsing fallido de la versión desplegada: %s" -#: cli/app/upgrade.go:350 +#: cli/app/upgrade.go:351 #, c-format msgid "parsing deployment version failed: %s" msgstr "parsing fallido de la versión de despliegue: %s" -#: cli/app/upgrade.go:356 cli/app/upgrade.go:395 +#: cli/app/upgrade.go:357 cli/app/upgrade.go:396 #, c-format msgid "parsing recipe version failed: %s" msgstr "parsing fallido de la versión de la receta: %s" @@ -4590,8 +4818,8 @@ msgstr "ruta" msgid "pattern" msgstr "patrón" -#: cli/app/deploy.go:424 cli/app/env.go:327 cli/app/remove.go:165 -#: cli/app/rollback.go:355 cli/app/upgrade.go:464 cli/app/volume.go:219 +#: cli/app/deploy.go:425 cli/app/env.go:327 cli/app/remove.go:165 +#: cli/app/rollback.go:356 cli/app/upgrade.go:465 cli/app/volume.go:219 msgid "perform action without further prompt" msgstr "realizar acción sin más avisos" @@ -4601,22 +4829,24 @@ msgstr "realizar acción sin más avisos" msgid "pl,p" msgstr "" -#: cli/app/rollback.go:267 +#: cli/app/rollback.go:268 #, c-format msgid "please select a downgrade (version: %s):" msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s):" -#: cli/app/rollback.go:272 +#: cli/app/rollback.go:273 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" -msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: %s):" +msgstr "" +"por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: " +"%s):" -#: cli/app/upgrade.go:312 +#: cli/app/upgrade.go:313 #, c-format msgid "please select an upgrade (version: %s):" msgstr "por favor, selecciona una actualización (versión: %s):" -#: cli/app/upgrade.go:317 +#: cli/app/upgrade.go:318 #, c-format msgid "please select an upgrade (version: %s, chaos: %s):" msgstr "por favor, selecciona una actualización (versión: %s, caos: %s):" @@ -4702,7 +4932,7 @@ msgstr "consultando servidores remotos..." #. 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/app/run.go:23 cli/app/upgrade.go:487 cli/catalogue/catalogue.go:302 #: cli/recipe/recipe.go:12 cli/recipe/release.go:624 msgid "r" msgstr "" @@ -4827,7 +5057,7 @@ msgstr "publicar [version] [opciones]" msgid "release failed. any changes made have been reverted" msgstr "" -#: cli/app/upgrade.go:485 +#: cli/app/upgrade.go:486 msgid "releasenotes" msgstr "notas de la versión" @@ -5061,7 +5291,8 @@ msgstr "versiones recuperadas del repositorio local de recetas" #: pkg/upstream/stack/stack.go:468 #, c-format msgid "retrieving docker auth token: failed create docker cli: %s" -msgstr "recuperando token de autenticación de Docker: error al crear docker cli: %s" +msgstr "" +"recuperando token de autenticación de Docker: error al crear docker cli: %s" #: pkg/recipe/recipe.go:659 msgid "retrieving recipes" @@ -5122,7 +5353,9 @@ msgstr "regla" #. translators: `app run` command #: cli/app/run.go:27 msgid "run [[args] [flags] | [flags] -- [args]]" -msgstr "lanzar [[argumento] [opciones] | [opciones] -- [argumento]]" +msgstr "" +"lanzar [[argumento] [opciones] | " +"[opciones] -- [argumento]]" #: cli/app/run.go:120 msgid "run command as user" @@ -5132,7 +5365,7 @@ msgstr "ejecutar comando como usuario" msgid "run command locally" msgstr "ejecutar comando localmente" -#: cli/app/deploy.go:281 cli/app/upgrade.go:293 +#: cli/app/deploy.go:282 cli/app/upgrade.go:294 #, c-format msgid "run the following post-deploy commands: %s" msgstr "Ejecutar los siguientes comandos después del despliegue: %s" @@ -5212,19 +5445,21 @@ msgstr "secreto [comando] [argumento] [opciones]" #: cli/app/secret.go:295 msgid "secret data not provided on command-line or stdin, prompting" -msgstr "datos del secreto no proporcionados en la línea de comandos o stdin, solicitando" +msgstr "" +"datos del secreto no proporcionados en la línea de comandos o stdin, " +"solicitando" #: pkg/upstream/convert/service.go:72 #, c-format msgid "secret not found: %s" msgstr "secreto no encontrado: %s" -#: cli/app/deploy.go:358 +#: cli/app/deploy.go:359 #, c-format msgid "secret not generated: %s" msgstr "secreto no generado: %s" -#: cli/app/deploy.go:356 +#: cli/app/deploy.go:357 #, c-format msgid "secret not inserted (#generate=false): %s" msgstr "secreto no insertado (#generate=false): %s" @@ -5243,10 +5478,11 @@ msgstr "secretos" msgid "secrets are %s shown again, please save them %s" msgstr "los secretos se muestran %s nuevamente, por favor guárdalos %s" -#: cli/app/deploy.go:306 +#: cli/app/deploy.go:307 #, c-format msgid "selected latest recipe version: %s (from %d available versions)" -msgstr "versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" +msgstr "" +"versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" #: cli/app/new.go:125 #, c-format @@ -5262,7 +5498,8 @@ msgstr "servidor" #: pkg/app/app.go:301 #, c-format msgid "server %s doesn't exist? Run \"abra server ls\" to check" -msgstr "el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" +msgstr "" +"el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" #. translators: `server` command group #: cli/server/server.go:17 @@ -5290,7 +5527,8 @@ msgstr "falta contexto del servidor, la creación de contexto falló: %s" #: pkg/client/client.go:58 #, c-format msgid "server missing context, run \"abra server add %s\"?" -msgstr "falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" +msgstr "" +"falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" #: pkg/client/client.go:47 #, c-format @@ -5319,13 +5557,18 @@ msgstr "serverAdd: cleanUp: no se pueden listar los archivos en %s: %s" #: cli/recipe/upgrade.go:227 #, c-format -msgid "service %s is at version %s, but pinned to %s, please correct your compose.yml file manually!" -msgstr "el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige manualmente tu archivo compose.yml!" +msgid "" +"service %s is at version %s, but pinned to %s, please correct your " +"compose.yml file manually!" +msgstr "" +"el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige " +"manualmente tu archivo compose.yml!" #: cli/recipe/upgrade.go:223 #, c-format msgid "service %s, image %s pinned to %s, no compatible upgrade found" -msgstr "servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" +msgstr "" +"servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" #: cli/app/restore.go:113 msgid "services" @@ -5369,9 +5612,10 @@ msgstr "establecer referencia: %s" msgid "severity" msgstr "gravedad" -#: cli/app/deploy.go:456 cli/app/rollback.go:379 cli/app/upgrade.go:496 +#: cli/app/deploy.go:457 cli/app/rollback.go:380 cli/app/upgrade.go:497 msgid "show all configs & images, including unchanged ones" -msgstr "mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" +msgstr "" +"mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" #: cli/app/backup.go:273 msgid "show all paths" @@ -5393,7 +5637,7 @@ msgstr "mostrar aplicaciones de un servidor específico" msgid "show debug messages" msgstr "mostrar mensajes para el debugeo" -#: cli/app/deploy.go:453 cli/app/rollback.go:376 cli/app/upgrade.go:493 +#: cli/app/deploy.go:454 cli/app/rollback.go:377 cli/app/upgrade.go:494 msgid "show-unchanged" msgstr "mostrar-sin-cambios" @@ -5441,11 +5685,11 @@ msgstr "omitiendo según lo solicitado, plegado aún está en progreso 🟠" msgid "skipping converge logic checks" msgstr "omitiendo comprobaciones de lógica de convergencia" -#: cli/app/deploy.go:208 +#: cli/app/deploy.go:209 msgid "skipping domain checks" msgstr "omitiendo comprobaciones de dominio" -#: cli/app/deploy.go:205 +#: cli/app/deploy.go:206 msgid "skipping domain checks, no DOMAIN=... configured" msgstr "omitiendo comprobaciones de dominio, no DOMAIN=... configurado" @@ -5472,7 +5716,8 @@ msgstr "omitiendo la etiqueta %s: configuración de compose inválida: %s" #: pkg/recipe/git.go:432 #, c-format msgid "skipping tag %s: invalid image reference in service %s: %s" -msgstr "omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" +msgstr "" +"omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" #: pkg/app/app.go:697 #, c-format @@ -5536,11 +5781,17 @@ msgstr "" #: 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" +msgstr "" +"ssh-agent no encontrado. consulta \"abra receta publicar --ayuda\" y vuelve " +"a intentarlo" #: cli/catalogue/catalogue.go:98 -msgid "ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue generate --help\"" -msgstr "ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo regenerar --ayuda\"" +msgid "" +"ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue " +"generate --help\"" +msgstr "" +"ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo " +"regenerar --ayuda\"" #: cli/app/list.go:295 cli/recipe/list.go:45 msgid "status" @@ -5806,12 +6057,16 @@ msgstr "no se pudo determinar el tipo de receta a partir de %s, env: %v" #: cli/app/env.go:106 #, c-format msgid "unable to determine server of app %s, please pass --server/-s" -msgstr "no se pudo determinar el servidor de la aplicación %s; agrega al comando --server/-s" +msgstr "" +"no se pudo determinar el servidor de la aplicación %s; agrega al comando --" +"server/-s" #: cli/recipe/upgrade.go:252 #, c-format msgid "unable to determine versioning semantics of %s, listing all tags" -msgstr "no se pudieron determinar las reglas de versionado de %s; listando todas las etiquetas" +msgstr "" +"no se pudieron determinar las reglas de versionado de %s; listando todas las " +"etiquetas" #: cli/recipe/fetch.go:71 #, c-format @@ -5886,7 +6141,8 @@ msgstr "no se pudo abrir el work tree de %s: %s" #: cli/recipe/upgrade.go:159 #, c-format msgid "unable to parse %s, error was: %s, skipping upgrade for %s" -msgstr "no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" +msgstr "" +"no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" #: pkg/recipe/compose.go:153 #, c-format @@ -5931,7 +6187,9 @@ msgstr "no se pudieron leer los remotos en %s: %s" #: cli/recipe/upgrade.go:153 #, c-format msgid "unable to read tag for image %s, is it missing? skipping upgrade for %s" -msgstr "no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo actualización para %s" +msgstr "" +"no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo " +"actualización para %s" #: cli/app/move.go:210 #, c-format @@ -5946,7 +6204,8 @@ msgstr "no se pudo eliminar el remoto predeterminado en %s: %s" #: cli/app/volume.go:158 #, c-format msgid "unable to remove volume: no volume with name '%s'?" -msgstr "no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" +msgstr "" +"no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" #: cli/app/secret.go:135 cli/app/secret.go:515 cli/recipe/list.go:83 #: cli/recipe/version.go:113 cli/server/list.go:88 @@ -6229,8 +6488,10 @@ msgstr "versión %s guardada en %s.env" #: cli/app/deploy.go:126 #, c-format -msgid "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" -msgstr "la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" +msgid "" +"version '%s' appears to be a chaos commit, but --chaos/-C was not provided" +msgstr "" +"la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" #: pkg/recipe/recipe.go:200 #, c-format @@ -6255,30 +6516,31 @@ msgstr "la versión parece inválida: %s" msgid "version wiped from %s.env" msgstr "versión eliminada de %s.env" -#: cli/app/deploy.go:372 +#: cli/app/deploy.go:373 #, c-format msgid "version: taking chaos version: %s" msgstr "versión: tomando la versión de caos: %s" -#: cli/app/deploy.go:398 +#: cli/app/deploy.go:399 #, c-format msgid "version: taking deployed version: %s" msgstr "versión: tomando la versión desplegada: %s" -#: cli/app/deploy.go:403 +#: cli/app/deploy.go:404 #, c-format msgid "version: taking new recipe version: %s" msgstr "versión: tomando la nueva versión de la receta: %s" -#: cli/app/deploy.go:392 +#: cli/app/deploy.go:393 #, c-format msgid "version: taking version from .env file: %s" msgstr "versión: tomando la versión desde el archivo .env: %s" -#: cli/app/deploy.go:378 +#: cli/app/deploy.go:379 #, c-format msgid "version: taking version from cli arg: %s" -msgstr "versión: tomando la versión desde el argumento de la línea de comandos: %s" +msgstr "" +"versión: tomando la versión desde el argumento de la línea de comandos: %s" #. translators: `recipe versions` command #: cli/recipe/version.go:23 @@ -6406,8 +6668,8 @@ msgstr "el directorio de trabajo no está limpio en %s, abortando" msgid "writer: %v, " msgstr "" -#: cli/app/deploy.go:288 cli/app/new.go:255 cli/app/rollback.go:256 -#: cli/app/undeploy.go:120 cli/app/upgrade.go:301 +#: cli/app/deploy.go:289 cli/app/new.go:255 cli/app/rollback.go:257 +#: cli/app/undeploy.go:120 cli/app/upgrade.go:302 #, c-format msgid "writing recipe version failed: %s" msgstr "escritura de la versión de la receta fallida: %s" @@ -6465,21 +6727,31 @@ msgstr "{nombre: %s, " #, c-format #~ msgid "latest git tag (%s) and synced label (%s) are the same?" -#~ msgstr "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las mismas?" +#~ msgstr "" +#~ "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las " +#~ "mismas?" #~ msgid "no -p/--publish passed, not publishing" #~ msgstr "no pasó -p/--publish, no se publicará" #, c-format -#~ msgid "no tag specified and no previous tag available for %s, assuming initial release" -#~ msgstr "no se especificó etiqueta y no hay etiqueta previa disponible para %s; asumiendo lanzamiento inicial" +#~ msgid "" +#~ "no tag specified and no previous tag available for %s, assuming initial " +#~ "release" +#~ msgstr "" +#~ "no se especificó etiqueta y no hay etiqueta previa disponible para %s; " +#~ "asumiendo lanzamiento inicial" #, c-format #~ msgid "please fix your synced label for %s and re-run this command" -#~ msgstr "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar este comando" +#~ msgstr "" +#~ "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar " +#~ "este comando" #~ msgid "previous git tags detected, assuming new semver release" -#~ msgstr "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento semver" +#~ msgstr "" +#~ "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento " +#~ "semver" #~ msgid "publish new release?" #~ msgstr "¿publicar nueva versión?" @@ -6488,8 +6760,12 @@ msgstr "{nombre: %s, " #~ msgstr "sincronizar [version] [flags]" #, c-format -#~ msgid "unable to read version for %s from synced label. Did you try running \"abra recipe sync %s\" already?" -#~ msgstr "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya ejecutaste \"abra receta sincronizar %s\"?" +#~ msgid "" +#~ "unable to read version for %s from synced label. Did you try running " +#~ "\"abra recipe sync %s\" already?" +#~ msgstr "" +#~ "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya " +#~ "ejecutaste \"abra receta sincronizar %s\"?" #, c-format #~ msgid "use %s as the new version?" From 6d13d14d753831f0fe5d54dcdcfac88ce058399c Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 16 Jun 2026 17:41:06 +0000 Subject: [PATCH 35/55] chore: update translation files Updated by "Update PO files to match POT (msgmerge)" add-on in Weblate. Translation: Co-op Cloud/abra Translate-URL: https://translate.coopcloud.tech/projects/co-op-cloud/abra/ --- pkg/i18n/locales/es.po | 712 +++++++++++++---------------------------- 1 file changed, 218 insertions(+), 494 deletions(-) diff --git a/pkg/i18n/locales/es.po b/pkg/i18n/locales/es.po index 8ff1b6ff..5611bd0b 100644 --- a/pkg/i18n/locales/es.po +++ b/pkg/i18n/locales/es.po @@ -5,8 +5,7 @@ msgstr "" "POT-Creation-Date: 2026-06-14 17:56+0200\n" "PO-Revision-Date: 2026-02-28 13:52+0000\n" "Last-Translator: chasqui \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -101,8 +100,7 @@ msgstr "" " abra aplicacion secreto insertar 1312.net my_secret v1 secreto.txt -f\n" "\n" " # insertar secreto desde stdin\n" -" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net " -"my_secret v1" +" echo \"mmySuperSecret\" | abra aplicacion secreto insertar 1312.net my_secret v1" #: cli/app/list.go:54 msgid "" @@ -153,8 +151,7 @@ msgstr "" " 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" +" 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" @@ -167,8 +164,7 @@ msgid "" " # pull lost app .env file\n" " abra app env pull my.gitea.net --server 1312.net" msgstr "" -" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones " -"locales\n" +" # Obtener el archivo de entorno (.env) y sobrescribir modificaciones locales\n" " abra aplicacion entorno obtener 1312.net --force\n" "\n" " # Extraer el archivo .env perdido de la aplicación\n" @@ -394,12 +390,8 @@ msgstr "%s se ha escalado a 1" #: pkg/catalogue/catalogue.go:40 #, c-format -msgid "" -"%s has locally unstaged changes? please commit/remove your changes before " -"proceeding" -msgstr "" -"¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus " -"cambios antes de continuar" +msgid "%s has locally unstaged changes? please commit/remove your changes before proceeding" +msgstr "¿%s tiene cambios no commiteados localmente? Por favor, commitea/elimina tus cambios antes de continuar" #: cli/internal/recipe.go:114 #, c-format @@ -419,9 +411,7 @@ msgstr "%s no tiene secretos para generar, omitiendo..." #: pkg/recipe/compose.go:107 #, c-format msgid "%s has no version label? try running \"abra recipe sync %s\" first?" -msgstr "" -"¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta " -"sincronizar %s\" primero?" +msgstr "¿%s no tiene etiqueta de versión? ¿intentaste ejecutar \"abra receta sincronizar %s\" primero?" #: pkg/secret/pass.go:29 #, c-format @@ -522,18 +512,13 @@ msgstr "%s eliminado del almacén de contraseñas" #: cli/app/new.go:224 #, c-format -msgid "" -"%s requires secret generation before deploy, run \"abra app secret generate " -"%s --all\"" -msgstr "" -"%s requiere generación de secretos antes del despliegue, ejecuta \"abra " -"aplicacion secreto generar %s --all\"" +msgid "%s requires secret generation before deploy, run \"abra app secret generate %s --all\"" +msgstr "%s requiere generación de secretos antes del despliegue, ejecuta \"abra aplicacion secreto generar %s --all\"" #: cli/app/new.go:228 #, c-format msgid "%s requires secret insertion before deploy (#generate=false)" -msgstr "" -"%s requiere inserción de secretos antes del despliegue (#generate=false)" +msgstr "%s requiere inserción de secretos antes del despliegue (#generate=false)" #: cli/app/new.go:155 #, c-format @@ -681,12 +666,8 @@ msgid "'%s' is not a known version for %s" msgstr "'%s' no es una versión conocida para %s" #: cli/app/volume.go:175 -msgid "" -"'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode " -"is enabled" -msgstr "" -"'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, " -"el modo vim está activado" +msgid "'x' indicates selected, enter / return to confirm, ctrl-c to exit, vim mode is enabled" +msgstr "'x' indica seleccionado, presiona Enter para confirmar, Ctrl-C para salir, el modo vim está activado" #: cli/app/cmd.go:125 #, c-format @@ -710,35 +691,27 @@ msgstr "Se utiliza una plantilla de receta gestionada por la comunidad." msgid "" "A recipe is a blueprint for an app.\n" "\n" -"It is a bunch of config files which describe how to deploy and maintain an " -"app.\n" +"It is a bunch of config files which describe how to deploy and maintain an app.\n" "Recipes are maintained by the Co-op Cloud community and you can use Abra to\n" "read them, deploy them and create apps for you.\n" "\n" -"Anyone who uses a recipe can become a maintainer. Maintainers typically " -"make\n" -"sure the recipe is in good working order and the config upgraded in a " -"timely\n" +"Anyone who uses a recipe can become a maintainer. Maintainers typically make\n" +"sure the recipe is in good working order and the config upgraded in a timely\n" "manner." msgstr "" "Una receta son las instrucciones para crear una aplicación.\n" "\n" -"Es un conjunto de archivos de configuración, que describen cómo desplegar y " -"mantener una aplicación.\n" -"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra " -"para\n" +"Es un conjunto de archivos de configuración, que describen cómo desplegar y mantener una aplicación.\n" +"Las recetas son mantenidas por la comunidad Co-op Cloud y puedes usar Abra para\n" "leerlas, desplegarlas y crear aplicaciones para ti.\n" "\n" -"Cualquiera que use una receta puede convertirse en mantenedor. Los " -"mantenedores típicamente se\n" -"aseguran de que la receta funcione correctamente y de que la configuración " -"se actualice de manera oportuna." +"Cualquiera que use una receta puede convertirse en mantenedor. Los mantenedores típicamente se\n" +"aseguran de que la receta funcione correctamente y de que la configuración se actualice de manera oportuna." #: cli/app/remove.go:57 #, c-format msgid "ALERTA ALERTA: deleting %s data and config (local/remote)" -msgstr "" -"ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" +msgstr "ALERTA ALERTA: eliminando los datos y la configuración de %s (local/remoto)" #. translators: Short description for `server add` command #: cli/server/add.go:30 @@ -750,8 +723,7 @@ msgid "" "Add a new server to your configuration so that it can be managed by Abra.\n" "\n" "Abra relies on the standard SSH command-line and ~/.ssh/config for client\n" -"connection details. You must configure an entry per-host in your ~/.ssh/" -"config\n" +"connection details. You must configure an entry per-host in your ~/.ssh/config\n" "for each server:\n" "\n" " Host 1312.net 1312\n" @@ -760,19 +732,15 @@ msgid "" " Port 12345\n" " IdentityFile ~/.ssh/antifa@somewhere\n" "\n" -"If \"--local\" is passed, then Abra assumes that the current local server " -"is\n" -"intended as the target server. This is useful when you want to have your " -"entire\n" +"If \"--local\" is passed, then Abra assumes that the current local server is\n" +"intended as the target server. This is useful when you want to have your entire\n" "Co-op Cloud config located on the server itself, and not on your local\n" "developer machine. The domain is then set to \"default\"." msgstr "" -"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado " -"por Abra.\n" +"Agrega un servidor nuevo a tu configuración para que pueda ser gestionado por Abra.\n" "\n" "Para agregar servidor Remoto:\n" -"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de " -"conexión al servidor. \n" +"Abra usa el software SSH y de la carpeta ~/.ssh/config obtiene los datos de conexión al servidor. \n" "Debes configurar una entrada en ~/.ssh/config para cada servidor:\n" "\n" " Host 1312.net 1312\n" @@ -782,15 +750,13 @@ msgstr "" " IdentityFile ~/.ssh/antifa@1312.net\n" "\n" "Para agregar servidor local;\n" -"Si agregas \"--local\", Abra asumirá que la computadora local actual es el " -"servidor que quieres agregar. \n" +"Si agregas \"--local\", Abra asumirá que la computadora local actual es el servidor que quieres agregar. \n" "Esto es útil cuando quieres tener Abra en el mismo servidor. \n" "El dominio se establece entonces como \"default\"." #: cli/app/labels.go:33 msgid "Both local recipe and live deployment labels are shown." -msgstr "" -"Se muestran tanto la receta local como las etiquetas del despliegue en vivo." +msgstr "Se muestran tanto la receta local como las etiquetas del despliegue en vivo." #: 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:415 @@ -854,16 +820,12 @@ msgstr "💕 Clona la 📜 receta(s) en local" msgid "" "Compare env vars in both the app \".env\" and recipe \".env.sample\" file.\n" "\n" -"The goal is to ensure that recipe \".env.sample\" env vars are defined in " -"your\n" -"app \".env\" file. Only env var definitions in the \".env.sample\" which " -"are\n" -"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not " -"include\n" +"The goal is to ensure that recipe \".env.sample\" env vars are defined in your\n" +"app \".env\" file. Only env var definitions in the \".env.sample\" which are\n" +"uncommented, e.g. \"FOO=bar\" are checked. If an app \".env\" file does not include\n" "these env vars, then \"check\" will complain.\n" "\n" -"Recipe maintainers may or may not provide defaults for env vars within " -"their\n" +"Recipe maintainers may or may not provide defaults for env vars within their\n" "recipes regardless of commenting or not (e.g. through the use of\n" "${FOO:} syntax). \"check\" does not confirm or deny this for you." msgstr "" @@ -906,31 +868,24 @@ msgstr "Crea una nueva 📸 instantánea (respaldo)" msgid "" "Create a new version of a recipe.\n" "\n" -"These versions are then published on the Co-op Cloud recipe catalogue. " -"These\n" +"These versions are then published on the Co-op Cloud recipe catalogue. These\n" "versions take the following form:\n" "\n" " a.b.c+x.y.z\n" "\n" -"Where the \"a.b.c\" part is a semantic version determined by the maintainer. " -"The\n" -"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main " -"container\n" +"Where the \"a.b.c\" part is a semantic version determined by the maintainer. The\n" +"\"x.y.z\" part is the image tag of the recipe \"app\" service (the main container\n" "which contains the software to be used, by naming convention).\n" "\n" "We maintain a semantic versioning scheme (\"a.b.c\") alongside the recipe\n" -"versioning scheme (\"x.y.z\") in order to maximise the chances that the " -"nature of\n" +"versioning scheme (\"x.y.z\") in order to maximise the chances that the nature of\n" "recipe updates are properly communicated. I.e. developers of an app might\n" -"publish a minor version but that might lead to changes in the recipe which " -"are\n" +"publish a minor version but that might lead to changes in the recipe which are\n" "major and therefore require intervention while doing the upgrade work.\n" "\n" "This command will publish your new release to git.coopcloud.tech. This\n" -"requires that you have permission to git push to these repositories and " -"have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to " -"add\n" +"requires that you have permission to git push to these repositories and have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -946,20 +901,14 @@ msgstr "" "Donde \"a.b.c\" es la versión semántica que decide el mantenedor. La parte \n" "\"x.y.z\" es la versión semántica oficial de la imagen de la aplicación .\n" "\n" -"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta " -"(\"x.y.z\") \n" -"para que sea más claro qué tipo de cambios trae cada actualización. Por " -"ejemplo, \n" -"los desarrolladores de una aplicación pueden publicar una versión menor, " -"pero \n" -"la receta podría necesitar cambios importantes que requieran atención al " -"actualizar.\n" +"Mantenemos versión semántica (\"a.b.c\") junto con la versión de la receta (\"x.y.z\") \n" +"para que sea más claro qué tipo de cambios trae cada actualización. Por ejemplo, \n" +"los desarrolladores de una aplicación pueden publicar una versión menor, pero \n" +"la receta podría necesitar cambios importantes que requieran atención al actualizar.\n" "\n" "Este comando publicará tu nuevo release en git.coopcloud.tech. Necesitas \n" -"permiso para hacer git push en esos repositorios y tener tus claves SSH " -"configuradas \n" -"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu " -"contraseña antes \n" +"permiso para hacer git push en esos repositorios y tener tus claves SSH configuradas \n" +"en tu cuenta. Activa ssh-agent, añade tu clave privada y escribe tu contraseña antes \n" "de ejecutar:\n" "\n" " eval `ssh-agent`\n" @@ -976,27 +925,21 @@ msgid "" "This new app configuration is stored in your $ABRA_DIR directory under the\n" "appropriate server.\n" "\n" -"This command does not deploy your app for you. You will need to run \"abra " -"app\n" +"This command does not deploy your app for you. You will need to run \"abra app\n" "deploy \" to do so.\n" "\n" -"You can see what recipes are available (i.e. values for the [recipe] " -"argument)\n" +"You can see what recipes are available (i.e. values for the [recipe] argument)\n" "by running \"abra recipe ls\".\n" "\n" "Recipe commit hashes are supported values for \"[version]\".\n" "\n" -"Passing the \"--secrets/-S\" flag will automatically generate secrets for " -"your\n" +"Passing the \"--secrets/-S\" flag will automatically generate secrets for your\n" "app and store them encrypted at rest on the chosen target server. These\n" -"generated secrets are only visible at generation time, so please take care " -"to\n" +"generated secrets are only visible at generation time, so please take care to\n" "store them somewhere safe.\n" "\n" -"You can use the \"--pass/-P\" to store these generated passwords locally in " -"a\n" -"pass store (see passwordstore.org for more). The pass command must be " -"available\n" +"You can use the \"--pass/-P\" to store these generated passwords locally in a\n" +"pass store (see passwordstore.org for more). The pass command must be available\n" "on your $PATH." msgstr "" "Crea una nueva aplicación a partir de una receta.\n" @@ -1006,15 +949,13 @@ msgstr "" "Ojo: Este comando no despliega la aplicación.\n" "\n" "Si pasas la opción \"--secrets/-S\" se generarán automáticamente secretos \n" -"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos " -"secretos \n" +"para tu aplicación y se guardarán cifrados en el servidor elegido. Esos secretos \n" "generados solo se muestran al momento de crearlos, así que guárdalos \n" "en un lugar seguro.\n" "\n" "Los hashes de commit de la receta son valores válidos para \"[version]\".\n" "\n" -"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas " -"localmente \n" +"Puedes usar \"--pass/-P\" para guardar esas contraseñas generadas localmente \n" "en un almacén pass (ver passwordstore.org). El comando pass debe estar \n" "disponible en tu $PATH." @@ -1048,11 +989,9 @@ msgstr "📤 Despliega una 🚀 aplicación" msgid "" "Deploy an app.\n" "\n" -"This command supports chaos operations. Use \"--chaos/-C\" to deploy your " -"recipe\n" +"This command supports chaos operations. Use \"--chaos/-C\" to deploy your recipe\n" "checkout as-is. Recipe commit hashes are also supported as values for\n" -"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos " -"operations." +"\"[version]\". Please note, \"upgrade\"/\"rollback\" do not support chaos operations." msgstr "" "Despliega una aplicación.\n" "\n" @@ -1075,8 +1014,7 @@ msgstr "⬇️ Descarga una 📸 instantánea" msgid "" "Downloads a backup.tar.gz to the current working directory.\n" "\n" -"\"--volumes/-v\" includes data contained in volumes alongide paths specified " -"in\n" +"\"--volumes/-v\" includes data contained in volumes alongide paths specified in\n" "\"backupbot.backup.path\" labels." msgstr "" "Descarga un backup.tar.gz al directorio de trabajo actual.\n" @@ -1120,28 +1058,21 @@ msgstr "NOMBRE GENERADO" msgid "" "Generate a new copy of the recipe catalogue.\n" "\n" -"N.B. this command **will** wipe local unstaged changes from your local " -"recipes\n" -"if present. \"--chaos/-C\" on this command refers to the catalogue " -"repository\n" -"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose " -"your\n" +"N.B. this command **will** wipe local unstaged changes from your local recipes\n" +"if present. \"--chaos/-C\" on this command refers to the catalogue repository\n" +"(\"$ABRA_DIR/catalogue\") and not the recipes. Please take care not to lose your\n" "changes.\n" "\n" "It is possible to generate new metadata for a single recipe by passing\n" "[recipe]. The existing local catalogue will be updated, not overwritten.\n" "\n" -"It is quite easy to get rate limited by Docker Hub when running this " -"command.\n" -"If you have a Hub account you can \"docker login\" and Abra will " -"automatically\n" +"It is quite easy to get rate limited by Docker Hub when running this command.\n" +"If you have a Hub account you can \"docker login\" and Abra will automatically\n" "use those details.\n" "\n" "Publish your new release to git.coopcloud.tech with \"--publish/-p\". This\n" -"requires that you have permission to git push to these repositories and " -"have\n" -"your SSH keys configured on your account. Enable ssh-agent and make sure to " -"add\n" +"requires that you have permission to git push to these repositories and have\n" +"your SSH keys configured on your account. Enable ssh-agent and make sure to add\n" "your private key and enter your passphrase beforehand.\n" "\n" " eval `ssh-agent`\n" @@ -1179,8 +1110,7 @@ msgid "" msgstr "" "Genera un informe de todas las aplicaciones gestionadas.\n" "\n" -"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre " -"el estado de despliegue." +"Usa la opción \"--estado/-S\" para consultar en todos los servidores sobre el estado de despliegue." #: cli/app/new.go:321 msgid "Generate app secrets?" @@ -1209,8 +1139,7 @@ msgstr "📋 Muestra el catálogo de 📜 recetas" #: pkg/recipe/git.go:459 #, c-format msgid "GetRecipeVersions encountered error for %s: %s (collected %d versions)" -msgstr "" -"GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" +msgstr "GetRecipeVersions encontró un error para %s: %s (recopiladas %d versiones)" #: cli/recipe/new.go:125 msgid "Git (user) name to do commits with" @@ -1360,22 +1289,17 @@ msgstr "⚙️ Administrar 📓 catálogo de 📜 recetas" msgid "" "Move an app to a differnt server.\n" "\n" -"This command will migrate an app config and copy secrets and volumes from " -"the\n" -"old server to the new one. The app MUST be deployed on the old server " -"before\n" +"This command will migrate an app config and copy secrets and volumes from the\n" +"old server to the new one. The app MUST be deployed on the old server before\n" "doing the move. The app will be undeployed from the current server but not\n" "deployed on the new server.\n" "\n" -"The \"tar\" command is required on both the old and new server as well as " -"\"sudo\"\n" +"The \"tar\" command is required on both the old and new server as well as \"sudo\"\n" "permissions. The \"rsync\" command is required on your local machine for\n" "transferring volumes.\n" "\n" -"Do not forget to update your DNS records. Don't panic, it might take a " -"while\n" -"for the dust to settle after you move an app. If anything goes wrong, you " -"can\n" +"Do not forget to update your DNS records. Don't panic, it might take a while\n" +"for the dust to settle after you move an app. If anything goes wrong, you can\n" "always move the app config file to the original server and deploy it there\n" "again. No data is removed from the old server.\n" "\n" @@ -1400,8 +1324,7 @@ msgstr "" "de vuelta al servidor original y desplegarlo otra vez. No se elimina \n" "ningún dato del servidor antiguo.\n" "\n" -"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se " -"moverán." +"Usa \"--ejecucion-de-prueba/-r\" para ver qué secretos y volúmenes se moverán." #. translators: Short description for `app move` command #: cli/app/move.go:41 @@ -1458,8 +1381,7 @@ msgstr "🧹 Limpiar recursos en un 🕋 servidor" msgid "" "Prunes unused containers, networks, and dangling images.\n" "\n" -"Use \"--volumes/-v\" to remove volumes that are not associated with a " -"deployed\n" +"Use \"--volumes/-v\" to remove volumes that are not associated with a deployed\n" "app. This can result in unwanted data loss if not used carefully." msgstr "" "Elimina contenedores, redes e imágenes que no se usan.\n" @@ -1471,16 +1393,13 @@ msgstr "" #. translators: Short description for `app env pull` command #: cli/app/env.go:80 msgid "Pull app environment values from a deployed app" -msgstr "" -"Obtener (pull) valores de entorno de la aplicación desde una aplicación " -"desplegada" +msgstr "Obtener (pull) valores de entorno de la aplicación desde una aplicación desplegada" #: cli/app/env.go:81 msgid "" "Pull app environment values from a deploymed app.\n" "\n" -"A convenient command for when you've lost your app environment file or want " -"to\n" +"A convenient command for when you've lost your app environment file or want to\n" "synchronize your local app environment values with what is deployed live." msgstr "" "Extrae los valores de entorno de una aplicación desplegada.\n" @@ -1516,8 +1435,7 @@ msgid "" "Remove a managed server.\n" "\n" "Abra will remove the internal bookkeeping ($ABRA_DIR/servers/...) and\n" -"underlying client connection context. This server will then be lost in " -"time,\n" +"underlying client connection context. This server will then be lost in time,\n" "like tears in rain." msgstr "" "Eliminar un servidor gestionado.\n" @@ -1539,8 +1457,7 @@ msgstr "💀 Borrar completamente una 🚀 aplicación (local y remotamente)" #. translators: Short description for `recipe reset` command #: cli/recipe/reset.go:23 msgid "Remove all unstaged changes from recipe config" -msgstr "" -"💀 Borra los cambios no actualizados de la configuración de la 📜 receta" +msgstr "💀 Borra los cambios no actualizados de la configuración de la 📜 receta" #: cli/app/remove.go:29 msgid "" @@ -1549,19 +1466,16 @@ msgid "" "By default, it will prompt for confirmation before proceeding. All secrets,\n" "volumes and the local app env file will be deleted.\n" "\n" -"Only run this command when you are sure you want to completely remove the " -"app\n" +"Only run this command when you are sure you want to completely remove the app\n" "and all associated app data. This is a destructive action, Be Careful!\n" "\n" "If you would like to delete specific volumes or secrets, please use removal\n" "sub-commands under \"app volume\" and \"app secret\" instead.\n" "\n" -"Please note, if you delete the local app env file without removing volumes " -"and\n" +"Please note, if you delete the local app env file without removing volumes and\n" "secrets first, Abra will *not* be able to help you remove them afterwards.\n" "\n" -"To delete everything without prompt, use the \"--force/-f\" or the \"--no-" -"input/n\"\n" +"To delete everything without prompt, use the \"--force/-f\" or the \"--no-input/n\"\n" "flag." msgstr "" "Elimina todo lo relacionado con una aplicación que ya está plegada.\n" @@ -1592,14 +1506,11 @@ msgstr "💀 Elimina 📦 volúmen(es) asociados a una 🚀 aplicación" msgid "" "Remove volumes associated with an app.\n" "\n" -"The app in question must be undeployed before you try to remove volumes. " -"See\n" +"The app in question must be undeployed before you try to remove volumes. See\n" "\"abra app undeploy \" for more.\n" "\n" -"The command is interactive and will show a multiple select input which " -"allows\n" -"you to make a seclection. Use the \"?\" key to see more help on navigating " -"this\n" +"The command is interactive and will show a multiple select input which allows\n" +"you to make a seclection. Use the \"?\" key to see more help on navigating this\n" "interface.\n" "\n" "Passing \"--force/-f\" will select all volumes for removal. Be careful." @@ -1635,25 +1546,19 @@ msgstr "⏪ Revertir una 🚀 aplicación una versión anterior" #. translators: Short description for `app run` command #: cli/app/run.go:30 msgid "Run a command inside a service container" -msgstr "" -"Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" +msgstr "Crea un 🐋 contenedor temporal para ejecutar un 💻 comando especificado" #: cli/app/cmd.go:31 msgid "" "Run an app specific command.\n" "\n" -"These commands are bash functions, defined in the abra.sh of the recipe " -"itself.\n" -"They can be run within the context of a service (e.g. app) or locally on " -"your\n" +"These commands are bash functions, defined in the abra.sh of the recipe itself.\n" +"They can be run within the context of a service (e.g. app) or locally on your\n" "work station by passing \"--local/-l\".\n" "\n" -"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-" -"l\") must\n" -"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" +"N.B. If using the \"--\" style to pass arguments, flags (e.g. \"--local/-l\") must\n" +"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" @@ -1804,10 +1709,8 @@ msgid "" "Arbitrary secret insertion is not supported. Secrets that are inserted must\n" "match those configured in the recipe beforehand.\n" "\n" -"This command can be useful when you want to manually generate secrets for an " -"app\n" -"environment. Typically, you can let Abra generate them for you on app " -"creation\n" +"This command can be useful when you want to manually generate secrets for an app\n" +"environment. Typically, you can let Abra generate them for you on app creation\n" "(see \"abra app new --secrets/-S\" for more)." msgstr "" "Este comando inserta un secreto en el entorno de una aplicación.\n" @@ -1858,22 +1761,17 @@ msgstr "" msgid "" "This command rolls an app back to a previous version.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only " -"recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a " -"specific\n" +"It is possible to \"--force/-f\" an downgrade if you want to re-deploy a specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what " -"downgrades\n" -"are available. The live deployment version is the \"source of truth\" in " -"this\n" +"Only the deployed version is consulted when trying to determine what downgrades\n" +"are available. The live deployment version is the \"source of truth\" in this\n" "case. The stored .env version is not consulted.\n" "\n" -"A downgrade can be destructive, please ensure you have a copy of your app " -"data\n" +"A downgrade can be destructive, please ensure you have a copy of your app data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Este comando revierte una aplicación a una versión anterior.\n" @@ -1897,8 +1795,7 @@ msgstr "" msgid "" "This does not destroy any application data.\n" "\n" -"However, you should remain vigilant, as your swarm installation will " -"consider\n" +"However, you should remain vigilant, as your swarm installation will consider\n" "any previously attached volumes as eligible for pruning once undeployed.\n" "\n" "Passing \"--prune/-p\" does not remove those volumes." @@ -1924,8 +1821,7 @@ msgid "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" -"abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" "\n" "Zsh:\n" " # If shell autocompletion is not already enabled in your environment,\n" @@ -1961,8 +1857,7 @@ msgstr "" " # Linux:\n" " $ abra autocomplete bash | sudo tee /etc/bash_completion.d/abra\n" " # macOS:\n" -" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/" -"abra\n" +" $ abra autocomplete bash | sudo tee $(brew --prefix)/etc/bash_completion.d/abra\n" "\n" "Zsh:\n" " # Si la autocompletación no está habilitada, actívala una vez:\n" @@ -2013,8 +1908,7 @@ msgid "" "It will update the relevant compose file tags on the local file system.\n" "\n" "Some image tags cannot be parsed because they do not follow some sort of\n" -"semver-like convention. In this case, all possible tags will be listed and " -"it\n" +"semver-like convention. In this case, all possible tags will be listed and it\n" "is up to the end-user to decide.\n" "\n" "The command is interactive and will show a select input which allows you to\n" @@ -2046,10 +1940,8 @@ msgid "" "\n" "By default, the latest stable release is downloaded.\n" "\n" -"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind " -"that\n" -"it may contain absolutely catastrophic deal-breaker bugs. Thank you very " -"much\n" +"Use \"--rc/-r\" to install the latest release candidate. Please bear in mind that\n" +"it may contain absolutely catastrophic deal-breaker bugs. Thank you very much\n" "for the testing efforts 💗" msgstr "" "Actualiza abra in situ con la última versión estable \n" @@ -2070,22 +1962,17 @@ msgstr "📨 Actualizar una 🚀 aplicación" msgid "" "Upgrade an app.\n" "\n" -"Unlike \"abra app deploy\", chaos operations are not supported here. Only " -"recipe\n" +"Unlike \"abra app deploy\", chaos operations are not supported here. Only recipe\n" "versions are supported values for \"[version]\".\n" "\n" -"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a " -"specific\n" +"It is possible to \"--force/-f\" an upgrade if you want to re-deploy a specific\n" "version.\n" "\n" -"Only the deployed version is consulted when trying to determine what " -"upgrades\n" -"are available. The live deployment version is the \"source of truth\" in " -"this\n" +"Only the deployed version is consulted when trying to determine what upgrades\n" +"are available. The live deployment version is the \"source of truth\" in this\n" "case. The stored .env version is not consulted.\n" "\n" -"An upgrade can be destructive, please ensure you have a copy of your app " -"data\n" +"An upgrade can be destructive, please ensure you have a copy of your app data\n" "beforehand. See \"abra app backup\" for more." msgstr "" "Actualizar una aplicación.\n" @@ -2124,26 +2011,19 @@ msgid "" "Examples:\n" "{{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name " -"\"help\"))}}\n" -" {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}" -"{{if .HasAvailableLocalFlags}}\n" +"Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\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" -" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}" -"{{if .HasAvailableSubCommands}}\n" +"Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n" +" {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n" "\n" -"Use \"{{.CommandPath}} [command] --help\" for more information about a " -"command.{{end}}\n" +"Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n" msgstr "" "Uso:{{if .Runnable}}\n" " {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n" @@ -2158,34 +2038,23 @@ msgstr "" "\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" +"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" +"{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n" "\n" "Opciones globales:\n" -"{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}" -"{{if .HasHelpSubCommands}}\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" +"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" +"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." -msgstr "" -"Usando \"--force/-f\", Git sincroniza una receta existente. No borra los " -"cambios no preparados." +msgid "Using \"--force/-f\" Git syncs an existing recipe. It does not erase unstaged changes." +msgstr "Usando \"--force/-f\", Git sincroniza una receta existente. No borra los cambios no preparados." #: cli/app/secret.go:117 msgid "VALUE" @@ -2216,27 +2085,20 @@ msgstr "[hijack] Fin de stdout" #, c-format msgid "" "\n" -"The following options are two types of initial semantic version that you " -"can\n" -"pick for %s that will be published in the recipe catalogue. This follows " -"the\n" +"The following options are two types of initial semantic version that you can\n" +"pick for %s that will be published in the recipe catalogue. This follows the\n" "semver convention (more on https://semver.org), here is a short cheatsheet\n" "\n" -" 0.1.0: development release, still hacking. when you make a major " -"upgrade\n" -" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move " -"to\n" +" 0.1.0: development release, still hacking. when you make a major upgrade\n" +" you increment the \"y\" part (i.e. 0.1.0 -> 0.2.0) and only move to\n" " using the \"x\" part when things are stable.\n" "\n" " 1.0.0: public release, assumed to be working. you already have a stable\n" -" and reliable deployment of this app and feel relatively " -"confident\n" +" and reliable deployment of this app and feel relatively confident\n" " about it.\n" "\n" -"If you want people to be able alpha test your current config for %s but " -"don't\n" -"think it is quite reliable, go with 0.1.0 and people will know that things " -"are\n" +"If you want people to be able alpha test your current config for %s but don't\n" +"think it is quite reliable, go with 0.1.0 and people will know that things are\n" "likely to change.\n" "\n" msgstr "" @@ -2247,8 +2109,7 @@ msgstr "" "Resumen rápido:\n" "\n" " 0.1.0: versión de desarrollo, todavía en prueba. Cuando hagas una \n" -"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás " -"a \n" +"mejora mayor aumentas la parte \"y\" (p. ej. 0.1.0 → 0.2.0) y solo pasarás a \n" "usar la parte \"x\" cuando las cosas estén estables.\n" "\n" " 1.0.0: versión pública, se asume que funciona. Ya tienes un \n" @@ -2266,8 +2127,7 @@ msgid "" "\n" "You need to make a decision about what kind of an update this new recipe\n" "version is. If someone else performs this upgrade, do they have to do some\n" -"migration work or take care of some breaking changes? This can be signaled " -"in\n" +"migration work or take care of some breaking changes? This can be signaled in\n" "the version you specify on the recipe deploy label and is called a semantic\n" "version.\n" "\n" @@ -2277,27 +2137,21 @@ msgid "" "\n" "Here is a semver cheat sheet (more on https://semver.org):\n" "\n" -" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> " -"2.0.0).\n" -" the upgrade won't work without some preparation work and others " -"need\n" +" major: new features/bug fixes, backwards incompatible (e.g 1.0.0 -> 2.0.0).\n" +" the upgrade won't work without some preparation work and others need\n" " to take care when performing it. \"it could go wrong\".\n" "\n" -" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> " -"0.2.0).\n" -" the upgrade should Just Work and there are no breaking changes " -"in\n" +" minor: new features/bug fixes, backwards compatible (e.g. 0.1.0 -> 0.2.0).\n" +" the upgrade should Just Work and there are no breaking changes in\n" " the app and the recipe config. \"it should go fine\".\n" "\n" -" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this " -"upgrade\n" +" patch: bug fixes, backwards compatible (e.g. 0.0.1 -> 0.0.2). this upgrade\n" " should also Just Work and is mostly to do with minor bug fixes\n" " and/or security patches. \"nothing to worry about\".\n" "\n" msgstr "" "\n" -"Necesitas decidir qué tipo de actualización es esta nueva versión de la " -"receta. \n" +"Necesitas decidir qué tipo de actualización es esta nueva versión de la receta. \n" "Si otra persona realiza esta actualización, ¿tendrá que hacer migraciones \n" "o atender cambios incompatibles? Eso se indica con la versión semántica \n" "que especifiques en la etiqueta de despliegue de la receta.\n" @@ -2308,25 +2162,17 @@ msgstr "" "\n" "Semántica de semver (más en https://semver.org):\n" "\n" -" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 " -"-> 2.0.0).\n" -" la actualización no funcionará sin trabajo de preparación y otros " -"deben\n" +" major: nuevas funciones/arreglos, incompatible hacia atrás (p. ej. 1.0.0 -> 2.0.0).\n" +" la actualización no funcionará sin trabajo de preparación y otros deben\n" " tener cuidado al realizarla. \"podría salir mal\".\n" "\n" -" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 " -"-> 0.2.0).\n" -" la actualización debería funcionar sin problemas y no hay " -"cambios\n" -" incompatibles en la app ni en la configuración de la receta. " -"\"debería ir bien\".\n" +" minor: nuevas funciones/arreglos, compatible hacia atrás (p. ej. 0.1.0 -> 0.2.0).\n" +" la actualización debería funcionar sin problemas y no hay cambios\n" +" incompatibles en la app ni en la configuración de la receta. \"debería ir bien\".\n" "\n" -" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> " -"0.0.2).\n" -" esta actualización también debería funcionar sin problemas y " -"trata\n" -" principalmente de arreglos menores y/o parches de seguridad. " -"\"nada de qué preocuparse\".\n" +" patch: correcciones de errores, compatible hacia atrás (p. ej. 0.0.1 -> 0.0.2).\n" +" esta actualización también debería funcionar sin problemas y trata\n" +" principalmente de arreglos menores y/o parches de seguridad. \"nada de qué preocuparse\".\n" "\n" #: pkg/lint/recipe.go:203 @@ -2492,9 +2338,7 @@ msgstr "aplicacion [comando] [argumento] [opciones]" #: pkg/dns/dns.go:52 #, c-format 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)?" +msgstr "¿El dominio de la aplicación %s (%s) no parece resolverse al servidor de la aplicación %s (%s)?" #: cli/recipe/release.go:349 msgid "app service is missing image tag?" @@ -2650,9 +2494,7 @@ msgstr "cancelado" #: pkg/catalogue/catalogue.go:59 pkg/recipe/git.go:251 #, c-format msgid "cannot ensure %s is up-to-date, no git remotes configured" -msgstr "" -"no se puede asegurar que %s esté actualizado, no hay remotos de git " -"configurados" +msgstr "no se puede asegurar que %s esté actualizado, no hay remotos de git configurados" #: cli/app/config.go:43 pkg/app/app.go:52 #, c-format @@ -2666,24 +2508,17 @@ msgstr "no se puede obtener la etiqueta %s para %s" #: pkg/recipe/git.go:58 #, c-format -msgid "" -"cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" -msgstr "" -"no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención " -"usar \"--caos\"?" +msgid "cannot redeploy previous chaos version (%s), did you mean to use \"--chaos\"?" +msgstr "no se puede redeplegar la versión anterior de caos (%s), ¿Era tu intención usar \"--caos\"?" #: cli/app/deploy.go:389 #, c-format 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\"" +"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\"? \n" -"para volver a un lanzamiento regular, especifica una etiqueta de " -"lanzamiento, SHA de commit o agrega el comando \"--latest\"" +"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 @@ -2692,8 +2527,7 @@ msgstr "no se puede resolver ipv4 para %s?" #: 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" +msgstr "no se puede especificar una etiqueta y un tipo de incremento al mismo tiempo" #: cli/app/secret.go:68 msgid "cannot use '[secret] [version]' and '--all' together" @@ -2774,9 +2608,7 @@ msgstr "caos" #: pkg/secret/secret.go:235 #, c-format -msgid "" -"charset=bytes only supports encoding=base64, got encoding=%s for secret %s, " -"defaulting to base64" +msgid "charset=bytes only supports encoding=base64, got encoding=%s for secret %s, defaulting to base64" msgstr "" #. translators: `app check` command @@ -2859,21 +2691,13 @@ msgstr "el comando %v no salió después de %v: stderr=%q" #: pkg/upstream/commandconn/commandconn.go:172 #, c-format -msgid "" -"command %v has exited with %v, please make sure the URL is valid, and Docker " -"18.09 or later is installed on the remote host: stderr=%s" -msgstr "" -"el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida " -"y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" +msgid "command %v has exited with %v, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s" +msgstr "el comando %v ha salido con %v, por favor asegúrate de que la URL sea válida y que Docker 18.09 o posterior esté instalado en el host remoto: stderr=%s" #. translators: `app command` command #: cli/app/cmd.go:27 -msgid "" -"command [service | --local] [[args] [flags] | [flags] -- " -"[args]]" -msgstr "" -"ejecutar [servicio | --local] [[argumento] [opciones] " -"| [opciones] -- [argumento]]" +msgid "command [service | --local] [[args] [flags] | [flags] -- [args]]" +msgstr "ejecutar [servicio | --local] [[argumento] [opciones] | [opciones] -- [argumento]]" #: pkg/upstream/commandconn/commandconn.go:239 #, c-format @@ -2957,15 +2781,12 @@ msgstr "tiempo de conexión agotado para %s" #: pkg/recipe/compose.go:191 #, c-format msgid "considering %s config(s) for label update" -msgstr "" -"considerando la(s) configuración(es) %s para la actualización de etiquetas" +msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas" #: pkg/recipe/compose.go:123 #, c-format msgid "considering %s config(s) for tag update" -msgstr "" -"considerando la(s) configuración(es) %s para la actualización de etiquetas " -"(tags)" +msgstr "considerando la(s) configuración(es) %s para la actualización de etiquetas (tags)" #: cli/app/undeploy.go:141 cli/server/prune.go:53 #, c-format @@ -3270,8 +3091,7 @@ msgstr "no solicitar un TTY" #: pkg/ssh/ssh.go:26 msgid "docker: is the daemon running / your user has docker permissions?" -msgstr "" -"docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" +msgstr "docker: ¿está corriendo el daemon / tu usuario tiene permisos de Docker?" #: cli/app/new.go:386 msgid "domain" @@ -3329,8 +3149,7 @@ msgstr "ejecución de prueba: no se creó etiqueta de git (%s)" #: 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" +msgstr "ejecución de prueba: no se sincronizará la etiqueta %s para la receta %s" #: pkg/git/remote.go:15 #, c-format @@ -3368,14 +3187,11 @@ msgstr "habilitar ejecución de comandos pre/post-hook" #: cli/internal/validate.go:82 #, c-format msgid "ensure %s recipe compose.* files include \"version: '3.8'\"" -msgstr "" -"asegúrate de que los archivos compose.* de la receta %s incluyan \"version: " -"'3.8'\"" +msgstr "asegúrate de que los archivos compose.* de la receta %s incluyan \"version: '3.8'\"" #: pkg/lint/recipe.go:69 msgid "ensure 'version: \"3.8\"' in compose configs" -msgstr "" -"asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" +msgstr "asegúrate que 'version: \"3.8\"' esté en las configuraciones de compose" #: pkg/lint/recipe.go:163 msgid "ensure \"image: ...\" set on all services" @@ -3392,12 +3208,8 @@ msgid "ensuring env version %s" msgstr "asegurando la versión del entorno (env) %s" #: cli/recipe/upgrade.go:285 -msgid "" -"enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode " -"is enabled" -msgstr "" -"presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta " -"etiqueta; modo vim habilitado" +msgid "enter / return to confirm, choose 'skip' to not upgrade this tag, vim mode is enabled" +msgstr "presiona \"enter\" para confirmar; escribe 'skip' para no actualizar esta etiqueta; modo vim habilitado" #. translators: `app env` command group #: cli/app/env.go:311 @@ -3510,14 +3322,12 @@ msgstr "🛑 error al hacer commit: %s" #: cli/app/move.go:167 #, c-format msgid "failed to copy %s from %s to local machine: output:%s err:%s" -msgstr "" -"🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" +msgstr "🛑 error al copiar %s desde %s a la máquina local: salida:%s errores:%s" #: cli/app/move.go:173 #, c-format msgid "failed to copy %s from local machine to %s: output:%s err:%s" -msgstr "" -"🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" +msgstr "🛑 error al copiar %s desde la máquina local a %s: salida:%s errores:%s" #: pkg/upstream/stack/stack.go:535 #, c-format @@ -3649,8 +3459,7 @@ msgstr "🛑 No se pudo obtener el último commit de %s: %s" #: pkg/upstream/stack/stack.go:472 #, c-format msgid "failed to retrieve registry auth for image %s: %s" -msgstr "" -"🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" +msgstr "🛑 No se pudo obtener la autenticación del registro para la imagen %s: %s" #: pkg/git/branch.go:68 #, c-format @@ -3791,9 +3600,7 @@ msgstr "catálogo de recetas generado: %s" #: cli/app/secret.go:145 #, c-format msgid "generated secrets %s shown again, please take note of them %s" -msgstr "" -"los secretos generados %s; se muestran nuevamente, por favor toma nota de " -"ellos %s" +msgstr "los secretos generados %s; se muestran nuevamente, por favor toma nota de ellos %s" #: pkg/app/compose.go:63 #, c-format @@ -4059,9 +3866,7 @@ msgstr "incrementar la parte de parche de la versión" #: pkg/git/init.go:50 #, c-format msgid "init committed all files for new git repo in %s" -msgstr "" -"inicializado y comiteados todos los archivos para el nuevo repositorio git " -"en %s" +msgstr "inicializado y comiteados todos los archivos para el nuevo repositorio git en %s" #: pkg/git/init.go:24 #, c-format @@ -4107,31 +3912,22 @@ msgstr "fuente de enlace inválida, la fuente no puede estar vacía" #: pkg/upstream/convert/service.go:813 #, c-format msgid "invalid credential spec: cannot specify both %s and %s" -msgstr "" -"especificación de credencial inválida: no se pueden especificar ambos %s y %s" +msgstr "especificación de credencial inválida: no se pueden especificar ambos %s y %s" #: pkg/upstream/convert/service.go:815 #, c-format msgid "invalid credential spec: cannot specify both %s, and %s" -msgstr "" -"especificación de credencial inválida: no se pueden especificar tanto %s, " -"como %s" +msgstr "especificación de credencial inválida: no se pueden especificar tanto %s, como %s" #: pkg/upstream/convert/service.go:834 #, c-format -msgid "" -"invalid credential spec: spec specifies config %v, but no such config can be " -"found" -msgstr "" -"especificación de credencial inválida: la especificación indica la " -"configuración %v, pero no se puede encontrar tal configuración" +msgid "invalid credential spec: spec specifies config %v, but no such config can be found" +msgstr "especificación de credencial inválida: la especificación indica la configuración %v, pero no se puede encontrar tal configuración" #: pkg/upstream/container/hijack.go:100 #, c-format msgid "invalid detach escape keys, using default: %s" -msgstr "" -"teclas de escape de separación inválidas, utilizando el valor " -"predeterminado: %s" +msgstr "teclas de escape de separación inválidas, utilizando el valor predeterminado: %s" #: pkg/lint/recipe.go:504 msgid "invalid lightweight tag detected" @@ -4318,8 +4114,7 @@ msgstr "maquina" #: cli/recipe/release.go:97 #, c-format 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?" +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:631 @@ -4420,23 +4215,13 @@ msgstr "se necesitan 3 o 4 argumentos" #: pkg/upstream/stack/stack.go:352 #, c-format -msgid "" -"network %q is declared as external, but could not be found. You need to " -"create a swarm-scoped network before the stack is deployed, which you can do " -"by running this on the server: docker network create -d overlay proxy" -msgstr "" -"La red %q está declarada como externa, pero no se pudo encontrar. Debes " -"crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo " -"en el servidor mismo con: docker network create -d overlay proxy" +msgid "network %q is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed, which you can do by running this on the server: docker network create -d overlay proxy" +msgstr "La red %q está declarada como externa, pero no se pudo encontrar. Debes crear una red con alcance swarm antes de desplegar el stack; puedes hacerlo en el servidor mismo con: docker network create -d overlay proxy" #: pkg/upstream/stack/stack.go:356 #, c-format -msgid "" -"network %q is declared as external, but it is not in the right scope: %q " -"instead of \"swarm\"" -msgstr "" -"la red %q se declara como externa, pero no está en el alcance correcto: %q " -"en lugar de \"swarm\"" +msgid "network %q is declared as external, but it is not in the right scope: %q instead of \"swarm\"" +msgstr "la red %q se declara como externa, pero no está en el alcance correcto: %q en lugar de \"swarm\"" #: cli/app/undeploy.go:148 cli/server/prune.go:60 #, c-format @@ -4476,8 +4261,7 @@ msgstr "secretos nuevos: %v" #: pkg/git/read.go:88 #, c-format msgid "no %s exists, not reading any global gitignore config" -msgstr "" -"no existe %s, no se está leyendo ninguna configuración global de gitignore" +msgstr "no existe %s, no se está leyendo ninguna configuración global de gitignore" #: pkg/git/read.go:130 #, c-format @@ -4547,9 +4331,7 @@ msgstr "no se proporcionó dominio" #: pkg/recipe/compose.go:248 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" +msgstr "no se encontró ninguna etiqueta existente, la inserción automágica no es compatible aún" #: cli/recipe/release.go:134 #, c-format @@ -4558,12 +4340,8 @@ msgstr "no se encontraron etiquetas de git para %s" #: cli/recipe/upgrade.go:182 #, c-format -msgid "" -"no new versions available for %s, assuming %s is the latest (use -a/--all-" -"tags to see all anyway)" -msgstr "" -"no hay nuevas versiones disponibles para %s; asumiendo que %s es la más " -"reciente (usa -a/--all-tags para ver todas)" +msgid "no new versions available for %s, assuming %s is the latest (use -a/--all-tags to see all anyway)" +msgstr "no hay nuevas versiones disponibles para %s; asumiendo que %s es la más reciente (usa -a/--all-tags para ver todas)" #: cli/internal/validate.go:64 #, c-format @@ -4686,9 +4464,7 @@ msgstr "no hay suficientes argumentos: %s" #: pkg/secret/secret.go:145 msgid "not generating app secrets, none enabled in recipe config" -msgstr "" -"no se están generando secretos de la aplicación; ninguno habilitado en la " -"configuración de la receta" +msgstr "no se están generando secretos de la aplicación; ninguno habilitado en la configuración de la receta" #: cli/internal/command.go:93 msgid "not requesting a remote TTY" @@ -4701,12 +4477,8 @@ msgstr "no se actualizará %s; se omite, como fue solicitado" #: cli/recipe/upgrade.go:244 #, c-format -msgid "" -"not upgrading from %s to %s for %s, because the upgrade type is more serious " -"than what user wants" -msgstr "" -"no se actualizará %s a %s para %s, porque el tipo de actualización es más " -"serio de lo que el usuario desea" +msgid "not upgrading from %s to %s for %s, because the upgrade type is more serious than what user wants" +msgstr "no se actualizará %s a %s para %s, porque el tipo de actualización es más serio de lo que el usuario desea" #: pkg/upstream/stack/remove.go:73 #, c-format @@ -4837,9 +4609,7 @@ msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s):" #: cli/app/rollback.go:273 #, c-format msgid "please select a downgrade (version: %s, chaos: %s):" -msgstr "" -"por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: " -"%s):" +msgstr "por favor, selecciona una versión anterior (downgrade) (versión: %s, caos: %s):" #: cli/app/upgrade.go:313 #, c-format @@ -5291,8 +5061,7 @@ msgstr "versiones recuperadas del repositorio local de recetas" #: pkg/upstream/stack/stack.go:468 #, c-format msgid "retrieving docker auth token: failed create docker cli: %s" -msgstr "" -"recuperando token de autenticación de Docker: error al crear docker cli: %s" +msgstr "recuperando token de autenticación de Docker: error al crear docker cli: %s" #: pkg/recipe/recipe.go:659 msgid "retrieving recipes" @@ -5353,9 +5122,7 @@ msgstr "regla" #. translators: `app run` command #: cli/app/run.go:27 msgid "run [[args] [flags] | [flags] -- [args]]" -msgstr "" -"lanzar [[argumento] [opciones] | " -"[opciones] -- [argumento]]" +msgstr "lanzar [[argumento] [opciones] | [opciones] -- [argumento]]" #: cli/app/run.go:120 msgid "run command as user" @@ -5445,9 +5212,7 @@ msgstr "secreto [comando] [argumento] [opciones]" #: cli/app/secret.go:295 msgid "secret data not provided on command-line or stdin, prompting" -msgstr "" -"datos del secreto no proporcionados en la línea de comandos o stdin, " -"solicitando" +msgstr "datos del secreto no proporcionados en la línea de comandos o stdin, solicitando" #: pkg/upstream/convert/service.go:72 #, c-format @@ -5481,8 +5246,7 @@ msgstr "los secretos se muestran %s nuevamente, por favor guárdalos %s" #: cli/app/deploy.go:307 #, c-format msgid "selected latest recipe version: %s (from %d available versions)" -msgstr "" -"versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" +msgstr "versión de receta más reciente seleccionada: %s (de %d versiones disponibles)" #: cli/app/new.go:125 #, c-format @@ -5498,8 +5262,7 @@ msgstr "servidor" #: pkg/app/app.go:301 #, c-format msgid "server %s doesn't exist? Run \"abra server ls\" to check" -msgstr "" -"el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" +msgstr "el servidor %s no existe? Ejecuta \"abra servidor listar\" para verificar" #. translators: `server` command group #: cli/server/server.go:17 @@ -5527,8 +5290,7 @@ msgstr "falta contexto del servidor, la creación de contexto falló: %s" #: pkg/client/client.go:58 #, c-format msgid "server missing context, run \"abra server add %s\"?" -msgstr "" -"falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" +msgstr "falta contexto del servidor, ¿probaste con \"abra servidor agregar %s\"?" #: pkg/client/client.go:47 #, c-format @@ -5557,18 +5319,13 @@ msgstr "serverAdd: cleanUp: no se pueden listar los archivos en %s: %s" #: cli/recipe/upgrade.go:227 #, c-format -msgid "" -"service %s is at version %s, but pinned to %s, please correct your " -"compose.yml file manually!" -msgstr "" -"el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige " -"manualmente tu archivo compose.yml!" +msgid "service %s is at version %s, but pinned to %s, please correct your compose.yml file manually!" +msgstr "el servicio %s está en la versión %s, pero fijado a %s, ¡por favor corrige manualmente tu archivo compose.yml!" #: cli/recipe/upgrade.go:223 #, c-format msgid "service %s, image %s pinned to %s, no compatible upgrade found" -msgstr "" -"servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" +msgstr "servicio %s, imagen %s fijada a %s, no se encontró actualización compatible" #: cli/app/restore.go:113 msgid "services" @@ -5614,8 +5371,7 @@ msgstr "gravedad" #: cli/app/deploy.go:457 cli/app/rollback.go:380 cli/app/upgrade.go:497 msgid "show all configs & images, including unchanged ones" -msgstr "" -"mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" +msgstr "mostrar todas las configuraciones e imágenes, incluidas las no cambiadas" #: cli/app/backup.go:273 msgid "show all paths" @@ -5716,8 +5472,7 @@ msgstr "omitiendo la etiqueta %s: configuración de compose inválida: %s" #: pkg/recipe/git.go:432 #, c-format msgid "skipping tag %s: invalid image reference in service %s: %s" -msgstr "" -"omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" +msgstr "omitiendo la etiqueta %s: referencia de imagen inválida en el servicio %s: %s" #: pkg/app/app.go:697 #, c-format @@ -5781,17 +5536,11 @@ msgstr "" #: 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" +msgstr "ssh-agent no encontrado. consulta \"abra receta publicar --ayuda\" y vuelve a intentarlo" #: cli/catalogue/catalogue.go:98 -msgid "" -"ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue " -"generate --help\"" -msgstr "" -"ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo " -"regenerar --ayuda\"" +msgid "ssh: SSH_AUTH_SOCK missing, --publish/-p will fail. see \"abra catalogue generate --help\"" +msgstr "ssh: falta SSH_AUTH_SOCK, --publish/-p fallará. consulta \"abra catalogo regenerar --ayuda\"" #: cli/app/list.go:295 cli/recipe/list.go:45 msgid "status" @@ -6057,16 +5806,12 @@ msgstr "no se pudo determinar el tipo de receta a partir de %s, env: %v" #: cli/app/env.go:106 #, c-format msgid "unable to determine server of app %s, please pass --server/-s" -msgstr "" -"no se pudo determinar el servidor de la aplicación %s; agrega al comando --" -"server/-s" +msgstr "no se pudo determinar el servidor de la aplicación %s; agrega al comando --server/-s" #: cli/recipe/upgrade.go:252 #, c-format msgid "unable to determine versioning semantics of %s, listing all tags" -msgstr "" -"no se pudieron determinar las reglas de versionado de %s; listando todas las " -"etiquetas" +msgstr "no se pudieron determinar las reglas de versionado de %s; listando todas las etiquetas" #: cli/recipe/fetch.go:71 #, c-format @@ -6141,8 +5886,7 @@ msgstr "no se pudo abrir el work tree de %s: %s" #: cli/recipe/upgrade.go:159 #, c-format msgid "unable to parse %s, error was: %s, skipping upgrade for %s" -msgstr "" -"no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" +msgstr "no se pudo analizar %s, el error fue: %s, omitiendo la actualización para %s" #: pkg/recipe/compose.go:153 #, c-format @@ -6187,9 +5931,7 @@ msgstr "no se pudieron leer los remotos en %s: %s" #: cli/recipe/upgrade.go:153 #, c-format msgid "unable to read tag for image %s, is it missing? skipping upgrade for %s" -msgstr "" -"no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo " -"actualización para %s" +msgstr "no se pudo leer la etiqueta de la imagen %s; ¿quizás falta? omitiendo actualización para %s" #: cli/app/move.go:210 #, c-format @@ -6204,8 +5946,7 @@ msgstr "no se pudo eliminar el remoto predeterminado en %s: %s" #: cli/app/volume.go:158 #, c-format msgid "unable to remove volume: no volume with name '%s'?" -msgstr "" -"no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" +msgstr "no se pudo eliminar el volumen: ¿no existe un volumen con el nombre '%s'?" #: cli/app/secret.go:135 cli/app/secret.go:515 cli/recipe/list.go:83 #: cli/recipe/version.go:113 cli/server/list.go:88 @@ -6488,10 +6229,8 @@ msgstr "versión %s guardada en %s.env" #: cli/app/deploy.go:126 #, c-format -msgid "" -"version '%s' appears to be a chaos commit, but --chaos/-C was not provided" -msgstr "" -"la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" +msgid "version '%s' appears to be a chaos commit, but --chaos/-C was not provided" +msgstr "la versión '%s' parece ser un commit de caos, pero no se utilizó --chaos/-C" #: pkg/recipe/recipe.go:200 #, c-format @@ -6539,8 +6278,7 @@ msgstr "versión: tomando la versión desde el archivo .env: %s" #: cli/app/deploy.go:379 #, c-format msgid "version: taking version from cli arg: %s" -msgstr "" -"versión: tomando la versión desde el argumento de la línea de comandos: %s" +msgstr "versión: tomando la versión desde el argumento de la línea de comandos: %s" #. translators: `recipe versions` command #: cli/recipe/version.go:23 @@ -6727,31 +6465,21 @@ msgstr "{nombre: %s, " #, c-format #~ msgid "latest git tag (%s) and synced label (%s) are the same?" -#~ msgstr "" -#~ "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las " -#~ "mismas?" +#~ msgstr "¿la última etiqueta de git (%s) y la etiqueta sincronizada (%s) son las mismas?" #~ msgid "no -p/--publish passed, not publishing" #~ msgstr "no pasó -p/--publish, no se publicará" #, c-format -#~ msgid "" -#~ "no tag specified and no previous tag available for %s, assuming initial " -#~ "release" -#~ msgstr "" -#~ "no se especificó etiqueta y no hay etiqueta previa disponible para %s; " -#~ "asumiendo lanzamiento inicial" +#~ msgid "no tag specified and no previous tag available for %s, assuming initial release" +#~ msgstr "no se especificó etiqueta y no hay etiqueta previa disponible para %s; asumiendo lanzamiento inicial" #, c-format #~ msgid "please fix your synced label for %s and re-run this command" -#~ msgstr "" -#~ "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar " -#~ "este comando" +#~ msgstr "por favor, corrige tu etiqueta sincronizada para %s y vuelve a ejecutar este comando" #~ msgid "previous git tags detected, assuming new semver release" -#~ msgstr "" -#~ "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento " -#~ "semver" +#~ msgstr "se detectaron etiquetas git anteriores, asumiendo un nuevo lanzamiento semver" #~ msgid "publish new release?" #~ msgstr "¿publicar nueva versión?" @@ -6760,12 +6488,8 @@ msgstr "{nombre: %s, " #~ msgstr "sincronizar [version] [flags]" #, c-format -#~ msgid "" -#~ "unable to read version for %s from synced label. Did you try running " -#~ "\"abra recipe sync %s\" already?" -#~ msgstr "" -#~ "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya " -#~ "ejecutaste \"abra receta sincronizar %s\"?" +#~ msgid "unable to read version for %s from synced label. Did you try running \"abra recipe sync %s\" already?" +#~ msgstr "no se pudo leer la versión de %s desde la etiqueta sincronizada. ¿Ya ejecutaste \"abra receta sincronizar %s\"?" #, c-format #~ msgid "use %s as the new version?" From b1146a707e85a88ac8cf575af90d61d6a777d8b5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 17 Jun 2026 23:01:19 +0000 Subject: [PATCH 36/55] chore(deps): update nginx docker tag to v1.31.2 --- pkg/secret/testdir/compose.yaml | 2 +- tests/resources/test_recipe/compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secret/testdir/compose.yaml b/pkg/secret/testdir/compose.yaml index b8f448df..691954c2 100644 --- a/pkg/secret/testdir/compose.yaml +++ b/pkg/secret/testdir/compose.yaml @@ -3,7 +3,7 @@ version: "3.8" services: app: - image: nginx:1.31.1 + image: nginx:1.31.2 secrets: - test_pass_one - test_pass_two diff --git a/tests/resources/test_recipe/compose.yml b/tests/resources/test_recipe/compose.yml index f74fb989..d2f0a982 100644 --- a/tests/resources/test_recipe/compose.yml +++ b/tests/resources/test_recipe/compose.yml @@ -3,7 +3,7 @@ version: "3.8" services: app: - image: nginx:1.31.1 + image: nginx:1.31.2 networks: - proxy deploy: From 3109a0da82135ce1507aca3f9142568abb87d22d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 20 Jun 2026 00:01:07 +0000 Subject: [PATCH 37/55] chore(deps): update otel/weaver docker tag to v0.24.0 --- vendor/go.opentelemetry.io/otel/dependencies.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile index f0cc942b..d4da9d77 100644 --- a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -1,4 +1,4 @@ # This is a renovate-friendly source of Docker images. FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python -FROM otel/weaver:v0.21.2@sha256:2401de985c38bdb98b43918e2f43aa36b2afed4aa5669ac1c1de0a17301cd36d AS weaver +FROM otel/weaver:v0.24.0@sha256:21f103cc853af0359359fdf11dad5d36a68900487704372eb901d3d3e88644d7 AS weaver FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown From 9859ff46f5cf2cc474c71a3705e3b2f8b0163db3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 21 Jun 2026 21:01:00 +0000 Subject: [PATCH 38/55] chore(deps): update otel/weaver docker tag to v0.24.1 --- vendor/go.opentelemetry.io/otel/dependencies.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile index d4da9d77..0e9e2950 100644 --- a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -1,4 +1,4 @@ # This is a renovate-friendly source of Docker images. FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python -FROM otel/weaver:v0.24.0@sha256:21f103cc853af0359359fdf11dad5d36a68900487704372eb901d3d3e88644d7 AS weaver +FROM otel/weaver:v0.24.1@sha256:263964a7d444e77812f7a2d654e17683c4760a968c91278acdb7a44c20ccd572 AS weaver FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown From f3943d25d19a832e2eee269c849394dda87a7312 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 23 Jun 2026 18:00:57 +0000 Subject: [PATCH 39/55] chore(deps): update otel/weaver docker tag to v0.24.2 --- vendor/go.opentelemetry.io/otel/dependencies.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile index 0e9e2950..aa8d13fe 100644 --- a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -1,4 +1,4 @@ # This is a renovate-friendly source of Docker images. FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python -FROM otel/weaver:v0.24.1@sha256:263964a7d444e77812f7a2d654e17683c4760a968c91278acdb7a44c20ccd572 AS weaver +FROM otel/weaver:v0.24.2@sha256:d1fb16d279f39810c340fbbf1cf9e5e995a3a9cefa531938e9012437e3bc00c1 AS weaver FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown From 8137e56d1e295613433a7c6df2e497b4bcfc6258 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 30 Jun 2026 19:01:51 +0000 Subject: [PATCH 40/55] chore(deps): update module github.com/schollz/progressbar/v3 to v3.19.1 --- go.mod | 4 +- go.sum | 9 +- .../github.com/docker/distribution/Dockerfile | 2 +- .../mattn/go-isatty/isatty_others.go | 4 +- .../mattn/go-isatty/isatty_windows.go | 15 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- .../github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- .../schollz/progressbar/v3/progressbar.go | 143 +++++++++++------- .../otel/dependencies.Dockerfile | 2 +- vendor/modules.txt | 8 +- 10 files changed, 118 insertions(+), 73 deletions(-) diff --git a/go.mod b/go.mod index 40e4852a..f9bd8243 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/moby/sys/signal v0.7.1 github.com/moby/term v0.5.2 github.com/pkg/errors v0.9.1 - github.com/schollz/progressbar/v3 v3.19.0 + github.com/schollz/progressbar/v3 v3.19.1 golang.org/x/term v0.44.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools/v3 v3.5.2 @@ -77,7 +77,7 @@ require ( github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/lucasb-eyer/go-colorful v1.4.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-isatty v0.0.22 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.21 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect diff --git a/go.sum b/go.sum index 9da0be8f..79ed0a3d 100644 --- a/go.sum +++ b/go.sum @@ -623,8 +623,8 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= +github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -808,8 +808,8 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/schollz/progressbar/v3 v3.19.0 h1:Ea18xuIRQXLAUidVDox3AbwfUhD0/1IvohyTutOIFoc= -github.com/schollz/progressbar/v3 v3.19.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= +github.com/schollz/progressbar/v3 v3.19.1 h1:iv8BgwOvdML/S3p84uBpy/IMigv4U9594vPZYa2EdrU= +github.com/schollz/progressbar/v3 v3.19.1/go.mod h1:LFL7jqimKxfhero4K1eCkUr/6R39AgQeiPCJtlTWIW8= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= @@ -1139,7 +1139,6 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/vendor/github.com/docker/distribution/Dockerfile b/vendor/github.com/docker/distribution/Dockerfile index 588d658a..ebd42c24 100644 --- a/vendor/github.com/docker/distribution/Dockerfile +++ b/vendor/github.com/docker/distribution/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 ARG GO_VERSION=1.20.8 -ARG ALPINE_VERSION=3.24 +ARG ALPINE_VERSION=3.18 ARG XX_VERSION=1.2.1 FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go index 7402e061..b24a2fad 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_others.go +++ b/vendor/github.com/mattn/go-isatty/isatty_others.go @@ -1,5 +1,5 @@ -//go:build (appengine || js || nacl || tinygo || wasm) && !windows -// +build appengine js nacl tinygo wasm +//go:build (appengine || js || nacl || tinygo || wasm || wasip1 || wasip2) && !windows +// +build appengine js nacl tinygo wasm wasip1 wasip2 // +build !windows package isatty diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go index 8e3c9917..5f29c11d 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_windows.go +++ b/vendor/github.com/mattn/go-isatty/isatty_windows.go @@ -31,6 +31,10 @@ func init() { if procGetFileInformationByHandleEx.Find() != nil { procGetFileInformationByHandleEx = nil } + // Check if NtQueryObject is available. + if procNtQueryObject.Find() != nil { + procNtQueryObject = nil + } } // IsTerminal return true if the file descriptor is terminal. @@ -43,6 +47,7 @@ func IsTerminal(fd uintptr) bool { // Check pipe name is used for cygwin/msys2 pty. // Cygwin/MSYS2 PTY has a name like: // \{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master +// On Windows 7 a trailing suffix (e.g. "-nat") may be appended. func isCygwinPipeName(name string) bool { token := strings.Split(name, "-") if len(token) < 5 { @@ -72,13 +77,19 @@ func isCygwinPipeName(name string) bool { return false } + for _, t := range token[5:] { + if t == "" { + return false + } + } + return true } -// getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler +// getFileNameByHandle use the undocumented ntdll NtQueryObject to get file full name from file handler // since GetFileInformationByHandleEx is not available under windows Vista and still some old fashion // guys are using Windows XP, this is a workaround for those guys, it will also work on system from -// Windows vista to 10 +// Windows Vista to 10 // see https://stackoverflow.com/a/18792477 for details func getFileNameByHandle(fd uintptr) (string, error) { if procNtQueryObject == nil { diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 2b0227d1..1fe43ec4 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index 9e2d8e4d..af7f2e21 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.26@sha256:68cb6d68bed024785b69195b89af7ac7a444f27791435f98647edff595aa0479 +FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a ENV GOOS=linux ENV GOARCH=arm64 diff --git a/vendor/github.com/schollz/progressbar/v3/progressbar.go b/vendor/github.com/schollz/progressbar/v3/progressbar.go index 99222a3c..37158617 100644 --- a/vendor/github.com/schollz/progressbar/v3/progressbar.go +++ b/vendor/github.com/schollz/progressbar/v3/progressbar.go @@ -81,6 +81,8 @@ type config struct { colorCodes bool // custom colors to use for colorCodes customColors map[string]string + // color to apply to spinner + spinnerColorCode string // show rate of change in kB/sec or MB/sec showBytes bool @@ -290,6 +292,13 @@ func OptionSetCustomColorCodes(customColors map[string]string) Option { } } +// OptionSetSpinnerColorCode sets color code for spinner +func OptionSetSpinnerColorCode(colorCode string) Option { + return func(p *ProgressBar) { + p.config.spinnerColorCode = colorCode + } +} + // OptionSetElapsedTime will enable elapsed time. Always enabled if OptionSetPredictTime is true. func OptionSetElapsedTime(elapsedTime bool) Option { return func(p *ProgressBar) { @@ -1114,6 +1123,74 @@ func getStringWidth(c config, str string) int { return stringWidth } +func renderDeterminateProgressBar(c config, s *state, bar, stats, leftBrac, rightBrac string) string { + if rightBrac == "" { + str := fmt.Sprintf("%4d%% %s %s", + s.currentPercent, + bar, + stats) + if (s.currentPercent == 100 && c.showElapsedTimeOnFinish) || c.elapsedTime { + str = fmt.Sprintf("%s [%s]", str, leftBrac) + } + + if c.showDescriptionAtLineEnd { + return fmt.Sprintf("\r%s %s ", str, c.description) + } + return fmt.Sprintf("\r%s%s ", c.description, str) + } + + if s.currentPercent == 100 { + str := fmt.Sprintf("%4d%% %s %s", + s.currentPercent, + bar, + stats) + + if c.showElapsedTimeOnFinish { + str = fmt.Sprintf("%s [%s]", str, leftBrac) + } + + if c.showDescriptionAtLineEnd { + return fmt.Sprintf("\r%s %s", str, c.description) + } + return fmt.Sprintf("\r%s%s", c.description, str) + } + + str := fmt.Sprintf("%4d%% %s %s [%s:%s]", + s.currentPercent, + bar, + stats, + leftBrac, + rightBrac) + + if c.showDescriptionAtLineEnd { + return fmt.Sprintf("\r%s %s", str, c.description) + } + return fmt.Sprintf("\r%s%s", c.description, str) +} + +func fitProgressBarWidth(c config, s *state, barStart, barEnd, stats, leftBrac, rightBrac string) int { + if c.fullWidth || c.ignoreLength || c.width <= 0 { + return c.width + } + + terminalWidth, err := termWidth(c.writer) + if err != nil || terminalWidth <= 0 { + return c.width + } + + bar := barStart + strings.Repeat(c.theme.SaucerPadding, c.width) + barEnd + lineWidth := getStringWidth(c, renderDeterminateProgressBar(c, s, bar, stats, leftBrac, rightBrac)) + if lineWidth <= terminalWidth { + return c.width + } + + fitWidth := c.width - (lineWidth - terminalWidth) + if fitWidth < 0 { + return 0 + } + return fitWidth +} + func renderProgressBar(c config, s *state) (int, error) { var sb strings.Builder @@ -1243,6 +1320,10 @@ func renderProgressBar(c config, s *state) (int, error) { if (s.currentSaucerSize > 0 || s.currentPercent > 0) && c.theme.BarStartFilled != "" { barStart = c.theme.BarStartFilled } + c.width = fitProgressBarWidth(c, s, barStart, barEnd, sb.String(), leftBrac, rightBrac) + if !c.ignoreLength { + s.currentSaucerSize = int(float64(s.currentPercent) / 100.0 * float64(c.width)) + } if s.currentSaucerSize > 0 { if c.ignoreLength { saucer = strings.Repeat(c.theme.SaucerPadding, s.currentSaucerSize-1) @@ -1294,6 +1375,10 @@ func renderProgressBar(c config, s *state) (int, error) { spinner = selectedSpinner[s.spinnerIdx] s.spinnerIdx = (s.spinnerIdx + 1) % len(selectedSpinner) } + // if set add spinner color code + if c.spinnerColorCode != "" && c.colorCodes { + spinner = "[" + c.spinnerColorCode + "]" + spinner + "[reset]" + } if c.elapsedTime { if c.showDescriptionAtLineEnd { str = fmt.Sprintf("\r%s %s [%s] %s ", @@ -1322,61 +1407,11 @@ func renderProgressBar(c config, s *state) (int, error) { } } } else if rightBrac == "" { - str = fmt.Sprintf("%4d%% %s%s%s%s%s %s", - s.currentPercent, - barStart, - saucer, - saucerHead, - strings.Repeat(c.theme.SaucerPadding, repeatAmount), - barEnd, - sb.String()) - if (s.currentPercent == 100 && c.showElapsedTimeOnFinish) || c.elapsedTime { - str = fmt.Sprintf("%s [%s]", str, leftBrac) - } - - if c.showDescriptionAtLineEnd { - str = fmt.Sprintf("\r%s %s ", str, c.description) - } else { - str = fmt.Sprintf("\r%s%s ", c.description, str) - } + bar := barStart + saucer + saucerHead + strings.Repeat(c.theme.SaucerPadding, repeatAmount) + barEnd + str = renderDeterminateProgressBar(c, s, bar, sb.String(), leftBrac, rightBrac) } else { - if s.currentPercent == 100 { - str = fmt.Sprintf("%4d%% %s%s%s%s%s %s", - s.currentPercent, - barStart, - saucer, - saucerHead, - strings.Repeat(c.theme.SaucerPadding, repeatAmount), - barEnd, - sb.String()) - - if c.showElapsedTimeOnFinish { - str = fmt.Sprintf("%s [%s]", str, leftBrac) - } - - if c.showDescriptionAtLineEnd { - str = fmt.Sprintf("\r%s %s", str, c.description) - } else { - str = fmt.Sprintf("\r%s%s", c.description, str) - } - } else { - str = fmt.Sprintf("%4d%% %s%s%s%s%s %s [%s:%s]", - s.currentPercent, - barStart, - saucer, - saucerHead, - strings.Repeat(c.theme.SaucerPadding, repeatAmount), - barEnd, - sb.String(), - leftBrac, - rightBrac) - - if c.showDescriptionAtLineEnd { - str = fmt.Sprintf("\r%s %s", str, c.description) - } else { - str = fmt.Sprintf("\r%s%s", c.description, str) - } - } + bar := barStart + saucer + saucerHead + strings.Repeat(c.theme.SaucerPadding, repeatAmount) + barEnd + str = renderDeterminateProgressBar(c, s, bar, sb.String(), leftBrac, rightBrac) } if c.colorCodes { diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile index aa8d13fe..f0cc942b 100644 --- a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -1,4 +1,4 @@ # This is a renovate-friendly source of Docker images. FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python -FROM otel/weaver:v0.24.2@sha256:d1fb16d279f39810c340fbbf1cf9e5e995a3a9cefa531938e9012437e3bc00c1 AS weaver +FROM otel/weaver:v0.21.2@sha256:2401de985c38bdb98b43918e2f43aa36b2afed4aa5669ac1c1de0a17301cd36d AS weaver FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown diff --git a/vendor/modules.txt b/vendor/modules.txt index 02a23669..955c4818 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -419,8 +419,8 @@ github.com/lucasb-eyer/go-colorful # github.com/mattn/go-colorable v0.1.14 ## explicit; go 1.18 github.com/mattn/go-colorable -# github.com/mattn/go-isatty v0.0.20 -## explicit; go 1.15 +# github.com/mattn/go-isatty v0.0.22 +## explicit; go 1.21 github.com/mattn/go-isatty # github.com/mattn/go-localereader v0.0.1 ## explicit @@ -530,8 +530,8 @@ github.com/rivo/uniseg # github.com/russross/blackfriday/v2 v2.1.0 ## explicit github.com/russross/blackfriday/v2 -# github.com/schollz/progressbar/v3 v3.19.0 -## explicit; go 1.22 +# github.com/schollz/progressbar/v3 v3.19.1 +## explicit; go 1.25.0 github.com/schollz/progressbar/v3 # github.com/sergi/go-diff v1.4.0 ## explicit; go 1.13 From b13b10be9abcb3ad10b8559049a4a61107eb3970 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 30 Jun 2026 21:00:55 +0000 Subject: [PATCH 41/55] chore(deps): update golang docker tag --- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm | 2 +- vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm index 1fe43ec4..d6444ae9 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:f96cc555eb8db430159a3aa6797cd5bae561945b7b0fe7d0e284c63a3b291609 ENV GOOS=linux ENV GOARCH=arm diff --git a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 index af7f2e21..a149d842 100644 --- a/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 +++ b/vendor/github.com/pjbgf/sha1cd/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.25@sha256:31c1e53dfc1cc2d269deec9c83f58729fa3c53dc9a576f6426109d1e319e9e9a +FROM golang:1.26@sha256:f96cc555eb8db430159a3aa6797cd5bae561945b7b0fe7d0e284c63a3b291609 ENV GOOS=linux ENV GOARCH=arm64 From 4e42d4fb9e3f9de7a4fec9052725f8e2820f25d3 Mon Sep 17 00:00:00 2001 From: devydave Date: Thu, 30 Jul 2026 16:53:34 +0200 Subject: [PATCH 42/55] feat: adds local vm setup that can reach each other --- Makefile | 35 +++++++ flake.lock | 60 +++++++++++ flake.nix | 76 ++++++++++---- nix/hosts/client/configuration.nix | 162 +++++++++++++++++++++++++++++ nix/hosts/client/home.nix | 41 ++++++++ nix/hosts/server/configuration.nix | 116 +++++++++++++++++++++ 6 files changed, 470 insertions(+), 20 deletions(-) create mode 100644 nix/hosts/client/configuration.nix create mode 100644 nix/hosts/client/home.nix create mode 100644 nix/hosts/server/configuration.nix diff --git a/Makefile b/Makefile index b46181de..022918e4 100644 --- a/Makefile +++ b/Makefile @@ -84,3 +84,38 @@ build-mo: release: @goreleaser release --clean + +CLIENT_VM := abra-client +vm-client-status: + sudo systemctl status microvm@$(CLIENT_VM).service +vm-client-create: + sudo microvm -f git+file://$$(pwd) -c $(CLIENT_VM) +vm-client-start: + sudo systemctl start microvm@$(CLIENT_VM).service +vm-client-update: + sudo microvm -R -f git+file://$$(pwd) -u $(CLIENT_VM) +vm-client-run: + sudo microvm -f git+file://$$(pwd) -r $(CLIENT_VM) +vm-client-stop: + sudo systemctl stop microvm@$(CLIENT_VM) +vm-client-delete: vm-client-stop + sudo rm -rf /var/lib/microvms/$(CLIENT_VM) + +SERVER_VM := abra-server +vm-server-status: + sudo systemctl status microvm@$(SERVER_VM).service +vm-server-create: + sudo microvm -f git+file://$$(pwd) -c $(SERVER_VM) +vm-server-start: + sudo systemctl start microvm@$(SERVER_VM).service +vm-server-update: + sudo microvm -R -f git+file://$$(pwd) -u $(SERVER_VM) +vm-server-run: + sudo microvm -f git+file://$$(pwd) -r $(SERVER_VM) +vm-server-stop: + sudo systemctl stop microvm@$(SERVER_VM) +vm-server-delete: vm-stop + sudo rm -rf /var/lib/microvms/$(SERVER_VM) + +test-integration: + ssh-keygen -t ed25519 -f ./test-integration -q -N "" -C "abra integration test" diff --git a/flake.lock b/flake.lock index 9448fe0f..57e2bd06 100644 --- a/flake.lock +++ b/flake.lock @@ -18,6 +18,48 @@ "type": "github" } }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1785119570, + "narHash": "sha256-Rgs2xKnGLFWQscxUaXX07oyZeuMDOHEbqDOsgliLFGM=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "d4fd24667c8cbef124bb70a20380cab75ec8474d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-26.05", + "repo": "home-manager", + "type": "github" + } + }, + "microvm": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "spectrum": "spectrum" + }, + "locked": { + "lastModified": 1784666190, + "narHash": "sha256-xgfS6slV7J3baMooNN1UuBi51RIgg9y0DbCxfSA0668=", + "owner": "astro", + "repo": "microvm.nix", + "rev": "fa5340ac684cdce8a22b6d4a0bcebb0cc999275e", + "type": "github" + }, + "original": { + "owner": "astro", + "repo": "microvm.nix", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1778443072, @@ -37,9 +79,27 @@ "root": { "inputs": { "flake-utils": "flake-utils", + "home-manager": "home-manager", + "microvm": "microvm", "nixpkgs": "nixpkgs" } }, + "spectrum": { + "flake": false, + "locked": { + "lastModified": 1783694892, + "narHash": "sha256-xO8f7Qng+18FK2UlB9vcrkxCaQMCt5WjCH24aW/11eg=", + "ref": "refs/heads/main", + "rev": "24c4346e30fdea8d8e80f34aec3554a15a667d24", + "revCount": 1410, + "type": "git", + "url": "https://spectrum-os.org/git/spectrum" + }, + "original": { + "type": "git", + "url": "https://spectrum-os.org/git/spectrum" + } + }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index fdc35b22..878081c8 100644 --- a/flake.nix +++ b/flake.nix @@ -3,35 +3,71 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager/release-26.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; flake-utils.url = "github:numtide/flake-utils"; + microvm = { + url = "github:astro/microvm.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = { self, nixpkgs, + microvm, + home-manager, flake-utils, }: - flake-utils.lib.eachDefaultSystem ( - system: - let - pkgs = nixpkgs.legacyPackages.${system}; - in - { - packages = rec { - abra = pkgs.callPackage ./package.nix { }; - default = abra; - }; - apps = rec { - abra = flake-utils.lib.mkApp { drv = self.packages.${system}.abra; }; - default = abra; - }; - devShells.default = pkgs.mkShell { - packages = with pkgs; [ - go_1_26 - gnumake + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + publicKey = builtins.readFile ./test-integration.pub; + privateKey = builtins.readFile ./test-integration; + in + { + nixosConfigurations = { + abra-client = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + microvm.nixosModules.microvm + home-manager.nixosModules.home-manager + ./nix/hosts/client/configuration.nix ]; + specialArgs = { inherit publicKey privateKey; }; }; - } - ); + abra-server = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + microvm.nixosModules.microvm + ./nix/hosts/server/configuration.nix + ]; + specialArgs = { inherit publicKey privateKey; }; + }; + }; + packages = rec { + abra = pkgs.callPackage ./package.nix { }; + default = abra; + }; + apps = rec { + abra = flake-utils.lib.mkApp { drv = self.packages.${system}.abra; }; + default = abra; + }; + devShells.${system}.default = pkgs.mkShell { + # testing env variables + BATS_LIB_PATH = "~/.local/share/bats/"; + TEST_SERVER = "abra.local"; + ABRA_DIR = "$HOME/.abra_test"; + + packages = with pkgs; [ + go_1_26 + gnumake + gopls + ]; + }; + + }; } diff --git a/nix/hosts/client/configuration.nix b/nix/hosts/client/configuration.nix new file mode 100644 index 00000000..ccccd999 --- /dev/null +++ b/nix/hosts/client/configuration.nix @@ -0,0 +1,162 @@ +{ + lib, + pkgs, + publicKey, + privateKey, + ... +}: +let + index = 2; + mac = "00:00:00:00:00:01"; + serverIp = "10.0.0.3"; +in +{ + microvm = { + vcpu = 4; + mem = 2049; # see issue related in microvm repo with 2048, so add 1MB + interfaces = [ + { + id = "vm${toString index}"; + type = "tap"; + inherit mac; + } + ]; + shares = [ + { + proto = "virtiofs"; + tag = "repo"; + # Source path can be absolute or relative + # to /var/lib/microvms/$hostName + source = "/home/dev/Documents/abra"; + mountPoint = "/home/dev/abra"; + } + ]; + }; + + boot.tmp = { + useTmpfs = true; + tmpfsSize = "2G"; + }; + + networking = { + hostName = "abra-client"; + useNetworkd = true; + }; + systemd.network.networks."10-eth" = { + matchConfig.MACAddress = mac; + # Static IP configuration + address = [ + "10.0.0.${toString index}/32" + "fec0::${lib.toHexString index}/128" + ]; + routes = [ + { + # A route to the host + Destination = "10.0.0.0/32"; + GatewayOnLink = true; + } + { + # Route to server + Destination = "${serverIp}/32"; + Gateway = "10.0.0.0"; + GatewayOnLink = true; + } + { + # Default route + Destination = "0.0.0.0/0"; + Gateway = "10.0.0.0"; + GatewayOnLink = true; + } + { + # Default route + Destination = "::/0"; + Gateway = "fec0::"; + GatewayOnLink = true; + } + ]; + networkConfig = { + # DNS servers no longer come from DHCP nor Router + # Advertisements. Perhaps you want to change the defaults: + DNS = [ + # Quad9.net + "9.9.9.9" + "149.112.112.112" + "2620:fe::fe" + "2620:fe::9" + ]; + }; + }; + + # open the ports to allow ssh access from the host + networking.firewall.allowedTCPPorts = [ 22 ]; + networking.firewall.allowedUDPPorts = [ 22 ]; + + networking.extraHosts = '' + ${serverIp} abra.local + ${serverIp} app_check_bats.abra.local + ''; + + environment.variables = { + CGO_ENABLED = 0; + TEST_SERVER = "abra.local"; + ABRA_DIR = "$HOME/.abra_test"; + }; + + users.users.dev = { + isNormalUser = true; + password = "test"; + home = "/home/dev"; + description = "Alice Foobar"; + extraGroups = [ + "wheel" + "networkmanager" + ]; + openssh.authorizedKeys.keys = [ + publicKey + ]; + }; + # ssh agent with askpass + programs.ssh = { + startAgent = true; + }; + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + AllowUsers = [ "dev" ]; + }; + }; + programs.git.enable = true; + + environment.systemPackages = with pkgs; [ + # build dependencies, copied from flake.nix + go_1_26 + gnumake + # testing dependencies + (bats.withLibraries (p: [ + p.bats-assert + p.bats-file + p.bats-support + ])) + jq + ]; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.dev = + { ... }: + { + imports = [ + ./home.nix + ]; + }; + # pass args to home-manager + extraSpecialArgs = { + publicKey = publicKey; + privateKey = privateKey; + serverIp = serverIp; + }; + }; +} diff --git a/nix/hosts/client/home.nix b/nix/hosts/client/home.nix new file mode 100644 index 00000000..905a22f8 --- /dev/null +++ b/nix/hosts/client/home.nix @@ -0,0 +1,41 @@ +{ + serverIp, + ... +}: +{ + # Home Manager needs a bit of information about you and the + # paths it should manage. + home.username = "dev"; + home.homeDirectory = "/home/dev"; + + # This value determines the Home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new Home Manager release introduces backwards + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + home.stateVersion = "26.05"; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + programs.ssh = { + enable = true; + enableDefaultConfig = false; + settings = { + "abra.local" = { + HostName = serverIp; + User = "dev"; + Port = 22; + IdentityFile = "/home/dev/abra/test-integration"; + }; + "*.abra.local" = { + HostName = serverIp; + User = "dev"; + Port = 22; + IdentityFile = "/home/dev/abra/test-integration"; + }; + }; + }; +} diff --git a/nix/hosts/server/configuration.nix b/nix/hosts/server/configuration.nix new file mode 100644 index 00000000..e4a739fb --- /dev/null +++ b/nix/hosts/server/configuration.nix @@ -0,0 +1,116 @@ +{ + lib, + publicKey, + ... +}: +let + index = 3; + mac = "00:00:00:00:00:02"; + clientIp = "10.0.0.2"; +in +{ + microvm = { + vcpu = 2; + mem = 2049; # see issue related in microvm repo with 2048, so add 1MB + interfaces = [ + { + id = "vm${toString index}"; + type = "tap"; + inherit mac; + } + ]; + }; + + boot.tmp = { + useTmpfs = true; + tmpfsSize = "2G"; + }; + + networking = { + hostName = "abra-server"; + useNetworkd = true; + }; + systemd.network.networks."11-eth" = { + matchConfig.MACAddress = mac; + # Static IP configuration + address = [ + "10.0.0.${toString index}/32" + "fec0::${lib.toHexString index}/128" + ]; + routes = [ + { + # A route to the host + Destination = "10.0.0.0/32"; + GatewayOnLink = true; + } + { + # Route to server + Destination = "${clientIp}/32"; + Gateway = "10.0.0.0"; + GatewayOnLink = true; + } + { + # Default route + Destination = "0.0.0.0/0"; + Gateway = "10.0.0.0"; + GatewayOnLink = true; + } + { + # Default route + Destination = "::/0"; + Gateway = "fec0::"; + GatewayOnLink = true; + } + ]; + networkConfig = { + # DNS servers no longer come from DHCP nor Router + # Advertisements. Perhaps you want to change the defaults: + DNS = [ + # Quad9.net + "9.9.9.9" + "149.112.112.112" + "2620:fe::fe" + "2620:fe::9" + ]; + }; + }; + + # open the ports to allow ssh access from the host + networking.firewall.allowedTCPPorts = [ + 22 + 80 + 443 + ]; + networking.firewall.allowedUDPPorts = [ + 22 + 80 + 443 + ]; + + users.users.dev = { + isNormalUser = true; + password = "test"; + home = "/home/dev"; + description = "Alice Foobar"; + extraGroups = [ + "wheel" + "networkmanager" + "docker" + ]; + openssh.authorizedKeys.keys = [ + publicKey + ]; + }; + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + AllowUsers = [ "dev" ]; + }; + }; + virtualisation.docker = { + enable = true; + liveRestore = false; + }; +} From 9bd8f4962a2e131c6555f7812e0bd7fef517c1aa Mon Sep 17 00:00:00 2001 From: devydave Date: Thu, 6 Aug 2026 22:00:29 +0200 Subject: [PATCH 43/55] feat: adds running integrations test suite --- Makefile | 12 +++- flake.nix | 38 +++++++++-- nix/hosts/client/configuration.nix | 66 +++++++++---------- nix/hosts/client/home.nix | 13 ++-- nix/hosts/server/configuration.nix | 51 ++++---------- nix/modules/docker.nix | 7 ++ nix/modules/ssh.nix | 33 ++++++++++ nix/modules/user.nix | 22 +++++++ package.nix => nix/package.nix | 0 tests/integration/app_deploy.bats | 19 ++++-- tests/integration/app_deploy_env_version.bats | 3 +- tests/integration/app_remove.bats | 15 +++-- .../integration/app_rollback_env_version.bats | 3 +- .../integration/app_upgrade_env_version.bats | 5 +- tests/integration/helpers/common.bash | 17 +++-- tests/integration/helpers/docker.bash | 36 ++++++++-- tests/integration/helpers/hosts.bash | 31 +++++++++ tests/integration/recipe_upgrade.bats | 2 - tests/integration/server_add.bats | 6 +- tests/resources/local_hosts | 58 ++++++++++++++++ tests/resources/local_integration_ssh | 7 ++ tests/resources/local_integration_ssh.pub | 1 + 22 files changed, 327 insertions(+), 118 deletions(-) create mode 100644 nix/modules/docker.nix create mode 100644 nix/modules/ssh.nix create mode 100644 nix/modules/user.nix rename package.nix => nix/package.nix (100%) create mode 100755 tests/integration/helpers/hosts.bash create mode 100644 tests/resources/local_hosts create mode 100644 tests/resources/local_integration_ssh create mode 100644 tests/resources/local_integration_ssh.pub diff --git a/Makefile b/Makefile index 022918e4..feb4874a 100644 --- a/Makefile +++ b/Makefile @@ -100,6 +100,8 @@ vm-client-stop: sudo systemctl stop microvm@$(CLIENT_VM) vm-client-delete: vm-client-stop sudo rm -rf /var/lib/microvms/$(CLIENT_VM) +vm-client-connect: + kitten ssh abra@10.0.0.2 -i ./tests/resources/local_integration_ssh SERVER_VM := abra-server vm-server-status: @@ -114,8 +116,14 @@ vm-server-run: sudo microvm -f git+file://$$(pwd) -r $(SERVER_VM) vm-server-stop: sudo systemctl stop microvm@$(SERVER_VM) -vm-server-delete: vm-stop +vm-server-delete: vm-server-stop sudo rm -rf /var/lib/microvms/$(SERVER_VM) +vm-server-connect: + ssh abra@10.0.0.3 -i ./tests/resources/local_integration_ssh test-integration: - ssh-keygen -t ed25519 -f ./test-integration -q -N "" -C "abra integration test" + ssh-add ./tests/resources/local_integration_ssh + ./abra server add abra.local + ./abra app new traefik + ./abra app deploy traefik.abra.local + @bats -Tp tests/integration --verbose-run diff --git a/flake.nix b/flake.nix index 878081c8..9385e2e6 100644 --- a/flake.nix +++ b/flake.nix @@ -25,8 +25,18 @@ let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; - publicKey = builtins.readFile ./test-integration.pub; - privateKey = builtins.readFile ./test-integration; + publicKey = builtins.readFile ./tests/resources/local_integration_ssh.pub; + privateKey = builtins.readFile ./tests/resources/local_integration_ssh; + localDomainHosts = builtins.readFile ./tests/resources/local_hosts; + username = "abra"; + password = "abra"; + defaultDNS = [ + # Quad9.net + "9.9.9.9" + "149.112.112.112" + "2620:fe::fe" + "2620:fe::9" + ]; in { nixosConfigurations = { @@ -37,7 +47,16 @@ home-manager.nixosModules.home-manager ./nix/hosts/client/configuration.nix ]; - specialArgs = { inherit publicKey privateKey; }; + specialArgs = { + inherit + publicKey + privateKey + username + password + defaultDNS + localDomainHosts + ; + }; }; abra-server = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; @@ -45,11 +64,20 @@ microvm.nixosModules.microvm ./nix/hosts/server/configuration.nix ]; - specialArgs = { inherit publicKey privateKey; }; + specialArgs = { + inherit + publicKey + privateKey + username + password + defaultDNS + localDomainHosts + ; + }; }; }; packages = rec { - abra = pkgs.callPackage ./package.nix { }; + abra = pkgs.callPackage ./nix/package.nix { }; default = abra; }; apps = rec { diff --git a/nix/hosts/client/configuration.nix b/nix/hosts/client/configuration.nix index ccccd999..3b903994 100644 --- a/nix/hosts/client/configuration.nix +++ b/nix/hosts/client/configuration.nix @@ -3,6 +3,9 @@ pkgs, publicKey, privateKey, + username, + defaultDNS, + localDomainHosts, ... }: let @@ -11,6 +14,12 @@ let serverIp = "10.0.0.3"; in { + imports = [ + ../../modules/ssh.nix + ../../modules/user.nix + ../../modules/docker.nix + ]; + microvm = { vcpu = 4; mem = 2049; # see issue related in microvm repo with 2048, so add 1MB @@ -27,8 +36,8 @@ in tag = "repo"; # Source path can be absolute or relative # to /var/lib/microvms/$hostName - source = "/home/dev/Documents/abra"; - mountPoint = "/home/dev/abra"; + source = "/home/dev/Documents/kum/abra"; + mountPoint = "/home/${username}/abra"; } ]; }; @@ -77,13 +86,7 @@ in networkConfig = { # DNS servers no longer come from DHCP nor Router # Advertisements. Perhaps you want to change the defaults: - DNS = [ - # Quad9.net - "9.9.9.9" - "149.112.112.112" - "2620:fe::fe" - "2620:fe::9" - ]; + DNS = defaultDNS; }; }; @@ -91,10 +94,7 @@ in networking.firewall.allowedTCPPorts = [ 22 ]; networking.firewall.allowedUDPPorts = [ 22 ]; - networking.extraHosts = '' - ${serverIp} abra.local - ${serverIp} app_check_bats.abra.local - ''; + networking.extraHosts = localDomainHosts; environment.variables = { CGO_ENABLED = 0; @@ -102,32 +102,26 @@ in ABRA_DIR = "$HOME/.abra_test"; }; - users.users.dev = { - isNormalUser = true; - password = "test"; - home = "/home/dev"; - description = "Alice Foobar"; - extraGroups = [ - "wheel" - "networkmanager" - ]; - openssh.authorizedKeys.keys = [ - publicKey - ]; - }; - # ssh agent with askpass programs.ssh = { startAgent = true; + knownHostsFiles = [ + (pkgs.writeText "local.keys" '' + abra.local ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFD3rtSHGYWSrvVZe9VGQSa16EIawScFWmkBfGC0cebv + '') + ]; }; - services.openssh = { + programs.git = { enable = true; - settings = { - PasswordAuthentication = false; - PermitRootLogin = "no"; - AllowUsers = [ "dev" ]; - }; + # many recipe commands need a preset git user + config = [ + { + user = { + name = "abra dev"; + email = "helo@coopcloud.tech"; + }; + } + ]; }; - programs.git.enable = true; environment.systemPackages = with pkgs; [ # build dependencies, copied from flake.nix @@ -140,12 +134,13 @@ in p.bats-support ])) jq + wget ]; home-manager = { useGlobalPkgs = true; useUserPackages = true; - users.dev = + users."${username}" = { ... }: { imports = [ @@ -157,6 +152,7 @@ in publicKey = publicKey; privateKey = privateKey; serverIp = serverIp; + username = username; }; }; } diff --git a/nix/hosts/client/home.nix b/nix/hosts/client/home.nix index 905a22f8..1bf2433a 100644 --- a/nix/hosts/client/home.nix +++ b/nix/hosts/client/home.nix @@ -1,12 +1,13 @@ { serverIp, + username, ... }: { # Home Manager needs a bit of information about you and the # paths it should manage. - home.username = "dev"; - home.homeDirectory = "/home/dev"; + home.username = username; + home.homeDirectory = "/home/${username}"; # This value determines the Home Manager release that your # configuration is compatible with. This helps avoid breakage @@ -26,15 +27,15 @@ settings = { "abra.local" = { HostName = serverIp; - User = "dev"; + User = username; Port = 22; - IdentityFile = "/home/dev/abra/test-integration"; + IdentityFile = "/home/${username}/abra/tests/resources/local_integration_ssh"; }; "*.abra.local" = { HostName = serverIp; - User = "dev"; + User = username; Port = 22; - IdentityFile = "/home/dev/abra/test-integration"; + IdentityFile = "/home/${username}/abra/tests/resources/local_integration_sshn"; }; }; }; diff --git a/nix/hosts/server/configuration.nix b/nix/hosts/server/configuration.nix index e4a739fb..9c78500a 100644 --- a/nix/hosts/server/configuration.nix +++ b/nix/hosts/server/configuration.nix @@ -1,6 +1,6 @@ { lib, - publicKey, + defaultDNS, ... }: let @@ -9,9 +9,15 @@ let clientIp = "10.0.0.2"; in { + imports = [ + ../../modules/ssh.nix + ../../modules/user.nix + ../../modules/docker.nix + ]; + microvm = { - vcpu = 2; - mem = 2049; # see issue related in microvm repo with 2048, so add 1MB + vcpu = 4; + mem = 8097; # see issue related in microvm repo with 2048, so add 1MB interfaces = [ { id = "vm${toString index}"; @@ -23,7 +29,7 @@ in boot.tmp = { useTmpfs = true; - tmpfsSize = "2G"; + tmpfsSize = "8G"; }; networking = { @@ -65,13 +71,7 @@ in networkConfig = { # DNS servers no longer come from DHCP nor Router # Advertisements. Perhaps you want to change the defaults: - DNS = [ - # Quad9.net - "9.9.9.9" - "149.112.112.112" - "2620:fe::fe" - "2620:fe::9" - ]; + DNS = defaultDNS; }; }; @@ -80,37 +80,12 @@ in 22 80 443 + 1312 # deploy with udp and tcp on same port test ]; networking.firewall.allowedUDPPorts = [ 22 80 443 + 1312 # deploy with udp and tcp on same port test ]; - - users.users.dev = { - isNormalUser = true; - password = "test"; - home = "/home/dev"; - description = "Alice Foobar"; - extraGroups = [ - "wheel" - "networkmanager" - "docker" - ]; - openssh.authorizedKeys.keys = [ - publicKey - ]; - }; - services.openssh = { - enable = true; - settings = { - PasswordAuthentication = false; - PermitRootLogin = "no"; - AllowUsers = [ "dev" ]; - }; - }; - virtualisation.docker = { - enable = true; - liveRestore = false; - }; } diff --git a/nix/modules/docker.nix b/nix/modules/docker.nix new file mode 100644 index 00000000..d10cb8c0 --- /dev/null +++ b/nix/modules/docker.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + virtualisation.docker = { + enable = true; + liveRestore = false; + }; +} diff --git a/nix/modules/ssh.nix b/nix/modules/ssh.nix new file mode 100644 index 00000000..dfd39bf9 --- /dev/null +++ b/nix/modules/ssh.nix @@ -0,0 +1,33 @@ +{ + privateKey, + publicKey, + username, + ... +}: +{ + # default host key location + environment.etc."ssh/ssh_host_ed25519_key" = { + text = privateKey; + mode = "0600"; + }; + environment.etc."ssh/ssh_host_ed25519_key.pub" = { + text = publicKey; + mode = "0644"; + }; + + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + AllowUsers = [ "${username}" ]; + }; + generateHostKeys = false; + hostKeys = [ + { + path = "/etc/ssh/ssh_host_ed25519_key"; + type = "ed25519"; + } + ]; + }; +} diff --git a/nix/modules/user.nix b/nix/modules/user.nix new file mode 100644 index 00000000..ec5c89f6 --- /dev/null +++ b/nix/modules/user.nix @@ -0,0 +1,22 @@ +{ + username, + password, + publicKey, + ... +}: +{ + users.users."${username}" = { + isNormalUser = true; + password = password; + home = "/home/${username}"; + description = "Abra server user"; + extraGroups = [ + "wheel" + "networkmanager" + "docker" + ]; + openssh.authorizedKeys.keys = [ + publicKey + ]; + }; +} diff --git a/package.nix b/nix/package.nix similarity index 100% rename from package.nix rename to nix/package.nix diff --git a/tests/integration/app_deploy.bats b/tests/integration/app_deploy.bats index be73a494..5137b38f 100644 --- a/tests/integration/app_deploy.bats +++ b/tests/integration/app_deploy.bats @@ -598,8 +598,7 @@ teardown(){ run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input assert_success - run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \ - $(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q) + _inspect assert_success assert_output --partial "WITH_COMMENT=foo" @@ -610,14 +609,13 @@ teardown(){ run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input --force assert_success - run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \ - $(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q) + _inspect assert_success refute_output --partial "WITH_COMMENT=foo" assert_output --partial "WITH_COMMENT=bar" } -# bats test_tags=slow +# bats test_tags=slow,error @test "deploy with udp and tcp on same port" { run sed -i 's/TYPE=abra-test-recipe:.*/TYPE=git.coopcloud.tech\/p4u1\/abra-test-recipe:030e8a1cb1a0f17281847b3e55d829220ad32c50/g' \ "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" @@ -629,8 +627,14 @@ teardown(){ run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input assert_success - run docker service inspect --format '{{ range .Endpoint.Ports }}{{ .Protocol }}={{ .PublishedPort }}{{ end }}' \ + if _is_local; + then + run docker service inspect --format "{{ range .Endpoint.Ports }}{{ .Protocol }}={{ .PublishedPort }}{{ end }}" \ "${TEST_APP_DOMAIN//./_}_app" + else + run ssh "$TEST_SERVER" "docker service inspect --format '{{ range .Endpoint.Ports }}{{ .Protocol }}={{ .PublishedPort }}{{ end }}' ${TEST_APP_DOMAIN//./_}_app" + fi + assert_success assert_output --partial "tcp=1312" assert_output --partial "udp=1312" @@ -671,6 +675,9 @@ teardown(){ @test "unable to deploy borked tag" { _remove_tags + # can not tag without it + _set_git_author + run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag \ -a "2.4.8_1" -m "feat: completely borked tag" assert_success diff --git a/tests/integration/app_deploy_env_version.bats b/tests/integration/app_deploy_env_version.bats index e569e911..a57fd5b5 100644 --- a/tests/integration/app_deploy_env_version.bats +++ b/tests/integration/app_deploy_env_version.bats @@ -133,8 +133,7 @@ teardown(){ run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input assert_success - run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \ - $(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q) + _inspect assert_success assert_output --partial "$TEST_RECIIPE:0.1.0+1.20.0" } diff --git a/tests/integration/app_remove.bats b/tests/integration/app_remove.bats index f24e2ef4..021a214d 100644 --- a/tests/integration/app_remove.bats +++ b/tests/integration/app_remove.bats @@ -140,15 +140,22 @@ teardown(){ _undeploy_app sanitisedDomainName="${TEST_APP_DOMAIN//./_}" - run docker config create "${sanitisedDomainName}_test_conf_v99" "$ABRA_DIR/recipes/abra-test-recipe/abra.sh" - assert_success + remote_execute="" + if _is_local; + then + run docker config create "${sanitisedDomainName}_test_conf_v99" "$ABRA_DIR/recipes/abra-test-recipe/abra.sh" + else + remote_execute="ssh '$TEST_SERVER'" + run cat "$ABRA_DIR/recipes/abra-test-recipe/abra.sh" | ssh "$TEST_SERVER" docker config create "${sanitisedDomainName}_test_conf_v99 -" + assert_success + fi - assert bash -c "docker config ls | grep -q test_conf_v99" + assert bash -c "$remote_execute docker config ls | grep -q test_conf_v99" run $ABRA app rm "$TEST_APP_DOMAIN" --no-input assert_success - refute bash -c "docker config ls | grep -q test_conf_v99" + refute bash -c "$remote_execute docker config ls | grep -q test_conf_v99" } @test "remove .env file" { diff --git a/tests/integration/app_rollback_env_version.bats b/tests/integration/app_rollback_env_version.bats index b3bbcea1..de78d08c 100644 --- a/tests/integration/app_rollback_env_version.bats +++ b/tests/integration/app_rollback_env_version.bats @@ -54,8 +54,7 @@ teardown(){ --no-input assert_success - run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \ - $(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q) + _inspect assert_success assert_output --partial "$TEST_RECIIPE:0.1.0+1.20.0" } diff --git a/tests/integration/app_upgrade_env_version.bats b/tests/integration/app_upgrade_env_version.bats index 4d3e9bb4..5ca9f71b 100644 --- a/tests/integration/app_upgrade_env_version.bats +++ b/tests/integration/app_upgrade_env_version.bats @@ -53,8 +53,7 @@ teardown(){ run $ABRA app upgrade "$TEST_APP_DOMAIN" "0.2.0+1.21.0" --no-input assert_success - run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' \ - $(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q) + _inspect assert_success - assert_output --partial "$TEST_RECIIPE:0.2.0+1.21.0" + assert_output --partial "$TEST_RECIPE:0.2.0+1.21.0" } diff --git a/tests/integration/helpers/common.bash b/tests/integration/helpers/common.bash index d528fc0c..37dca96c 100644 --- a/tests/integration/helpers/common.bash +++ b/tests/integration/helpers/common.bash @@ -31,9 +31,18 @@ _ensure_ssh_agent() { exit 1 fi - export SSH_AUTH_SOCK="$HOME/.ssh/ssh_auth_sock" - if [ ! -S ~/.ssh/ssh_auth_sock ]; then - eval `ssh-agent` - ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock + # export SSH_AUTH_SOCK="$HOME/.ssh/ssh_auth_sock" + # if [ ! -S ~/.ssh/ssh_auth_sock ]; then + # eval `ssh-agent` + # ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock + # fi +} + +_is_local() { + if [[ "$TEST_SERVER" == "default" ]]; + then + return 0 + else + return 1 fi } diff --git a/tests/integration/helpers/docker.bash b/tests/integration/helpers/docker.bash index a8304890..c1cd1ab2 100644 --- a/tests/integration/helpers/docker.bash +++ b/tests/integration/helpers/docker.bash @@ -1,13 +1,37 @@ #!/usr/bin/env bash _ensure_swarm() { - if [ "$(docker info | grep Swarm | sed 's/Swarm: //g' | tr -d ' ')" == "inactive" ]; then - run docker swarm init --advertise-addr 127.0.0.1:2377 - assert_success + if [ "$(docker info | grep Swarm | sed 's/Swarm: //g' | tr -d ' ')" == "inactive" ]; then + run docker swarm init --advertise-addr 127.0.0.1:2377 + assert_success fi - if ! $(docker network ls | grep -q 'proxy'); then - run docker network create -d overlay proxy - assert_success + if ! docker network ls | grep -q 'proxy'; then + run docker network create -d overlay proxy + assert_success fi + + if ! _is_local; + then + if [ "$(ssh "$TEST_SERVER" docker info | grep Swarm | sed 's/Swarm: //g' | tr -d ' ')" == "inactive" ]; then + run ssh "$TEST_SERVER" docker swarm init --advertise-addr 127.0.0.1:2377 + assert_success + fi + + if ! ssh "$TEST_SERVER" docker network ls | grep -q 'proxy'; then + run ssh "$TEST_SERVER" docker network create -d overlay proxy + assert_success + fi + fi +} + +_inspect() { + if _is_local; + then + containerId="$(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q)" + run docker inspect "$containerId" + else + containerId="$(ssh "$TEST_SERVER" docker ps -f name="$TEST_APP_DOMAIN" -q)" + run ssh "$TEST_SERVER" docker inspect "$containerId" + fi } diff --git a/tests/integration/helpers/hosts.bash b/tests/integration/helpers/hosts.bash new file mode 100755 index 00000000..39a395ff --- /dev/null +++ b/tests/integration/helpers/hosts.bash @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +echo "generating hosts file..." + +hosts_file_path="./tests/resources/local_hosts" + +echo "removing old file..." +rm $hosts_file_path + +# default entries +# the server +echo "10.0.0.3 abra.local" >> $hosts_file_path +# used to spin up traefik +echo "10.0.0.3 traefik.abra.local" >> $hosts_file_path +# used in integration tests +echo "10.0.0.3 gitea.abra.local" >> $hosts_file_path +echo "10.0.0.3 zammad.abra.local" >> $hosts_file_path +echo "10.0.0.3 custom-html.abra.local" >> $hosts_file_path +echo "10.0.0.3 foo.abra.local" >> $hosts_file_path +echo "10.0.0.3 foobar.abra.local" >> $hosts_file_path + +search_dir=./tests/integration +for entry in "$search_dir"/*.bats +do + base_name=$(basename "${entry}") + # converting file names to testing subdomains + subdomain=$(echo "$base_name" | tr . _) + echo "10.0.0.3 $subdomain.abra.local" >> $hosts_file_path +done + +echo "writing hosts success" diff --git a/tests/integration/recipe_upgrade.bats b/tests/integration/recipe_upgrade.bats index 527bb9d1..0570c88a 100644 --- a/tests/integration/recipe_upgrade.bats +++ b/tests/integration/recipe_upgrade.bats @@ -38,8 +38,6 @@ teardown(){ run $ABRA recipe upgrade "custom-html" --no-input assert_success - assert_output --partial 'can upgrade service: app' - assert_exists "$ABRA_DIR/recipes/custom-html" } diff --git a/tests/integration/server_add.bats b/tests/integration/server_add.bats index c1cd1bac..71683ce7 100644 --- a/tests/integration/server_add.bats +++ b/tests/integration/server_add.bats @@ -27,7 +27,7 @@ teardown(){ assert bash -c "docker context ls | grep -q $TEST_SERVER" server_dir_perms=$(stat -c "%a" "$ABRA_DIR/servers/$TEST_SERVER") - assert_equal $server_dir_perms "700" + assert_equal "$server_dir_perms" "700" } @test "error if using name and --local together" { @@ -43,8 +43,8 @@ teardown(){ assert bash -c "docker context ls | grep -q default" assert_output --partial 'local server successfully added' - server_dir_perms=$(stat -c "%a" "$ABRA_DIR/servers/$TEST_SERVER") - assert_equal $server_dir_perms "700" + server_dir_perms=$(stat -c "%a" "$ABRA_DIR/servers/default") + assert_equal "$server_dir_perms" "700" } @test "create local server fails when no docker swarm" { diff --git a/tests/resources/local_hosts b/tests/resources/local_hosts new file mode 100644 index 00000000..c7575f89 --- /dev/null +++ b/tests/resources/local_hosts @@ -0,0 +1,58 @@ +10.0.0.3 abra.local +10.0.0.3 traefik.abra.local +10.0.0.3 gitea.abra.local +10.0.0.3 zammad.abra.local +10.0.0.3 custom-html.abra.local +10.0.0.3 foo.abra.local +10.0.0.3 foobar.abra.local +10.0.0.3 app_check_bats.abra.local +10.0.0.3 app_cmd_bats.abra.local +10.0.0.3 app_config_bats.abra.local +10.0.0.3 app_cp_bats.abra.local +10.0.0.3 app_deploy_bats.abra.local +10.0.0.3 app_deploy_env_version_bats.abra.local +10.0.0.3 app_deploy_overview_bats.abra.local +10.0.0.3 app_deploy_remote_recipes_bats.abra.local +10.0.0.3 app_env_bats.abra.local +10.0.0.3 app_env_version_bats.abra.local +10.0.0.3 app_labels_bats.abra.local +10.0.0.3 app_list_bats.abra.local +10.0.0.3 app_logs_bats.abra.local +10.0.0.3 app_move_bats.abra.local +10.0.0.3 app_new_bats.abra.local +10.0.0.3 app_ps_bats.abra.local +10.0.0.3 app_remove_bats.abra.local +10.0.0.3 app_restart_bats.abra.local +10.0.0.3 app_rollback_bats.abra.local +10.0.0.3 app_rollback_env_version_bats.abra.local +10.0.0.3 app_rollback_overview_bats.abra.local +10.0.0.3 app_run_bats.abra.local +10.0.0.3 app_secret_bats.abra.local +10.0.0.3 app_secret_env_version_bats.abra.local +10.0.0.3 app_services_bats.abra.local +10.0.0.3 app_undeploy_bats.abra.local +10.0.0.3 app_undeploy_env_version_bats.abra.local +10.0.0.3 app_undeploy_overview_bats.abra.local +10.0.0.3 app_upgrade_bats.abra.local +10.0.0.3 app_upgrade_env_version_bats.abra.local +10.0.0.3 app_upgrade_overview_bats.abra.local +10.0.0.3 app_volume_bats.abra.local +10.0.0.3 autocomplete_bats.abra.local +10.0.0.3 catalogue_bats.abra.local +10.0.0.3 dirs_bats.abra.local +10.0.0.3 install_bats.abra.local +10.0.0.3 recipe_diff_bats.abra.local +10.0.0.3 recipe_fetch_bats.abra.local +10.0.0.3 recipe_lint_bats.abra.local +10.0.0.3 recipe_list_bats.abra.local +10.0.0.3 recipe_new_bats.abra.local +10.0.0.3 recipe_release_bats.abra.local +10.0.0.3 recipe_reset_bats.abra.local +10.0.0.3 recipe_upgrade_bats.abra.local +10.0.0.3 recipe_version_bats.abra.local +10.0.0.3 server_add_bats.abra.local +10.0.0.3 server_list_bats.abra.local +10.0.0.3 server_prune_bats.abra.local +10.0.0.3 server_remove_bats.abra.local +10.0.0.3 upgrade_bats.abra.local +10.0.0.3 version_bats.abra.local diff --git a/tests/resources/local_integration_ssh b/tests/resources/local_integration_ssh new file mode 100644 index 00000000..fcb7fe7c --- /dev/null +++ b/tests/resources/local_integration_ssh @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACBQ967UhxmFkq71WXvVRkEmtehCGsEnBVppAXxgtHHm7wAAAJhFGwTnRRsE +5wAAAAtzc2gtZWQyNTUxOQAAACBQ967UhxmFkq71WXvVRkEmtehCGsEnBVppAXxgtHHm7w +AAAEAnHEZcf2NeRQEcJC/aVgUWsdOz+vQgEG9ZY+3ErCeaKFD3rtSHGYWSrvVZe9VGQSa1 +6EIawScFWmkBfGC0cebvAAAAFWFicmEgaW50ZWdyYXRpb24gdGVzdA== +-----END OPENSSH PRIVATE KEY----- diff --git a/tests/resources/local_integration_ssh.pub b/tests/resources/local_integration_ssh.pub new file mode 100644 index 00000000..a04eea1f --- /dev/null +++ b/tests/resources/local_integration_ssh.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFD3rtSHGYWSrvVZe9VGQSa16EIawScFWmkBfGC0cebv abra integration test From 0c0e16914aa28d0fa64b4a0d4e6de51fa78d2d9b Mon Sep 17 00:00:00 2001 From: devydave Date: Fri, 7 Aug 2026 10:36:23 +0200 Subject: [PATCH 44/55] refactor: remove traefik deployment because it is not needed --- Makefile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Makefile b/Makefile index feb4874a..2e166433 100644 --- a/Makefile +++ b/Makefile @@ -123,7 +123,4 @@ vm-server-connect: test-integration: ssh-add ./tests/resources/local_integration_ssh - ./abra server add abra.local - ./abra app new traefik - ./abra app deploy traefik.abra.local @bats -Tp tests/integration --verbose-run From beee7bd3f22ca2d128bb7bec92bc29f0ef2996fb Mon Sep 17 00:00:00 2001 From: devydave Date: Fri, 7 Aug 2026 11:09:30 +0200 Subject: [PATCH 45/55] refactor: only export ssh auth socket when not existing --- tests/integration/helpers/common.bash | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/integration/helpers/common.bash b/tests/integration/helpers/common.bash index 37dca96c..e7ab16b8 100644 --- a/tests/integration/helpers/common.bash +++ b/tests/integration/helpers/common.bash @@ -31,11 +31,11 @@ _ensure_ssh_agent() { exit 1 fi - # export SSH_AUTH_SOCK="$HOME/.ssh/ssh_auth_sock" - # if [ ! -S ~/.ssh/ssh_auth_sock ]; then - # eval `ssh-agent` - # ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock - # fi + if [[ ! -v SSH_AUTH_SOCK ]]; then + export SSH_AUTH_SOCK="$HOME/.ssh/ssh_auth_sock" + eval `ssh-agent` + ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock + fi } _is_local() { From b5e22790be2cb8da6cf597586464a3fe463be9eb Mon Sep 17 00:00:00 2001 From: devydave Date: Fri, 7 Aug 2026 13:36:25 +0200 Subject: [PATCH 46/55] refactor: better name for inspect function --- tests/integration/app_deploy.bats | 9 +++------ tests/integration/app_deploy_env_version.bats | 2 +- tests/integration/app_rollback_env_version.bats | 2 +- tests/integration/app_upgrade_env_version.bats | 2 +- tests/integration/helpers/docker.bash | 6 +++--- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/tests/integration/app_deploy.bats b/tests/integration/app_deploy.bats index 5137b38f..b987cede 100644 --- a/tests/integration/app_deploy.bats +++ b/tests/integration/app_deploy.bats @@ -598,7 +598,7 @@ teardown(){ run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input assert_success - _inspect + _inspect_env_test_app assert_success assert_output --partial "WITH_COMMENT=foo" @@ -609,13 +609,13 @@ teardown(){ run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input --force assert_success - _inspect + _inspect_env_test_app assert_success refute_output --partial "WITH_COMMENT=foo" assert_output --partial "WITH_COMMENT=bar" } -# bats test_tags=slow,error +# bats test_tags=slow @test "deploy with udp and tcp on same port" { run sed -i 's/TYPE=abra-test-recipe:.*/TYPE=git.coopcloud.tech\/p4u1\/abra-test-recipe:030e8a1cb1a0f17281847b3e55d829220ad32c50/g' \ "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env" @@ -675,9 +675,6 @@ teardown(){ @test "unable to deploy borked tag" { _remove_tags - # can not tag without it - _set_git_author - run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag \ -a "2.4.8_1" -m "feat: completely borked tag" assert_success diff --git a/tests/integration/app_deploy_env_version.bats b/tests/integration/app_deploy_env_version.bats index a57fd5b5..66b6a4a7 100644 --- a/tests/integration/app_deploy_env_version.bats +++ b/tests/integration/app_deploy_env_version.bats @@ -133,7 +133,7 @@ teardown(){ run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input assert_success - _inspect + _inspect_env_test_app assert_success assert_output --partial "$TEST_RECIIPE:0.1.0+1.20.0" } diff --git a/tests/integration/app_rollback_env_version.bats b/tests/integration/app_rollback_env_version.bats index de78d08c..8b7c6e34 100644 --- a/tests/integration/app_rollback_env_version.bats +++ b/tests/integration/app_rollback_env_version.bats @@ -54,7 +54,7 @@ teardown(){ --no-input assert_success - _inspect + _inspect_env_test_app assert_success assert_output --partial "$TEST_RECIIPE:0.1.0+1.20.0" } diff --git a/tests/integration/app_upgrade_env_version.bats b/tests/integration/app_upgrade_env_version.bats index 5ca9f71b..a503be4c 100644 --- a/tests/integration/app_upgrade_env_version.bats +++ b/tests/integration/app_upgrade_env_version.bats @@ -53,7 +53,7 @@ teardown(){ run $ABRA app upgrade "$TEST_APP_DOMAIN" "0.2.0+1.21.0" --no-input assert_success - _inspect + _inspect_env_test_app assert_success assert_output --partial "$TEST_RECIPE:0.2.0+1.21.0" } diff --git a/tests/integration/helpers/docker.bash b/tests/integration/helpers/docker.bash index c1cd1ab2..59572243 100644 --- a/tests/integration/helpers/docker.bash +++ b/tests/integration/helpers/docker.bash @@ -25,13 +25,13 @@ _ensure_swarm() { fi } -_inspect() { +_inspect_env_test_app() { if _is_local; then containerId="$(docker ps -f name="$TEST_APP_DOMAIN_$TEST_SERVER" -q)" - run docker inspect "$containerId" + run docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' "$containerId" else containerId="$(ssh "$TEST_SERVER" docker ps -f name="$TEST_APP_DOMAIN" -q)" - run ssh "$TEST_SERVER" docker inspect "$containerId" + run ssh "$TEST_SERVER" "docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' '$containerId'" fi } From 38d13eae73e4b32e1d0fd48d78b4d0c08f8d6c09 Mon Sep 17 00:00:00 2001 From: devydave Date: Fri, 7 Aug 2026 13:42:22 +0200 Subject: [PATCH 47/55] refactor: better variable name --- tests/integration/app_remove.bats | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/integration/app_remove.bats b/tests/integration/app_remove.bats index 021a214d..f31500c4 100644 --- a/tests/integration/app_remove.bats +++ b/tests/integration/app_remove.bats @@ -140,22 +140,22 @@ teardown(){ _undeploy_app sanitisedDomainName="${TEST_APP_DOMAIN//./_}" - remote_execute="" + remote_ssh_command="" if _is_local; then run docker config create "${sanitisedDomainName}_test_conf_v99" "$ABRA_DIR/recipes/abra-test-recipe/abra.sh" else - remote_execute="ssh '$TEST_SERVER'" + remote_ssh_command="ssh '$TEST_SERVER'" run cat "$ABRA_DIR/recipes/abra-test-recipe/abra.sh" | ssh "$TEST_SERVER" docker config create "${sanitisedDomainName}_test_conf_v99 -" assert_success fi - assert bash -c "$remote_execute docker config ls | grep -q test_conf_v99" + assert bash -c "$remote_ssh_command docker config ls | grep -q test_conf_v99" run $ABRA app rm "$TEST_APP_DOMAIN" --no-input assert_success - refute bash -c "$remote_execute docker config ls | grep -q test_conf_v99" + refute bash -c "$remote_ssh_command docker config ls | grep -q test_conf_v99" } @test "remove .env file" { From 5e0dac6508fe839f895fbf5d231269fa413a7732 Mon Sep 17 00:00:00 2001 From: devydave Date: Fri, 7 Aug 2026 14:11:00 +0200 Subject: [PATCH 48/55] refactor: adjusting hosts generation --- Makefile | 6 ++-- flake.nix | 6 ++-- nix/hosts/client/configuration.nix | 4 +-- scripts/tests/extra_hosts | 30 +++++++++++++++++++ tests/integration/helpers/hosts.bash | 31 -------------------- tests/resources/{local_hosts => extra_hosts} | 1 - 6 files changed, 39 insertions(+), 39 deletions(-) create mode 100755 scripts/tests/extra_hosts delete mode 100755 tests/integration/helpers/hosts.bash rename tests/resources/{local_hosts => extra_hosts} (98%) diff --git a/Makefile b/Makefile index 2e166433..a60279b8 100644 --- a/Makefile +++ b/Makefile @@ -88,11 +88,11 @@ release: CLIENT_VM := abra-client vm-client-status: sudo systemctl status microvm@$(CLIENT_VM).service -vm-client-create: +vm-client-create:test-integration-hosts sudo microvm -f git+file://$$(pwd) -c $(CLIENT_VM) vm-client-start: sudo systemctl start microvm@$(CLIENT_VM).service -vm-client-update: +vm-client-update:test-integration-hosts sudo microvm -R -f git+file://$$(pwd) -u $(CLIENT_VM) vm-client-run: sudo microvm -f git+file://$$(pwd) -r $(CLIENT_VM) @@ -121,6 +121,8 @@ vm-server-delete: vm-server-stop vm-server-connect: ssh abra@10.0.0.3 -i ./tests/resources/local_integration_ssh +test-integration-hosts: + ./scripts/tests/extra_hosts test-integration: ssh-add ./tests/resources/local_integration_ssh @bats -Tp tests/integration --verbose-run diff --git a/flake.nix b/flake.nix index 9385e2e6..f9127896 100644 --- a/flake.nix +++ b/flake.nix @@ -27,7 +27,8 @@ pkgs = nixpkgs.legacyPackages.${system}; publicKey = builtins.readFile ./tests/resources/local_integration_ssh.pub; privateKey = builtins.readFile ./tests/resources/local_integration_ssh; - localDomainHosts = builtins.readFile ./tests/resources/local_hosts; + # local DNS aliases for the server host + extraHosts = builtins.readFile ./tests/resources/extra_hosts; username = "abra"; password = "abra"; defaultDNS = [ @@ -54,7 +55,7 @@ username password defaultDNS - localDomainHosts + extraHosts ; }; }; @@ -71,7 +72,6 @@ username password defaultDNS - localDomainHosts ; }; }; diff --git a/nix/hosts/client/configuration.nix b/nix/hosts/client/configuration.nix index 3b903994..037b0686 100644 --- a/nix/hosts/client/configuration.nix +++ b/nix/hosts/client/configuration.nix @@ -5,7 +5,7 @@ privateKey, username, defaultDNS, - localDomainHosts, + extraHosts, ... }: let @@ -94,7 +94,7 @@ in networking.firewall.allowedTCPPorts = [ 22 ]; networking.firewall.allowedUDPPorts = [ 22 ]; - networking.extraHosts = localDomainHosts; + networking.extraHosts = extraHosts; environment.variables = { CGO_ENABLED = 0; diff --git a/scripts/tests/extra_hosts b/scripts/tests/extra_hosts new file mode 100755 index 00000000..0900674a --- /dev/null +++ b/scripts/tests/extra_hosts @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# This file generates local DNS aliases for the client VM for integration testing + +echo "generating hosts file..." +hosts_file_path="./tests/resources/extra_hosts" +echo "removing old file..." +rm -f $hosts_file_path + +# the server domain +server_ip="10.0.0.3" +domain="abra.local" +echo "$server_ip $domain" >> $hosts_file_path +# static subdomains used in integration tests +subdomains=("gitea" "zammad" "custom-html" "foo" "foobar") + +for subdomain in "${subdomains[@]}" +do + echo "$server_ip $subdomain.$domain" >> $hosts_file_path +done + +search_dir=./tests/integration +for entry in "$search_dir"/*.bats +do + file_name=$(basename "${entry}") + # converting file names to testing subdomains + subdomain=$(echo "$file_name" | tr . _) + echo "$server_ip $subdomain.$domain" >> $hosts_file_path +done + +echo "writing extra hosts success" diff --git a/tests/integration/helpers/hosts.bash b/tests/integration/helpers/hosts.bash deleted file mode 100755 index 39a395ff..00000000 --- a/tests/integration/helpers/hosts.bash +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -echo "generating hosts file..." - -hosts_file_path="./tests/resources/local_hosts" - -echo "removing old file..." -rm $hosts_file_path - -# default entries -# the server -echo "10.0.0.3 abra.local" >> $hosts_file_path -# used to spin up traefik -echo "10.0.0.3 traefik.abra.local" >> $hosts_file_path -# used in integration tests -echo "10.0.0.3 gitea.abra.local" >> $hosts_file_path -echo "10.0.0.3 zammad.abra.local" >> $hosts_file_path -echo "10.0.0.3 custom-html.abra.local" >> $hosts_file_path -echo "10.0.0.3 foo.abra.local" >> $hosts_file_path -echo "10.0.0.3 foobar.abra.local" >> $hosts_file_path - -search_dir=./tests/integration -for entry in "$search_dir"/*.bats -do - base_name=$(basename "${entry}") - # converting file names to testing subdomains - subdomain=$(echo "$base_name" | tr . _) - echo "10.0.0.3 $subdomain.abra.local" >> $hosts_file_path -done - -echo "writing hosts success" diff --git a/tests/resources/local_hosts b/tests/resources/extra_hosts similarity index 98% rename from tests/resources/local_hosts rename to tests/resources/extra_hosts index c7575f89..3df669c1 100644 --- a/tests/resources/local_hosts +++ b/tests/resources/extra_hosts @@ -1,5 +1,4 @@ 10.0.0.3 abra.local -10.0.0.3 traefik.abra.local 10.0.0.3 gitea.abra.local 10.0.0.3 zammad.abra.local 10.0.0.3 custom-html.abra.local From 1ccbb31b7063478e6e960f51d71a7606ce18bd34 Mon Sep 17 00:00:00 2001 From: devydave Date: Fri, 7 Aug 2026 15:15:04 +0200 Subject: [PATCH 49/55] refactor: simplify config and remove hom-manager dependency --- flake.lock | 22 ---------------------- flake.nix | 6 ------ nix/hosts/client/configuration.nix | 28 +++++++--------------------- nix/modules/user.nix | 2 +- 4 files changed, 8 insertions(+), 50 deletions(-) diff --git a/flake.lock b/flake.lock index 57e2bd06..51acafa1 100644 --- a/flake.lock +++ b/flake.lock @@ -18,27 +18,6 @@ "type": "github" } }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1785119570, - "narHash": "sha256-Rgs2xKnGLFWQscxUaXX07oyZeuMDOHEbqDOsgliLFGM=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "d4fd24667c8cbef124bb70a20380cab75ec8474d", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "release-26.05", - "repo": "home-manager", - "type": "github" - } - }, "microvm": { "inputs": { "nixpkgs": [ @@ -79,7 +58,6 @@ "root": { "inputs": { "flake-utils": "flake-utils", - "home-manager": "home-manager", "microvm": "microvm", "nixpkgs": "nixpkgs" } diff --git a/flake.nix b/flake.nix index f9127896..3c621f0b 100644 --- a/flake.nix +++ b/flake.nix @@ -3,10 +3,6 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; - home-manager = { - url = "github:nix-community/home-manager/release-26.05"; - inputs.nixpkgs.follows = "nixpkgs"; - }; flake-utils.url = "github:numtide/flake-utils"; microvm = { url = "github:astro/microvm.nix"; @@ -19,7 +15,6 @@ self, nixpkgs, microvm, - home-manager, flake-utils, }: let @@ -45,7 +40,6 @@ system = "x86_64-linux"; modules = [ microvm.nixosModules.microvm - home-manager.nixosModules.home-manager ./nix/hosts/client/configuration.nix ]; specialArgs = { diff --git a/nix/hosts/client/configuration.nix b/nix/hosts/client/configuration.nix index 037b0686..d6fe693b 100644 --- a/nix/hosts/client/configuration.nix +++ b/nix/hosts/client/configuration.nix @@ -2,7 +2,6 @@ lib, pkgs, publicKey, - privateKey, username, defaultDNS, extraHosts, @@ -106,9 +105,15 @@ in startAgent = true; knownHostsFiles = [ (pkgs.writeText "local.keys" '' - abra.local ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFD3rtSHGYWSrvVZe9VGQSa16EIawScFWmkBfGC0cebv + abra.local ${publicKey} '') ]; + extraConfig = '' + Host abra.local + HostName abra.local + Port 22 + User ${username} + ''; }; programs.git = { enable = true; @@ -136,23 +141,4 @@ in jq wget ]; - - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - users."${username}" = - { ... }: - { - imports = [ - ./home.nix - ]; - }; - # pass args to home-manager - extraSpecialArgs = { - publicKey = publicKey; - privateKey = privateKey; - serverIp = serverIp; - username = username; - }; - }; } diff --git a/nix/modules/user.nix b/nix/modules/user.nix index ec5c89f6..edb13240 100644 --- a/nix/modules/user.nix +++ b/nix/modules/user.nix @@ -9,7 +9,7 @@ isNormalUser = true; password = password; home = "/home/${username}"; - description = "Abra server user"; + description = "Abra user"; extraGroups = [ "wheel" "networkmanager" From 5766a25144bbc9b8a5660540c39267a24b896177 Mon Sep 17 00:00:00 2001 From: devydave Date: Wed, 12 Aug 2026 22:43:16 +0200 Subject: [PATCH 50/55] feat: adds host module --- flake.nix | 9 +++++++ nix/modules/host.nix | 59 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 nix/modules/host.nix diff --git a/flake.nix b/flake.nix index 3c621f0b..5e5333b5 100644 --- a/flake.nix +++ b/flake.nix @@ -70,6 +70,15 @@ }; }; }; + nixosModules = rec { + host = { + imports = [ + microvm.nixosModules.host + ./nix/modules/host.nix + ]; + }; + default = host; + }; packages = rec { abra = pkgs.callPackage ./nix/package.nix { }; default = abra; diff --git a/nix/modules/host.nix b/nix/modules/host.nix new file mode 100644 index 00000000..b288a682 --- /dev/null +++ b/nix/modules/host.nix @@ -0,0 +1,59 @@ +{ + lib, + config, + ... +}: +let + maxVMs = 3; +in +{ + options = { + abra.testing.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Enable the abra integration testing framework"; + }; + abra.testing.externalInterface = lib.mkOption { + type = lib.types.str; + default = null; + description = "Change this to the interface with upstream Internet access"; + }; + }; + + config = lib.mkIf config.abra.testing.enable { + networking.useNetworkd = true; + systemd.network.wait-online.enable = false; + systemd.network.networks = builtins.listToAttrs ( + map (index: { + name = "30-vm${toString index}"; + value = { + matchConfig.Name = "vm${toString index}"; + # Host's addresses + address = [ + "10.0.0.0/32" + "fec0::/128" + ]; + # Setup routes to the VM + routes = [ + { + Destination = "10.0.0.${toString index}/32"; + } + { + Destination = "fec0::${lib.toHexString index}/128"; + } + ]; + # Enable routing + networkConfig = { + IPv4Forwarding = true; + IPv6Forwarding = true; + }; + }; + }) (lib.genList (i: i + 1) maxVMs) + ); + networking.nat = { + enable = true; + internalIPs = [ "10.0.0.0/24" ]; + externalInterface = config.abra.testing.externalInterface; + }; + }; +} From a8c8df860416c7c71edae9181f51e6481390769e Mon Sep 17 00:00:00 2001 From: devydave Date: Wed, 12 Aug 2026 23:01:12 +0200 Subject: [PATCH 51/55] fix: remove personal terminal choice --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a60279b8..6cf65700 100644 --- a/Makefile +++ b/Makefile @@ -101,7 +101,7 @@ vm-client-stop: vm-client-delete: vm-client-stop sudo rm -rf /var/lib/microvms/$(CLIENT_VM) vm-client-connect: - kitten ssh abra@10.0.0.2 -i ./tests/resources/local_integration_ssh + ssh abra@10.0.0.2 -i ./tests/resources/local_integration_ssh SERVER_VM := abra-server vm-server-status: From 02cbf7c014963828167f50fe4a8f260bc2634efe Mon Sep 17 00:00:00 2001 From: devydave Date: Thu, 13 Aug 2026 19:57:51 +0200 Subject: [PATCH 52/55] refactor: make path editable without nix and impure --- flake.nix | 2 ++ nix/hosts/client/configuration.nix | 3 ++- tests/resources/path_to_repo | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 tests/resources/path_to_repo diff --git a/flake.nix b/flake.nix index 5e5333b5..63f68abb 100644 --- a/flake.nix +++ b/flake.nix @@ -22,6 +22,7 @@ pkgs = nixpkgs.legacyPackages.${system}; publicKey = builtins.readFile ./tests/resources/local_integration_ssh.pub; privateKey = builtins.readFile ./tests/resources/local_integration_ssh; + pathToRepo = builtins.readFile ./tests/resources/path_to_repo; # local DNS aliases for the server host extraHosts = builtins.readFile ./tests/resources/extra_hosts; username = "abra"; @@ -50,6 +51,7 @@ password defaultDNS extraHosts + pathToRepo ; }; }; diff --git a/nix/hosts/client/configuration.nix b/nix/hosts/client/configuration.nix index d6fe693b..83e8f0c3 100644 --- a/nix/hosts/client/configuration.nix +++ b/nix/hosts/client/configuration.nix @@ -3,6 +3,7 @@ pkgs, publicKey, username, + pathToRepo, defaultDNS, extraHosts, ... @@ -35,7 +36,7 @@ in tag = "repo"; # Source path can be absolute or relative # to /var/lib/microvms/$hostName - source = "/home/dev/Documents/kum/abra"; + source = "${lib.trim pathToRepo}"; mountPoint = "/home/${username}/abra"; } ]; diff --git a/tests/resources/path_to_repo b/tests/resources/path_to_repo new file mode 100644 index 00000000..7f63cd1e --- /dev/null +++ b/tests/resources/path_to_repo @@ -0,0 +1 @@ +/path/to/this/repo From bb3c7576f8470dba5fe01f2431976fb340e5fc3f Mon Sep 17 00:00:00 2001 From: devydave Date: Thu, 13 Aug 2026 20:34:14 +0200 Subject: [PATCH 53/55] docs: add setup documentation --- nix/hosts/README.md | 67 +++++++++++++++++++++++++++++++++++++++++++++ tests/README.md | 3 +- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 nix/hosts/README.md diff --git a/nix/hosts/README.md b/nix/hosts/README.md new file mode 100644 index 00000000..ee7b2448 --- /dev/null +++ b/nix/hosts/README.md @@ -0,0 +1,67 @@ +# Hosts +These hosts are VMs used for running the integration tests on your local machine. +The hosts contain a client where abra with the tests will be run and a server +to simulate a remote machine. + +## Prepare the host +For this setup to work you need a machine with NixOS and flakes enabled. + +1. Import the abra flake +The install example is based on the [using nix flakes wiki page](https://nixos.wiki/wiki/flakes#Using_nix_flakes_with_NixOS). +```nix +inputs = { + abra = { + url = "git+https://git.coopcloud.tech/toolshed/abra.git"; + }; +}; +``` +2. Add the host module to your configuration +Now add the host module to your configuration. At the toplevel of a flake it could look like this: +```nix +desktop = inputs.nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + abra.nixosModules.host + ./configuration.nix + ]; + specialArgs = inputs; +}; +``` +3. Adjust the required config +There are to options defined for +```nix +abra.testing = { + enable = true; # loads the required config, when set true + externalInterface = "eth1"; # adjust this to your network interface that has access to the internet +}; +``` +You can look up the interface with `ip link`. After that rebuild your system and you are read to go. + +## Get started +All commands are run on the repository root path. +1. Set path to repo +The VM will create a shared volume from the content of the file `tests/resources/path_to_repo`. +Set the content of the file to the path of your abra repository. +This will share the repository from your machine with the VM and you can edit files while testing without rebuiling +or restarting the VM. +2. Create the VMs +```sh +make vm-client-create +make vm-server-create +``` +3. Start the VMs +```sh +make vm-client-start +make vm-server-start +``` +After running that command you should be able to ping the machines. +The client runs on 10.0.0.2 and server 10.0.0.3 +4. Connect to the client +Running the following command will connect to the client VM via SSH. +```sh +make vm-client-connect +``` +5. Run the tests +```sh +make test-integration +``` diff --git a/tests/README.md b/tests/README.md index 73858fbc..8a7ccecd 100644 --- a/tests/README.md +++ b/tests/README.md @@ -7,4 +7,5 @@ * Integration tests are in `./tests/integration`. Please see [these docs](https://docs.coopcloud.tech/abra/hack/#integration-tests) for - instructions and tips on how to run them. + instructions and tips on how to run them. If you want to run it locally via nix, + read the [nix testing docs](../nix/hosts/README.md). From 21dccc895ddb1b60733d71e3d6b862edd8383ff1 Mon Sep 17 00:00:00 2001 From: devydave Date: Thu, 13 Aug 2026 20:38:20 +0200 Subject: [PATCH 54/55] docs: formatting --- nix/hosts/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nix/hosts/README.md b/nix/hosts/README.md index ee7b2448..6065c474 100644 --- a/nix/hosts/README.md +++ b/nix/hosts/README.md @@ -7,6 +7,7 @@ to simulate a remote machine. For this setup to work you need a machine with NixOS and flakes enabled. 1. Import the abra flake + The install example is based on the [using nix flakes wiki page](https://nixos.wiki/wiki/flakes#Using_nix_flakes_with_NixOS). ```nix inputs = { @@ -16,6 +17,7 @@ inputs = { }; ``` 2. Add the host module to your configuration + Now add the host module to your configuration. At the toplevel of a flake it could look like this: ```nix desktop = inputs.nixpkgs.lib.nixosSystem { @@ -28,7 +30,6 @@ desktop = inputs.nixpkgs.lib.nixosSystem { }; ``` 3. Adjust the required config -There are to options defined for ```nix abra.testing = { enable = true; # loads the required config, when set true @@ -40,6 +41,7 @@ You can look up the interface with `ip link`. After that rebuild your system and ## Get started All commands are run on the repository root path. 1. Set path to repo + The VM will create a shared volume from the content of the file `tests/resources/path_to_repo`. Set the content of the file to the path of your abra repository. This will share the repository from your machine with the VM and you can edit files while testing without rebuiling @@ -57,6 +59,7 @@ make vm-server-start After running that command you should be able to ping the machines. The client runs on 10.0.0.2 and server 10.0.0.3 4. Connect to the client + Running the following command will connect to the client VM via SSH. ```sh make vm-client-connect From a28cc7afcef9c165dc928951a3797ec12c0897ac Mon Sep 17 00:00:00 2001 From: devydave Date: Thu, 13 Aug 2026 20:41:04 +0200 Subject: [PATCH 55/55] docs: more formatting and typo --- nix/hosts/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nix/hosts/README.md b/nix/hosts/README.md index 6065c474..6e09bf58 100644 --- a/nix/hosts/README.md +++ b/nix/hosts/README.md @@ -36,7 +36,7 @@ abra.testing = { externalInterface = "eth1"; # adjust this to your network interface that has access to the internet }; ``` -You can look up the interface with `ip link`. After that rebuild your system and you are read to go. +You can look up the interface with `ip link`. After that rebuild your system and you are ready to go. ## Get started All commands are run on the repository root path. @@ -46,6 +46,7 @@ The VM will create a shared volume from the content of the file `tests/resources Set the content of the file to the path of your abra repository. This will share the repository from your machine with the VM and you can edit files while testing without rebuiling or restarting the VM. + 2. Create the VMs ```sh make vm-client-create @@ -58,6 +59,7 @@ make vm-server-start ``` After running that command you should be able to ping the machines. The client runs on 10.0.0.2 and server 10.0.0.3 + 4. Connect to the client Running the following command will connect to the client VM via SSH.