2 puan yazan GN⁺ 2025-04-11 | 1 yorum | WhatsApp'ta paylaş
  • Mevcut dockfmt için modernleştirilmiş bir alternatif araç olup Dockerfile dosyalarını otomatik olarak düzenler ve kod stilini hizalar
  • Dahili olarak Dockerfile sözdizimi analizi için buildkit, RUN komutları içindeki shell script biçimlendirmesi için mvdan/sh kullanır
  • Tutarlı bir kod stili korumaya yardımcı olur ve kod incelemeleri ile CI ortamlarında faydalı şekilde kullanılabilir

Kullanım

dockerfmt [Dockerfile] [flags]  
dockerfmt [command]  
  • Başlıca komutlar:
    • completion: shell otomatik tamamlama betiği oluşturur
    • help: komut yardımı
    • version: sürümü gösterir
  • Başlıca bayraklar:
    • -c, --check: yalnızca biçimlendirilip biçimlendirilmediğini kontrol eder
    • -i, --indent: girinti boşluk sayısını ayarlar (varsayılan 4)
    • -n, --newline: dosya sonuna satır sonu karakteri ekler
    • -s, --space-redirects: yönlendirme operatörlerinden sonra boşluk ekler
    • -w, --write: değişiklikleri kaynak dosyanın üzerine yazar

Pre-commit kancası yapılandırması

  • pre-commit kancası olarak entegre edilebilir
  • .pre-commit-config.yaml dosyası örneği:
    repos:  
      - repo: https://github.com/reteps/dockerfmt  
        rev: main  
        hooks:  
          - id: dockerfmt  
            args:  
              - --indent=4  
    

Mevcut kısıtlamalar

  • RUN komutlarında noktalı virgül (;) veya komut gruplaması henüz desteklenmiyor
  • Uzun JSON komutları için otomatik satır bölme özelliği yok
  • # escape=X direktifi desteklenmiyor

Özellik tanıtımı

  • RUN komutu biçimlendirmesinde mvdan/sh kullanır

  • Temel heredoc desteği:

    RUN <<EOF  
    echo "hello"  
    echo "world"  
    EOF  
    
  • RUN komutu içinde yorum desteği:

    RUN echo "hello" \  
        # this is a comment  
        && echo "world"  
    
    RUN echo "hello" \  
        # this is a comment  
        # that spans multiple lines  
        && echo "world"  
    
  • Yorumların biçimlendirilen konuma doğru şekilde eklenmesini sağlamaya çalışır, ancak yorumlar ayrıştırıcı aşamasında kaldırıldığı için bu zordur

JS bağlayıcısı

  • JS bağlayıcısı js dizininde yer alır
  • Kullanım için js/README.md dosyasına bakılabilir

Diğer notlar

  • Henüz 1.0.0 öncesi bir sürüm olduğundan üretim ortamında kullanılması önerilmez

1 yorum

 
GN⁺ 2025-04-11
Hacker News görüşleri
  • Kaynak koda bakıp Dockerfile bulamayınca güldüm. Mevcut bir dosya üzerinde bunu Docker container olarak çalıştırmak en kolay yöntem olurdu ama ne yazık ki bunu yapamadım
  • İşaretlenip silinen yorumu desteklemek istemiyorum. Muhtemelen üslubu yüzünden silinmiştir ama bu ürünün QA sürecinden geçmediğini oldukça iyi gösteriyor
  • Proje kökünde formatter, paket yöneticisi, linter ve CI için 50 tane dotfile yoksa gerçek bir yazılım mühendisi değilsiniz
    • Formatter ayar dosyasını kimin formatladığını merak ediyorum
  • RUN parser'ının komutlarda gruplamayı ya da noktalı virgülü desteklemediğini görünce şaşırdım
    • Ben şöyle yazmayı tercih ediyorum
    • RUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etc
    • Bu yüzden bu araç bana uygun görünmüyor
  • RUN parser'ının komutlarda gruplamayı ya da noktalı virgülü desteklemediği söyleniyor ama örneklerde && desteklendiği gösteriliyor. Farkın nedenini merak ediyorum
    • Ben genelde şöyle yazıyorum
    • RUN foo && \ bar && \ :
    • Bu da sözdizimi açısından şununla aynı görünüyor
    • RUN set -e && \ foo ; \ bar ; \ :
  • Multi-stage Dockerfile'da her stage'in gövdesini girintilemek isterdim
    • FROM foo ... FROM bar ...
    • Böylece ne olduğunu bir bakışta görmek kolay olur
  • Multi-stage Dockerfile'ı nasıl ele aldığını merak ediyorum. Ben her zaman FROM'dan sonraki adımları girintileyerek stage'leri daha belirgin hale getiriyorum. Bunu yapmamak bana diğer dillerde fonksiyon gövdesini girintilememek gibi geliyor
  • Docker dosyalarını katmanlamanın bir yolu olup olmadığını merak ediyorum. Compose'dan bahsetmiyorum; başka Docker katmanlarını iyi şekilde birleştirme yöntemini kastediyorum
  • dockerfmt için bir ayar dosyası olmasını isterdim. Zamanla giderek daha fazla seçenek eklenecektir. Sonunda Turing complete hale ulaşacaktır
    • O zaman formatter için de bir formatter gerekecek
    • Shrek'in Donkey'e dediği gibi, yazılım soğan gibidir
  • Ben yaml LSP kullanıyorum. Muhtemelen schema.org'daki Containerfile formatına bakmaya çalışacağım. Bunu yakın zamanda Github Actions yaml dosyalarıyla çalışırken ilk kez öğrendim. Oldukça kullanışlı