2 poin oleh GN⁺ 2025-04-11 | 1 komentar | Bagikan ke WhatsApp
  • Alat pengganti modern untuk dockfmt, yang secara otomatis merapikan Dockerfile dan menyeragamkan gaya kode
  • Secara internal menggunakan buildkit untuk parsing sintaks Dockerfile, dan mvdan/sh untuk memformat skrip shell di dalam perintah RUN
  • Berguna untuk menjaga konsistensi gaya kode serta dapat dimanfaatkan dalam code review dan lingkungan CI

Cara penggunaan

dockerfmt [Dockerfile] [flags]  
dockerfmt [command]  
  • Perintah utama:
    • completion: menghasilkan skrip auto-completion shell
    • help: bantuan perintah
    • version: menampilkan versi
  • Flag utama:
    • -c, --check: hanya memeriksa apakah sudah terformat
    • -i, --indent: mengatur jumlah spasi indentasi (default 4)
    • -n, --newline: menambahkan karakter baris baru di akhir file
    • -s, --space-redirects: menambahkan spasi setelah operator redirect
    • -w, --write: menimpa file asli dengan isi yang sudah diubah

Konfigurasi hook pre-commit

  • Dapat diintegrasikan sebagai hook pre-commit
  • Contoh file .pre-commit-config.yaml:
    repos:  
      - repo: https://github.com/reteps/dockerfmt  
        rev: main  
        hooks:  
          - id: dockerfmt  
            args:  
              - --indent=4  
    

Keterbatasan saat ini

  • Titik koma (;) atau pengelompokan perintah dalam perintah RUN belum didukung
  • Belum ada fitur pemenggalan baris otomatis untuk perintah JSON yang panjang
  • Direktif # escape=X tidak didukung

Pengenalan fitur

  • Memanfaatkan mvdan/sh saat memformat perintah RUN

  • Dukungan heredoc dasar:

    RUN <<EOF  
    echo "hello"  
    echo "world"  
    EOF  
    
  • Mendukung komentar di dalam perintah RUN:

    RUN echo "hello" \  
        # this is a comment  
        && echo "world"  
    
    RUN echo "hello" \  
        # this is a comment  
        # that spans multiple lines  
        && echo "world"  
    
  • Berupaya agar komentar tetap melekat dengan benar pada posisi yang diformat, tetapi ini sulit karena komentar dihapus pada tahap parser

Binding JS

  • Binding JS disertakan di direktori js
  • Cara penggunaannya dapat dilihat di js/README.md

Catatan lain

  • Karena masih versi sebelum 1.0.0, penggunaan di lingkungan produksi belum direkomendasikan

1 komentar

 
GN⁺ 2025-04-11
Komentar Hacker News
  • Saya tertawa karena tidak bisa menemukan Dockerfile setelah melihat source code. Cara termudah biasanya adalah menjalankannya sebagai container Docker terhadap file yang sudah ada, tetapi sayangnya itu tidak bisa dilakukan
  • Saya tidak ingin membela komentar yang ditandai lalu dihapus. Komentar itu mungkin dihapus karena nadanya, tetapi itu cukup menunjukkan bahwa produk ini tidak melewati QA
  • Kalau tidak ada 50 file dot di root proyek untuk formatter, package manager, linter, dan CI, berarti Anda bukan software engineer sejati
    • Saya penasaran siapa yang memformat file konfigurasi formatter
  • Saya terkejut melihat parser RUN tidak mendukung pengelompokan atau titik koma dalam perintah
    • Saya lebih suka menulisnya seperti ini
    • RUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etc
    • Jadi sepertinya alat ini tidak cocok untuk saya
  • Dikatakan bahwa parser RUN tidak mendukung pengelompokan atau titik koma dalam perintah, tetapi contoh-contohnya menunjukkan dukungan untuk &&. Saya penasaran kenapa bisa berbeda
    • Biasanya saya menulis seperti ini
    • RUN foo && \ bar && \ :
    • Ini tampak setara secara sintaksis dengan
    • RUN set -e && \ foo ; \ bar ; \ :
  • Saya ingin isi tiap stage di Dockerfile multi-stage diberi indentasi
    • FROM foo ... FROM bar ...
    • Dengan begitu, lebih mudah melihat apa yang terjadi sekilas
  • Saya penasaran bagaimana alat ini menangani Dockerfile multi-stage. Saya selalu memberi indentasi pada langkah-langkah setelah FROM agar tiap stage lebih jelas. Menurut saya, kalau tidak begitu, rasanya seperti tidak memberi indentasi pada isi fungsi di bahasa lain
  • Saya penasaran apakah ada cara untuk melapisi file Docker. Bukan maksud saya Compose, tetapi cara yang baik untuk menggabungkan layer dari Docker yang berbeda
  • Saya berharap ada file konfigurasi untuk dockerfmt. Seiring waktu, opsinya pasti akan terus bertambah. Pada akhirnya akan mencapai kelengkapan Turing
    • Lalu kita akan butuh formatter untuk formatter itu
    • Seperti kata Shrek kepada Donkey, software itu seperti bawang
  • Saya memakai YAML LSP. Mungkin saya akan mencoba melihat format Containerfile di schema.org. Saya baru mengetahuinya saat mengerjakan file YAML Github Actions baru-baru ini. Cukup berguna