#!/bin/bash # # Setup a new code project. # # Parameters BASENAME="`basename $0`" PROJECT="$1" REPO="$2" BOOTSTRAP="https://git.fluxo.info/puppet-bootstrap.git" TEMPLATES="https://git.fluxo.info/templates.git" # Read a parameter from user function sandbox_ask { local input local function="$1" local default="n" shift 2 read -rep "Setup $function? (defaults to $default): " input if [ "$input" == "y" ]; then sandbox_$function fi } # Checkout to develop branch if available function sandbox_checkout_develop { ( cd $PROJECT if git branch --list develop | grep -q develop; then git checkout develop fi ) } # Initialize project function sandbox_init { if [ ! -d "$PROJECT" ]; then echo "Initializing $PROJECT..." mkdir -p $PROJECT fi } # Git integration function sandbox_git { ( 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 ) } # Setup git-flow integration function sandbox_git_flow { ( 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 ) } # Ikiwiki integration function sandbox_ikiwiki { ( if [ ! -d "$HOME/file/templates" ]; then echo "Please clone $TEMPLATES into $HOME/file/templates" else echo "" echo "Setting up ikiwiki integration..." cd $PROJECT sandbox_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 ) } # Vagrant integration function sandbox_vagrant { ( echo "" echo "Setting up vagrant integration..." cd $PROJECT sandbox_checkout_develop echo '.vagrant' >> .gitignore git commit -a -m "Adds vagrant support" # 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 ) } # Syntax check if [ -z "$PROJECT" ]; then echo "usage: $BASENAME [url]" exit 1 fi # Clone or initialize if [ ! -z "$REPO" ]; then git clone $URL $PROJECT else sandbox_init sandbox_ask git sandbox_ask git_flow sandbox_ask ikiwiki sandbox_ask vagrant fi # Teardown echo "Done sandboxing :)"