diff options
Diffstat (limited to 'project')
| -rwxr-xr-x | project | 217 | 
1 files changed, 217 insertions, 0 deletions
| @@ -0,0 +1,217 @@ +#!/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 +} + +# 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 integration +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 integration +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 +} + +# Ikiwiki integration +function project_ikiwiki { +  ( +    if [ ! -d "$HOME/file/templates" ]; then +      echo "Please clone $TEMPLATES into $HOME/file/templates" +    else +      echo "" +      echo "Setting up ikiwiki integration..." +      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 +  ) +} + +# Vagrant integration +function project_vagrant { +  if [ ! -e "$PROJECT/Vagrantfile" ]; then +  ( +    echo "" +    echo "Setting up vagrant integration..." +    cd $PROJECT +    __project_checkout_develop +    vagrant init +    echo '.vagrant' >> .gitignore +    git commit -a -m "Adds vagrant support" +  ) +  fi +} + +# KVMX integration +function project_kvmx { +  if [ ! -e "$PROJECT/kvmxfile" ]; then +  ( +    echo "" +    echo "Setting up vagrant integration..." +    cd $PROJECT +    kvmx init +    git commit -a -m "Adds kvmx support" +  ) +  fi +} + +# Puppet integration +function project_puppet { +  if [ ! -d "$PROJECT/puppet" ]; then +  ( +    echo "" +    echo "Setting up puppet integration..." +    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 +} + +# Syntax check +if [ -z "$PROJECT" ]; then +  echo "$BASENAME: create a new project folder and setup helper utilities" +  echo "" +  echo "usage: $BASENAME <path> [<module1> ... <moduleN>]" +  echo "available modules:" +  echo "" +  grep "^function project_" $PROGRAM | cut -d ' ' -f 2 | sed -e 's/project_//' | sort | xargs -L 6 | column -t -c 6 | sed -e 's/^/\t/' +  echo "" +  exit 1 +fi + +# Initialize +__project_init + +# Setup modules +if [ ! -z "$MODULES" ]; then +  __project_ask git +  __project_ask gitflow +  __project_ask ikiwiki +  __project_ask kvmx +  __project_ask puppet +  __project_ask vagrant +else +  for module in $MODULES; do +    project_$module +  done +fi + +# Teardown +echo "Done processing the project :)" | 
