aboutsummaryrefslogtreecommitdiff
path: root/templater
diff options
context:
space:
mode:
Diffstat (limited to 'templater')
-rwxr-xr-xtemplater238
1 files changed, 238 insertions, 0 deletions
diff --git a/templater b/templater
new file mode 100755
index 0000000..03b1448
--- /dev/null
+++ b/templater
@@ -0,0 +1,238 @@
+#!/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 __templater_ask {
+ local input
+ local function="$1"
+ local default="n"
+ shift 2
+
+ read -rep "Setup $function? (defaults to $default): " input
+
+ if [ "$input" == "y" ]; then
+ templater_$function
+ fi
+}
+
+# Return list of implementations
+function __templater_implementations {
+ # Do not sort this list: the order in which functions are present in the code is important
+ grep "^function templater_" $PROGRAM | cut -d ' ' -f 2 | sed -e 's/templater_//'
+}
+
+# Checkout to develop branch if available
+function __templater_checkout_develop {
+ (
+ cd $PROJECT
+
+ if git branch --list develop | grep -q develop; then
+ git checkout develop
+ fi
+ )
+}
+
+# Initialize project
+function __templater_init {
+ if [ ! -d "$PROJECT" ]; then
+ echo "Initializing $PROJECT..."
+ mkdir -p $PROJECT
+ fi
+}
+
+# Git implementation
+function templater_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 templater_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 templater_vagrant {
+ if [ ! -e "$PROJECT/Vagrantfile" ]; then
+ (
+ echo ""
+ echo "Setting up vagrant implementation..."
+ cd $PROJECT
+ #__templater_checkout_develop
+ vagrant init
+ echo '.vagrant' >> .gitignore
+ git commit -a -m "Adds vagrant support"
+ )
+ fi
+}
+
+# KVMX implementation
+function templater_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 templater_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 templater_ikiwiki {
+ (
+ if [ ! -d "$HOME/file/templates" ]; then
+ echo "Please clone $TEMPLATES into $HOME/file/templates"
+ else
+ echo ""
+ echo "Setting up ikiwiki implementation..."
+ cd $PROJECT
+ #__templater_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 templater_sphinx {
+ echo "TODO: sphinx"
+ true
+}
+
+# Pelican implementation
+function templater_pelican {
+ echo "TODO: pelican"
+ true
+}
+
+# Hugo implementation
+function templater_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 <path> [<module1> ... <moduleN>]"
+ echo "available modules:"
+ echo ""
+ __templater_implementations | xargs -L 6 | column -t -c 6 | sed -e 's/^/\t/'
+ echo ""
+ exit 1
+fi
+
+# Initialize
+__templater_init
+
+# Setup modules
+if [ ! -z "$MODULES" ]; then
+ for project in `__templater_implementations`; do
+ __templater_ask $project
+ done
+else
+ for module in $MODULES; do
+ templater_$module
+ done
+fi
+
+# Teardown
+echo "Done processing the project :)"