Skip to content

Instantly share code, notes, and snippets.

@billerickson
Last active July 28, 2022 07:06
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save billerickson/f7006c311b15a06639773198a8c984b7 to your computer and use it in GitHub Desktop.
Save billerickson/f7006c311b15a06639773198a8c984b7 to your computer and use it in GitHub Desktop.
#!/bin/bash
## Functions ###################################################################
# Currently available options
function options {
echo ""
echo " Available options:"
echo " create"
echo " delete"
echo " backup"
echo " push"
echo " pull"
echo " When migrating, 1. Push to WPE"
echo " When migrating, 2. Pull from WPE"
echo ""
exit
}
# Add new site
function create_site {
# check to see if directory name was give, else ask
if [ -z "$OPTION" ]; then
# read project directory name
echo -n "Site directory name? ";
read PROJECTDIR
else
PROJECTDIR=$OPTION
fi
# strip spaces
PROJECTDIR=${PROJECTDIR//[[:space:]]}
# check to make sure directory was given
if [ -z "$PROJECTDIR" ]; then
echo -e "${TEXTRED}Error:${TEXTRESET} directory name can't be blank."
exit
fi
# check to make sure it doesn't exist already
if [ -d "$PROJECTDIR" ] ; then
echo -e "${TEXTRED}Error:${TEXTRESET} directory $PROJECTDIR already exists."
exit
fi
# create the directory
echo -n "Creating project directory $PROJECTDIR ..."
cd ~/Sites/wp.dev/base/wp-content/themes/ea-genesis-child
git pull origin master
cd ../ea-starter
git pull origin master
cd ../../plugins/core-functionality
git pull origin master
wp plugin update --all
wp core update
cd ../../../../
cp -rpf base $PROJECTDIR
cd $PROJECTDIR
rm -rf wp-content/themes/ea-genesis-child/.git
rm -rf wp-content/themes/ea-starter/.git
rm -rf wp-content/plugins/core-functionality/.git
echo -e " ${TEXTGREEN}Done${TEXTRESET}"
# create database
echo -n "Creating MySQL database ..."
/Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot -e "create database dev_$PROJECTDIR";
echo -e " ${TEXTGREEN}Done${TEXTRESET}"
# Create wp-config - Enable WP_DEBUG and WP_DEBUG_LOG
echo -n "Creating wp-config.php ..."
wp config set DB_NAME dev_$PROJECTDIR --type=constant
wp config set WP_DEBUG true --type=constant
wp config set BE_PUSH_TO production --type=constant
wp config set BE_WPE_INSTALL $PROJECTDIR --type=constant
wp config set BE_WPE_USER demo --type=constant
wp config set BE_WPE_PASSWORD 1234 --type=constant
echo -e " ${TEXTGREEN}Done${TEXTRESET}"
# Create the WP database tables
echo -n "Installing WordPress ..."
wp core install --url=http://local/$PROJECTDIR/ --title=WordPress --admin_user=billerickson --admin_email=bill.erickson@gmail.com
wp theme activate genesis
echo -e " ${TEXTGREEN}Done${TEXTRESET}"
# Create users
wp user create wpengine bitbucket@wpengine.com --role=administrator --quiet --porcelain
# cleanup, confirm, and exit
cd ..
echo ""
echo -e "${TEXTGREEN}Success:${TEXTRESET} site $PROJECTDIR created."
echo ""
exit
}
#Backup site
function backup_site {
# check to see if directory name was give, else ask
if [ -z "$OPTION" ]; then
# read project directory name
echo -n "Site directory name? ";
read PROJECTDIR
else
PROJECTDIR=$OPTION
fi
# check to make sure directory was given
if [ -z "$PROJECTDIR" ]; then
echo -e "${TEXTRED}Error:${TEXTRESET} directory name can't be blank."
exit
fi
# check to make sure it exists
if [ ! -d "$PROJECTDIR" ]; then
echo -e "${TEXTRED}Error:${TEXTRESET} directory $PROJECTDIR doesn't exists."
exit
fi
if [ -z "$OPTION2" ]; then
# read project directory name
echo -n "Full backup or DB? (full/db) ";
read BACKUPTYPE
else
BACKUPTYPE=$OPTION2
fi
if [ $BACKUPTYPE == "full" ]; then
echo -n "Creating full backup for site $PROJECTDIR ..."
cd $PROJECTDIR;
# Create backup placeholder directory
mkdir ${PROJECTDIR}-backup
# Copy wp-content to backup directory
cp -r wp-content ${PROJECTDIR}-backup
# Dump DB
SQLNAME=`sed -n "s/.*\(['\"]\)DB_NAME\1\s*, \s*\(['\"]\)\(.*\)\2.*/\3/p" wp-config.php`
mysqldump $SQLNAME > $PROJECTDIR-db-$CURRENTDATE.sql
mv $PROJECTDIR-db-$CURRENTDATE.sql ${PROJECTDIR}-backup
# Create backup file
tar -czf $PROJECTDIR-$CURRENTDATE.tar.gz ${PROJECTDIR}-backup
# Delete backup placeholder directory
rm -rf ${PROJECTDIR}-backup
# cleanup, confirm, and exit
cd ..
echo ""
echo -e "${TEXTGREEN}Success:${TEXTRESET} full backup for $PROJECTDIR created."
echo ""
exit
elif [ $BACKUPTYPE == "db" ]; then
echo -n "Creating database backup for site $PROJECTDIR ..."
cd $PROJECTDIR;
# Dump DB
SQLNAME=`sed -n "s/.*\(['\"]\)DB_NAME\1\s*, \s*\(['\"]\)\(.*\)\2.*/\3/p" wp-config.php`
mysqldump $SQLNAME > $PROJECTDIR-db-$CURRENTDATE.sql
# cleanup, confirm, and exit
cd ..
echo ""
echo -e "${TEXTGREEN}Success:${TEXTRESET} database backup for $PROJECTDIR created."
echo ""
exit
else
echo -e "${TEXTRED}Error:${TEXTRESET} incorrect backup. Select full or db."
exit
fi
}
# delete site
function delete_site {
# check to see if directory name was give, else ask
if [ -z "$OPTION" ]; then
# read project directory name
echo -n "Site directory name? ";
read PROJECTDIR
else
PROJECTDIR=$OPTION
fi
# check to make sure directory was given
if [ -z "$PROJECTDIR" ]; then
echo -e "${TEXTRED}Error:${TEXTRESET} directory name can't be blank."
exit
fi
# check to make sure it exists
if [ ! -d "$PROJECTDIR" ]; then
echo -e "${TEXTRED}Error:${TEXTRESET} directory $PROJECTDIR doesn't exists."
exit
fi
# remove directory
echo -n "Removing project directory $PROJECTDIR ..."
rm -rf $PROJECTDIR
echo -e " ${TEXTGREEN}Done${TEXTRESET}"
# remove database
echo -n "Deleting MySQL database ..."
/Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot -e "drop database dev_$PROJECTDIR";
echo -e " ${TEXTGREEN}Done${TEXTRESET}"
exit
}
# push copy to WPE
function push {
# where to push, default is production
BRANCH=`sed -n "s/.*\(['\"]\)BE_PUSH_TO\1\s*, \s*\(['\"]\)\(.*\)\2.*/\3/p" wp-config.php`
if [ -z "$BRANCH" ]; then
BRANCH="production"
fi
echo -e "Updating GitHub code"
git push origin master
echo -e "Updating WPE code"
git push $BRANCH master
echo -e "Updating WPE database and media"
wp migratedb profile 1
exit;
}
# pull copy from WPE
function pull {
echo -e "Pulling code from GitHub"
git pull origin master
echo -e "Pulling database and media from WPE"
wp migratedb profile 2
echo -e "Checking for missing plugins"
wp plugin install-missing
exit;
}
## Start the engine ############################################################
# Colors
TEXTRED="\033[31m"
TEXTGREEN="\033[32m"
TEXTYELLOW="\033[33m"
TEXTRESET="\033[0m"
CURRENTDATE=$(date +%d-%m-%Y)
# If an argument are provided then show help
if [ $# -eq 0 ]; then
options
fi
# Send arguments to vars
COMMAND=$1
OPTION=$2
OPTION2=$3
# Read first argument and run appropriate functions
case "$1" in
createsite|create|add)
create_site
;;
backupsite|backup)
backup_site
;;
deletesite|delete)
delete_site
;;
pull)
pull
;;
push)
push
;;
info-migrate)
info-migrate
;;
*)
echo -e "${TEXTYELLOW}Whoops, didn't recognize the option provided.${TEXTRESET}"
options
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment