Legacy `ENV key value` with a multi-word value becomes an invalid `key=value`

Cerrado Apto para principiantes
#69 1 comentario 0 reacciones 0 asignados Ver en GitHub

Ya se ha fusionado un pull request relacionado.

  • #74 de @RyoKusnadi — fusionado

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
84/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
docker, go
Área
devtools, tooling

Línea de trabajo

Empieza rastreando cómo dockerfmt analiza y convierte las instrucciones obsoletas ENV key value; luego busca las pruebas del formateador sobre el manejo de ENV. Reproduce el comportamiento con el ejemplo JAVA_OPTS proporcionado y añade cobertura para un valor de varias palabras. Se considera terminado cuando el formateo produce una sintaxis Dockerfile válida que se puede compilar y volver a formatear.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Converting a legacy ENV key value instruction to the key=value form breaks when the value contains spaces. The output is not a valid Dockerfile: docker build rejects it, and so does dockerfmt on the next run.

Reproduce
FROM alpine
ENV JAVA_OPTS -Xms256m -Xmx512m
dockerfmt Dockerfile
Actual
FROM alpine
ENV JAVA_OPTS=-Xms256m -Xmx512m

The original builds and sets JAVA_OPTS=-Xms256m -Xmx512m. docker build on the output, and dockerfmt run on it again, both fail with:

Error parsing file: Syntax error - can't find = in "-Xmx512m". Must be of the form: name=value
Expected

In the legacy form everything after the key is the value, so the converted instruction needs quotes:

ENV JAVA_OPTS="-Xms256m -Xmx512m"

Leaving the instruction in its legacy form would also be correct.

Impact

With --write the Dockerfile no longer builds. In a sample of about 450 real-world Dockerfiles, 112 lines used the legacy ENV form and one of them had an unquoted multi-word value.

Reproduced with v0.5.4 and with main at a5868c2.

Lenguaje dominante
Go
Estrellas
626
Forks
23
Merge medio
3 d 17 h
PR fusionados (30 d)
9

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.