dockerfmt - Formateur pour Dockerfile
(github.com/reteps)- Outil de remplacement modernisé de
dockfmt, qui réorganise automatiquement les Dockerfile et harmonise leur style de code - Utilise en interne
buildkitpour l'analyse syntaxique des Dockerfile, etmvdan/shpour le formatage des scripts shell dans les commandesRUN - Permet de conserver un style de code cohérent et peut être utile pour la revue de code ainsi que dans les environnements CI
Utilisation
dockerfmt [Dockerfile] [flags]
dockerfmt [command]
- Commandes principales :
- completion : génère un script d'autocomplétion pour le shell
- help : aide sur les commandes
- version : affiche la version
- Principaux flags :
- -c, --check : vérifie uniquement si un formatage est nécessaire
- -i, --indent : définit le nombre d'espaces d'indentation (valeur par défaut : 4)
- -n, --newline : ajoute un saut de ligne à la fin du fichier
- -s, --space-redirects : ajoute un espace après les opérateurs de redirection
- -w, --write : écrase le fichier d'origine avec le contenu modifié
Configuration du hook pre-commit
- Peut être intégré comme hook pre-commit
- Exemple de fichier
.pre-commit-config.yaml:repos: - repo: https://github.com/reteps/dockerfmt rev: main hooks: - id: dockerfmt args: - --indent=4
Limitations actuelles
- Les points-virgules (
;) et le groupement de commandes dans les commandesRUNne sont pas encore pris en charge - Pas de fonctionnalité de retour automatique à la ligne pour les longues commandes JSON
- La directive
# escape=Xn'est pas prise en charge
Présentation des fonctionnalités
-
Utilise
mvdan/shpour le formatage des commandesRUN -
Prise en charge de base des heredoc :
RUN <<EOF echo "hello" echo "world" EOF -
Prise en charge des commentaires dans les commandes
RUN:RUN echo "hello" \ # this is a comment && echo "world"RUN echo "hello" \ # this is a comment # that spans multiple lines && echo "world" -
Tente de conserver les commentaires correctement attachés à leur emplacement formaté, mais cela reste difficile car les commentaires sont supprimés à l'étape du parsing
Binding JS
- Le binding JS est inclus dans le répertoire
js - Le mode d'emploi est disponible dans
js/README.md
Autres remarques
- Le projet étant encore en version antérieure à 1.0.0, son utilisation en production n'est pas recommandée
1 commentaires
Commentaires sur Hacker News
RUNne prend pas en charge les groupements ni les points-virgules dans les commandesRUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etcRUNne prend pas en charge les groupements ni les points-virgules dans les commandes, mais l’exemple montre qu’il prend en charge&&. Je me demande d’où vient cette différenceRUN foo && \ bar && \ :RUN set -e && \ foo ; \ bar ; \ :FROM foo ... FROM bar ...FROMpour rendre chaque stage plus clair. Ne pas le faire me paraît équivalent à ne pas indenter le corps d’une fonction dans d’autres langages