Ich habe keine weitere Arbeit an Babuschka (in der Tat habe ich dies seit einiger Zeit nicht mehr getan).
Ich hatte die Idee und begann 2009 an dem Projekt zu arbeiten. Zu der Zeit mussten Docker und sogar Vagrant noch gezeugt werden. Zum Teil wollte ich eine einfachere, kleine Alternative zu Koch und Puppenspiel aufbauen, und zum Teil begann es als ein bisschen Experiment darüber, wie weit ich einen Ruby DSL verbessern konnte und inwieweit ich mich darauf stützen konnte nützliche Arbeit leisten. Ich hatte einen Ball daran und lernte verdammt viel, und ich bin stolz darauf, dass sich das anfängliche Design als Klang erwies. Ich bin weniger stolz auf bestimmte Teile der Implementierung - Hoowee würde ich heute ein paar Teile dieses Codes anders schreiben -, aber dann waren wir alle einmal jung.
Heutzutage sind die Dinge sehr unterschiedlich. Mit modernen Behältern und der Unveränderlichkeit, die sie bieten, sind Babuschka und sein mutationsbasierter Ansatz zusammen mit Werkzeugen wie Teraform, Kubernetes usw. ziemlich datiert. Tatsächlich könnte heute ein gutes altes Babuschka für ernsthafte Infrastrukturarbeiten erforderlich sein, die heute als eine Art Warnzeichen angesehen werden kann.
Zum Einrichten eines neuen Laptops usw. habe ich gelernt, dass ein dummes Shell -Skript, das einige Einstellungen einsetzt, ein paar defaults write
ausführt, und so weiter, zusammen mit ein paar manuellen Schritten, viel einfacher zu pflegen. Je mehr ein automatisierter Prozess in MacOS reicht, desto schneller fällt es aus Kompatibilität, und auf jeden Fall ist das Einrichten einer neuen Maschine für mich ein seltenes Ereignis, dass es sich nicht lohnt, eine perfekte Automatisierung anzustreben.
Vielen Dank an alle, die im Laufe der Jahre beigetragen und benutzt haben. Wie immer, wenn Sie es in irgendeiner Weise nutzen möchten, gehen Sie für Ihr Leben - ich beabsichtige einfach nicht, mehr Änderungen an diesem Hauptrepo vorzunehmen. Nun, vielleicht ein regnerischer Tag werde ich die haarigen Teile neu aufrüsten - wir werden sehen.
Prost und alles Gute.
Babushka ist ein Befehlszeilen -Tool zur Automatisierung von Computerarbeit. Jeder unterschiedliche Teil des Jobs wird als Abhängigkeit (DEP) ausgedrückt, der einen Test und den Code umfasst, um diesen Test zu vergehen.
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
Oben ist eine Expository -DEP, die das bescheidene Ziel erreichen kann, sich im richtigen Git -Zweig zu befinden (beachten Sie den Parameter, der durch das Symbol: Zweig -Zweig bezeichnet wird). Es wurde mit den beiden met?
und meet
, die jede DEP -Logik enthalten und den Test (ist die Abhängigkeit erfüllt?) vom Code (treffen Sie die Abhängigkeit).
Durch Ausführen dieser DEP Wenn eine Zweigänderung erforderlich ist, zeigt Babushka in Blöcken von Met/Meet/MET: Ein fehlgeschlagener Test, eine Handlung, die blind ergriffen hat und dann denselben Test erneut, um jetzt zu bestehen.
$ 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
Wenn wir uns jedoch bereits in der richtigen Filiale befinden, wird der erste Test bereits bestanden, und es gibt also keine Arbeit zu erledigen.
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
Currently on stable.
} ✓ on git branch
Das ist alles sehr gut für eine isolierte Aufgabe. Um etwas Größeres zu erreichen, müssen Aufgaben andere auslösen, wo das dritte DSL -Wort requires
ist.
dep 'on git branch' , :branch do
requires 'git'
# ...
Bevor Babushka eine DEP in der oben beschriebenen Met/Meet/MET -Mode verarbeitet, werden alle seine Anforderungen auf die gleiche Weise bearbeitet. Das spiegelt die Realität wider: Fragen zu fragen, ob wir in der richtigen Git -Filiale sind, ist nicht einmal sinnvoll, wenn Git nicht installiert ist.
$ 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
Das Complentary DSL -Wort requires_when_unmet
kann verwendet werden, um Abhängigkeiten anzugeben, die nur erforderlich sind, wenn sich eine bestimmte DEP als nicht erfüllt befindet, und dies kann übersprungen werden, wenn die DEP bereits erfüllt ist. (Build -Tools sind ein gutes Beispiel für eine solche Anforderung.)
Es gibt noch andere Dinge, die Sie kennenlernen müssen, wie DEP -Vorlagen, DEP -Quellen und die wenigen verbleibenden Wörter in Babuschkas DSL, aber die oben genannte ist die Nuss davon. Wenn Sie ein paar Dutzend DEPs wie dieses zusammen anhalten, können Sie einen Server von Grund auf neu vorstellen oder alles andere tun, was Sie mögen.
Auf der Website gibt es eine viel detailliertere Dokumentation sowie eine Dokumentation pro Methoden, die hier angezeigt werden kann.
Babushka ist am einfachsten mit babushka.me/up
, einem Shell -Skript, das Babushka über Git (und seine Abhängigkeiten, Ruby und Git, über den Paketmanager Ihres Systems bei Bedarf) installiert wird. Es ist sicher, auf vorhandenen Systemen auszuführen und als erster Shell -Befehl auch in einem neuen System verwendet zu werden. Sie können Babushka auf diese Weise mit curl
oder wget
installieren:
sh -c "`curl https://babushka.me/up`"
Wenn Sie lieber manuell installieren möchten, müssen Sie lediglich das Git -Repo klonen (oder ein Archiv davon extrahieren) und wenn Sie möchten, link bin/babushka.rb
in Ihren Weg als "Babushka".
Weitere Informationen zum Anpassen der Installation finden Sie in der Installationsdokumentation, einschließlich der Verriegelung an bestimmte Versionen und Installation von Gabeln mit babushka.me/up
.
Babushka selbst sollte auf jeder Unix laufen; Im Kern von Babuschka gibt es nichts anderes als Unix, Ruby und Git.
Ich entwickle Babushka auf MacOS und benutze es hauptsächlich auf Ubuntu, daher sind Homebrew und Apt die am besten unterstützten Paketmanager. Dank der Beiträge anderer gibt es auch einige Yum (Redhat/Fedora/Centos) und Pacman (Arch). Bei anderen Systemen scheitern bestimmte Vorgänge (z. B. die Installation eines Pakets mit dem Paketmanager dieses Systems) mit einer Fehlermeldung, aber ansonsten sollten Babuschka gut ausgeführt werden. In jedem Fall sind Patches sehr willkommen.
Babushka nutzt diese Ruby -Bibliotheken:
Vielen Dank an alle, die zu Babuschka beigetragen haben, sei es durch Einreichen von Patches, Diskussionen von Designideen mit mir, Testen oder einfach nur ihr Feedback.
Eine Liste der Mitwirkenden hier fällt unweigerlich veraltet - die Seite der Mitwirkenden enthält die vollständige Liste. Darüber hinaus beschreiben die Versionen der Versionsfrüchte immer, was sich geändert hat und wer in ihren Commit-Nachrichten geholfen hat.
Babushka ist unter der Drei-Klausel-BSD-Lizenz mit Ausnahme von lib/levenshtein/levenshtein.rb
lizenziert, der unter der MIT-Lizenz lizenziert ist.
Die BSD -Lizenz befindet sich vollständig in der Lizenzdatei und die MIT -Lizenz befindet sich ganz oben auf lib/levenshtein/levenshtein.rb
.