From c502bcefbb18d4fc0e12e2e05b14bb4aa23ef5df Mon Sep 17 00:00:00 2001 From: Henrique Kieckbusch Date: Sun, 6 Nov 2022 22:46:18 -0300 Subject: [PATCH 1/2] Magento cloud environment creates env.php and detects multistore creating stores.php as well --- environments/magento-cloud/init.env.cmd | 164 +++++++++++++++++- .../magento-cloud/magento2-config.env | 97 +++++++++++ 2 files changed, 256 insertions(+), 5 deletions(-) create mode 100644 environments/magento-cloud/magento2-config.env diff --git a/environments/magento-cloud/init.env.cmd b/environments/magento-cloud/init.env.cmd index 7e73a6c1..b17a1835 100644 --- a/environments/magento-cloud/init.env.cmd +++ b/environments/magento-cloud/init.env.cmd @@ -1,5 +1,9 @@ -function getProjectAndEnvironment { +function :: { + echo + echo "==> [$(date +%H:%M:%S)] $@" +} +function getProjectAndEnvironment { if [[ -f ".magento/local/project.yaml" ]] && [[ -f ".git/HEAD" ]]; then PROJECT=$(cat .magento/local/project.yaml | grep id | sed "s/id: //") ENVIRONMENT=$(cat .git/HEAD | sed "s/ref: refs\/heads\///") @@ -84,7 +88,8 @@ sed "s/%ENVIRONMENT%/${ENVIRONMENT}/g" > .env function getEnvironmentVariables { - ENV_DATA=$(magento-cloud var --columns=Name --level=environment --no-header --format=csv --project=$PROJECT --environment=$ENVIRONMENT) + ENV_DATA=$(magento-cloud var --columns=Name --level=environment \ + --no-header --format=csv --project=$PROJECT --environment=$ENVIRONMENT) ENV_DATA=$(echo "$ENV_DATA" | sort -u) mkdir -p .warden echo "version: '3.5' @@ -96,7 +101,8 @@ services: do if [[ $LINE =~ ^env:([a-zA-Z0-9_]+) ]] then - VAR=$(magento-cloud vget --property=value --level=environment --project=$PROJECT --environment=$ENVIRONMENT $LINE) + VAR=$(magento-cloud vget --property=value \ + --level=environment --project=$PROJECT --environment=$ENVIRONMENT $LINE) LINE=$(echo $LINE | sed 's/env://g') echo " $LINE: '$VAR'" >> .warden/warden-env.yml fi @@ -104,13 +110,161 @@ services: } while true; do - read -p $'\033[32mDo you want to import the Environment variables from '"$ENVIRONMENT"'? y/n\033[0m ' resp + read -p $'\033[32mDo you want to import the Environment variables from '"$ENVIRONMENT"'? y/n'$'\033[0m ' resp case $resp in [Yy]*) - echo "Saving enviroment variables in .warden/warden-env.yml"; + :: Saving enviroment variables in .warden/warden-env.yml getEnvironmentVariables break;; [Nn]*) exit;; *) echo "Please answer (y)es or (n)o";; esac done + +function backupEnvPhpFile { + if [[ -f "app/etc/env.php" ]]; then + cp app/etc/env.php app/etc/env.php.bak + :: Backup of app/etc/env.php => app/etc/env.php.bak + fi +} + +function detectMultiStore { + config=$(cat ${WARDEN_DIR}/environments/magento-cloud/magento2-config.env) + config+=" +system/default/web/unsecure/base_url=https://app."${WARDEN_ENV_NAME}".test/ +system/default/web/secure/base_url=https://app."${WARDEN_ENV_NAME}".test/ +system/default/web/secure/offloader_header=X-Forwarded-Proto +system/default/web/secure/use_in_frontend=1 +system/default/web/secure/use_in_adminhtml=1 +" + SQL=$(magento-cloud sql --project=$PROJECT --environment=$ENVIRONMENT --relationship=database \ + -q "SELECT GROUP_CONCAT(code, '@') FROM store_website WHERE is_default = 0 ORDER BY website_id ASC;" \ + | grep admin | sed 's/,//g' | sed 's/ //g' | sed 's/|//g' | sed 's/@/ /g' | sed 's/\r//g') + + storesPhp="" + + for website in $SQL; do + if [ "$website" != "admin" ]; then + config+=" +system/websites/${website}/web/unsecure/base_url=https://${website/_/-}."${WARDEN_ENV_NAME}".test/ +system/websites/${website}/web/secure/base_url=https://${website/_/-}."${WARDEN_ENV_NAME}".test/ +" + storesPhp+=" case '${website/_/-}.${WARDEN_ENV_NAME}.test': + \$runCode = '${website}'; + \$runType = 'website'; + break; +" + fi + done +} + +function createEnvPhpFile { + mkdir -p app/etc + ENV_PHP=$(magento-cloud ssh --project=$PROJECT --environment=$ENVIRONMENT php <\s\$/"], [NULL, ']\$1', ' => ['], \$array); + echo join(PHP_EOL, array_filter(["["] + \$array)); +?> +CODE +); + echo " app/etc/env.php + + :: Created app/etc/env.php +} + +while true; do + read -p $'\033[32mDo you want me to import the env.php from '"$ENVIRONMENT"' and update it for Den? y/n'$'\033[0m ' resp + case $resp in + [Yy]*) + backupEnvPhpFile + detectMultiStore + createEnvPhpFile + break;; + [Nn]*) exit;; + *) echo "Please answer (y)es or (n)o";; + esac +done + +function createStoresPhpFile { + mkdir -p app/etc + if [[ -f "app/etc/stores.php" ]]; then + cp app/etc/stores.php app/etc/stores.php.bak + :: Backup of app/etc/stores.php => app/etc/stores.php.bak + fi + + echo " app/etc/stores.php + + :: Created app/etc/stores.php for multi-store. You still need to add it to your Composer.json [autoload], please read the documentation \(https://swiftotter.github.io/den/configuration/multipledomains.html\). +} + +if [ storesPhp != "" ]; then + while true; do + read -p $'\033[32mYour environment is a multi-store, do you want me to create app/etc/stores.php settings? y/n'$'\033[0m ' resp + case $resp in + [Yy]*) + createStoresPhpFile + break;; + [Nn]*) exit;; + *) echo "Please answer (y)es or (n)o";; + esac + done +fi diff --git a/environments/magento-cloud/magento2-config.env b/environments/magento-cloud/magento2-config.env new file mode 100644 index 00000000..62a31a90 --- /dev/null +++ b/environments/magento-cloud/magento2-config.env @@ -0,0 +1,97 @@ +MAGE_MODE=developer +backend/frontName=backend +cache/frontend/default/frontend_options/write_control=false +cache/frontend/page_cache/frontend_options/write_control=false +system/default/design/head/demonotice/enable=1 +system/default/web/secure/offloader_header=X-Forwarded-Proto +system/default/web/secure/use_in_frontend=1 +system/default/web/secure/use_in_adminhtml=1 +system/default/web/seo/use_rewrites=1 +system/default/web/url/use_store=0 +system/default/web/url/redirect_to_base=1 +system/default/web/cookie/cookie_path=null +system/default/web/cookie/cookie_httponly=1 +system/default/web/cookie/cookie_restriction=0 +system/default/web/session/use_remote_addr=0 +system/default/web/session/use_http_via=0 +system/default/web/session/use_http_x_forwarded_for=0 +system/default/web/session/use_http_user_agent=0 +system/default/web/session/use_frontend_sid=0 +system/default/web/browser_capabilities/cookies=1 +system/default/web/browser_capabilities/javascript=1 +system/default/web/browser_capabilities/local_storage=1 +system/default/catalog/frontend/list_allow_all=0 +system/default/catalog/frontend/flat_catalog_category=0 +system/default/catalog/frontend/flat_catalog_product=0 +system/default/catalog/search/engine=elasticsearch7 +system/default/catalog/search/enable_eav_indexer=1 +system/default/catalog/search/elasticsearch7_server_hostname=elasticsearch +system/default/catalog/search/elasticsearch7_server_port=9200 +system/default/catalog/search/elasticsearch7_index_prefix=magento2 +system/default/catalog/search/elasticsearch7_enable_auth=0 +system/default/catalog/search/elasticsearch7_server_timeout=15 +system/default/system/full_page_cache/caching_application=2 +system/default/system/full_page_cache/ttl=604800 +system/default/dev/front_end_development_workflow/type=server_side_compilation +system/default/dev/template/allow_symlink=0 +system/default/dev/template/minify_html=0 +system/default/dev/js/merge_files=0 +system/default/dev/js/enable_js_bundling=0 +system/default/dev/js/minify_files=0 +system/default/dev/js/translate_strategy=dictionary +system/default/dev/js/session_storage_logging=0 +system/default/dev/js/session_storage_key=collected_errors +system/default/dev/css/merge_css_files=0 +system/default/dev/css/minify_files=0 +system/default/dev/static/sign=0 +system/default/admin/url/use_custom=0 +system/default/admin/url/use_custom_path=0 +system/default/admin/security/use_form_key=1 +system/default/admin/security/use_case_sensitive_login=0 +system/default/admin/security/session_lifetime=7200 +system/default/admin/security/lockout_failures=6 +system/default/admin/security/lockout_threshold=30 +system/default/admin/security/password_lifetime=90 +system/default/admin/security/password_is_forced=1 + +db/connection/indexer/host=db +db/connection/indexer/dbname=magento +db/connection/indexer/username=magento +db/connection/indexer/password=magento +db/connection/indexer/model=mysql4 +db/connection/indexer/engine=innodb +db/connection/indexer/initStatements=SET NAMES utf8; +db/connection/indexer/active=1 +db/connection/indexer/persistent=null + +db/connection/default/host=db +db/connection/default/dbname=magento +db/connection/default/username=magento +db/connection/default/password=magento +db/connection/default/model=mysql4 +db/connection/default/engine=innodb +db/connection/default/initStatements=SET NAMES utf8; +db/connection/default/active=1 +db/connection/default/driver_options/1014=false + +db/slave_connection=null + +session/save=redis +session/redis/host=redis +session/redis/port=6379 +session/redis/password= + +cache/frontend/default/backend=Magento\\Framework\\Cache\\Backend\\Redis +cache/frontend/default/backend_options/server=redis +cache/frontend/default/backend_options/port=6379 +cache/frontend/default/backend_options/password= +cache/frontend/default/backend_options/remote_backend_options=null + +cache/frontend/page_cache/backend=Magento\\Framework\\Cache\\Backend\\Redis +cache/frontend/page_cache/backend_options/server=redis +cache/frontend/page_cache/backend_options/port=6379 +cache/frontend/page_cache/backend_options/password= + +lock/provider=db +lock/config/path=null +lock/config/prefix=null From cf5399a686ea195636520a506ed172ea50aa4f22 Mon Sep 17 00:00:00 2001 From: Henrique Kieckbusch Date: Sun, 6 Nov 2022 23:08:34 -0300 Subject: [PATCH 2/2] Magento cloud environment creates env.php and detects multistore creating stores.php as well --- environments/magento-cloud/init.env.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environments/magento-cloud/init.env.cmd b/environments/magento-cloud/init.env.cmd index b17a1835..b102333d 100644 --- a/environments/magento-cloud/init.env.cmd +++ b/environments/magento-cloud/init.env.cmd @@ -124,7 +124,7 @@ done function backupEnvPhpFile { if [[ -f "app/etc/env.php" ]]; then cp app/etc/env.php app/etc/env.php.bak - :: Backup of app/etc/env.php => app/etc/env.php.bak + :: "Backup of app/etc/env.php => app/etc/env.php.bak" fi } @@ -231,7 +231,7 @@ function createStoresPhpFile { mkdir -p app/etc if [[ -f "app/etc/stores.php" ]]; then cp app/etc/stores.php app/etc/stores.php.bak - :: Backup of app/etc/stores.php => app/etc/stores.php.bak + :: "Backup of app/etc/stores.php => app/etc/stores.php.bak" fi echo "