Skip to content

Instantly share code, notes, and snippets.

@ajardin
Created June 28, 2016 12:23
Show Gist options
  • Save ajardin/82dd461605d38962f71b1a912c64080f to your computer and use it in GitHub Desktop.
Save ajardin/82dd461605d38962f71b1a912c64080f to your computer and use it in GitHub Desktop.
A bash script that initializes/updates a Proximis project.
#!/bin/bash
BEHAVIOR="${1}"
if [[ "${BEHAVIOR}" != "bootstrap" && "${BEHAVIOR}" != "update" && "${BEHAVIOR}" != "reindex" ]]; then
echo "$(tput setaf 1)Please specify a valid behavior: $(tput bold && tput setaf 1)bootstrap$(tput sgr0 && tput setaf 1) or $(tput bold && tput setaf 1)update$(tput sgr0 && tput setaf 1) or $(tput bold && tput setaf 1)reindex$(tput sgr0 && tput setaf 1).$(tput sgr0)"
exit 1
fi
if [[ "${2}" =~ "/" ]]; then
GROUP_NAME=$(echo "${2}" | cut -f1 -d/)
PROJECT_NAME=$(echo "${2}" | cut -f2 -d/)
else
echo "$(tput setaf 1)Please specify a valid $(tput bold && tput setaf 1)project name$(tput sgr0 && tput setaf 1).$(tput sgr0)"
exit 1
fi
if [ -z "${3}" ]; then
echo "$(tput setaf 1)Please specify a valid $(tput bold && tput setaf 1)remote group name$(tput sgr0 && tput setaf 1).$(tput sgr0)"
exit 1
else
REMOTE_GROUP_NAME="${3}"
fi
SCRIPT_DIRECTORY="$(cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd)"
PROJECT_DIRECTORY="${SCRIPT_DIRECTORY}/${PROJECT_NAME}"
if [[ "${BEHAVIOR}" == "bootstrap" ]]; then
echo "$(tput setaf 5)Bootstrap started...$(tput sgr0)"
rm -rf "${PROJECT_DIRECTORY}" && \
git clone ssh://git@gitlab.change-commerce.com:10022/"${GROUP_NAME}"/"${PROJECT_NAME}".git "${PROJECT_DIRECTORY}"
GIT_DIR="${PROJECT_DIRECTORY}/.git"
GIT_WORK_TREE="${PROJECT_DIRECTORY}"
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" checkout -b dev origin/dev && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" remote add upstream ssh://git@gitlab.change-commerce.com:10022/"${REMOTE_GROUP_NAME}"/"${PROJECT_NAME}".git && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" fetch upstream
curl -o "${PROJECT_DIRECTORY}/App/Config/project.local.json" https://gist.githubusercontent.com/ajardin/733452945a09fa4d2e748d62f3ee9811/raw/935878b30dd2fa5de388f064b1060770b3cdfea3/project.local.json && \
sed -i "" -e "s|### DATABASE ###|${PROJECT_NAME}|g" "${PROJECT_DIRECTORY}/App/Config/project.local.json"
mkdir -p "${PROJECT_DIRECTORY}/bin" && \
curl -o "${PROJECT_DIRECTORY}/bin/change.phar" https://gitlab.change-commerce.com/public-packages/change-new-project/raw/master/bin/change.phar
echo "$(tput setaf 5)Bootstrap completed successfully.$(tput sgr0)"
fi
if [[ ! -d "${PROJECT_DIRECTORY}" ]]; then
echo "$(tput setaf 1)The $(tput bold)$(tput setaf 1)project directory$(tput sgr0)$(tput setaf 1) does not exist.$(tput sgr0)"
exit 1
fi
if [[ "${BEHAVIOR}" == "bootstrap" || "${BEHAVIOR}" == "update" ]]; then
echo "$(tput setaf 5)Update started...$(tput sgr0)"
GIT_DIR="${PROJECT_DIRECTORY}/.git"
GIT_WORK_TREE="${PROJECT_DIRECTORY}"
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" checkout -- . && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" fetch upstream && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" rebase upstream/dev && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" push origin dev
PLUGINS="$(find "${PROJECT_DIRECTORY}"/Plugins/*/${REMOTE_GROUP_NAME^} -type d -depth 1 2> /dev/null)"
if [[ ! -z "${PLUGINS}" ]]; then
for PLUGIN in ${PLUGINS}; do
GIT_DIR="${PLUGIN}/.git"
GIT_WORK_TREE="${PLUGIN}"
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" fetch upstream && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" rebase upstream/master && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" push origin master
done
fi
rm -rf Plugins/* && \
composer self-update && \
composer update --working-dir="${PROJECT_DIRECTORY}"
PLUGINS="$(find "${PROJECT_DIRECTORY}"/Plugins/*/${REMOTE_GROUP_NAME^} -type d -depth 1 2> /dev/null)"
if [[ ! -z "${PLUGINS}" ]]; then
for PLUGIN in ${PLUGINS}; do
FORK_NAME=""
case "${PLUGIN}" in
*Modules* )
FORK_NAME="$(echo "module-$(basename "${PLUGIN}")" | tr '[:upper:]' '[:lower:]')"
;;
*Themes* )
FORK_NAME="$(echo "theme-$(basename "${PLUGIN}")" | tr '[:upper:]' '[:lower:]' | sed 's/-theme/-/g')"
;;
esac
if [[ -z "${FORK_NAME}" ]]; then
echo "$(tput setaf 1)Unknown plugin type: $(tput bold)$(tput setaf 1)${PLUGIN}$(tput sgr0)$(tput setaf 1).$(tput sgr0)"
exit 1
fi
GIT_DIR="${PLUGIN}/.git"
GIT_WORK_TREE="${PLUGIN}"
rm -rf "${PLUGIN}" && \
git clone ssh://git@gitlab.change-commerce.com:10022/"${GROUP_NAME}"/"${FORK_NAME}".git "${PLUGIN}" && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" remote add upstream ssh://git@gitlab.change-commerce.com:10022/"${REMOTE_GROUP_NAME}"/"${FORK_NAME}".git && \
git --git-dir="${GIT_DIR}" --work-tree="${GIT_WORK_TREE}" fetch upstream
done
fi
CONTAINER_PHP="$(docker-compose -f ~/docker/proximis/docker-compose.yml ps -q php)" && \
docker exec "${CONTAINER_PHP}" sh -c "cd /var/www/html/${PROJECT_NAME} && mkdir -p www && php bin/change.phar change:set-document-root www" && \
docker exec "${CONTAINER_PHP}" sh -c "cd /var/www/html/${PROJECT_NAME} && export CHANGE_INSTANCE_CONFIG_FILENAME=project.local.json && bash update.sh"
echo "$(tput setaf 5)Update completed successfully.$(tput sgr0)"
fi
#if [[ "${BEHAVIOR}" == "bootstrap" || "${BEHAVIOR}" == "update" || "${BEHAVIOR}" == "reindex" ]]; then
#echo "$(tput setaf 5)Reindexation started...$(tput sgr0)"
#echo "$(tput setaf 5)Reindexation completed successfully.$(tput sgr0)"
#fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment