Repository navigation
Releases: sequre/docker-swarm
Releases · sequre/docker-swarm
Release list
v0.9.0
[0.9.0] — 2026-08-03
Nuevas funcionalidades
Containerpasa a incluirConcerns::Creatable: la gema ya puede crear containers, no solo operar los existentes. El nombre viaja por query string (POST /containers/create?name=), que es donde el Engine lo espera — en el body lo descarta en silencio y responde201, dejando el container con nombre aleatorio.Concerns::Creatableganacreate_query_params(default[], override por modelo;Containerdeclara%w[name]) yquery_params_for_docker;savelos manda en la URL y los excluye del payload. Implementa ADR-025 cláusula 1 — @gedera
Breaking changes
logsdevuelve texto demultiplexado. Sin TTY el Engine enmarca cada fragmento con 8 bytes de cabecera (tipo de stream · relleno · tamaño big-endian); el nuevoMiddleware::LogStreamDemuxerlos saca, así queLoggable#logsentrega texto limpio enContainer,ServiceyTask. Cambia el valor de retorno para cualquier consumidor que hoy reciba el body crudo. Un stream sin framing (TTY) pasa intacto. Implementa ADR-025 cláusula 3 — @gedera- El dispatch no se decide solo por
Content-Type:application/vnd.docker.multiplexed-streamexiste desde la API v1.42, y antes un stream multiplexado viajaba igual comoapplication/vnd.docker.raw-stream. Como la gema no fija?version=, un Engine que tope en v1.41 devuelveraw-streamcon framing. Anteraw-streamel middleware valida la forma del frame y solo demultiplexa si la cadena cierra de punta a punta; ante cualquier inconsistencia devuelve el body intacto. Registrado en ADR-027, que corrige un dato de apoyo del §Alternativas de ADR-025 sin superseder su Decisión.
- El dispatch no se decide solo por
Seguridad
LogHelper.sanitizeredacta los secretos que viajan como"CLAVE=VALOR"enEnv(#24). Antes redactaba solo por clave de hash: un String caía alelsey pasaba intacto, y elEnvde unContainerSpeces un array de strings"CLAVE=VALOR"donde el nombre del secreto vive dentro del elemento. Como"Env"tampoco matcheaSENSITIVE_KEYS, el valor de todo secreto pasado por variable de entorno se logueaba entero enrequest_success— camino feliz, nivel INFO — en cada create/update de un service. Se agregaredact_kv_stringy una ramawhen String: si la parte izquierda matcheaSENSITIVE_KEYSse reemplaza el valor y se conserva el nombre (saber qué secreto apareció es diagnóstico útil; su valor no). El regex usa[^=]+a la izquierda para no partir en un=del valor (base64, URLs) y/mpara valores multilínea. Afecta a todas las versiones anteriores — @Pslp- Hueco declarado, no cubierto por este fix:
private_keyno está enSENSITIVE_KEYS, así que un PEM con ese nombre sigue saliendo en claro (hay un spec que lo fija como comportamiento conocido). Ampliar la lista va aparte: cambia la redacción para todos los consumidores.
- Hueco declarado, no cubierto por este fix:
Otros cambios
spec.homepagedel gemspec pasa ahttps://github.com/sequre/docker-swarm(#27): el repo se transfirió de la cuenta personalgederaa la orgsequre. De ahí derivan los cuatro metadata URIs (source_code_uri,changelog_uri,bug_tracker_uri,documentation_uri), así que desde esta versión apuntan a la ubicación nueva. Las versiones ya publicadas conservan la URL anterior — las salva el redirect de GitHub — @gedera
v0.8.0
[0.8.0] — 2026-07-22
Nuevas funcionalidades
Service.create/Service#update: soporte de autenticación de registry privado —registry_authviaja en el headerX-Registry-Authyregistry_auth_from(spec|previous-spec) en la queryregistryAuthFromdel update; mutuamente excluyentes y validados antes del request. La credencial nunca toca el payload ni el estado del modelo (helperRegistryAuth) — @PslpImage.pull: pull explícito síncrono (consume el stream NDJSON hasta EOF, eleva error tipado anteerror/errorDetail, devuelve{status: :pulled, image_ref:, digest?}sinfind; el digest sale del frameDigest: sha256:…, verificado contra Docker 29.5.3). Capacidad sin consumidor activo hoy: el deploy de imágenes privadas se autentica víaService.create(X-Registry-Auth distribuido a los nodos por Swarm), no por pull explícito.Image.pullqueda disponible para un futuro requerimiento (pre-pull / warm-cache) — @Pslp
Breaking changes
Imagedeja de incluirCreatable: se retiraImage.create(roto y sin consumidores) en favor deImage.pull.ImageconservaDeletabley el listado — @Pslp
Seguridad
LogHelpersanitiza recursivamente los headers de autenticación (X-Registry-Auth,Authorization) para no filtrar credenciales en logs de wire-debug — @Pslp
v0.7.2
[0.7.2] — 2026-06-29
Documentación
- Regenerar la capa de configuración conforme RFC-012 (
docs/config/configuracion.md): inventario de las 7 opciones runtime del bloqueconfigure, sin env vars, ninguna secreta — @gabriel - Reindexar
skill/SKILL.md§4 para apuntar al nuevo artefacto de configuración — @gabriel - Instaurar
AGENTS.md(stanza "Mapa de conocimiento") y normalizarskills.ymlal molde fleet — @gabriel
Mejoras internas
- Bump excon 1.4.2 → 1.5.0 — @gabriel