Giriş

Bölüm 11

Sıralı komutlardan iş akışına: `.lil` karar verebilsin

Cevap her zaman “A’yı yap, sonra B, sonra C” olduğu sürece doğrusal betik yeterlidir. Bir dizinin varlığını denetlemek, yolu yeniden kullanmak, sonucu saklamak veya açık bir nedenle durmak gerektiğinde artık basit bir liste değil, iş akışı kuruyorsunuz.

İşe uyan en küçük otomasyon dilini kullanın

#lil ile başlayan dosya Core’un doğrusal çalıştırıcısını kullanır: normal komutlar sırayla yürütülür ve bu sadelik bir avantajdır. Kurulum listeleri, tekrarlanabilir tanılama ve kısa yordamlar için idealdir.

run sonraki katmandır. Değişkenler, koşullar, yakalanan sonuçlar, iç içe betikler ve açık hata politikası ekler. Her üç satırlık tarifi programa çevirmeyin; iş akışı gerçekten durum veya karar gerektiriyorsa run kullanın.

install run
help run

Değişkenler tekrarlanan yolları anlamlı adlara dönüştürür

set root lil-playground bir yola rol verir. Sonrasında $root, $source ve $archive aynı değeri beş yerde düzenlemek yerine değerlerin ne anlama geldiğini söyler.

İyi variable isimleri betik’i portable yapar. Ortama özgü değerleri yukarıda, gizli veri’ları dışarıda tutun; birkaç açık variable, akıllı string birleştirmelerinden genelde daha iyidir.

Dosyayı bununla başlatın
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip

Condition bir varsayımı korumalıdır

if dir "$source" süs değildir: arşiv adımının sessizce yanlış hedef üzerinde çalışmasını önler. Conditions, yanlışlığı destructive veya kafa karıştırıcı sonuca dönüşecek varsayımların çevresinde en değerlidir.

run; exists, file, dir, empty, eq, ne, ok, fail ve command koşullarını, tersine çevirmek için de not sözcüğünü destekler. Branch’leri okuyanın her yolun neden var olduğunu anlayacağı kadar kısa tutun.

Dosyayı bununla başlatın
if dir "$source"
    stat "$source"
else
    stop "Project directory is missing"
end

Sonraki karar çıktıya bağlıysa yakalama kullanın

capture name <command> normal lil komutunu çalıştırır ve plain sonucu variable içinde saklar. $last, $status, $cwd ve $line gibi built-in’ler yaygın execution durumu sunar.

Sırf mümkün diye her şeyi yakalama etmeyin. Küçük ve stable terminal text için yararlıdır; verinin araçlar arasında veya zaman içinde yaşaması gerekiyorsa structured file veya özel format komutları daha iyidir.

Dosyayı bununla başlatın
capture current pwd -s
if empty "$current"
    stop "Current directory is unavailable"
end

Otomasyondan önce failure’ın ne anlama geldiğine karar verin

Varsayılan run fail-fast çalışır: başarısız komut iş akışı’u durdurur. -k hatadan sonra devam eder ve yalnızca bağımsız adımların gerçekten güvenle sürebildiği işlere aittir. stop insanın anlayacağı nedenle durmayı sağlar.

Tanımadığınız iş akışlarını önce -n ile çalıştırın. Önizleme komutları çalıştırmadan doğrular ve genişletir; -v gerçek çalıştırmada tam çıktıyı gösterir. Önizleme bürokrasi değil, otomasyonu anlaşılır tutma yöntemidir.

run workflow.lil -n
run workflow.lil -v

Büyük iş akışlarını satır sayısına göre değil sorumluluğa göre bölün

İş akışı aynı değişken bağlamında run child.lil çağırabilir; yedek, doğrulama veya dağıtım yöntemleri böylece bağımsız ve yeniden kullanılabilir kalır. İç içe yapıyı sığ tutun ve her dosyaya tek görev verin.

run -p taşıma için checksum-protected compressed temsil üretir. Packed .lil şifreleme değildir: format ve integrity’yi kazara düzenlemeye karşı korur, gizliity veya authorship sağlamaz.

run -p workflow.lil workflow.packed.lil
run workflow.packed.lil

Otomasyon bilinçli olarak interaktif insandan daha az yetkilidir

Etkileşimli arayüz komutları normal iş akışlarında engellenir; php ve ses gibi ayrıcalıklı, etkileşimsiz komutlar açıkça -x ister. Etkileşimli @command otomatik kurulum kolaylığı da run betikleri içinde kullanılmaz.

Bu sürtünme bilinçlidir. Reproducible iş akışı modül bağımlılıklarıni execution’dan önce bildirmeli; run ortasında beklenmedik şekilde kod kurmamalı, gizli veri istememeli veya terminali yok etmemelidir.

Bunu betik olarak saklayın

Bunu workflow.lil olarak kaydedin, success branch için isterseniz lil-playground/project oluşturun ve önce run workflow.lil -n ile çalıştırın. Asıl geçiş şudur: betik arşiv oluşturmadan önce varsayımlarını kontrol eder.

set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip

if not dir "$root"
    stop "lil-playground is missing"
end

if dir "$source"
    capture current pwd -s
    zip "$source" "$archive" -f
    stat "$archive"
else
    stop "Project directory is missing"
end