Skip to content

Releases: sequre/docker-swarm

v0.9.0

Choose a tag to compare

@gedera gedera released this 03 Aug 21:08

[0.9.0] — 2026-08-03

Nuevas funcionalidades

  • Container pasa a incluir Concerns::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 responde 201, dejando el container con nombre aleatorio. Concerns::Creatable gana create_query_params (default [], override por modelo; Container declara %w[name]) y query_params_for_docker; save los manda en la URL y los excluye del payload. Implementa ADR-025 cláusula 1 — @gedera

Breaking changes

  • logs devuelve texto demultiplexado. Sin TTY el Engine enmarca cada fragmento con 8 bytes de cabecera (tipo de stream · relleno · tamaño big-endian); el nuevo Middleware::LogStreamDemuxer los saca, así que Loggable#logs entrega texto limpio en Container, Service y Task. 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-stream existe desde la API v1.42, y antes un stream multiplexado viajaba igual como application/vnd.docker.raw-stream. Como la gema no fija ?version=, un Engine que tope en v1.41 devuelve raw-stream con framing. Ante raw-stream el 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.

Seguridad

  • LogHelper.sanitize redacta los secretos que viajan como "CLAVE=VALOR" en Env (#24). Antes redactaba solo por clave de hash: un String caía al else y pasaba intacto, y el Env de un ContainerSpec es un array de strings "CLAVE=VALOR" donde el nombre del secreto vive dentro del elemento. Como "Env" tampoco matchea SENSITIVE_KEYS, el valor de todo secreto pasado por variable de entorno se logueaba entero en request_success — camino feliz, nivel INFO — en cada create/update de un service. Se agrega redact_kv_string y una rama when String: si la parte izquierda matchea SENSITIVE_KEYS se 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 /m para valores multilínea. Afecta a todas las versiones anteriores — @Pslp
    • Hueco declarado, no cubierto por este fix: private_key no está en SENSITIVE_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.

Otros cambios

  • spec.homepage del gemspec pasa a https://github.com/sequre/docker-swarm (#27): el repo se transfirió de la cuenta personal gedera a la org sequre. 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

Choose a tag to compare

@gedera gedera released this 03 Aug 21:08
2513f98

[0.8.0] — 2026-07-22

Nuevas funcionalidades

  • Service.create/Service#update: soporte de autenticación de registry privado — registry_auth viaja en el header X-Registry-Auth y registry_auth_from (spec|previous-spec) en la query registryAuthFrom del update; mutuamente excluyentes y validados antes del request. La credencial nunca toca el payload ni el estado del modelo (helper RegistryAuth) — @Pslp
  • Image.pull: pull explícito síncrono (consume el stream NDJSON hasta EOF, eleva error tipado ante error/errorDetail, devuelve {status: :pulled, image_ref:, digest?} sin find; el digest sale del frame Digest: sha256:…, verificado contra Docker 29.5.3). Capacidad sin consumidor activo hoy: el deploy de imágenes privadas se autentica vía Service.create (X-Registry-Auth distribuido a los nodos por Swarm), no por pull explícito. Image.pull queda disponible para un futuro requerimiento (pre-pull / warm-cache) — @Pslp

Breaking changes

  • Image deja de incluir Creatable: se retira Image.create (roto y sin consumidores) en favor de Image.pull. Image conserva Deletable y el listado — @Pslp

Seguridad

  • LogHelper sanitiza recursivamente los headers de autenticación (X-Registry-Auth, Authorization) para no filtrar credenciales en logs de wire-debug — @Pslp

v0.7.2

Choose a tag to compare

@gedera gedera released this 03 Aug 21:08

[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 bloque configure, 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 normalizar skills.yml al molde fleet — @gabriel

Mejoras internas

  • Bump excon 1.4.2 → 1.5.0 — @gabriel

v0.7.1

Choose a tag to compare

@Pslp Pslp released this 29 May 12:23

Correcciones

  • Updatable#update: captura Version.Index antes de assign_attributes para evitar que un payload con versión desactualizada pise el índice real del nodo y provoque update out of sequence en Docker.