#!/bin/bash # # Setup a new code project. # # Parameters PROGRAM="$0" BASENAME="`basename $0`" PROJECT="$1" shift MODULES="$*" BOOTSTRAP="https://git.fluxo.info/puppet-bootstrap.git" TEMPLATES="https://git.fluxo.info/templates.git" # Read a parameter from user function __project_ask { local input local function="$1" local default="n" shift 2 read -rep "Setup $function? (defaults to $default): " input if [ "$input" == "y" ]; then project_$function fi } # Return list of implementations function __project_implementations { # Do not sort this list: the order in which functions are present in the code is important grep "^function project_" $PROGRAM | cut -d ' ' -f 2 | sed -e 's/project_//' } # Checkout to develop branch if available function __project_checkout_develop { ( cd $PROJECT if git branch --list develop | grep -q develop; then git checkout develop fi ) } # Initialize project function __project_init { if [ ! -d "$PROJECT" ]; then echo "Initializing $PROJECT..." mkdir -p $PROJECT fi } # Git implementation function project_git { if [ ! -d "$PROJECT/.git" ]; then ( cd $PROJECT touch .gitignore echo "$PROJECT" > README.md echo "=========`echo $PROJECT | sed -e 's|.|=|g'`" >> README.md echo "" >> README.md echo "This is the $PROJECT repository." >> README.md echo "TODO" > TODO.md echo "====" >> TODO.md echo "" >> TODO.md echo "* Nothing here? :P" >> TODO.md git init git add . git commit -m "Initial import" if which git-hooks &> /dev/null; then echo "" echo "Installing hooks..." git hooks --install fi ) fi } # Setup git-flow implementation function project_gitflow { if ! grep -q '^\[gitflow' $PROJECT/.git/config; then ( cd $PROJECT if ! git branch --list develop | grep -q develop; then git branch develop if [ -e "/usr/lib/git-core/git-flow" ]; then echo "" echo "Setting up git-flow..." git flow init -d fi fi ) fi } # Vagrant implementation function project_vagrant { if [ ! -e "$PROJECT/Vagrantfile" ]; then ( echo "" echo "Setting up vagrant implementation..." cd $PROJECT #__project_checkout_develop vagrant init echo '.vagrant' >> .gitignore git commit -a -m "Adds vagrant support" ) fi } # KVMX implementation function project_kvmx { if [ ! -e "$PROJECT/kvmxfile" ]; then ( echo "" echo "Setting up vagrant implementation..." cd $PROJECT kvmx init git commit -a -m "Adds kvmx support" ) fi } # Puppet implementation function project_puppet { if [ ! -d "$PROJECT/puppet" ]; then ( echo "" echo "Setting up puppet implementation..." cd $PROJECT # Use the best approach #git clone $BOOSTRAP $PROJECT/puppet #git submodule add $BOOSTRAP puppet git remote add puppet $BOOTSTRAP git subtree add --prefix puppet $BOOTSTRAP master --squash ) fi } # Ikiwiki implementation function project_ikiwiki { ( if [ ! -d "$HOME/file/templates" ]; then echo "Please clone $TEMPLATES into $HOME/file/templates" else echo "" echo "Setting up ikiwiki implementation..." cd $PROJECT #__project_checkout_develop if [ ! -e ".gitignore" ]; then cp $HOME/file/templates/ikiwiki/.gitignore . elif ! grep -q -f $HOME/file/templates/ikiwiki/.gitignore .gitignore; then cat $HOME/file/templates/ikiwiki/.gitignore >> .gitignore fi if [ ! -e "index.mdwn" ]; then cp $HOME/file/templates/ikiwiki/index.mdwn . fi if [ ! -e "ikiwiki.setup" ]; then cp $HOME/file/templates/ikiwiki/ikiwiki.setup . fi if [ ! -e "Makefile" ]; then cp $HOME/file/templates/ikiwiki/Makefile . elif ! grep -q ^wiki: Makefile; then grep -v '^#' $HOME/file/templates/ikiwiki/Makefile >> Makefile fi if [ ! -d "templates" ]; then cp -r $HOME/file/templates/ikiwiki/templates . fi if [ ! -d "bootstrap" ]; then cp -r $HOME/file/templates/ikiwiki/bootstrap . fi git add . git commit -a -m "Static site generation support using ikiwiki" fi ) } # Sphinx implementation function project_sphinx { echo "TODO: sphinx" true } # Pelican implementation function project_pelican { echo "TODO: pelican" true } # Hugo implementation function project_hugo { echo "TODO: hugo" true } # Syntax check if [ -z "$PROJECT" ]; then echo "$BASENAME: create a new project folder and/or setup helper utilities" echo "" echo "usage: $BASENAME [ ... ]" echo "available modules:" echo "" __project_implementations | xargs -L 6 | column -t -c 6 | sed -e 's/^/\t/' echo "" exit 1 fi # Initialize __project_init # Setup modules if [ ! -z "$MODULES" ]; then for project in `__project_implementations`; do __project_ask $project done else for module in $MODULES; do project_$module done fi # Teardown echo "Done processing the project :)"