dockerfmt - Dockerfile फ़ॉर्मैटर
(github.com/reteps)- यह मौजूदा
dockfmtका आधुनिक विकल्प है, जो Dockerfile को अपने आप व्यवस्थित करता है और code style को एकसमान बनाता है - अंदरूनी तौर पर Dockerfile syntax parsing के लिए
buildkitऔरRUNकमांड के भीतर shell script formatting के लिएmvdan/shका उपयोग करता है - यह consistent code style बनाए रखने में मदद करता है और code review तथा CI environment में उपयोगी हो सकता है
उपयोग
dockerfmt [Dockerfile] [flags]
dockerfmt [command]
- मुख्य कमांड:
- completion: shell auto-completion script बनाता है
- help: कमांड सहायता
- version: version दिखाता है
- मुख्य flags:
- -c, --check: केवल यह जांचता है कि formatting की ज़रूरत है या नहीं
- -i, --indent: indentation spaces की संख्या सेट करता है (default 4)
- -n, --newline: फ़ाइल के अंत में newline character जोड़ता है
- -s, --space-redirects: redirection operator के बाद space जोड़ता है
- -w, --write: बदली हुई सामग्री को मूल फ़ाइल पर overwrite करता है
Pre-commit hook सेटअप
- इसे pre-commit hook के रूप में integrate किया जा सकता है
- .pre-commit-config.yaml फ़ाइल का उदाहरण:
repos: - repo: https://github.com/reteps/dockerfmt rev: main hooks: - id: dockerfmt args: - --indent=4
मौजूदा सीमाएँ
- RUN कमांड में semicolon (
;) या command grouping अभी समर्थित नहीं हैं - लंबे JSON कमांड के लिए automatic line wrapping उपलब्ध नहीं है
# escape=Xdirective समर्थित नहीं है
फीचर परिचय
-
RUN कमांड formatting के लिए mvdan/sh का उपयोग करता है
-
basic heredoc support:
RUN <<EOF echo "hello" echo "world" EOF -
RUN कमांड के भीतर comments का support:
RUN echo "hello" \ # this is a comment && echo "world"RUN echo "hello" \ # this is a comment # that spans multiple lines && echo "world" -
यह comments को formatted position पर सही तरह से जोड़ने की कोशिश करता है, लेकिन parser stage में comments हट जाने के कारण यह कठिन है
JS binding
- JS binding
jsdirectory में शामिल है - उपयोग का तरीका
js/README.mdमें देखा जा सकता है
अन्य संदर्भ
- यह अभी 1.0.0 से पहले का version है, इसलिए production environment में इसका उपयोग अनुशंसित नहीं है
1 टिप्पणियां
Hacker News की राय
RUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etc&&support है। सोच रहा हूँ फर्क क्यों हैRUN foo && \ bar && \ :RUN set -e && \ foo ; \ bar ; \ :FROM foo ... FROM bar ...FROMके बाद के steps को indent करता हूँ ताकि stage ज़्यादा स्पष्ट हो। मेरे हिसाब से ऐसा न करना वैसा ही है जैसे दूसरी भाषाओं में function body को indent न करना