dockerfmt - Formatador de Dockerfile
(github.com/reteps)- Uma alternativa modernizada ao
dockfmt, ferramenta que organiza automaticamente Dockerfiles e padroniza o estilo do código - Internamente, usa
buildkitpara analisar a sintaxe de Dockerfile emvdan/shpara formatar scripts de shell dentro de comandosRUN - Ajuda a manter um estilo de código consistente e pode ser útil em code reviews e ambientes de CI
Como usar
dockerfmt [Dockerfile] [flags]
dockerfmt [command]
- Principais comandos:
- completion: gera scripts de autocompletar para shell
- help: ajuda dos comandos
- version: exibe a versão
- Principais flags:
- -c, --check: verifica apenas se a formatação é necessária
- -i, --indent: define o número de espaços de indentação (padrão: 4)
- -n, --newline: adiciona um caractere de nova linha no final do arquivo
- -s, --space-redirects: adiciona espaço após operadores de redirecionamento
- -w, --write: sobrescreve o arquivo original com o conteúdo alterado
Configuração do hook de pre-commit
- Pode ser integrado como hook de pre-commit
- Exemplo de arquivo .pre-commit-config.yaml:
repos: - repo: https://github.com/reteps/dockerfmt rev: main hooks: - id: dockerfmt args: - --indent=4
Limitações atuais
- Ainda não há suporte para ponto e vírgula (
;) ou agrupamento de comandos em instruções RUN - Não há recurso de quebra automática de linha para comandos JSON longos
- A diretiva
# escape=Xnão é suportada
Recursos
-
Usa mvdan/sh na formatação de comandos RUN
-
Suporte básico a heredoc:
RUN <<EOF echo "hello" echo "world" EOF -
Suporte a comentários dentro de comandos RUN:
RUN echo "hello" \ # this is a comment && echo "world"RUN echo "hello" \ # this is a comment # that spans multiple lines && echo "world" -
Tenta manter os comentários corretamente anexados à posição formatada, mas isso é difícil porque os comentários são removidos na etapa do parser
Binding JS
- O binding JS está incluído no diretório js
- O modo de uso pode ser consultado em
js/README.md
Outras observações
- Como ainda está em uma versão anterior à 1.0.0, o uso em produção não é recomendado
1 comentários
Comentários no Hacker News
RUNnão suporta agrupamento nem ponto e vírgula nos comandosRUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etcRUNnão suporta agrupamento nem ponto e vírgula nos comandos, mas o exemplo mostra suporte a&&. Fico curioso sobre a diferençaRUN foo && \ bar && \ :RUN set -e && \ foo ; \ bar ; \ :FROM foo ... FROM bar ...FROMpara deixar cada stage mais claro. Acho que não fazer isso é como não indentar o corpo de uma função em outras linguagens