aboutsummaryrefslogtreecommitdiff
path: root/project
diff options
context:
space:
mode:
Diffstat (limited to 'project')
-rwxr-xr-xproject217
1 files changed, 217 insertions, 0 deletions
diff --git a/project b/project
new file mode 100755
index 0000000..3b4bb91
--- /dev/null
+++ b/project
@@ -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 :)"