Last active
June 24, 2024 19:58
-
-
Save x86demon/e5d09cd01efca764a189fdbfb8a88662 to your computer and use it in GitHub Desktop.
Oro Reinstall script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
currentDir=${PWD##*/} | |
repoDir=$(basename $(dirname $(dirname $(readlink -f .)))) | |
APP_CONSOLE="bin/console" | |
CONFIG_DIR="config" | |
CACHE_DIR="var/cache" | |
APP_NAME="ORO" | |
ENV=$1 | |
if [[ ! -f ${APP_CONSOLE} ]] | |
then | |
echo "Please, run in application folder" | |
exit | |
fi | |
CURRENT_GIT_BRANCH=$(git branch --show-current) | |
COMPOSER_BIN="composer" | |
XDEBUG_INI=$(php --ini | egrep -o '\/[A-Za-z0-9|\/|\.|-]+/xdebug.ini') | |
XDEBUG_INI_BAK="${XDEBUG_INI}.bak" | |
rm .php8* | |
if [[ -f .php-version ]] | |
then | |
PHP_VERSION=$(<.php-version) | |
touch ".php${PHP_VERSION}" | |
fi | |
IS_MONOLITIC=1 | |
APP_HOST=$currentDir.$repoDir.loc | |
if [[ ${currentDir} == *".local"* ]] | |
then | |
APP_HOST=$currentDir | |
IS_MONOLITIC=0 | |
fi | |
ADDITIONAL_ARGS="--language=en --formatting-code=en_US" | |
if [[ $3 ]] | |
then | |
ADDITIONAL_ARGS="${ADDITIONAL_ARGS} --skip-assets --skip-translations" | |
fi | |
PARAMETERS_FILE="./${CONFIG_DIR}/parameters.yml" | |
if [[ ${ENV} == "test" ]] | |
then | |
PARAMETERS_FILE="./${CONFIG_DIR}/parameters_test.yml" | |
fi | |
function parse_yaml { | |
local prefix=$2 | |
local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034') | |
sed -ne "s|^\($s\):|\1|" \ | |
-e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \ | |
-e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | | |
awk -F$fs '{ | |
indent = length($1)/2; | |
vname[indent] = $2; | |
for (i in vname) {if (i > indent) {delete vname[i]}} | |
if (length($3) > 0) { | |
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")} | |
printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3); | |
} | |
}' | |
} | |
function load_config { | |
local env_file='.env-app.local' | |
if [[ ${ENV} == "test" ]] | |
then | |
env_file='.env-app.test.local' | |
fi | |
if [[ -f ".env-app" ]] | |
then | |
mv ${PARAMETERS_FILE} ${PARAMETERS_FILE}.bak | |
cp ${PARAMETERS_FILE}.dist ${PARAMETERS_FILE} | |
source ${env_file} | |
# Based on https://stackoverflow.com/questions/6174220/parse-url-in-shell-script | |
local proto="`echo ${ORO_DB_URL} | grep '://' | sed -e's,^\(.*://\).*,\1,g'`" | |
local url=`echo ${ORO_DB_URL} | sed -e s,$proto,,g` | |
local userpass="`echo $url | grep '@' | cut -d@ -f1`" | |
local pass=`echo $userpass | grep ':' | cut -d: -f2` | |
if [ -n "$pass" ]; then | |
local user=`echo $userpass | grep ':' | cut -d: -f1` | |
else | |
local user=$userpass | |
fi | |
# extract the host -- updated | |
local hostport=`echo $url | sed -e s,$userpass@,,g | cut -d/ -f1` | |
local port=`echo $hostport | grep ':' | cut -d: -f2` | |
if [ -n "$port" ]; then | |
local host=`echo $hostport | grep ':' | cut -d: -f1` | |
else | |
local host=$hostport | |
fi | |
# extract the path (if any) | |
local pathquery="`echo $url | grep '/' | cut -d/ -f2-`" | |
local query=`echo $pathquery | grep '?' | cut -d? -f2` | |
if [ -n "$query" ]; then | |
local path=`echo $pathquery | grep '?' | cut -d? -f1` | |
else | |
local path=pathquery | |
fi | |
if [[ ${proto} == "postgres://" ]] | |
then | |
DB_DRIVER="pdo_pgsql" | |
fi | |
DB_USER=${user} | |
DB_PASS=${pass} | |
DB_NAME=${path} | |
DB_HOST=${host} | |
DB_PORT=${port} | |
else | |
if [[ -f ${PARAMETERS_FILE}.bak ]] | |
then | |
mv ${PARAMETERS_FILE}.bak ${PARAMETERS_FILE} | |
fi | |
eval $(parse_yaml ${PARAMETERS_FILE} "CONF_") | |
DB_DRIVER=${CONF_parameters__database_driver} | |
DB_HOST=${CONF_parameters__database_host} | |
DB_PORT=${CONF_parameters__database_port} | |
DB_NAME=${CONF_parameters__database_name} | |
DB_USER=${CONF_parameters__database_user} | |
DB_PASS=${CONF_parameters__database_password} | |
fi | |
if [[ ${DB_PORT} != 'null' && 'X'${DB_HOST} != 'X' ]] | |
then | |
DB_HOST="-h ${DB_HOST}" | |
else | |
DB_HOST='-h localhost' | |
fi | |
if [[ ${DB_PORT} != 'null' && 'X'${DB_PORT} != 'X' ]] | |
then | |
DB_PORT="-p ${DB_PORT}" | |
else | |
DB_PORT='' | |
fi | |
} | |
sudo rm -rf var/sessions | |
sudo rm var/logs/*.log | |
sudo chown $USER:nginx -R `pwd`;sudo chmod g+rwX -R `pwd` | |
sudo rm -rf ${CACHE_DIR}/prod | |
if [[ -f $XDEBUG_INI ]] | |
then | |
echo "Disabling XDebug extension" | |
sudo mv $XDEBUG_INI $XDEBUG_INI_BAK | |
fi | |
COMPOSER_FILE=composer | |
if [[ ${IS_MONOLITIC} -eq 1 && -f dev.json ]] | |
then | |
COMPOSER_FILE=dev | |
fi | |
if [ -d "vendor" ] && md5sum --status -c ${COMPOSER_FILE}.lock.md5 >/dev/null 2>&1; then | |
echo "Composer dependencies are fresh" | |
else | |
if [[ ${IS_MONOLITIC} -eq 1 ]] | |
then | |
echo "Installing composer dependencies" | |
rm -rf ./vendor/ | |
ORO_ENV=dev COMPOSER=${COMPOSER_FILE}.json ${COMPOSER_BIN} install -o --ignore-platform-reqs --ignore-platform-req=ext-mongodb | |
fi | |
md5sum ${COMPOSER_FILE}.lock > ${COMPOSER_FILE}.lock.md5 | |
fi | |
if [[ ${ENV} == "composer" ]] | |
then | |
exit | |
fi | |
load_config | |
echo "Recreating DB ${DB_DRIVER} ${DB_NAME}" | |
if [[ ${DB_DRIVER} == "pdo_pgsql" ]] | |
then | |
echo "Creating PostgreSQL database ${DB_NAME}" | |
echo "Drop DB connections" | |
PGPASSWORD=${DB_PASS} psql -U ${DB_USER} ${DB_HOST} ${DB_PORT} -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '${DB_NAME}' AND pid <> pg_backend_pid();" | |
echo "Drop DB" | |
PGPASSWORD=${DB_PASS} dropdb -U ${DB_USER} ${DB_HOST} ${DB_PORT} ${DB_NAME} | |
echo "Create DB" | |
PGPASSWORD=${DB_PASS} createdb -U ${DB_USER} ${DB_HOST} ${DB_PORT} ${DB_NAME} | |
echo "Add extension" | |
PGPASSWORD=${DB_PASS} psql -U ${DB_USER} ${DB_HOST} ${DB_PORT} -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp";' -d ${DB_NAME}; | |
else | |
echo "Creating MySQL database ${DB_NAME}" | |
mysqladmin --user=${DB_USER} --password=${DB_PASS} --force drop ${DB_NAME} | |
mysqladmin --user=${DB_USER} --password=${DB_PASS} --force create ${DB_NAME} | |
fi | |
echo "Dropping caches" | |
if [[ ${ENV} == "test" ]] | |
then | |
rm -rf ${CACHE_DIR}/test | |
echo "Reinstalling TEST" | |
sed -i "s/installed"\:".*/installed"\:" ~/g" ${CONFIG_DIR}/parameters_test.yml | |
$APP_CONSOLE oro:install -v --env=test --timeout=9999999 | |
else | |
rm -rf ${CACHE_DIR}/dev | |
echo "Reinstalling APP for http://$APP_HOST" | |
sed -i "s/installed"\:".*/installed"\:" ~/g" ${CONFIG_DIR}/parameters.yml | |
echo $APP_CONSOLE oro:install --skip-download-translations --env=prod -vvv --organization-name="$APP_NAME" --user-name=admin [email protected] --user-firstname=John --user-lastname=Doe --user-password=admin --application-url="http://$APP_HOST" --sample-data=$2 --timeout=999999 --drop-database --language=en --formatting-code=en_US ${ADDITIONAL_ARGS} | |
$APP_CONSOLE oro:install --env=prod --skip-download-translations -vvv --organization-name="$APP_NAME" --user-name=admin [email protected] --user-firstname=John --user-lastname=Doe --user-password=admin --application-url="http://$APP_HOST" --sample-data=$2 --timeout=999999 --drop-database ${ADDITIONAL_ARGS} | |
fi | |
sudo chown $USER:nginx -R `pwd`;sudo chmod g+rwX -R `pwd` | |
if [[ "`ping -c 1 ${APP_HOST}`" ]] | |
then | |
echo "Host is configured correctly" | |
else | |
echo "Adding ${APP_HOST} to hosts" | |
sudo -- sh -c -e "echo '127.0.0.1 ${APP_HOST}' >> /etc/hosts"; | |
fi | |
if [[ -f $XDEBUG_INI_BAK ]] | |
then | |
echo "Reverting XDebug extension" | |
sudo mv $XDEBUG_INI_BAK $XDEBUG_INI | |
fi | |
rm var/log/*.log | |
echo "Installed application http://${APP_HOST}/index_dev.php" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
HowTo
Script should be executed from application folder where app/console is accessible
Usage
Reinstall dev env with sample data
oro_reinstall dev y
Reinstall dev env without sample data
oro_reinstall dev n
Reinstall test env
oro_reinstall test
Supported directory structures to get host name update automatically:
/var/www/project/oro-mono/<project_dir>
for <app_name>.<project_dir>.loc hosts (monolithic repo)/var/www/project/oro-dev/<project_dir>.local
for <project_dir>.local hosts (service projects, public repo)