Legacy `ENV key value` with a multi-word value becomes an invalid `key=value`
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 84/100
Research direction
Start by tracing how dockerfmt parses and converts legacy ENV key value instructions, then find the formatter tests for ENV handling. Reproduce with the supplied JAVA_OPTS example and add coverage for a multi-word value. Done means formatting produces valid Dockerfile syntax that builds and can be formatted again.
Written by the indexing model from the issue text.
Description
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.
- Dominant language
- Go
- Stars
- 626
- Forks
- 23
- Avg merge
- 6d 23h
- Merged PRs (30d)
- 3
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from reteps/dockerfmt
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
`MAINTAINER` to `LABEL` conversion does not escape embedded quotesPossibly taken @RyoKusnadi claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
All issues in reteps/dockerfmt
Similar issues
-
agent-butler-finding bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
jordansmall/spindrift#6414 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Icinga/icinga-kubernetes#294 ·
Maintainers usually reply within 4 days
-
Cluster details: the Control Plane version field has a different border color than its icon boxOpenkind/design sig/ui
Difficulty 1/5 Under an hour Newbie friendliness 92/100
kubermatic/dashboard#8449 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
filecoin-project/curio#1632 ·
Maintainers usually reply within 1 day