aboutsummaryrefslogtreecommitdiff
path: root/templates/drupal.sh.erb
diff options
context:
space:
mode:
Diffstat (limited to 'templates/drupal.sh.erb')
-rw-r--r--templates/drupal.sh.erb137
1 files changed, 137 insertions, 0 deletions
diff --git a/templates/drupal.sh.erb b/templates/drupal.sh.erb
new file mode 100644
index 0000000..ac44da5
--- /dev/null
+++ b/templates/drupal.sh.erb
@@ -0,0 +1,137 @@
+#!/bin/bash
+#
+# Drupal management script.
+#
+
+BASE="<%= $apache_www_folder %>"
+SERIES="5 6"
+
+# Get drupal major version
+function get_major {
+ echo $1 | sed -e 's/\(^.\).*/\1/'
+}
+
+# Deploy a fresh drupal tree
+function drupal_deploy {
+ if [ "$#" != "1" ]; then
+ echo "Usage: `basename $0` deploy <version>"
+ exit 1
+ fi
+
+ # Setup
+ new="$1"
+ cd $BASE
+
+ # Deploy a fresh drupal tree
+ wget http://ftp.drupal.org/files/projects/drupal-$new.tar.gz
+ tar zxvf drupal-$new.tar.gz && rm drupal-$new.tar.gz
+ chown -R root.root drupal-$new/
+ cd drupal-$new && rm -rf sites
+}
+
+# Update all drupal instances in the host
+function drupal_update {
+ for version in $SERIES; do
+ # Setup base and sites folders
+ base="$BASE/drupal-$version"
+ cd $base/sites
+ drupals="`ls -I default -I all`"
+
+ # Issue updates
+ for drupal in $drupals; do
+ # Ignore symlinks so sites are updated just once
+ if [ ! -h $drupal ]; then
+ echo "Processing $drupal..."
+ drush -l $drupal update
+ fi
+ done
+
+ # Fix permissions
+ chown -R root.root $base/sites/all/modules
+ chown -R root.root $base/sites/all/themes
+ done
+}
+
+# Upgrade a drupal instance using upstream source.
+function drupal_upgrade {
+ if [ "$#" != "2" ]; then
+ echo "Usage: `basename $0` upgrade <old_version> <new_version>"
+ exit 1
+ fi
+
+ # Setup
+ old="$1"
+ new="$2"
+ old_major="`get_major $old`"
+ new_major="`get_major $new`"
+ extra_folders=""
+
+ if [ "$old_major" != "$new_major" ]; then
+ echo "Major versions doesn't match"
+ exit 1
+ fi
+
+ # Set drupal series
+ if [ "$new_MAJOR" == "4" ]; then
+ # Get minor versions
+ new_minor="`echo $new | sed -e "s/^$new_major\.//"`"
+ old_minor="`echo $old | sed -e "s/^$old_major\.//"`"
+
+ if [ "$old_minor" != "$new_minor" ]; then
+ echo "Minor versions doesn't match"
+ exit 1
+ fi
+ drupal_series="$new_MAJOR.$MINOR"
+ else
+ drupal_series="$new_MAJOR"
+ fi
+
+ cd $BASE
+
+ # Deploy a fresh drupal tree
+ drupal_deploy $new
+
+ # Copy files
+ cp -Rp ../drupal-$old/{.htaccess,favicon.ico,files/,sites/} . &> /dev/null
+ for extra_folder in $extra_folders; do
+ if [ -d ../drupal-$old/$extra_folder ]; then
+ cp -Rp ../drupal-$old/$extra_folder .
+ fi
+ done
+
+ # Legacy stuff for Drupal 4.x.x
+ if [ "$new_MAJOR" == "4" ]; then
+ rsync -av ../drupal-$old/themes/ themes/
+ for module in `ls ../drupal-$old/modules`; do
+ if [ -d "../drupal-$old/modules/$module" ]; then
+ cp -Rp ../drupal-$old/modules/$module modules/
+ fi
+ done
+ fi
+
+ # Copy installation profiles for Drupal 5.x or newer
+ if [ "$new_MAJOR" != "4" ]; then
+ rsync -av --exclude=default ../drupal-$old/profiles/ profiles/
+ fi
+
+ # Change symlink to point to the new location
+ cd $BASE ; rm drupal-$drupal_series && ln -s drupal-$new drupal-$drupal_series
+
+ # Done
+ echo "Check procedure and remove drupal-$old once you make sure that everything is fine."
+}
+
+# Main procedure
+if [ -z "$1" ]; then
+ echo "Usage: `basename $0` <command> [arguments]"
+ exit 1
+elif [ "$1" == "deploy" ]; then
+ shift
+ drupal_deploy $*
+elif [ "$1" == "update" ]; then
+ shift
+ drupal_update $*
+elif [ "$1" == "upgrade" ]; then
+ shift
+ drupal_upgrade $*
+fi