A babushka like clone, written in bash.
Clone this repo to the location of your choice, and add babashka/bin
to your path.
git clone https://github.com/aurynn/babashka
echo "export PATH=$PWD/babashka/bin:\${PATH}" >>.bashrc
or, to install system-wide,
cd /opt
sudo git clone https://github.com/aurynn/babashka
sudo mkdir /etc/babashka
cd /etc/babashka
sudo ln -s /opt/babashka/dependencies .
sudo ln -s /opt/babashka/helpers .
sudo ln -s /opt/babashka/bin/babashka /usr/bin/babashka
babashka
looks for dependencies by searching the ./babashka/
, ./babashka/dependencies/
and /etc/babashka/dependencies
folders for files ending in .bash
or .sh
.
Project-specific dependencies are conventionally kept in ./babashka/
and global dependencies are conventionally kept in /etc/babashka/dependencies
.
For example, ~/projects/myapp/babashka/deploy.sh
might contain deployment scripts for an app called myapp
, while /etc/babashka/dependencies/packages.sh
might contain dependencies which install packages you commonly need on new systems.
babashka
takes an argument, -d
, to add another search path for dependencies.
Babashka will ignore anything in subdirectories named files/
. This is to allow for files that will be moved into the filesystem to be included in a Babashka directory tree.
Babashka comes with a number of built-in functions to make developing your infrastructure-as-code easier. Documentation (in-progress) for these builtins is in docs/README.md.
babashka
comes with a built-in, system.file.template
, which takes advantage of Mo. This is an optional dependency.
Write dependencies with a similar form to their babushka counterparts:
# dep zsh_installed
zsh_installed() {
function is_met() {
which zsh
}
function meet() {
sudo apt-get -y install zsh
}
process # Process line is important, you must include it.
}
# dep mysql_environment
mysql_environment() {
requires "mysql_server"
requires "mysql_client"
# Don't need process if this dep doesn't have meet or is_met
}
mysql_server() {
function is_met() {
which mysqld
}
function meet() {
sudo aptitude install mysql-server
}
process
}
mysql_client() {
function is_met() {
which mysql
}
function meet() {
sudo aptitude install mysql-client
}
process
}
Then invoke:
babashka zsh_installed
babashka mysql_environment
"This is absolutely f**king cursed" ~ @ryankurte