Saya tidak bermaksud melakukan pekerjaan lebih lanjut pada Babushka (sebenarnya saya belum melakukannya dalam beberapa waktu).
Saya punya ide dan mulai mengerjakan proyek pada tahun 2009. Pada saat Docker dan bahkan Vagrant belum dikandung. Sebagian saya ingin membangun alternatif skala kecil yang lebih sederhana untuk orang-orang seperti koki dan boneka, dan sebagian dimulai sebagai sedikit eksperimen dalam seberapa jauh saya bisa mengasah dsl ruby dan sejauh mana saya bisa bersandar padanya untuk melakukan pekerjaan yang bermanfaat. Saya memiliki bola yang mengerjakannya dan belajar banyak, dan saya bangga dengan kenyataan bahwa desain awal terbukti suara. Saya kurang bangga dengan bagian -bagian tertentu dari implementasi - hoowee akan saya tulis beberapa bit kode itu secara berbeda hari ini - tetapi kemudian kita semua masih muda sekali.
Hari -hari ini semuanya sangat berbeda. Dengan wadah modern dan kekhasan yang mereka berikan, bersama dengan alat-alat seperti Terraform, Kubernetes dan sebagainya, Babushka dan pendekatan berbasis mutasinya cukup tanggal. Bahkan membutuhkan Babushka tua yang baik untuk pekerjaan infrastruktur yang serius hari ini dapat dianggap sebagai semacam tanda peringatan.
Adapun untuk menyiapkan laptop baru dan sebagainya, saya telah belajar jauh bahwa skrip shell bodoh yang menyalin beberapa preferensi ke tempatnya, menjalankan beberapa perintah defaults write
, dan sebagainya, bersama dengan beberapa langkah manual, banyak lebih mudah dipelihara. Semakin banyak proses otomatis mencapai macOS, semakin cepat akan keluar dari kompatibilitas, dan dalam hal apa pun pengaturan mesin baru adalah kejadian yang cukup langka bagi saya sehingga tidak layak untuk diarahkan untuk otomatisasi yang sempurna.
Terima kasih kepada semua orang yang berkontribusi dan memanfaatkannya selama bertahun -tahun. Seperti biasa jika Anda ingin memanfaatkannya dengan cara apa pun, lakukan hidup Anda - saya hanya tidak bermaksud untuk membuat perubahan lagi pada repo utama ini. Yah mungkin suatu hari hujan saya akan refactor bit berbulu - kita akan lihat.
Sorakan dan semua yang terbaik.
Babushka adalah alat Commandline untuk mengotomatiskan tugas komputasi. Setiap bagian yang berbeda dari pekerjaan dinyatakan sebagai ketergantungan (DEP), yang terdiri dari tes dan kode untuk membuat tes lulus.
dep 'on git branch' , :branch do
met? {
current_branch = shell ( 'git branch' ) . split ( " n " ) . collapse ( /^ * / ) . first
log "Currently on #{ current_branch } ."
current_branch == branch
}
meet {
log_shell ( "Checking out #{ branch } " , 'git' , 'checkout' , branch )
}
end
Di atas adalah DEP ekspositori yang dapat mencapai tujuan sederhana berada di cabang git yang benar (perhatikan parameter yang dilambangkan dengan: simbol cabang). Itu dibangun menggunakan dua kata DSL met?
dan meet
, yang berisi logika masing -masing DEP, memisahkan tes (apakah ketergantungan dipenuhi?) Dari kode (memenuhi ketergantungan).
Menjalankan DEP ini ketika perubahan cabang diperlukan menunjukkan bagaimana Babushka melakukan pekerjaannya di blok Met/Meet/Met: Tes yang gagal, tindakan yang diambil secara membabi buta, dan kemudian tes yang sama lagi, lulus sekarang sebagai hasilnya.
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
Currently on master.
meet {
Checking out stable... done.
}
Currently on stable.
} ✓ on git branch
Namun, jika kita sudah berada di cabang yang tepat, tes awal sudah lewat, dan jadi tidak ada pekerjaan yang harus dilakukan.
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
Currently on stable.
} ✓ on git branch
Itu semua sangat baik untuk satu tugas yang terisolasi. Untuk mencapai sesuatu yang lebih besar, tugas harus memicu yang lain, yang merupakan tempat requires
kata DSL ketiga.
dep 'on git branch' , :branch do
requires 'git'
# ...
Sebelum Babushka memproses DEP dalam mode Met/Meet/Met yang dijelaskan di atas, semua persyaratannya diproses hingga selesai dengan cara yang sama. Itu mencerminkan kenyataan: menanyakan apakah kita berada di cabang git yang tepat bahkan tidak masuk akal jika Git tidak diinstal.
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
git {
'git' runs from /usr/bin.
✓ git is 2.3.8, which is >= 1.6.
} ✓ git
Currently on stable.
} ✓ on git branch
Kata DSL yang melengkapi requires_when_unmet
dapat digunakan untuk menentukan dependensi yang diperlukan hanya ketika DEP yang diberikan ditemukan tidak terpenuhi, dan itu dapat dilewati ketika DEP sudah dipenuhi. (Bangun alat adalah contoh yang baik dari persyaratan seperti itu.)
Ada hal -hal lain untuk dipelajari, seperti templat DEP, sumber DEP, dan beberapa kata yang tersisa di DSL Babushka, tetapi di atas adalah kacangnya. Jika Anda merangkai beberapa lusin DEP seperti ini bersama -sama, Anda dapat menyediakan server dari awal, atau melakukan hal lain yang Anda suka.
Ada banyak dokumentasi yang lebih rinci di situs web, bersama dengan dokumentasi per-metode yang dapat dilihat di sini.
Babushka paling mudah diinstal menggunakan babushka.me/up
, skrip shell yang menginstal Babushka melalui git (dan ketergantungannya, Ruby dan Git, melalui manajer paket sistem Anda jika diperlukan). Aman untuk berjalan pada sistem yang ada, dan dimaksudkan untuk digunakan sebagai perintah shell pertama pada sistem baru juga. Anda dapat menginstal Babushka dengan cara ini menggunakan curl
atau wget
:
sh -c "`curl https://babushka.me/up`"
Jika Anda lebih suka menginstal secara manual, yang perlu Anda lakukan adalah mengkloning repo git (atau mengekstrak arsipnya) dan jika Anda suka, tautkan bin/babushka.rb
ke jalan Anda sebagai 'babushka'.
Periksa dokumentasi instal untuk perincian tentang menyesuaikan instalasi, termasuk mengunci ke versi tertentu dan menginstal dari garpu menggunakan babushka.me/up
.
Babushka sendiri harus berjalan di UNIX; Tidak ada inti dari Babushka yang membutuhkan apa pun selain Unix, Ruby, dan Git.
Saya mengembangkan Babushka di macOS dan menggunakannya terutama pada Ubuntu, jadi homebrew dan apt adalah manajer paket yang paling didukung. Ada juga beberapa dukungan YUM (Redhat/Fedora/Centos) dan Pacman (Arch), terima kasih atas kontribusi orang lain. Pada sistem lain, operasi spesifik (seperti menginstal paket menggunakan manajer paket sistem itu) akan gagal dengan pesan kesalahan, tetapi jika tidak, Babushka harus berjalan dengan baik. Bagaimanapun, tambalan sangat disambut.
Babushka mengambil keuntungan dari perpustakaan ruby ini:
Terima kasih banyak kepada semua orang yang berkontribusi pada Babushka, baik dengan mengirimkan tambalan, membahas ide -ide desain dengan saya, menguji, atau hanya memberikan umpan balik mereka.
Daftar kontributor di sini pasti sudah ketinggalan zaman - halaman kontributor berisi daftar lengkap. Selain itu, versi-bumping berkomitmen selalu merinci apa yang berubah dan siapa yang membantu dalam pesan komit mereka.
Babushka dilisensikan di bawah lisensi BSD tiga klausa, kecuali untuk lib/levenshtein/levenshtein.rb
, yang dilisensikan di bawah lisensi MIT.
Lisensi BSD dapat ditemukan secara penuh dalam file lisensi, dan lisensi MIT dapat ditemukan di bagian atas lib/levenshtein/levenshtein.rb
.