لا أنوي القيام بأي عمل إضافي على Babushka (في الواقع لم أفعل ذلك في وقت ما).
كان لدي الفكرة وبدأت العمل في المشروع في عام 2009. في ذلك الوقت لم يتم تصور Docker وحتى Vagrant. في جزء منه ، أردت أن أبني بديلاً أبسطًا وصغيرًا لأمثال الطاهي والدمى ، وبدأت جزئيًا كجزء من تجربة إلى أي مدى استطعت صقل DSL روبي وإلى أي مدى يمكنني أن أميل إليها للقيام بعمل مفيد. كان لدي كرة تعمل عليها وتعلمت جحيمًا كثيرًا ، وأنا فخور بحقيقة أن التصميم الأولي أثبت الصوت. أنا أقل فخورًا بأجزاء معينة من التنفيذ - هل سأكتب بضع أجزاء من هذا الرمز بشكل مختلف اليوم - ولكن بعد ذلك كنا صغارًا مرة واحدة.
في هذه الأيام ، تختلف الأمور تمامًا. من خلال الحاويات الحديثة والتأثر الذي توفره ، إلى جانب أدوات مثل Terraform و Kubernetes وما إلى ذلك ، فإن Babushka ونهجها القائم على الطفرة مؤرخة تمامًا. في الواقع ، تتطلب Babushka القديمة الجيدة لأعمال البنية التحتية الخطيرة اليوم أن تعتبر نوعًا من علامات التحذير.
أما بالنسبة لإعداد كمبيوتر محمول جديد وما إلى ذلك ، فقد تعلمت الطريق الطويل الذي يقوم فيه نص قذيفة غبي ينسخ بعض التفضيلات في مكانه ، ويدير بعض الأوامر defaults write
، وهكذا ، إلى جانب بعض الخطوات اليدوية ، هو كثيرًا أسهل للحفاظ عليها. كلما وصلت العملية الآلية إلى MacOS ، زادت سرعة التوافق بسرعة أكبر ، وعلى أي حال ، يعد إنشاء جهاز جديد أمرًا نادرًا بما يكفي بالنسبة لي لا يستحق الهدف من الأتمتة المثالية.
شكرا لكل من ساهم واستفاد منه على مر السنين. كما هو الحال دائمًا إذا كنت ترغب في الاستفادة منها بأي شكل من الأشكال ، فانتقل إلى حياتك - لا أنوي إجراء أي تغييرات أخرى على هذا الريبو الرئيسي. حسنًا ، ربما سأعرف يوم واحد من الأمطار البتات المشعر - سنرى.
هتافات وكل التوفيق.
Babushka هي أداة سطر الأوامر لأتمتة أعمال الحوسبة. يتم التعبير عن كل جزء متميز من المهمة على أنه تبعية (DEP) ، والذي يشتمل على اختبار ورمز لجعل هذا الاختبار تمريرة.
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
أعلاه هو DEP التفسيري يمكن أن يحقق الهدف المتواضع المتمثل في أن يكون على فرع GIT الصحيح (لاحظ المعلمة التي يشار إليها بواسطة: رمز الفرع). تم تصميمه باستخدام كلمتين DSL met?
meet
، والتي تحتوي على منطق كل DEP ، تفصل الاختبار (هل التبعية MET؟) عن الكود (تلبية التبعية).
يوضح تشغيل هذا DEP عند حاجة إلى تغيير الفرع كيف يقوم Babushka بعمله في كتل من Met/Meet/Met: اختبار فاشل ، وعمل تم اتخاذه بشكل أعمى ، ثم الاختبار نفسه مرة أخرى ، ويمر الآن كنتيجة.
$ 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
إذا كنا بالفعل في الفرع الصحيح ، على الرغم من ذلك ، فإن الاختبار الأولي يمر بالفعل ، وبالتالي لا يوجد عمل للقيام به.
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
Currently on stable.
} ✓ on git branch
هذا كل شيء بشكل جيد للغاية لمهمة معزولة واحدة. لتحقيق شيء أكبر ، يجب أن تؤدي المهام إلى تشغيلها ، حيث requires
كلمة DSL الثالثة.
dep 'on git branch' , :branch do
requires 'git'
# ...
قبل أن تقوم Babushka بمعالجة DEP في Met/Meet/Met الموضة الموضحة أعلاه ، تتم معالجة جميع متطلباتها حتى الانتهاء بنفس الطريقة. هذا يعكس الواقع: السؤال عما إذا كنا على فرع GIT الصحيح لا يكون منطقيًا إذا لم يتم تثبيت GIT.
$ 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
تتطلب كلمة DSL requires_when_unmet
يمكن استخدامها لتحديد التبعيات المطلوبة فقط عندما يتم العثور على DEP معين لتكون غير مستوفاة ، ويمكن تخطي ذلك عند استيفاء DEP بالفعل. (أدوات البناء هي مثال جيد على هذا الشرط.)
هناك أشياء أخرى يجب معرفةها ، مثل قوالب DEP ، ومصادر DEP ، والكلمات القليلة المتبقية في DSL Babushka ، ولكن ما سبق هو الجوز منه. إذا قمت بتوصيل بضع عشرات من DEPS مثل هذا معًا ، فيمكنك توفير خادم من نقطة الصفر ، أو القيام بأي شيء آخر تريده.
هناك المزيد من الوثائق التفصيلية على موقع الويب ، إلى جانب الوثائق لكل طريقة يمكن عرضها هنا.
يتم تثبيت Babushka بسهولة باستخدام babushka.me/up
، وهو برنامج نصي shell يقوم بتثبيت babushka عبر git (وتبعياته ، ruby و git ، عبر مدير حزمة النظام الخاص بك إذا لزم الأمر). من الآمن تشغيل الأنظمة الحالية ، ويتم تهدف إلى استخدامها كأول أمر shell على نظام جديد أيضًا. يمكنك تثبيت Babushka بهذه الطريقة باستخدام curl
أو wget
:
sh -c "`curl https://babushka.me/up`"
إذا كنت تفضل التثبيت يدويًا ، فكل ما عليك فعله هو استنساخ ريبو git (أو استخراج أرشيف منه) وإذا أردت ، قم بربط bin/babushka.rb
في طريقك باسم "babushka".
تحقق من وثائق التثبيت للحصول على تفاصيل حول تخصيص التثبيت ، بما في ذلك القفل إلى إصدارات محددة والتثبيت من Forks باستخدام babushka.me/up
.
يجب أن تعمل Babushka نفسها على أي UNIX ؛ لا يوجد شيء في قلب Babushka يتطلب أي شيء آخر غير Unix و Ruby و Git.
أقوم بتطوير Babushka على MacOS وأستخدمه في المقام الأول على Ubuntu ، لذا فإن Homebrew و APT هم مديري الحزم الأكثر مدعومة. هناك أيضًا بعض دعم YUM (Redhat/Fedora/Centos) و Pacman (ARCH) ، وذلك بفضل مساهمات الآخرين. في الأنظمة الأخرى ، ستفشل عمليات محددة (مثل تثبيت حزمة باستخدام مدير حزمة النظام) برسالة خطأ ، ولكن على خلاف ذلك يجب أن يكون Babushka يعمل بشكل جيد. في أي حال ، البقع موضع ترحيب كبير.
Babushka يستفيد من هذه المكتبات الياقوت:
شكرًا جزيلاً لكل من ساهم في Babushka ، سواء من خلال تقديم تصحيحات أو مناقشة أفكار التصميم معي أو اختبار أو مجرد تقديم ملاحظاتهم.
قائمة من المساهمين هنا تنخفض حتما - تحتوي صفحة المساهمين على القائمة الكاملة. بالإضافة إلى ذلك ، يرتكب ضجة الإصدار دائمًا تفاصيل ما الذي تغير ومن الذي ساعد في رسائل التزامهم.
تم ترخيص Babushka بموجب ترخيص BSD المكون من ثلاثة نقاط ، باستثناء lib/levenshtein/levenshtein.rb
، وهو مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.
يمكن العثور على ترخيص BSD بالكامل في ملف الترخيص ، ويمكن العثور على ترخيص MIT في الجزء العلوي من lib/levenshtein/levenshtein.rb
.