diff options
Diffstat (limited to 'templates/drupal.sh.erb')
-rw-r--r-- | templates/drupal.sh.erb | 137 |
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 |