diff --git a/.circleci/config.yml b/.circleci/config.yml
index 2a93ac48a7..5a3436933e 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -188,9 +188,11 @@ jobs:
command: docker compose exec -T cli vendor/bin/rector --dry-run || [ "${VORTEX_CI_RECTOR_IGNORE_FAILURE:-0}" -eq 1 ]
#;> TOOL_RECTOR
+ #;< TOOL_TWIG_CS_FIXER
- run:
name: Lint code with Twig CS Fixer
command: docker compose exec -T cli vendor/bin/twig-cs-fixer || [ "${VORTEX_CI_TWIG_CS_FIXER_IGNORE_FAILURE:-0}" -eq 1 ]
+ #;> TOOL_TWIG_CS_FIXER
#;< TOOL_BEHAT
- run:
diff --git a/.github/workflows/build-test-deploy.yml b/.github/workflows/build-test-deploy.yml
index 126cf3c085..979b06f420 100644
--- a/.github/workflows/build-test-deploy.yml
+++ b/.github/workflows/build-test-deploy.yml
@@ -181,9 +181,11 @@ jobs:
continue-on-error: ${{ vars.VORTEX_CI_RECTOR_IGNORE_FAILURE == '1' }}
#;> TOOL_RECTOR
+ #;< TOOL_TWIG_CS_FIXER
- name: Lint code with Twig CS Fixer
run: docker compose exec -T cli vendor/bin/twig-cs-fixer
continue-on-error: ${{ vars.VORTEX_CI_TWIG_CS_FIXER_IGNORE_FAILURE == '1' }}
+ #;> TOOL_TWIG_CS_FIXER
#;< TOOL_BEHAT
- name: Lint code with Gherkin Lint
diff --git a/.vortex/docs/static/img/installer.json b/.vortex/docs/static/img/installer.json
index b4a474ce6e..e4f7b45ded 100644
--- a/.vortex/docs/static/img/installer.json
+++ b/.vortex/docs/static/img/installer.json
@@ -1,217 +1,223 @@
-{"version":2,"width":80,"height":42,"timestamp":1783568390,"command":"/home/user/demo/installer.exp","title":"Vortex Installer Demo","env":{"SHELL":"/opt/homebrew/opt/bash/bin/bash"}}
-[0.567521, "o", "\r\r\n \u001b[36m──────────────────────────────────────────────────────────────────────────────\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m ██╗ ██╗ ██████╗ ██████╗ ████████╗ ███████╗ ██╗ ██╗\u001b[39m\r\r\n \u001b[36m ██║ ██║ ██╔═══██╗ ██╔══██╗ ╚══██╔══╝ ██╔════╝ ╚██╗██╔╝\u001b[39m\r\r\n \u001b[36m ██║ ██║ ██║ ██║ ██████╔╝ ██║ █████╗ ╚███╔╝\u001b[39m\r\r\n \u001b[36m ╚██╗ ██╔╝ ██║ ██║ ██╔══██╗ ██║ ██╔══╝ ██╔██╗\u001b[39m\r\r\n \u001b[36m ╚████╔╝ ╚██████╔╝ ██║ ██║ "]
-[0.567535, "o", " ██"]
-[0.567692, "o", "║ ███████╗ ██╔╝ ██╗\u001b[39m\r\r\n \u001b[36m ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m Drupal project template\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m by DrevOps\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m──────────────────────────────────────────────────────────────────────────────\u001b[39m\r\r\n \u001b[2m Installer version: development\u001b[22m\r\r\n\r\r\n"]
-[0.571343, "o", "\r\r\n \u001b[90m┌───────────────────────────────────────────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32mWelcome to the Vortex interactive installer\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32m───────────────────────────────────────────\u001b[39m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m This tool will guide you through installing the latest \u001b[4mdevelopment\u001b[0m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m version of Vortex into your project.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m "]
-[0.57135, "o", " "]
-[0.57151, "o", " \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m You will be asked a few questions to tailor the configuration to your\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m site.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m No changes will be made until you confirm everything at the end.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Press \u001b[33mCtrl+C\u001b[39m at any time to exit the installer.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Press \u001b[33mCtrl+U\u001b[39m at any time to go back to the previous step.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└────────────────────────────────────────────"]
-[0.571517, "o", "───"]
-[0.571585, "o", "────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
-[0.571976, "o", "\u001b[?25l"]
-[0.582366, "o", "\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mValidating repository and reference\u001b[39m\r\r\n"]
-[0.588213, "o", "\u001b[999D\u001b[2A\u001b[J\u001b[?25h"]
-[0.588602, "o", "\r\r\n \u001b[34m✦ Validating repository and reference\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mChecking repository \"/home/user/vortex\" and reference\u001b[22m\r\r\n \u001b[2m\"HEAD\"\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Repository and reference validated successfully\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n \r\r\n \u001b[2mPress any key to continue...\u001b[22m\r\r\n"]
-[3.606516, "o", "\r\r\n \u001b[46m\u001b[30m General information \u001b[39m\u001b[49m\r\r\n\r\r\n"]
-[3.636118, "o", "\u001b[?25l"]
-[3.642151, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
-[3.796314, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m\u001b[7mE\u001b[27m.g. My Site\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
-[5.296294, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m S\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m St\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────"]
-[5.29631, "o", "──"]
-[5.296454, "o", "───────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
-[6.301449, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
-[6.306343, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mSite name \u001b[2m(1/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
-[6.3065, "o", "\u001b[?25h"]
-[6.331462, "o", "\u001b[?25l"]
-[6.334348, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite machine name \u001b[2m(2/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name for the project directory and in the code.\u001b[39m\r\r\n"]
-[7.341209, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mSite machine name \u001b[2m(2/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[7.36741, "o", "\u001b[?25l"]
-[7.370832, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars Org\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
-[7.523521, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars Or\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m\u001b[7mE\u001b[27m.g. My Org\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────"]
-[7.523608, "o", "───"]
-[8.210795, "o", "───────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m R\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Re\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────"]
-[8.210804, "o", "────"]
-[8.210897, "o", "─────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
-[9.215467, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Rebellion\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
-[10.21976, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Rebellion \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization machine name \u001b[2m(4/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m rebellion\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the co"]
-[10.220081, "o", "de.\u001b[39m\r"]
-[10.220279, "o", "\r\r\n"]
-[11.22076, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mOrganization machine name \u001b[2m(4/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m rebellion \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mPublic domain \u001b[2m(5/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star-wars.com\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Domain name without pro"]
-[11.22077, "o", "tocol and"]
-[11.220899, "o", " trailing slash.\u001b[39m\r\r\n"]
-[12.221647, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mPublic domain \u001b[2m(5/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star-wars.com \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Drupal \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mHow would you like your site to be created on the first run? \u001b[2m(6/36)\u001b[…\u001b[39m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose how your site will be created the first time after this \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m installer finishes: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
-[12.221725, "o", " "]
-[12.221824, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from one of the standard Drupal installation profiles. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal CMS, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from the Drupal CMS recipe. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, loaded from the demo database\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a site by \u001b[4mloadin"]
-[12.221839, "o", "g an exist"]
-[13.226874, "o", "ing demo database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m provided with the installer. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├─────────────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mDrupal, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mDrupal CMS, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Drupal, loaded from the demo database \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────────────────────"]
-[13.226884, "o", "──"]
-[13.226968, "o", "───────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇. Applies only on the first run of the installer.\u001b[39m\r\r\n"]
-[14.23236, "o", "\u001b[1G\u001b[24A\u001b[J"]
-[14.23242, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mHow would you like your site to be created on the first run? \u001b[2m(6/36)\u001b[…\u001b[22m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose how your site will be created the first time after this \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m installer finishes: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from one of the standard Drupal installation profiles. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal CMS, installed from profile\u001b[22m "]
-[14.232429, "o", " \u001b[90m│\u001b"]
-[14.232504, "o", "[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from the Drupal CMS recipe. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, loaded from the demo database\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a site by \u001b[4mloading an existing demo database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m provided with the installer. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├─────────────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Drupal, loaded from the demo database "]
-[14.232509, "o", " "]
-[14.232627, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[15.236043, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProfile \u001b[2m(7/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Standard \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mMinimal\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mDemo Umami\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mCustom (next prompt)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select which Drupal profile to use.\u001b[39m\r\r\n"]
-[16.239828, "o", "\u001b[1G\u001b[8A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProfile \u001b[2m(7/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Standard \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mModules \u001b[2m(8/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m Admin toolbar \u001b[36m┃\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mCoffee\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mConfig spli"]
-[16.239897, "o", "t\u001b[22m "]
-[16.240023, "o", " \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mConfig update\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mDevel\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mDrupal helpers\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mEnvironment indicator\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mGenerated content\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mPathauto\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mRedirect\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └───────────────────────"]
-[16.240105, "o", "───"]
-[17.244895, "o", "─────────────────────── 18 selected ┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more modules.\u001b[39m\r\r\n\u001b[1G\u001b[14A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mModules \u001b[2m(8/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Admin toolbar \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Coffee \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Config split \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Config update \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Devel \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Drupal helpers \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Environment indicator \u001b[90m│\u001b[39m\r"]
-[17.244903, "o", "\r\n\u001b[90m │"]
-[17.245082, "o", "\u001b[39m Generated content \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Pathauto \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Redirect \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Reroute email \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Robots.txt \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m SDC Devel \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Seckit \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Shield \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Stage file proxy \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Testmode \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m XML Sitemap \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────"]
-[17.245133, "o", "───"]
-[17.245262, "o", "───────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[18.247234, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom modules prefix \u001b[2m(9/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m sw\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in custom modules\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom modules prefix \u001b[2m(9/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m sw \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b"]
-[18.247339, "o", "[39m\r\r\n\r\r\n"]
-[18.247459, "o", "\u001b[?25h"]
-[19.252811, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom modules \u001b[2m(10/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Select which custom modules to include in your project: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mBase\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Starter module with common site utilities (mail handling, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m deploy hooks) and test scaffolding for Unit, Kernel, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Functional, and FunctionalJavascript tests. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90"]
-[19.253151, "o", "m │\u001b[39m"]
-[19.253262, "o", " ○ \u001b[1mSearch\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom Solr search integration module. Requires the Solr \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m service to be selected. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDemo\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Demonstrates how Vortex tooling works: includes a counter \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m block with CSS/JS, PHPUnit example tests across all test \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m types, and a Behat feature. Safe to remove on real projects. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────"]
-[19.253308, "o", "───"]
-[19.253346, "o", "────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m Base - starter module with utilities and test scaffolding \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mSearch - custom Solr search integration\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mDemo - counter block and example tests to demonstrate tooling\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more modules.\u001b[39m\r\r\n"]
-[20.257848, "o", "\u001b[1G\u001b[25A\u001b[J"]
-[20.257886, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom modules \u001b[2m(10/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Select which custom modules to include in your project: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mBase\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Starter module with common site utilities (mail handling, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m deploy hooks) and test scaffolding for Unit, Kernel, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Functional, and FunctionalJavascript tests. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○"]
-[20.25792, "o", " \u001b[1mSearc"]
-[20.258028, "o", "h\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom Solr search integration module. Requires the Solr \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m service to be selected. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDemo\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Demonstrates how Vortex tooling works: includes a counter \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m block with CSS/JS, PHPUnit example tests across all test \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m types, and a Behat feature. Safe to remove on real projects. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├───────────────────────────────────────────────"]
-[20.258058, "o", "───"]
-[20.258207, "o", "──────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Base - starter module with utilities and test scaffolding \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Search - custom Solr search integration \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Demo - counter block and example tests to demonstrate tooling \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[21.26187, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mTheme \u001b[2m(11/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOlivero\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mClaro\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mStark\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Custom (next prompt) \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select which Drupal theme to use.\u001b[39m\r\r\n"]
-[22.265648, "o", "\u001b[1G\u001b[8A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mTheme \u001b[2m(11/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom (next prompt) \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom theme machine name \u001b[2m(12/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use"]
-[22.265657, "o", " this nam"]
-[22.265833, "o", "e as a custom theme name\u001b[39m\r\r\n"]
-[23.269596, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom theme machine name \u001b[2m(12/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mBuild front-end assets in the container? \u001b[2m(13/36)\u001b[22m\u001b[39m \u001b[90m────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Disable to build theme assets on the host or as part of deployment."]
-[23.269606, "o", "\u001b[39m\r\r\n"]
-[24.270719, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mBuild front-end assets in the container? \u001b[2m(13/36)\u001b[22m\u001b[22m \u001b[90m────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Code repository \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mRepository provider \u001b[2m(14/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Vortex offers full automation with GitHub, while support for \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m other providers is limited. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
-[24.270786, "o", " "]
-[24.270903, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m GitHub \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select your code repository provider.\u001b[39m\r\r\n"]
-[25.272983, "o", "\u001b[1G\u001b[11A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mRepository provider \u001b[2m(14/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Vortex offers full automation with GitHub, while support for \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m other providers is limited. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m GitHub \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────────────"]
-[25.273169, "o", "───"]
-[25.273742, "o", "───────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[26.277796, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mRelease versioning scheme \u001b[2m(15/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose your versioning scheme: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mCalendar Versioning (CalVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4myear.month.patch\u001b[0m (E.g., \u001b[4m24.1.0\u001b[0m) \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://calver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mSemantic Versioning (SemVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4mmajor.minor.patch\u001b[0m (E.g., \u001b[4m1.0.0\u001b[0m) "]
-[26.277887, "o", " "]
-[26.277989, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://semver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom versioning scheme of your choice. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Calendar Versioning (CalVer) \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mSemantic Versioning (SemVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOther\u001b[22m \u001b"]
-[26.278037, "o", "[90m│\u001b["]
-[26.278119, "o", "39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select your version scheme.\u001b[39m\r\r\n"]
-[27.283504, "o", "\u001b[1G\u001b[22A\u001b[J"]
-[27.283588, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mRelease versioning scheme \u001b[2m(15/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose your versioning scheme: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mCalendar Versioning (CalVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4myear.month.patch\u001b[0m (E.g., \u001b[4m24.1.0\u001b[0m) \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://calver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mSemantic Versioning (SemVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4mmajor.minor.patch\u001b[0m (E.g., \u001b[4m1.0.0\u001b[0m) "]
-[27.283594, "o", " \u001b"]
-[27.283726, "o", "[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://semver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom versioning scheme of your choice. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Calendar Versioning (CalVer) \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[28.28755, "o", "\r\r\n \u001b[46m\u001b[30m Environment \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mTimezone \u001b[2m(16/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m UTC\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2mUTC\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇, or start typing to select the timezone for your project.\u001b[39m\r\r\n"]
-[29.290541, "o", "\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mTimezone \u001b[2m(16/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m UTC \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mServices \u001b[2m(17/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m ClamAV \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mSolr\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mRedis\u001b[22m "]
-[29.290598, "o", " "]
-[29.290664, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more services.\u001b[39m\r\r\n"]
-[30.295209, "o", "\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mServices \u001b[2m(17/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m ClamAV \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Solr \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Redis \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDevelopment tools \u001b[2m(18/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m PHP CodeSniffer \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼"]
-[30.295221, "o", "\u001b[39m \u001b[2m"]
-[30.295682, "o", "PHPStan\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mRector\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mESLint\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mStylelint\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mJest\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mPHPUnit\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mBehat\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more tools."]
-[30.295804, "o", "\u001b[39m\r\r\n"]
-[31.302121, "o", "\u001b[1G\u001b[12A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDevelopment tools \u001b[2m(18/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m PHP CodeSniffer \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m PHPStan \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Rector \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ESLint \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Stylelint \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Jest \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m PHPUnit \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Behat \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────"]
-[31.309266, "o", "───"]
-[31.309702, "o", "───────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[32.31327, "o", "\r\r\n \u001b[46m\u001b[30m Hosting \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mHosting provider \u001b[2m(19/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mAcquia Cloud\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mLagoon\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select your hosting provider.\u001b[39m\r\r\n\u001b[1G\u001b[8A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mHosting provider \u001b[2m(19/36)"]
-[32.31328, "o", "\u001b[22m\u001b[22m \u001b"]
-[32.313432, "o", "[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[33.316938, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom web root directory \u001b[2m(20/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m web\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Custom directory where the web server serves the site.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom web root directory \u001b[2m(20/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m web \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r"]
-[33.317034, "o", "\r\n\r\r\n\u001b[?25"]
-[33.317147, "o", "h"]
-[34.320786, "o", "\r\r\n \u001b[46m\u001b[30m Deployment \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDeployment types \u001b[2m(21/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m ◻ Code artifact \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mLagoon webhook\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mCustom webhook\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more deployment types.\u001b[39m\r\r\n\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDeployment types \u001b[2m(21/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────"]
-[34.320794, "o", "────"]
-[34.321152, "o", "─┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom webhook \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[35.322878, "o", "\r\r\n \u001b[46m\u001b[30m Workflow \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProvision type \u001b[2m(22/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisioning sets up the site in an environment using an \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m already assembled codebase. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mImport from database dump\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by importing a database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m typically copied from production into lower \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
-[35.322886, "o", " "]
-[35.323499, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mInstall from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by installing a fresh Drupal \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m site from a profile every time an environment is \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m created. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Import from database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mInstall from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────"]
-[35.323964, "o", "───"]
-[35.324059, "o", "───────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the provision type.\u001b[39m\r\r\n"]
-[36.334426, "o", "\u001b[1G\u001b[21A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProvision type \u001b[2m(22/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisioning sets up the site in an environment using an \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m already assembled codebase. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mImport from database dump\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by importing a database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m typically copied from production into lower \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
-[36.334608, "o", "\u001b[90m│\u001b["]
-[36.334773, "o", "39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mInstall from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by installing a fresh Drupal \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m site from a profile every time an environment is \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m created. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Import from database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[37.344709, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDatabase source \u001b[2m(23/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m URL download \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mFTP download\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mAcquia backup\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mLagoon environment\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mContainer registry\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mS3 bucket\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mNone\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └───────────"]
-[37.350986, "o", "───"]
-[37.353121, "o", "────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the database fetch source.\u001b[39m\r\r\n"]
-[38.357452, "o", "\u001b[1G\u001b[11A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDatabase source \u001b[2m(23/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m URL download \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mUse a second database for migrations? \u001b[2m(24/36)\u001b[22m\u001b[39m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○ Yes /\u001b[22m \u001b[32m●\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Adds a second database service for Drupa"]
-[38.357566, "o", "l migrati"]
-[38.358148, "o", "ons.\u001b[39m\r\r\n"]
-[39.375052, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mUse a second database for migrations? \u001b[2m(24/36)\u001b[22m\u001b[22m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Notifications \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mNotification channels \u001b[2m(25/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m Email \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mGitHub\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mJIRA\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m "]
-[39.375156, "o", "│\u001b[39m \u001b["]
-[39.378252, "o", "2m◻\u001b[22m \u001b[2mNew Relic\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mSlack\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mWebhook\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more notification channels.\u001b[39m\r\r\n"]
-[40.380864, "o", "\u001b[1G\u001b[10A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mNotification channels \u001b[2m(25/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Email \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Continuous Integration \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mContinuous Integration provider \u001b[2m(26/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m GitHub Actions \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mCircleCI\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mNone\u001b[22m "]
-[40.382942, "o", " \u001b["]
-[40.38354, "o", "90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the CI provider.\u001b[39m\r\r\n"]
-[41.389565, "o", "\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mContinuous Integration provider \u001b[2m(26/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m GitHub Actions \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mVisual regression testing with Diffy? \u001b[2m(27/36)\u001b[22m\u001b[39m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Diffy-powered visual regression workflow to compare deployed \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Automatically trig"]
-[41.390015, "o", "gers comparisons for dependency-update \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m pull requests matching the configured branch pattern \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m (`deps/*` by default). \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Runs comparisons for pull requests tagged with the `VR` \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m label and posts a sticky comment. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Also supports manual runs against any URL. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○ "]
-[41.390435, "o", "Yes /\u001b[22m \u001b[32m●\u001b["]
-[42.395531, "o", "39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Requires a Diffy account.\u001b[39m\r\r\n\u001b[1G\u001b[19A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mVisual regression testing with Diffy? \u001b[2m(27/36)\u001b[22m\u001b[22m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Diffy-powered visual regression workflow to compare deployed \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Automatically triggers comparisons for dependency-update \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m pull requests matching the configured branch pattern \u001b[90m│\u001b[39m\r\r\n"]
-[42.395672, "o", "\u001b[90m │\u001b["]
-[42.396068, "o", "39m (`deps/*` by default). \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Runs comparisons for pull requests tagged with the `VR` \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m label and posts a sticky comment. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Also supports manual runs against any URL. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────"]
-[42.396537, "o", "───"]
-[43.408345, "o", "───────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mScan for committed secrets with Gitleaks? \u001b[2m(28/36)\u001b[22m\u001b[39m \u001b[90m───────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Runs in CI to detect hardcoded passwords, API keys and tokens.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mScan for committed secrets with Gitleaks? \u001b[2m(28/36)\u001b[22m\u001b[22m \u001b[90m───────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────"]
-[43.41063, "o", "───"]
-[43.414971, "o", "──────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[44.419615, "o", "\r\r\n \u001b[46m\u001b[30m Automations \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDependency updates provider \u001b[2m(29/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Renovate GitHub app \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mRenovate self-hosted in CI\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mNone\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the dependency updates provider.\u001b[39m\r\r\n\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDependency updates provider \u001b[2m(29/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Ren"]
-[44.419624, "o", "ovate GitHub"]
-[44.419731, "o", " app \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[45.42451, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCode coverage provider \u001b[2m(30/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mCodecov\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the code coverage provider.\u001b[39m\r\r\n\u001b[1G\u001b[6A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCode coverage provider \u001b[2m(30/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └───────────────────"]
-[45.424588, "o", "───"]
-[45.42466, "o", "────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[46.429258, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mAuto-assign the author to their PR? \u001b[2m(31/36)\u001b[22m\u001b[39m \u001b[90m─────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Helps to keep the PRs organized.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mAuto-assign the author to their PR? \u001b[2m(31/36)\u001b[22m\u001b[22m \u001b[90m─────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mAuto-add"]
-[46.429275, "o", " a CONFLICT"]
-[46.42945, "o", " label to a PR when conflicts occur? \u001b[2m(32/36)\u001b[22m\u001b[39m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Helps to keep quickly identify PRs that need attention.\u001b[39m\r\r\n"]
-[47.430779, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mAuto-add a CONFLICT label to a PR when conflicts occur? \u001b[2m(32/36)\u001b[22m\u001b[22m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Documentation \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mPreserve project documentation? \u001b[2m(33/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Helps to maintain the project documentation"]
-[47.430789, "o", " within the "]
-[47.430917, "o", "repository.\u001b[39m\r\r\n"]
-[48.435935, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mPreserve project documentation? \u001b[2m(33/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m AI \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProvide AI agent instructions? \u001b[2m(34/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Provides AI coding agents"]
-[48.435944, "o", " with better"]
-[48.43606, "o", " context about the project.\u001b[39m\r\r\n"]
-[49.441039, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProvide AI agent instructions? \u001b[2m(34/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m \u001b[39m\u001b[49m\r\r\n \u001b[46m\u001b[30m Installation summary \u001b[39m\u001b[49m\r\r\n \u001b[46m\u001b[30m \u001b[39m\u001b[49m\r\r\n\r\r\n\r\r\n \u001b[90m┌────────────────────────────────────┬────────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mGeneral information\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│"]
-[49.441103, "o", "\u001b[39m\u001b[39m "]
-[49.44124, "o", "Site name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Star Wars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Site machine name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m star_wars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Organization name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Rebellion \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Organization machine name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m rebellion \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Public domain \u001b[39m\u001b[90m│\u001b[39m\u001b[39m star-wars.com \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mDrupal\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Starter \u001b[39m\u001b[90m│\u001b[39m\u001b[39m load_demodb \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Modules \u001b[39m\u001b[90m│\u001b[39m\u001b[39m adm"]
-[49.441369, "o", "in_tool"]
-[50.446005, "o", "bar, coffee,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m config_split, config_update,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m devel, drupal_helpers,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m environment_indicator,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m generated_content, pathauto,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m redirect, reroute_email,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m robotstxt, sdc_devel, seckit,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m shield, stage_file_"]
-[50.446012, "o", "proxy,\u001b"]
-[50.446097, "o", "[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m testmode, xmlsitemap \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Webroot \u001b[39m\u001b[90m│\u001b[39m\u001b[39m web \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Profile \u001b[39m\u001b[90m│\u001b[39m\u001b[39m standard \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Module prefix \u001b[39m\u001b[90m│\u001b[39m\u001b[39m sw \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Custom modules \u001b[39m\u001b[90m│\u001b[39m\u001b[39m base, search, demo \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Theme machine name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m star_wars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Build front-end in container \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mCode repos"]
-[50.446128, "o", "itory\u001b[2"]
-[50.446204, "o", "2m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Code provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m github \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Version scheme \u001b[39m\u001b[90m│\u001b[39m\u001b[39m calver \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mEnvironment\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Timezone \u001b[39m\u001b[90m│\u001b[39m\u001b[39m UTC \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Services \u001b[39m\u001b[90m│\u001b[39m\u001b[39m clamav, redis, solr \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Tools \u001b[39m\u001b[90m│\u001b[39m\u001b[39m behat, eslint, jest, phpcs,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m"]
-[50.446222, "o", " phpsta"]
-[50.446326, "o", "n, phpunit, rector,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m stylelint \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mHosting\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Hosting provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m none \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mDeployment\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Deployment types \u001b[39m\u001b[90m│\u001b[39m\u001b[39m webhook \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mWorkflow\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Provision type \u001b[39m\u001b[90m│\u001b[39m\u001b[39m database "]
-[50.446353, "o", " "]
-[50.446481, "o", " \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Database source \u001b[39m\u001b[90m│\u001b[39m\u001b[39m url \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Migration database \u001b[39m\u001b[90m│\u001b[39m\u001b[39m No \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mNotifications\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Channels \u001b[39m\u001b[90m│\u001b[39m\u001b[39m email \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mContinuous Integration\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m CI provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m gha \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Visual regression testing \u001b[39m\u001b[90m│\u001b[39m\u001b[39m No \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b"]
-[50.446489, "o", "[39m\u001b[39"]
-[50.446623, "o", "m Secret scanning with Gitleaks \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mAutomations\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Dependency updates provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m renovatebot_app \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Code coverage provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m none \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Auto-assign PR author \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Auto-add a CONFLICT label to PRs \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mDocumentation\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Preserve project documentation \u001b[39"]
-[50.446649, "o", "m\u001b[90m"]
-[50.446745, "o", "│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mAI\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m AI agent instructions \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mLocations\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Current directory \u001b[39m\u001b[90m│\u001b[39m\u001b[39m /home/user/vortex/.art\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m ifacts/tmp/videos-workspace \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Destination directory \u001b[39m\u001b[90m│\u001b[39m\u001b[39m /home/user/vortex/.art\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m ifacts/"]
-[50.44675, "o", "tmp/vide"]
-[50.446867, "o", "os-workspace/star_w\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m ars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Vortex repository \u001b[39m\u001b[90m│\u001b[39m\u001b[39m /home/user/vortex \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Vortex reference \u001b[39m\u001b[90m│\u001b[39m\u001b[39m HEAD \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└────────────────────────────────────┴────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n Vortex will be installed into your project's directory \"/home/user/demo/star_wars\"\r\r\n"]
-[52.448943, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProceed with installing Vortex?\u001b[39m \u001b[90m─────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
-[54.458984, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProceed with installing Vortex?\u001b[22m \u001b[90m─────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Starting project installation \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mDownloading Vortex\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mDownloading Vortex\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mDownloading Vortex\u001b[39m\r\r\n\u001b[999D\u001b[2A\u001b[J\u001b[?25h\r\r\n \u001b[34m✦ Downloading Vortex\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mDownloading from \"/home/user/vortex\" repository at ref\u001b[22m\r\r\n \u001b[2m\"HEAD\"\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Vortex downloaded (develop)\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\u001b[?25l\r\r\n \u001b[36m⠂"]
-[54.460359, "o", "\u001b[39m \u001b[33mCustomizing Vortex for "]
-[55.462855, "o", "your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠰\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠠\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠤\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠄\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠆\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[999D\u001b[2A\u001b[J\u001b[?25h\r\r\n \u001b[34m✦ Customizing Vortex for your project\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Vortex was customized for your project\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\u001b[?25l\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mPreparing destination directory\u001b[39m\r\r\n\u001b[999D\u001b[2A\u001b[J\u001b[?25h\r\r\n \u001b[34m✦ Preparing destination di"]
-[55.462867, "o", "rectory\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A"]
-[55.463129, "o", "\r\r\n\r\r\n\r\r\n \u001b[2mCreated directory \"/home/user/demo/star_wars\".\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mInitialising a new Git repository in directory \"/home/user/demo/star_wars\".\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Destination directory is ready\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n"]
-[55.463188, "o", "\u001b[?25l"]
-[55.469787, "o", "\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mCopying files to the destination directory\u001b[39m\r\r\n"]
-[55.564318, "o", "\u001b[1G\u001b[2A\u001b[J"]
-[55.564445, "o", "\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mCopying files to the destination directory\u001b[39m\r\r\n"]
-[55.588249, "o", "\u001b[999D\u001b[2A\u001b[J\u001b[?25h"]
-[55.588375, "o", "\r\r\n \u001b[34m✦ Copying files to the destination directory\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Files copied to destination directory\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n"]
-[55.588443, "o", "\u001b[?25l"]
-[55.591783, "o", "\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[55.675846, "o", "\u001b[1G\u001b[2A"]
-[55.676025, "o", "\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[55.755572, "o", "\u001b[1G\u001b[2A\u001b[J"]
-[55.75564, "o", "\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[55.836227, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠰\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[55.915515, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠠\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[55.995451, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠤\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[56.074835, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠄\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[56.153896, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠆\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[56.235292, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
-[56.313527, "o", "\u001b[999D\u001b[2A\u001b[J\u001b[?25h"]
-[56.313659, "o", "\r\r\n \u001b[34m✦ Preparing demo content\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mCreated data directory \"/home/user/demo/star_wars/.data\".\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mNo database dump file was found in \"/home/user/demo/star_wars/.data\" directory.\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mFetched demo database from https://github.com/drevops/vortex/releases/download/1.37.0/db.demo.sql.\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n"]
-[56.313741, "o", "\r\r\n \u001b[32m✓ Demo content prepared\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n"]
-[56.33153, "o", "\r\r\n \u001b[90m┌───────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32mFinished installing Vortex\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32m──────────────────────────\u001b[39m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Add and commit all files:\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m git add -A\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m git commit -m \"Initial commit.\"\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└───────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
-[56.345645, "o", "\u001b[?25l"]
-[56.350409, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mRun the site build now?\u001b[39m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○ Yes /\u001b[22m \u001b[32m●\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Takes ~5-10 min; output will be streamed. You can skip and run later with…\u001b[39m\r\r\n"]
-[58.359142, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mRun the site build now?\u001b[22m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
-[58.368547, "o", "\r\r\n \u001b[90m┌────────────────────────────────────────────────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32mReady to build\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32m──────────────\u001b[39m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Build the site:\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m ahoy build\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m"]
-[58.368601, "o", "│\u001b[39"]
-[58.36865, "o", "m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Setup GitHub Actions:\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m https://www.vortextemplate.com/docs/continuous-integration/github-actions#\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m onboarding\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└────────────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
-[58.379679, "x", "0"]
+{"version":2,"width":80,"height":42,"timestamp":1783585635,"command":"/home/user/demo/installer.exp","title":"Vortex Installer Demo","env":{"SHELL":"/opt/homebrew/opt/bash/bin/bash"}}
+[0.199374, "o", "\r\r\n \u001b[36m──────────────────────────────────────────────────────────────────────────────\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m ██╗ ██╗ ██████╗ ██████╗ ████████╗ ███████╗ ██╗ ██╗\u001b[39m\r\r\n \u001b[36m ██║ ██║ ██╔═══██╗ ██╔══██╗ ╚══██╔══╝ ██╔════╝ ╚██╗██╔╝\u001b[39m\r\r\n \u001b[36m ██║ ██║ ██║ ██║ ██████╔╝ ██║ █████╗ ╚███╔╝\u001b[39m\r\r\n \u001b[36m ╚██╗ ██╔╝ ██║ ██║ ██╔══██╗ ██║ ██╔══╝ ██╔██╗\u001b[39m\r\r\n \u001b[36m ╚████╔╝ ╚██████╔╝ ██║ ██║ "]
+[0.199388, "o", " ██"]
+[0.19957, "o", "║ ███████╗ ██╔╝ ██╗\u001b[39m\r\r\n \u001b[36m ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m Drupal project template\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m by DrevOps\u001b[39m\r\r\n \u001b[36m\u001b[39m\r\r\n \u001b[36m──────────────────────────────────────────────────────────────────────────────\u001b[39m\r\r\n \u001b[2m Installer version: development\u001b[22m\r\r\n\r\r\n"]
+[0.20385, "o", "\r\r\n \u001b[90m┌───────────────────────────────────────────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32mWelcome to the Vortex interactive installer\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32m───────────────────────────────────────────\u001b[39m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m This tool will guide you through installing the latest \u001b[4mdevelopment\u001b[0m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m version of Vortex into your project.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m "]
+[0.203856, "o", " "]
+[0.203959, "o", " \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m You will be asked a few questions to tailor the configuration to your\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m site.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m No changes will be made until you confirm everything at the end.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Press \u001b[33mCtrl+C\u001b[39m at any time to exit the installer.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Press \u001b[33mCtrl+U\u001b[39m at any time to go back to the previous step.\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└────────────────────────────────────────────"]
+[0.203961, "o", "───"]
+[0.204022, "o", "────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
+[0.204563, "o", "\u001b[?25l"]
+[0.208431, "o", "\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mValidating repository and reference\u001b[39m\r\r\n"]
+[0.214494, "o", "\u001b[999D\u001b[2A\u001b[J\u001b[?25h"]
+[0.214568, "o", "\r\r\n \u001b[34m✦ Validating repository and reference\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mChecking repository \"/home/user/vortex\" and reference\u001b[22m\r\r\n \u001b[2m\"HEAD\"\u001b[22m\r\r\n\r\r\n"]
+[0.214726, "o", "\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Repository and reference validated successfully\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n \r\r\n \u001b[2mPress any key to continue...\u001b[22m\r\r\n"]
+[3.228102, "o", "\r\r\n \u001b[46m\u001b[30m General information \u001b[39m\u001b[49m\r\r\n\r\r\n"]
+[3.242413, "o", "\u001b[?25l"]
+[3.245402, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
+[3.398788, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m\u001b[7mE\u001b[27m.g. My Site\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
+[3.939567, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m S\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m St\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────"]
+[3.939587, "o", "──"]
+[3.939722, "o", "───────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
+[4.943763, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite name \u001b[2m(1/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
+[4.949549, "o", "\u001b[1G\u001b[5A\u001b[J"]
+[4.94958, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mSite name \u001b[2m(1/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
+[4.949722, "o", "\u001b[?25h"]
+[4.971001, "o", "\u001b[?25l"]
+[4.973871, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mSite machine name \u001b[2m(2/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name for the project directory and in the code.\u001b[39m\r\r\n"]
+[5.981488, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mSite machine name \u001b[2m(2/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[6.002466, "o", "\u001b[?25l"]
+[6.008294, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars Org\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
+[6.161853, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Star Wars Or\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m\u001b[7mE\u001b[27m.g. My Org\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────"]
+[6.161886, "o", "───"]
+[6.913253, "o", "───────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m R\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Re\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────"]
+[6.913262, "o", "────"]
+[6.91334, "o", "─────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
+[7.918252, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Rebellion\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the project and documentation.\u001b[39m\r\r\n"]
+[8.918916, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mOrganization name \u001b[2m(3/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Rebellion \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mOrganization machine name \u001b[2m(4/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m rebellion\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in the co"]
+[8.918924, "o", "de.\u001b[39m\r"]
+[8.91905, "o", "\r\r\n"]
+[9.919803, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mOrganization machine name \u001b[2m(4/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m rebellion \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mPublic domain \u001b[2m(5/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star-wars.com\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Domain name without pro"]
+[9.919812, "o", "tocol and"]
+[9.919919, "o", " trailing slash.\u001b[39m\r\r\n"]
+[10.920853, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mPublic domain \u001b[2m(5/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star-wars.com \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Drupal \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mHow would you like your site to be created on the first run? \u001b[2m(6/36)\u001b[…\u001b[39m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose how your site will be created the first time after this \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m installer finishes: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
+[10.920865, "o", " "]
+[10.920958, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from one of the standard Drupal installation profiles. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal CMS, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from the Drupal CMS recipe. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, loaded from the demo database\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a site by \u001b[4mloadin"]
+[10.921011, "o", "g an exist"]
+[11.921679, "o", "ing demo database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m provided with the installer. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├─────────────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mDrupal, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mDrupal CMS, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Drupal, loaded from the demo database \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────────────────────"]
+[11.921694, "o", "──"]
+[11.921915, "o", "───────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇. Applies only on the first run of the installer.\u001b[39m\r\r\n"]
+[12.931504, "o", "\u001b[1G\u001b[24A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mHow would you like your site to be created on the first run? \u001b[2m(6/36)\u001b[…\u001b[22m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose how your site will be created the first time after this \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m installer finishes: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, installed from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from one of the standard Drupal installation profiles. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal CMS, installed from profile\u001b[22m "]
+[12.93154, "o", " "]
+[12.931625, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a new site by \u001b[4mpopulating a fresh database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m from the Drupal CMS recipe. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDrupal, loaded from the demo database\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Creates a site by \u001b[4mloading an existing demo database\u001b[0m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m provided with the installer. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├─────────────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Drupal, loaded from the demo database "]
+[12.931656, "o", " "]
+[12.931733, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[13.936081, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProfile \u001b[2m(7/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Standard \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mMinimal\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mDemo Umami\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mCustom (next prompt)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select which Drupal profile to use.\u001b[39m\r\r\n"]
+[14.940063, "o", "\u001b[1G\u001b[8A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProfile \u001b[2m(7/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Standard \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mModules \u001b[2m(8/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m Admin toolbar \u001b[36m┃\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mCoffee\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mConfig spli"]
+[14.940069, "o", "t\u001b[22m "]
+[14.940182, "o", " \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mConfig update\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mDevel\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mDrupal helpers\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mEnvironment indicator\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mGenerated content\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mPathauto\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mRedirect\u001b[22m \u001b[90m│\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └───────────────────────"]
+[14.940189, "o", "───"]
+[15.944592, "o", "─────────────────────── 18 selected ┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more modules.\u001b[39m\r\r\n\u001b[1G\u001b[14A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mModules \u001b[2m(8/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Admin toolbar \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Coffee \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Config split \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Config update \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Devel \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Drupal helpers \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Environment indicator \u001b[90m│\u001b[39m\r"]
+[15.944629, "o", "\r\n\u001b[90m │"]
+[15.94489, "o", "\u001b[39m Generated content \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Pathauto \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Redirect \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Reroute email \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Robots.txt \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m SDC Devel \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Seckit \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Shield \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Stage file proxy \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Testmode \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m XML Sitemap \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────"]
+[15.945184, "o", "───"]
+[15.945276, "o", "───────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[16.948481, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom modules prefix \u001b[2m(9/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m sw\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use this name in custom modules\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom modules prefix \u001b[2m(9/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m sw \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b"]
+[16.94849, "o", "[39m\r\r\n\r\r\n"]
+[16.948586, "o", "\u001b[?25h"]
+[17.953204, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom modules \u001b[2m(10/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Select which custom modules to include in your project: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mBase\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Starter module with common site utilities (mail handling, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m deploy hooks) and test scaffolding for Unit, Kernel, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Functional, and FunctionalJavascript tests. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90"]
+[17.953212, "o", "m │\u001b[39m"]
+[17.953309, "o", " ○ \u001b[1mSearch\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom Solr search integration module. Requires the Solr \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m service to be selected. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDemo\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Demonstrates how Vortex tooling works: includes a counter \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m block with CSS/JS, PHPUnit example tests across all test \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m types, and a Behat feature. Safe to remove on real projects. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────"]
+[17.953315, "o", "───"]
+[17.953439, "o", "────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m Base - starter module with utilities and test scaffolding \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mSearch - custom Solr search integration\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mDemo - counter block and example tests to demonstrate tooling\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more modules.\u001b[39m\r\r\n"]
+[18.957723, "o", "\u001b[1G\u001b[25A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom modules \u001b[2m(10/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Select which custom modules to include in your project: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mBase\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Starter module with common site utilities (mail handling, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m deploy hooks) and test scaffolding for Unit, Kernel, \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Functional, and FunctionalJavascript tests. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b"]
+[18.957729, "o", "[39m "]
+[18.957805, "o", "○ \u001b[1mSearch\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom Solr search integration module. Requires the Solr \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m service to be selected. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mDemo\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Demonstrates how Vortex tooling works: includes a counter \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m block with CSS/JS, PHPUnit example tests across all test \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m types, and a Behat feature. Safe to remove on real projects. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├───────────────────────────────────────────"]
+[18.957808, "o", "───"]
+[18.957896, "o", "──────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Base - starter module with utilities and test scaffolding \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Search - custom Solr search integration \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Demo - counter block and example tests to demonstrate tooling \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[19.962208, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mTheme \u001b[2m(11/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOlivero\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mClaro\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mStark\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Custom (next prompt) \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select which Drupal theme to use.\u001b[39m\r\r\n"]
+[20.966056, "o", "\u001b[1G\u001b[8A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mTheme \u001b[2m(11/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom (next prompt) \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom theme machine name \u001b[2m(12/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m We will use"]
+[20.966147, "o", " this nam"]
+[20.966492, "o", "e as a custom theme name\u001b[39m\r\r\n"]
+[21.971686, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom theme machine name \u001b[2m(12/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m star_wars \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mBuild front-end assets in the container? \u001b[2m(13/36)\u001b[22m\u001b[39m \u001b[90m────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Disable to build theme assets on the host or as part of deployment."]
+[21.972101, "o", "\u001b[39m\r\r\n"]
+[22.973297, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mBuild front-end assets in the container? \u001b[2m(13/36)\u001b[22m\u001b[22m \u001b[90m────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Code repository \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mRepository provider \u001b[2m(14/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Vortex offers full automation with GitHub, while support for \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m other providers is limited. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
+[22.973435, "o", " "]
+[22.973505, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m GitHub \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select your code repository provider.\u001b[39m\r\r\n"]
+[23.977682, "o", "\u001b[1G\u001b[11A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mRepository provider \u001b[2m(14/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Vortex offers full automation with GitHub, while support for \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m other providers is limited. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m GitHub \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────────────"]
+[23.977689, "o", "───"]
+[23.97776, "o", "───────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[24.979406, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mRelease versioning scheme \u001b[2m(15/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose your versioning scheme: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mCalendar Versioning (CalVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4myear.month.patch\u001b[0m (E.g., \u001b[4m24.1.0\u001b[0m) \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://calver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mSemantic Versioning (SemVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4mmajor.minor.patch\u001b[0m (E.g., \u001b[4m1.0.0\u001b[0m) "]
+[24.979637, "o", " "]
+[24.979694, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://semver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom versioning scheme of your choice. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Calendar Versioning (CalVer) \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mSemantic Versioning (SemVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOther\u001b[22m \u001b"]
+[24.979714, "o", "[90m│\u001b["]
+[24.979805, "o", "39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select your version scheme.\u001b[39m\r\r\n"]
+[25.984723, "o", "\u001b[1G\u001b[22A\u001b[J"]
+[25.984754, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mRelease versioning scheme \u001b[2m(15/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Choose your versioning scheme: \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mCalendar Versioning (CalVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4myear.month.patch\u001b[0m (E.g., \u001b[4m24.1.0\u001b[0m) \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://calver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mSemantic Versioning (SemVer)\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[4mmajor.minor.patch\u001b[0m (E.g., \u001b[4m1.0.0\u001b[0m) "]
+[25.984819, "o", " \u001b"]
+[25.984865, "o", "[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m https://semver.org \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom versioning scheme of your choice. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Calendar Versioning (CalVer) \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[26.986203, "o", "\r\r\n \u001b[46m\u001b[30m Environment \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mTimezone \u001b[2m(16/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m UTC\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2mUTC\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇, or start typing to select the timezone for your project.\u001b[39m\r\r\n"]
+[27.987054, "o", "\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mTimezone \u001b[2m(16/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m UTC \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mServices \u001b[2m(17/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m ClamAV \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mSolr\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mRedis\u001b[22m "]
+[27.987063, "o", " "]
+[27.987363, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more services.\u001b[39m\r\r\n"]
+[28.988628, "o", "\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mServices \u001b[2m(17/36)\u001b[22m\u001b[22m \u001b[90m────────────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m ClamAV \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Solr \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Redis \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDevelopment tools \u001b[2m(18/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m PHP CodeSniffer \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼"]
+[28.988756, "o", "\u001b[39m \u001b[2m"]
+[28.988864, "o", "PHPStan\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mRector\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mESLint\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mStylelint\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mJest\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mPHPUnit\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mBehat\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mTwig CS Fixer\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────────────────────────"]
+[28.988869, "o", "───"]
+[29.990521, "o", "───────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more tools.\u001b[39m\r\r\n\u001b[1G\u001b[13A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDevelopment tools \u001b[2m(18/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m PHP CodeSniffer \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m PHPStan \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Rector \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ESLint \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Stylelint \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Jest \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m PHPUnit \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Behat "]
+[29.99053, "o", " \u001b[90m"]
+[29.990653, "o", "│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Twig CS Fixer \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[30.99534, "o", "\r\r\n \u001b[46m\u001b[30m Hosting \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mHosting provider \u001b[2m(19/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mAcquia Cloud\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mLagoon\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mOther\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select your hosting provider.\u001b[39m\r\r\n\u001b[1G\u001b[8A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mHosting provider \u001b[2m(19/36)"]
+[30.995436, "o", "\u001b[22m\u001b[22m \u001b"]
+[30.995481, "o", "[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[31.99675, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCustom web root directory \u001b[2m(20/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m web\u001b[7m \u001b[27m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Custom directory where the web server serves the site.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCustom web root directory \u001b[2m(20/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m web \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r"]
+[31.996985, "o", "\r\n\r\r\n\u001b[?25"]
+[31.997082, "o", "h"]
+[32.998692, "o", "\r\r\n \u001b[46m\u001b[30m Deployment \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDeployment types \u001b[2m(21/36)\u001b[22m\u001b[39m \u001b[90m────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m ◻ Code artifact \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mLagoon webhook\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m◼\u001b[39m \u001b[2mCustom webhook\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more deployment types.\u001b[39m\r\r\n\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDeployment types \u001b[2m(21/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────"]
+[32.998701, "o", "────"]
+[32.998811, "o", "─┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Custom webhook \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[34.003785, "o", "\r\r\n \u001b[46m\u001b[30m Workflow \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProvision type \u001b[2m(22/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisioning sets up the site in an environment using an \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m already assembled codebase. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mImport from database dump\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by importing a database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m typically copied from production into lower \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
+[34.003821, "o", " "]
+[34.00391, "o", " \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mInstall from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by installing a fresh Drupal \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m site from a profile every time an environment is \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m created. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Import from database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mInstall from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────"]
+[34.004259, "o", "───"]
+[34.004364, "o", "───────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the provision type.\u001b[39m\r\r\n"]
+[35.01174, "o", "\u001b[1G\u001b[21A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProvision type \u001b[2m(22/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisioning sets up the site in an environment using an \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m already assembled codebase. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mImport from database dump\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by importing a database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m typically copied from production into lower \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m "]
+[35.011747, "o", "\u001b[90m│\u001b["]
+[35.011825, "o", "39m\r\r\n\u001b[90m │\u001b[39m ○ \u001b[1mInstall from profile\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Provisions the site by installing a fresh Drupal \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m site from a profile every time an environment is \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m created. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m Import from database dump \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[36.013694, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDatabase source \u001b[2m(23/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m URL download \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mFTP download\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mAcquia backup\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mLagoon environment\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mContainer registry\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mS3 bucket\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mNone\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └───────────"]
+[36.013728, "o", "───"]
+[36.014117, "o", "────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the database fetch source.\u001b[39m\r\r\n"]
+[37.015928, "o", "\u001b[1G\u001b[11A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDatabase source \u001b[2m(23/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m URL download \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mUse a second database for migrations? \u001b[2m(24/36)\u001b[22m\u001b[39m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○ Yes /\u001b[22m \u001b[32m●\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Adds a second database service for Drupa"]
+[37.015936, "o", "l migrati"]
+[37.016057, "o", "ons.\u001b[39m\r\r\n"]
+[38.020844, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mUse a second database for migrations? \u001b[2m(24/36)\u001b[22m\u001b[22m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Notifications \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mNotification channels \u001b[2m(25/36)\u001b[22m\u001b[39m \u001b[90m───────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m› ◼\u001b[39m Email \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mGitHub\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mJIRA\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m "]
+[38.02085, "o", "│\u001b[39m \u001b["]
+[38.021226, "o", "2m◻\u001b[22m \u001b[2mNew Relic\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mSlack\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m◻\u001b[22m \u001b[2mWebhook\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆, ⬇ and Space bar to select one or more notification channels.\u001b[39m\r\r\n"]
+[39.021637, "o", "\u001b[1G\u001b[10A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mNotification channels \u001b[2m(25/36)\u001b[22m\u001b[22m \u001b[90m───────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Email \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Continuous Integration \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mContinuous Integration provider \u001b[2m(26/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m GitHub Actions \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mCircleCI\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mNone\u001b[22m "]
+[39.021651, "o", " \u001b["]
+[39.021753, "o", "90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the CI provider.\u001b[39m\r\r\n"]
+[40.023461, "o", "\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mContinuous Integration provider \u001b[2m(26/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m GitHub Actions \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mVisual regression testing with Diffy? \u001b[2m(27/36)\u001b[22m\u001b[39m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Diffy-powered visual regression workflow to compare deployed \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Automatically trig"]
+[40.02347, "o", "gers compar"]
+[40.023558, "o", "isons for dependency-update \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m pull requests matching the configured branch pattern \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m (`deps/*` by default). \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Runs comparisons for pull requests tagged with the `VR` \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m label and posts a sticky comment. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Also supports manual runs against any URL. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○ Yes /\u001b[22m "]
+[40.023561, "o", "\u001b[32m●\u001b["]
+[41.028743, "o", "39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Requires a Diffy account.\u001b[39m\r\r\n\u001b[1G\u001b[19A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mVisual regression testing with Diffy? \u001b[2m(27/36)\u001b[22m\u001b[22m \u001b[90m───────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Diffy-powered visual regression workflow to compare deployed \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m environments. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Automatically triggers comparisons for dependency-update \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m pull requests matching the configured branch pattern \u001b[90m│\u001b[39m\r\r\n"]
+[41.028786, "o", "\u001b[90m │\u001b["]
+[41.028843, "o", "39m (`deps/*` by default). \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Runs comparisons for pull requests tagged with the `VR` \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m label and posts a sticky comment. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m Also supports manual runs against any URL. \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[90m│\u001b[39m\r\r\n\u001b[90m ├──────────────────────────────────────────────────────────────┤\u001b[39m\r\r\n\u001b[90m │\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └────────────────────────────"]
+[41.028846, "o", "───"]
+[42.031382, "o", "───────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mScan for committed secrets with Gitleaks? \u001b[2m(28/36)\u001b[22m\u001b[39m \u001b[90m───────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Runs in CI to detect hardcoded passwords, API keys and tokens.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mScan for committed secrets with Gitleaks? \u001b[2m(28/36)\u001b[22m\u001b[22m \u001b[90m───────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────"]
+[42.031393, "o", "───"]
+[42.031481, "o", "──────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[43.034849, "o", "\r\r\n \u001b[46m\u001b[30m Automations \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mDependency updates provider \u001b[2m(29/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m Renovate GitHub app \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mRenovate self-hosted in CI\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mNone\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the dependency updates provider.\u001b[39m\r\r\n\u001b[1G\u001b[7A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mDependency updates provider \u001b[2m(29/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Ren"]
+[43.034898, "o", "ovate GitHub"]
+[43.035013, "o", " app \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[44.039554, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mCode coverage provider \u001b[2m(30/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○\u001b[22m \u001b[2mCodecov\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[36m›\u001b[39m \u001b[36m●\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Use ⬆ and ⬇ to select the code coverage provider.\u001b[39m\r\r\n\u001b[1G\u001b[6A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mCode coverage provider \u001b[2m(30/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m None \u001b[90m│\u001b[39m\r\r\n\u001b[90m └───────────────────"]
+[44.039561, "o", "───"]
+[44.039674, "o", "────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[45.043951, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mAuto-assign the author to their PR? \u001b[2m(31/36)\u001b[22m\u001b[39m \u001b[90m─────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Helps to keep the PRs organized.\u001b[39m\r\r\n\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mAuto-assign the author to their PR? \u001b[2m(31/36)\u001b[22m\u001b[22m \u001b[90m─────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mAuto-add"]
+[45.043957, "o", " a CONFLICT"]
+[45.044179, "o", " label to a PR when conflicts occur? \u001b[2m(32/36)\u001b[22m\u001b[39m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Helps to keep quickly identify PRs that need attention.\u001b[39m\r\r\n"]
+[46.048557, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mAuto-add a CONFLICT label to a PR when conflicts occur? \u001b[2m(32/36)\u001b[22m\u001b[22m \u001b[90m┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └─────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Documentation \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mPreserve project documentation? \u001b[2m(33/36)\u001b[22m\u001b[39m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Helps to maintain the project documentation"]
+[46.048614, "o", " within the "]
+[46.048656, "o", "repository.\u001b[39m\r\r\n"]
+[47.052059, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mPreserve project documentation? \u001b[2m(33/36)\u001b[22m\u001b[22m \u001b[90m─────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m AI \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProvide AI agent instructions? \u001b[2m(34/36)\u001b[22m\u001b[39m \u001b[90m──────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Provides AI coding agents"]
+[47.052067, "o", " with better"]
+[47.052158, "o", " context about the project.\u001b[39m\r\r\n"]
+[48.055607, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProvide AI agent instructions? \u001b[2m(34/36)\u001b[22m\u001b[22m \u001b[90m──────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m \u001b[39m\u001b[49m\r\r\n \u001b[46m\u001b[30m Installation summary \u001b[39m\u001b[49m\r\r\n \u001b[46m\u001b[30m \u001b[39m\u001b[49m\r\r\n\r\r\n\r\r\n \u001b[90m┌────────────────────────────────────┬────────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mGeneral information\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│"]
+[48.05568, "o", "\u001b[39m\u001b[39m "]
+[48.05577, "o", "Site name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Star Wars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Site machine name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m star_wars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Organization name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Rebellion \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Organization machine name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m rebellion \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Public domain \u001b[39m\u001b[90m│\u001b[39m\u001b[39m star-wars.com \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mDrupal\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Starter \u001b[39m\u001b[90m│\u001b[39m\u001b[39m load_demodb \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Modules \u001b[39m\u001b[90m│\u001b[39m\u001b[39m adm"]
+[48.055778, "o", "in_tool"]
+[49.057274, "o", "bar, coffee,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m config_split, config_update,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m devel, drupal_helpers,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m environment_indicator,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m generated_content, pathauto,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m redirect, reroute_email,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m robotstxt, sdc_devel, seckit,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m shield, stage_file_"]
+[49.057315, "o", "proxy,\u001b"]
+[49.057401, "o", "[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m testmode, xmlsitemap \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Webroot \u001b[39m\u001b[90m│\u001b[39m\u001b[39m web \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Profile \u001b[39m\u001b[90m│\u001b[39m\u001b[39m standard \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Module prefix \u001b[39m\u001b[90m│\u001b[39m\u001b[39m sw \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Custom modules \u001b[39m\u001b[90m│\u001b[39m\u001b[39m base, search, demo \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Theme machine name \u001b[39m\u001b[90m│\u001b[39m\u001b[39m star_wars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Build front-end in container \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mCode repos"]
+[49.057444, "o", "itory\u001b[2"]
+[49.057567, "o", "2m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Code provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m github \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Version scheme \u001b[39m\u001b[90m│\u001b[39m\u001b[39m calver \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mEnvironment\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Timezone \u001b[39m\u001b[90m│\u001b[39m\u001b[39m UTC \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Services \u001b[39m\u001b[90m│\u001b[39m\u001b[39m clamav, redis, solr \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Tools \u001b[39m\u001b[90m│\u001b[39m\u001b[39m behat, eslint, jest, phpcs,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m"]
+[49.057605, "o", " phpsta"]
+[49.057715, "o", "n, phpunit, rector,\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m stylelint, twig_cs_fixer \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mHosting\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Hosting provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m none \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mDeployment\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Deployment types \u001b[39m\u001b[90m│\u001b[39m\u001b[39m webhook \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mWorkflow\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Provision type \u001b[39m\u001b[90m│\u001b[39m\u001b[39m database "]
+[49.057718, "o", " "]
+[49.05785, "o", " \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Database source \u001b[39m\u001b[90m│\u001b[39m\u001b[39m url \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Migration database \u001b[39m\u001b[90m│\u001b[39m\u001b[39m No \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mNotifications\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Channels \u001b[39m\u001b[90m│\u001b[39m\u001b[39m email \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mContinuous Integration\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m CI provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m gha \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Visual regression testing \u001b[39m\u001b[90m│\u001b[39m\u001b[39m No \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b"]
+[49.057885, "o", "[39m\u001b[39"]
+[49.058232, "o", "m Secret scanning with Gitleaks \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mAutomations\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Dependency updates provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m renovatebot_app \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Code coverage provider \u001b[39m\u001b[90m│\u001b[39m\u001b[39m none \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Auto-assign PR author \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Auto-add a CONFLICT label to PRs \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mDocumentation\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Preserve project documentation \u001b[39"]
+[49.058236, "o", "m\u001b[90m"]
+[49.058355, "o", "│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mAI\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m AI agent instructions \u001b[39m\u001b[90m│\u001b[39m\u001b[39m Yes \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[36m\u001b[1mLocations\u001b[22m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Current directory \u001b[39m\u001b[90m│\u001b[39m\u001b[39m /home/user/vortex/.art\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m ifacts/tmp/videos-workspace \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Destination directory \u001b[39m\u001b[90m│\u001b[39m\u001b[39m /home/user/vortex/.art\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m ifacts/"]
+[49.058372, "o", "tmp/vide"]
+[49.058516, "o", "os-workspace/star_w\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\u001b[39m ars \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Vortex repository \u001b[39m\u001b[90m│\u001b[39m\u001b[39m /home/user/vortex \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Vortex reference \u001b[39m\u001b[90m│\u001b[39m\u001b[39m HEAD \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└────────────────────────────────────┴────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n Vortex will be installed into your project's directory \"/home/user/demo/star_wars\"\r\r\n"]
+[51.063452, "o", "\u001b[?25l\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mProceed with installing Vortex?\u001b[39m \u001b[90m─────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[32m●\u001b[39m Yes \u001b[2m/ ○ No\u001b[22m \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
+[53.067739, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mProceed with installing Vortex?\u001b[22m \u001b[90m─────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m Yes \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h\r\r\n \u001b[46m\u001b[30m Starting project installation \u001b[39m\u001b[49m\r\r\n\r\r\n\u001b[?25l\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mDownloading Vortex\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mDownloading Vortex\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mDownloading Vortex\u001b[39m\r\r\n\u001b[999D\u001b[2A\u001b[J\u001b[?25h\r\r\n \u001b[34m✦ Downloading Vortex\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mDownloading from \"/home/user/vortex\" repository at ref\u001b[22m\r\r\n \u001b[2m\"HEAD\"\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Vortex downloaded (develop)\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\u001b[?25l\r\r\n \u001b[36m⠂"]
+[53.067776, "o", "\u001b[39m \u001b[33mCustomizing Vortex for "]
+[54.072045, "o", "your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠰\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠠\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠤\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠄\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠆\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠰\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠠\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n\r\r\n"]
+[54.150688, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠤\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n"]
+[54.333612, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠄\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n"]
+[54.417706, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠆\u001b[39m \u001b[33mCustomizing Vortex for your project\u001b[39m\r\r\n"]
+[54.491128, "o", "\u001b[999D\u001b[2A\u001b[J\u001b[?25h"]
+[54.4914, "o", "\r\r\n \u001b[34m✦ Customizing Vortex for your project\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Vortex was customized for your project\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\u001b[?25l"]
+[54.52105, "o", "\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mPreparing destination directory\u001b[39m\r\r\n"]
+[54.580924, "o", "\u001b[999D\u001b[2A\u001b[J\u001b[?25h"]
+[54.581395, "o", "\r\r\n \u001b[34m✦ Preparing destination directory\u001b[39m\r\r\n\r\r\n"]
+[54.582217, "o", "\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mCreated directory \"/home/user/demo/star_wars\".\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n"]
+[54.582254, "o", "\r\r\n \u001b[2mInitialising a new Git repository in directory \"/home/user/demo/star_wars\".\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Destination directory is ready\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n"]
+[54.582344, "o", "\u001b[?25l"]
+[54.585608, "o", "\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mCopying files to the destination directory\u001b[39m\r\r\n"]
+[54.690858, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mCopying files to the destination directory\u001b[39m\r\r\n"]
+[54.777812, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mCopying files to the destination directory\u001b[39m\r\r\n"]
+[54.793503, "o", "\u001b[999D\u001b[2A\u001b[J\u001b[?25h"]
+[54.793922, "o", "\r\r\n \u001b[34m✦ Copying files to the destination directory\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Files copied to destination directory\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\u001b[?25l"]
+[54.802235, "o", "\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[54.893433, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[54.97561, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠐\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.054387, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠰\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.132937, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠠\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.21183, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠤\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.289735, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠄\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.36873, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠆\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.448253, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠂\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.527631, "o", "\u001b[1G\u001b[2A\u001b[J\r\r\n \u001b[36m⠒\u001b[39m \u001b[33mPreparing demo content\u001b[39m\r\r\n"]
+[55.539791, "o", "\u001b[999D\u001b[2A\u001b[J"]
+[55.540011, "o", "\u001b[?25h\r\r\n \u001b[34m✦ Preparing demo content\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mCreated data directory \"/home/user/demo/star_wars/.data\".\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mNo database dump file was found in \"/home/user/demo/star_wars/.data\" directory.\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[2mFetched demo database from https://github.com/drevops/vortex/releases/download/1.37.0/db.demo.sql.\u001b[22m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n\r\r\n \u001b[32m✓ Demo content prepared\u001b[39m\r\r\n\r\r\n\r\r\n \u001b[A\u001b[A\u001b[A\u001b[A\r\r\n\r\r\n"]
+[55.556698, "o", "\r\r\n \u001b[90m┌───────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32mFinished installing Vortex\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32m──────────────────────────\u001b[39m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Add and commit all files:\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m git add -A\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m git commit -m \"Initial commit.\"\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└───────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
+[55.570344, "o", "\u001b[?25l"]
+[55.572849, "o", "\r\r\n\u001b[90m ┌\u001b[39m \u001b[36mRun the site build now?\u001b[39m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m \u001b[2m○ Yes /\u001b[22m \u001b[32m●\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\u001b[90m Takes ~5-10 min; output will be streamed. You can skip and run later with…\u001b[39m\r\r\n"]
+[57.576265, "o", "\u001b[1G\u001b[5A\u001b[J\r\r\n\u001b[90m ┌\u001b[39m \u001b[2mRun the site build now?\u001b[22m \u001b[90m─────────────────────────────────────┐\u001b[39m\r\r\n\u001b[90m │\u001b[39m No \u001b[90m│\u001b[39m\r\r\n\u001b[90m └──────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n\u001b[?25h"]
+[57.584202, "o", "\r\r\n \u001b[90m┌────────────────────────────────────────────────────────────────────────────┐\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32mReady to build\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[32m──────────────\u001b[39m\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Build the site:\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m ahoy build\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m"]
+[57.584266, "o", "│\u001b[39"]
+[57.584485, "o", "m\r\r\n \u001b[90m│\u001b[39m\u001b[39m Setup GitHub Actions:\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m https://www.vortextemplate.com/docs/continuous-integration/github-actions#\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m onboarding\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m│\u001b[39m\u001b[39m \u001b[39m\u001b[90m│\u001b[39m\r\r\n \u001b[90m└────────────────────────────────────────────────────────────────────────────┘\u001b[39m\r\r\n\r\r\n"]
+[57.593519, "x", "0"]
diff --git a/.vortex/docs/static/img/installer.png b/.vortex/docs/static/img/installer.png
index 821fd397f5..7c08cda886 100644
Binary files a/.vortex/docs/static/img/installer.png and b/.vortex/docs/static/img/installer.png differ
diff --git a/.vortex/docs/static/img/installer.svg b/.vortex/docs/static/img/installer.svg
index b5d05f1a2c..91d2d9f124 100644
--- a/.vortex/docs/static/img/installer.svg
+++ b/.vortex/docs/static/img/installer.svg
@@ -1 +1 @@
-
\ No newline at end of file
+──────────────────────────────────────────────────────────────────────────────██╗██╗██████╗██████╗████████╗███████╗██╗██╗██║██║██╔═══██╗██╔══██╗╚══██╔══╝██╔════╝╚██╗██╔╝██║██║██║██║██████╔╝██║█████╗╚███╔╝╚██╗██╔╝██║██║██╔══██╗██║██╔══╝██╔██╗╚████╔╝╚██████╔╝██║██║██║███████╗██╔╝██╗╚═══╝╚═════╝╚═╝╚═╝╚═╝╚══════╝╚═╝╚═╝DrupalprojecttemplatebyDrevOpsInstallerversion:development┌───────────────────────────────────────────────────────────────────────┐│WelcometotheVortexinteractiveinstaller││───────────────────────────────────────────││││Thistoolwillguideyouthroughinstallingthelatestdevelopment││versionofVortexintoyourproject.│││Youwillbeaskedafewquestionstotailortheconfigurationtoyour││site.││Nochangeswillbemadeuntilyouconfirmeverythingattheend.││PressCtrl+Catanytimetoexittheinstaller.││PressCtrl+Uatanytimetogobacktothepreviousstep.│└────────────────────────────────────────────└───────────────────────────────────────────────└───────────────────────────────────────────────────────────────────────┘✦ValidatingrepositoryandreferenceCheckingrepository"/home/user/vortex"andreference"HEAD"✓RepositoryandreferencevalidatedsuccessfullyPressanykeytocontinue... General information ┌Sitename(1/36)────────────────────────────────────────────┐└──────────────────────────────────────────────────────────────┘Wewillusethisnameintheprojectanddocumentation.│St │┌Sitename(1/36)────────────────────────────────────────────┐│StarWars││star_wars │┌Sitemachinename(2/36)────────────────────────────────────┐│star_wars│┌Organizationname(3/36)────────────────────────────────────┐│E.g.MyOrg││Re │┌Organizationname(3/36)────────────────────────────────────┐│Rebellion│┌Organizationmachinename(4/36)────────────────────────────┐│rebellion │Wewillusethisnameinthecode.┌Organizationmachinename(4/36)────────────────────────────┐│rebellion│┌Publicdomain(5/36)────────────────────────────────────────┐│star-wars.com │┌Publicdomain(5/36)────────────────────────────────────────┐│star-wars.com│ Drupal ┌Howwouldyoulikeyoursitetobecreatedonthefirstrun?(6/36)┐│││Choosehowyoursitewillbecreatedthefirsttimeafterthis││installerfinishes:││○Drupal,installedfromprofile││Createsanewsitebypopulatingafreshdatabase││fromoneofthestandardDrupalinstallationprofiles.││○DrupalCMS,installedfromprofile││fromtheDrupalCMSrecipe.││○Drupal,loadedfromthedemodatabase││Createsasitebyloadinganexistingdemodatabase││providedwiththeinstaller.│├─────────────────────────────────────────────────────────────────────┤│○Drupal,installedfromprofile││○DrupalCMS,installedfromprofile││›●Drupal,loadedfromthedemodatabase│└─────────────────────────────────────────────────────────────────────┘┌Howwouldyoulikeyoursitetobecreatedonthefirstrun?(6/36)┐│○DrupalCMS,installedfromprofile│Drupal,loadedfromthedemodatabase│Drupal,loadedfromthedemodatabase│┌Profile(7/36)──────────────────────────────────────────────┐│Standard│┌Modules(8/36)──────────────────────────────────────────────┐│›◼Admintoolbar┃││◼Coffee│││◼Configsplit│││◼Configupdate│││◼Devel│││◼Drupalhelpers│││◼Environmentindicator│││◼Generatedcontent│││◼Pathauto│││◼Redirect││┌Modules(8/36)──────────────────────────────────────────────┐│Admintoolbar││Coffee││Configsplit││Configupdate││Devel││Drupalhelpers││Environmentindicator││Generatedcontent││Pathauto││Redirect││Rerouteemail││Robots.txt││SDCDevel││Seckit││Shield││Stagefileproxy││Testmode││XMLSitemap│┌Custommodulesprefix(9/36)────────────────────────────────┐│sw│┌Custommodules(10/36)─────────────────────────────────────────────┐│Selectwhichcustommodulestoincludeinyourproject:││○Base││Startermodulewithcommonsiteutilities(mailhandling,││deployhooks)andtestscaffoldingforUnit,Kernel,││Functional,andFunctionalJavascripttests.││○Search││CustomSolrsearchintegrationmodule.RequirestheSolr││servicetobeselected.││○Demo││DemonstrateshowVortextoolingworks:includesacounter││blockwithCSS/JS,PHPUnitexampletestsacrossalltest││types,andaBehatfeature.Safetoremoveonrealprojects.│┌Custommodules(10/36)────────────────────────────────────────────┐│││Selectwhichcustommodulestoincludeinyourproject:││○Base││Startermodulewithcommonsiteutilities(mailhandling,││deployhooks)andtestscaffoldingforUnit,Kernel,││Functional,andFunctionalJavascripttests.││○Search││CustomSolrsearchintegrationmodule.RequirestheSolr││servicetobeselected.││○Demo││DemonstrateshowVortextoolingworks:includesacounter││blockwithCSS/JS,PHPUnitexampletestsacrossalltest││types,andaBehatfeature.Safetoremoveonrealprojects.│├────────────────────────────────────────────────────────────────────┤│Base-startermodulewithutilitiesandtestscaffolding││Search-customSolrsearchintegration││Demo-counterblockandexampleteststodemonstratetooling│└────────────────────────────────────────────────────────────────────┘┌Theme(11/36)───────────────────────────────────────────────┐│Custom(nextprompt)│┌Customthememachinename(12/36)───────────────────────────┐┌Customthememachinename(12/36)───────────────────────────┐┌Buildfront-endassetsinthecontainer?(13/36)────────────┐│●Yes/○No│Disabletobuildthemeassetsonthehostoraspartofdeployment.┌Buildfront-endassetsinthecontainer?(13/36)────────────┐│Yes│ Code repository ┌Repositoryprovider(14/36)─────────────────────────────────┐│││VortexoffersfullautomationwithGitHub,whilesupportfor││otherprovidersislimited.│├──────────────────────────────────────────────────────────────┤│○Other│┌Repositoryprovider(14/36)─────────────────────────────────┐│GitHub│┌Releaseversioningscheme(15/36)───────────────────────────┐│Chooseyourversioningscheme:││○CalendarVersioning(CalVer)││year.month.patch(E.g.,24.1.0)││https://calver.org││○SemanticVersioning(SemVer)││major.minor.patch(E.g.,1.0.0)│major.minor.patch(E.g.,1.0.0)││https://semver.org││○Other││Customversioningschemeofyourchoice.││›●CalendarVersioning(CalVer)││○SemanticVersioning(SemVer)│┌Releaseversioningscheme(15/36)───────────────────────────┐│CalendarVersioning(CalVer)│ Environment ┌Timezone(16/36)────────────────────────────────────────────┐│UTC│┌Services(17/36)────────────────────────────────────────────┐│›◼ClamAV││◼Solr││◼Redis┌Services(17/36)────────────────────────────────────────────┐│ClamAV││Solr││Redis│┌Developmenttools(18/36)───────────────────────────────────┐│›◼PHPCodeSniffer││◼│◼PHPStan││◼Rector││◼ESLint││◼Stylelint││◼Jest││◼PHPUnit││◼Behat││◼TwigCSFixer│┌Developmenttools(18/36)───────────────────────────────────┐│PHPCodeSniffer││PHPStan││Rector││ESLint││Stylelint││Jest││PHPUnit││Behat│Behat││TwigCSFixer│ Hosting ┌Hostingprovider(19/36)┌Hostingprovider(19/36)────────────────────────────────────┐│None│┌Customwebrootdirectory(20/36)───────────────────────────┐│web│ Deployment ┌Deploymenttypes(21/36)────────────────────────────────────┐│Customwebhook│ Workflow ┌Provisiontype(22/36)──────────────────────────────────────┐│Provisioningsetsupthesiteinanenvironmentusingan││alreadyassembledcodebase.││○Importfromdatabasedump││Provisionsthesitebyimportingadatabasedump││typicallycopiedfromproductionintolower││environments.││○Installfromprofile││ProvisionsthesitebyinstallingafreshDrupal││sitefromaprofileeverytimeanenvironmentis││created.││›●Importfromdatabasedump││○Installfromprofile│┌Provisiontype(22/36)──────────────────────────────────────┐│Importfromdatabasedump│┌Databasesource(23/36)─────────────────────────────────────┐│›●URLdownload││○FTPdownload││○Acquiabackup││○Lagoonenvironment││○Containerregistry││○S3bucket││○None│┌Databasesource(23/36)─────────────────────────────────────┐│URLdownload│┌Useaseconddatabaseformigrations?(24/36)───────────────┐│○Yes/●No│┌Useaseconddatabaseformigrations?(24/36)───────────────┐│No│ Notifications ┌Notificationchannels(25/36)───────────────────────────────┐│›◼Email││◻GitHub││◻JIRA│┌Notificationchannels(25/36)───────────────────────────────┐│Email│ Continuous Integration ┌ContinuousIntegrationprovider(26/36)─────────────────────┐│›●GitHubActions││○CircleCI││○None┌ContinuousIntegrationprovider(26/36)─────────────────────┐│GitHubActions│┌VisualregressiontestingwithDiffy?(27/36)───────────────┐│Diffy-poweredvisualregressionworkflowtocomparedeployed││environments.││Automaticallytriggerscomparisonsfordependency-update││pullrequestsmatchingtheconfiguredbranchpattern││(`deps/*`bydefault).││Runscomparisonsforpullrequeststaggedwiththe`VR`││labelandpostsastickycomment.││AlsosupportsmanualrunsagainstanyURL.│┌VisualregressiontestingwithDiffy?(27/36)───────────────┐┌ScanforcommittedsecretswithGitleaks?(28/36)───────────┐ Automations ┌Dependencyupdatesprovider(29/36)─────────────────────────┐│RenovateGitHubapp│┌Codecoverageprovider(30/36)──────────────────────────────┐┌Auto-assigntheauthortotheirPR?(31/36)─────────────────┐└─────────────────────────────────────────────────────────────────┘┌Auto-addaCONFLICTlabeltoaPRwhenconflictsoccur?(32/36)┐│Yes│ Documentation ┌Preserveprojectdocumentation?(33/36)─────────────────────┐┌Preserveprojectdocumentation?(33/36)─────────────────────┐ AI ┌ProvideAIagentinstructions?(34/36)──────────────────────┐┌ProvideAIagentinstructions?(34/36)──────────────────────┐ Installation summary ┌────────────────────────────────────┬────────────────────────────────────┐│Generalinformation│││Sitename│StarWars││Sitemachinename│star_wars││Organizationname│Rebellion││Organizationmachinename│rebellion││Publicdomain│star-wars.com││Drupal│││Starter│load_demodb││Modules│admin_toolbar,coffee,│││config_split,config_update,│││devel,drupal_helpers,│││environment_indicator,│││generated_content,pathauto,│││redirect,reroute_email,│││robotstxt,sdc_devel,seckit,│││shield,stage_file_proxy,│││testmode,xmlsitemap││Webroot│web││Profile│standard││Moduleprefix│sw││Custommodules│base,search,demo││Thememachinename│star_wars││Buildfront-endincontainer│Yes││Coderepository│││Codeprovider│github││Versionscheme│calver││Environment│││Timezone│UTC││Services│clamav,redis,solr││Tools│behat,eslint,jest,phpcs,│││phpstan,phpunit,rector,│││stylelint,twig_cs_fixer││Hosting│││Hostingprovider│none││Deployment│││Deploymenttypes│webhook││Workflow│││Provisiontype│database│Provisiontype│database││Databasesource│url││Migrationdatabase│No││Notifications│││Channels│email││ContinuousIntegration│││CIprovider│gha││Visualregressiontesting│No││SecretscanningwithGitleaks│Yes││Automations│││Dependencyupdatesprovider│renovatebot_app││Codecoverageprovider│none││Auto-assignPRauthor│Yes││Auto-addaCONFLICTlabeltoPRs│Yes││Documentation│││Preserveprojectdocumentation│Preserveprojectdocumentation│Yes││AI│││AIagentinstructions│Yes││Locations│││Currentdirectory│/home/user/vortex/.art│││ifacts/tmp/videos-workspace││Destinationdirectory│/home/user/vortex/.art│││ifacts/tmp/videos-workspace/star_w│││ars││Vortexrepository│/home/user/vortex││Vortexreference│HEAD│└────────────────────────────────────┴────────────────────────────────────┘Vortexwillbeinstalledintoyourproject'sdirectory"/home/user/demo/star_wars"┌ProceedwithinstallingVortex?─────────────────────────────┐ Starting project installation ✦DownloadingVortexDownloadingfrom"/home/user/vortex"repositoryatref✓Vortexdownloaded(develop)✦CustomizingVortexforyourproject✓Vortexwascustomizedforyourproject✦PreparingdestinationdirectoryCreateddirectory"/home/user/demo/star_wars".InitialisinganewGitrepositoryindirectory"/home/user/demo/star_wars".✓Destinationdirectoryisready✦Copyingfilestothedestinationdirectory✓Filescopiedtodestinationdirectory⠂Preparingdemocontent⠒Preparingdemocontent✦PreparingdemocontentCreateddatadirectory"/home/user/demo/star_wars/.data".Nodatabasedumpfilewasfoundin"/home/user/demo/star_wars/.data"directory.Fetcheddemodatabasefromhttps://github.com/drevops/vortex/releases/download/1.37.0/db.demo.sql.✓Democontentprepared┌───────────────────────────────────┐│FinishedinstallingVortex││──────────────────────────││││Addandcommitallfiles:││gitadd-A││gitcommit-m"Initialcommit."│└───────────────────────────────────┘┌Runthesitebuildnow?─────────────────────────────────────┐┌────────────────────────────────────────────────────────────────────────────┐│Readytobuild││──────────────││││Buildthesite:││ahoybuild│╚████╔╝╚██████╔╝██║██║╚████╔╝╚██████╔╝██║██║██⠂Validatingrepositoryandreference│starwars ││E.g.MySite│└─────────────────────────────────────└───────────────────────────────────────│StarWars │┌Sitemachinename(2/36)────────────────────────────────────┐Wewillusethisnamefortheprojectdirectoryandinthecode.│StarWarsOrg │└─────└─────────│Rebellion │WewillusethisnameinthecoDomainnamewithoutproDomainnamewithoutprotocolandDomainnamewithoutprotocolandtrailingslash.│Createsasitebyloadin│Createsasitebyloadinganexist└────────────────────────────────────────────────────────────└──────────────────────────────────────────────────────────────Use⬆and⬇.Appliesonlyonthefirstrunoftheinstaller.┌Profile(7/36)──────────────────────────────────────────────┐│›●Standard││○Minimal││○DemoUmami││○Custom(nextprompt)│Use⬆and⬇toselectwhichDrupalprofiletouse.│◼Configspli│◼Configsplit└───────────────────────└──────────────────────────└────└───────├──────────────────────────────────────├─────────────────────────────────────────│›◼Base-startermodulewithutilitiesandtestscaffolding││◼Search-customSolrsearchintegration││◼Demo-counterblockandexampleteststodemonstratetooling│Use⬆,⬇andSpacebartoselectoneormoremodules.├───────────────────────────────────────────├──────────────────────────────────────────────┌Theme(11/36)───────────────────────────────────────────────┐│○Olivero││○Claro││○Stark││›●Custom(nextprompt)│Use⬆and⬇toselectwhichDrupalthemetouse.WewilluseWewillusethisnamWewillusethisnameasacustomthemename│›●GitHub│Use⬆and⬇toselectyourcoderepositoryprovider.└────────────────────────────────────────────────────└───────────────────────────────────────────────────────│○OtherUse⬆and⬇toselectyourversionscheme.┌Timezone(16/36)────────────────────────────────────────────┐│UTC ││UTC│Use⬆and⬇,orstarttypingtoselectthetimezoneforyourproject.│◼Redis│Use⬆,⬇andSpacebartoselectoneormoreservices.└────────────────────────────────────────────────└───────────────────────────────────────────────────┌Deploymenttypes(21/36)───────────────────────────────┌Deploymenttypes(21/36)───────────────────────────────────└────────────────────────└───────────────────────────Use⬆and⬇toselecttheprovisiontype.└───────────└──────────────Use⬆and⬇toselectthedatabasefetchsource.AddsaseconddatabaseserviceforDrupaAddsaseconddatabaseserviceforDrupalmigratiAddsaseconddatabaseserviceforDrupalmigrations.│◻NewRelic││◻Slack││◻Webhook│Use⬆,⬇andSpacebartoselectoneormorenotificationchannels.Use⬆and⬇toselecttheCIprovider.│Automaticallytrig│Automaticallytriggerscompar│○Yes/│○Yes/●└────────────────────────────└───────────────────────────────└─────────────────────────────────────────│Ren│RenovateGitHub└───────────────────└──────────────────────┌Auto-add┌Auto-addaCONFLICT┌Auto-addaCONFLICTlabeltoaPRwhenconflictsoccur?(32/36)┐│●Yes/○No│HelpstokeepquicklyidentifyPRsthatneedattention.HelpstomaintaintheprojectdocumentationHelpstomaintaintheprojectdocumentationwithintheHelpstomaintaintheprojectdocumentationwithintherepository.ProvidesAIcodingagentsProvidesAIcodingagentswithbetterProvidesAIcodingagentswithbettercontextabouttheproject.│Modules│adm│Modules│admin_tool││shield,stage_file_││shield,stage_file_proxy,│Coderepos│Coderepository││││phpsta││ifacts/││ifacts/tmp/vide┌ProceedwithinstallingVortex?─────────────────────────────┐⠂⠂CustomizingVortexfor⠠CustomizingVortexforyourproject⠤CustomizingVortexforyourproject⠄CustomizingVortexforyourproject⠆CustomizingVortexforyourproject⠂Preparingdestinationdirectory⠂Copyingfilestothedestinationdirectory⠒Copyingfilestothedestinationdirectory⠐Copyingfilestothedestinationdirectory⠐Preparingdemocontent⠰Preparingdemocontent⠠Preparingdemocontent⠤Preparingdemocontent⠄Preparingdemocontent⠆Preparingdemocontent┌Runthesitebuildnow?─────────────────────────────────────┐Takes~5-10min;outputwillbestreamed.Youcanskipandrunlaterwith…│SetupGitHubActions:││https://www.vortextemplate.com/docs/continuous-integration/github-actions#││onboarding│└────────────────────────────────────────────────────────────────────────────┘
\ No newline at end of file
diff --git a/.vortex/installer/src/Prompts/Handlers/Tools.php b/.vortex/installer/src/Prompts/Handlers/Tools.php
index 83754951ea..28805c893b 100644
--- a/.vortex/installer/src/Prompts/Handlers/Tools.php
+++ b/.vortex/installer/src/Prompts/Handlers/Tools.php
@@ -30,6 +30,8 @@ class Tools extends AbstractHandler {
const JEST = 'jest';
+ const TWIG_CS_FIXER = 'twig_cs_fixer';
+
/**
* {@inheritdoc}
*/
@@ -68,6 +70,7 @@ public function default(array $responses): null|string|bool|array {
self::PHPUNIT,
self::RECTOR,
self::STYLELINT,
+ self::TWIG_CS_FIXER,
];
}
@@ -445,6 +448,21 @@ public static function getToolDefinitions(string $filter = 'all'): array {
],
],
+ self::TWIG_CS_FIXER => [
+ 'title' => 'Twig CS Fixer',
+ 'present' => fn(): mixed => File::contains($this->dstDir . '/composer.json', 'vincentlanglet/twig-cs-fixer') ||
+ File::exists($this->dstDir . '/.twig-cs-fixer.php'),
+ 'composer.json' => function (JsonManipulator $cj): void {
+ $cj->removeSubNode('require-dev', 'vincentlanglet/twig-cs-fixer');
+ },
+ 'files' => ['.twig-cs-fixer.php'],
+ 'strings' => ['/^.*\btwig-cs-fixer\b.*\n?/m'],
+ 'ahoy' => [
+ 'ahoy cli vendor/bin/twig-cs-fixer lint --fix',
+ 'ahoy cli vendor/bin/twig-cs-fixer lint',
+ ],
+ ],
+
// Tool groups with shared resources.
'backend_linting' => [
'tools' => [self::PHPCS, self::PHPSTAN, self::RECTOR],
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/-.twig-cs-fixer.php b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/-.twig-cs-fixer.php
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.ahoy.yml b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.ahoy.yml
new file mode 100644
index 0000000000..22e129cf40
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.ahoy.yml
@@ -0,0 +1,16 @@
+@@ -206,7 +206,6 @@
+ lint-fe:
+ usage: Lint front-end code.
+ cmd: |
+- ahoy cli vendor/bin/twig-cs-fixer lint
+ ahoy cli "yarn run lint"
+ ahoy cli "yarn run --cwd=\${WEBROOT}/themes/custom/\${DRUPAL_THEME} lint"
+
+@@ -238,7 +237,6 @@
+ lint-fe-fix:
+ usage: Fix lint issues of front-end code.
+ cmd: |
+- ahoy cli vendor/bin/twig-cs-fixer lint --fix
+ ahoy cli "yarn run lint-fix"
+ ahoy cli "yarn run --cwd=\${WEBROOT}/themes/custom/\${DRUPAL_THEME} lint-fix"
+
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.dockerignore b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.dockerignore
new file mode 100644
index 0000000000..ccae92dfb7
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.dockerignore
@@ -0,0 +1,8 @@
+@@ -40,7 +40,6 @@
+ **/.data
+ **/.logs
+ **/.phpunit.cache
+-**/.twig-cs-fixer.cache
+
+ # Database cache key files written into the workspace by the CI workflow.
+ db_cache_*
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.github/workflows/build-test-deploy.yml b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.github/workflows/build-test-deploy.yml
new file mode 100644
index 0000000000..9576f1ff6f
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.github/workflows/build-test-deploy.yml
@@ -0,0 +1,11 @@
+@@ -158,10 +158,6 @@
+ run: docker compose exec -T cli vendor/bin/rector --dry-run
+ continue-on-error: ${{ vars.VORTEX_CI_RECTOR_IGNORE_FAILURE == '1' }}
+
+- - name: Lint code with Twig CS Fixer
+- run: docker compose exec -T cli vendor/bin/twig-cs-fixer
+- continue-on-error: ${{ vars.VORTEX_CI_TWIG_CS_FIXER_IGNORE_FAILURE == '1' }}
+-
+ - name: Lint code with Gherkin Lint
+ run: docker compose exec -T cli vendor/bin/gherkinlint lint tests/behat/features
+ continue-on-error: ${{ vars.VORTEX_CI_GHERKIN_LINT_IGNORE_FAILURE == '1' }}
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.gitignore b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.gitignore
new file mode 100644
index 0000000000..ce68729374
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/.gitignore
@@ -0,0 +1,8 @@
+@@ -51,7 +51,6 @@
+ .data
+ .logs
+ .phpunit.cache
+-.twig-cs-fixer.cache
+
+ # Local override files.
+ /docker-compose.override.yml
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/composer.json b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/composer.json
new file mode 100644
index 0000000000..8b447ca73f
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig/composer.json
@@ -0,0 +1,10 @@
+@@ -57,8 +57,7 @@
+ "phpstan/phpstan": "__VERSION__",
+ "phpunit/phpunit": "__VERSION__",
+ "pyrech/composer-changelogs": "__VERSION__",
+- "rector/rector": "__VERSION__",
+- "vincentlanglet/twig-cs-fixer": "__VERSION__"
++ "rector/rector": "__VERSION__"
+ },
+ "conflict": {
+ "drupal/drupal": "*"
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/-.twig-cs-fixer.php b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/-.twig-cs-fixer.php
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.ahoy.yml b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.ahoy.yml
new file mode 100644
index 0000000000..22e129cf40
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.ahoy.yml
@@ -0,0 +1,16 @@
+@@ -206,7 +206,6 @@
+ lint-fe:
+ usage: Lint front-end code.
+ cmd: |
+- ahoy cli vendor/bin/twig-cs-fixer lint
+ ahoy cli "yarn run lint"
+ ahoy cli "yarn run --cwd=\${WEBROOT}/themes/custom/\${DRUPAL_THEME} lint"
+
+@@ -238,7 +237,6 @@
+ lint-fe-fix:
+ usage: Fix lint issues of front-end code.
+ cmd: |
+- ahoy cli vendor/bin/twig-cs-fixer lint --fix
+ ahoy cli "yarn run lint-fix"
+ ahoy cli "yarn run --cwd=\${WEBROOT}/themes/custom/\${DRUPAL_THEME} lint-fix"
+
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.circleci/config.yml b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.circleci/config.yml
new file mode 100644
index 0000000000..7bd7c213a3
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.circleci/config.yml
@@ -0,0 +1,581 @@
+# CircleCI configuration file for building, testing, and deploying.
+#
+# This configuration file uses the "docker" executor to run the Docker stack.
+#
+# A "runner" container, created from a specified container image, is used to
+# checkout source code and run commands defined in this file. Application Docker
+# containers defined in `docker-compose.yml` run on a *remote* Docker server
+# controlled by CircleCI.
+# The "runner" container uses Docker client to control the remote Docker server.
+version: '2.1'
+
+aliases:
+ # SSH key fingerprint to fetch the database.
+ # Replace this key fingerprint with your own and remove this comment.
+ - &db_ssh_fingerprint "SHA256:6d+U5QubT0eAWz+4N2wt+WM2qx6o4cvyvQ6xILETJ84"
+
+ # SSH key fingerprint to deploy code.
+ # Replace this key fingerprint with your own and remove this comment.
+ - &deploy_ssh_fingerprint "SHA256:6d+U5QubT0eAWz+4N2wt+WM2qx6o4cvyvQ6xILETJ84"
+
+ # Schedule to run nightly database build (to cache the database for the next day).
+ - &nightly_db_schedule "0 18 * * *"
+
+ # Shared runner container configuration applied to each job.
+ - &runner_config
+ working_directory: &working_directory ~/project
+ environment:
+ VORTEX_FETCH_DB_SSH_FINGERPRINT: *db_ssh_fingerprint
+ VORTEX_DEPLOY_SSH_FINGERPRINT: *deploy_ssh_fingerprint
+ docker:
+ # Using the 'runner' container where each job will be executed.
+ # This container has all the necessary tools to run a dockerized environment.
+ # https://github.com/drevops/ci-runner
+ # https://hub.docker.com/repository/docker/drevops/ci-runner/tags
+ - image: drevops/ci-runner:__VERSION__
+ auth:
+ username: ${VORTEX_CONTAINER_REGISTRY_USER}
+ password: ${VORTEX_CONTAINER_REGISTRY_PASS}
+ environment:
+ # Set runner timezone via UI to ensure that executed operations use correct timestamps.
+ # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+ TZ: UTC
+ # Set runner terminal capabilities.
+ TERM: xterm-256color
+ # Disable strict host key checking for SSH connections.
+ VORTEX_SSH_DISABLE_STRICT_HOST_KEY_CHECKING: "1"
+ # Remove all SSH keys from the runner container.
+ VORTEX_SSH_REMOVE_ALL_KEYS: "1"
+ # How often to refresh the cache of the DB dump. Refer to `date` command.
+ VORTEX_CI_DB_CACHE_TIMESTAMP: +%Y%m%d
+ # Use previous database caches on this branch as a fallback if the above cache
+ # does not match (for example, the cache is available only from the previous
+ # day). If "no" is set, the cache will be rebuilt from scratch.
+ VORTEX_CI_DB_CACHE_FALLBACK: "yes"
+ # Which branch to use as a source of DB caches.
+ VORTEX_CI_DB_CACHE_BRANCH: "develop"
+ # Directory to store test results.
+ VORTEX_CI_TEST_RESULTS: &test_results /tmp/tests
+ # Directory to store test artifacts.
+ VORTEX_CI_ARTIFACTS: &artifacts /tmp/artifacts
+ # Directory to use for artifact deployments.
+ VORTEX_DEPLOY_ARTIFACT_SRC: /tmp/workspace/code
+ # Source code location for artifact deployments.
+ VORTEX_DEPLOY_ARTIFACT_ROOT: *working_directory
+ # Report file location for artifact deployments.
+ VORTEX_DEPLOY_ARTIFACT_LOG: /tmp/artifacts/deployment_log.txt
+ # Check only minimal stack requirements.
+ VORTEX_DOCTOR_CHECK_MINIMAL: 1
+ # CI runner resource class.
+ # https://circleci.com/docs/2.0/configuration-reference/#resource_class
+ # Change to 'large' for faster builds.
+ resource_class: medium
+
+ - &step_setup_remote_docker
+ setup_remote_docker:
+ # Docker Layer Caching allows to significantly speed up builds by caching
+ # images built during previous runs.
+ # https://circleci.com/docs/2.0/docker-layer-caching/
+ docker_layer_caching: false
+ version: default
+
+ - &step_process_codebase_for_ci
+ run:
+ name: Process codebase to run in CI
+ command: |
+ find . -name "docker-compose.yml" -print0 | xargs -0 -I {} sh -c "sed -i -e ''/###/d'' {} && sed -i -e ''s/##//'' {}"
+ mkdir -p /tmp/workspace/code
+
+ - &load_variables_from_dotenv
+ run:
+ name: Load environment variables from .env file
+ # Load variables from .env file, respecting existing values, and make them available for the next steps.
+ command: t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && set +a && . "${t}" && export -p >> "$BASH_ENV"
+
+################################################################################
+# JOBS
+################################################################################
+
+jobs:
+
+ # Lint job runs in parallel with database and build jobs.
+ lint:
+ <<: *runner_config
+ steps:
+ - checkout
+ - *step_process_codebase_for_ci
+ - *load_variables_from_dotenv
+
+ - run:
+ name: Validate Composer configuration
+ command: composer validate --strict || [ "${VORTEX_CI_COMPOSER_VALIDATE_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Install Vortex tooling
+ command: ./scripts/vortex-tooling.sh
+
+ - *step_setup_remote_docker
+
+ - run:
+ name: Login to container registry
+ command: ./vendor/bin/vortex-login-container-registry
+
+ - run:
+ name: Lint Dockerfiles with Hadolint
+ command: |
+ for file in $(find .docker \( -name 'Dockerfile' -o -name '*.dockerfile' \)); do
+ echo "Linting ${file}" && cat "${file}" | docker run --rm -i hadolint/hadolint || [ "${VORTEX_CI_HADOLINT_IGNORE_FAILURE:-0}" -eq 1 ]
+ done
+
+ - run:
+ name: Lint Docker Compose files with DCLint
+ command: docker run --rm -v "${PWD}":/app zavoloklom/dclint:__VERSION__ . || [ "${VORTEX_CI_DCLINT_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Scan for committed secrets with Gitleaks
+ command: docker run --rm -v "${PWD}":/repo -w /repo ghcr.io/gitleaks/gitleaks:__VERSION__ dir . --no-banner || [ "${VORTEX_CI_GITLEAKS_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Build stack
+ command: docker compose up --no-deps --detach cli
+
+ - run:
+ name: Install development dependencies
+ command: |
+ docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c " \
+ if [ -n \"\${PACKAGE_TOKEN:-}\" ]; then composer config --global --auth github-oauth.github.com \"\${PACKAGE_TOKEN}\"; fi && \
+ COMPOSER_MEMORY_LIMIT=-1 composer --ansi install --prefer-dist"
+ docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c "yarn install --frozen-lockfile"
+
+ - run:
+ name: Audit Composer packages
+ command: docker compose exec -T cli composer audit || [ "${VORTEX_CI_COMPOSER_AUDIT_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Validate Composer configuration is normalized
+ command: docker compose exec -T cli composer normalize --dry-run || [ "${VORTEX_CI_COMPOSER_NORMALIZE_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Lint code with PHPCS
+ command: docker compose exec -T cli vendor/bin/phpcs || [ "${VORTEX_CI_PHPCS_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Lint code with PHPStan
+ command: docker compose exec -T cli vendor/bin/phpstan || [ "${VORTEX_CI_PHPSTAN_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Lint code with Rector
+ command: docker compose exec -T cli vendor/bin/rector --dry-run || [ "${VORTEX_CI_RECTOR_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Lint code with Gherkin Lint
+ command: docker compose exec -T cli vendor/bin/gherkinlint lint tests/behat/features || [ "${VORTEX_CI_GHERKIN_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Lint module code with NodeJS linters
+ command: docker compose exec -T cli bash -c "yarn run lint" || [ "${VORTEX_CI_NODEJS_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Lint theme code with NodeJS linters
+ command: |
+ [ "${VORTEX_FRONTEND_BUILD_SKIP:-0}" -eq 1 ] && exit 0
+ docker compose exec -T cli bash -c "yarn --cwd=\${WEBROOT}/themes/custom/\${DRUPAL_THEME} run lint" || [ "${VORTEX_CI_NODEJS_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ # Database handling is a first step of the build.
+ # - $VORTEX_CI_DB_CACHE_TIMESTAMP is used to determine if a fresh DB dump
+ # should be fetched for the current build. Usually, a daily database dump
+ # is sufficient for development activities.
+ # - $VORTEX_CI_DB_CACHE_FALLBACK is used if the cache did not match $VORTEX_CI_DB_CACHE_TIMESTAMP.
+ # This allows to rely on the cache from the previous days within the same branch.
+ database: &job-database
+ <<: *runner_config
+ steps:
+ - attach_workspace:
+ at: /tmp/workspace
+
+ - add_ssh_keys:
+ fingerprints:
+ - *db_ssh_fingerprint
+
+ - checkout
+ - *step_process_codebase_for_ci
+ - *load_variables_from_dotenv
+
+ - run:
+ name: Install Vortex tooling
+ command: ./scripts/vortex-tooling.sh
+
+ - *step_setup_remote_docker
+
+ - run:
+ name: Create cache keys for database caching as files
+ command: |
+ echo "${VORTEX_CI_DB_CACHE_BRANCH}" | tee /tmp/db_cache_branch
+ echo "${VORTEX_CI_DB_CACHE_FALLBACK/no/${CIRCLE_BUILD_NUM}}" | tee /tmp/db_cache_fallback
+ date "${VORTEX_CI_DB_CACHE_TIMESTAMP}" | tee /tmp/db_cache_timestamp
+ echo "yes" | tee /tmp/db_cache_fallback_yes
+
+ - restore_cache:
+ keys:
+ # Restore DB cache based on the cache strategy set by the cache keys below.
+ # https://circleci.com/docs/2.0/caching/#restoring-cache
+ # Bump the last segment of the version prefix below to force a cache reset.
+ # Lookup cache based on the default branch and a timestamp. Allows
+ # to use cache from the very first build on the day (sanitized database dump, for example).
+ - __VERSION__-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback" }}-{{ checksum "/tmp/db_cache_timestamp" }}
+ # Fallback to caching by default branch name only. Allows to use
+ # cache from the branch build on the previous day.
+ - __VERSION__-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback" }}-
+
+ - run:
+ name: Fetch DB
+ command: VORTEX_FETCH_DB_SEMAPHORE=/tmp/fetch-db-fresh ./vendor/bin/vortex-fetch-db
+ no_output_timeout: 30m
+
+ # Execute commands after database fetch script finished: if the
+ # DB dump was fetched - build the site (to ensure that the DB dump
+ # is valid) and export the DB using selected method (to support
+ # "file-to-image" or "image-to-file" conversions).
+ # Note that configuration changes and the DB updates are not applied, so
+ # the database will be cached in the same state as fetched.
+ - run:
+ name: Export DB after fetch
+ command: |
+ [ ! -f /tmp/fetch-db-fresh ] && echo "==> Database fetch semaphore file is missing. DB export will not proceed." && exit 0
+ ./vendor/bin/vortex-login-container-registry
+ docker compose up --detach && sleep 15
+ docker compose exec cli mkdir -p .data && docker compose cp -L .data/db.sql cli:/app/.data/db.sql || true
+ docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c "VORTEX_PROVISION_POST_OPERATIONS_SKIP=1 ./vendor/bin/vortex-provision"
+ grep -q ^VORTEX_DB_IMAGE .env && rm .data/db.sql || true
+ ./vendor/bin/vortex-export-db db.sql
+ docker compose exec -T cli test -f /app/.data/db.sql && docker compose cp -L cli:/app/.data/db.sql .data/db.sql || true
+ no_output_timeout: 30m
+
+ # Deploy the freshly-exported database image to the container registry.
+ # No-op unless a fresh DB was fetched (the fetch semaphore), the project
+ # uses database-in-image storage (VORTEX_DB_IMAGE), and deployment was
+ # requested (VORTEX_EXPORT_DB_CONTAINER_REGISTRY_PUSH_PROCEED, in the script).
+ - run:
+ name: Deploy DB image
+ command: |
+ [ -z "${VORTEX_DB_IMAGE:-}" ] && echo "==> Database-in-image storage is not used. DB image deployment will not proceed." && exit 0
+ [ ! -f /tmp/fetch-db-fresh ] && echo "==> No freshly fetched database. DB image deployment will not proceed." && exit 0
+ ./vendor/bin/vortex-push-db-image
+ no_output_timeout: 30m
+
+ - save_cache:
+ # Save cache per default branch and the timestamp.
+ # The cache will not be saved if it already exists.
+ # Note that the cache fallback flag is enabled for this case in order
+ # to save cache even if the fallback is not used when restoring it.
+ key: __VERSION__-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback_yes" }}-{{ checksum "/tmp/db_cache_timestamp" }}
+ paths:
+ - /root/project/.data
+
+ # Nightly database job. Same as above, but with additional variables set.
+ # Triggered by the "nightly-db" schedule configured in CircleCI UI.
+ database-nightly:
+ <<: *job-database
+ environment:
+ VORTEX_FETCH_DB_SSH_FINGERPRINT: *db_ssh_fingerprint
+ VORTEX_DEPLOY_SSH_FINGERPRINT: *deploy_ssh_fingerprint
+ # Enforce fresh DB build (do not rely on fallback caches).
+ VORTEX_CI_DB_CACHE_FALLBACK: 'no'
+ # Always use fresh base image for the database (if database-in-image storage is used).
+ VORTEX_DB_IMAGE_BASE: drevops/mariadb-drupal-data:__VERSION__
+ # Deploy container image (if database-in-image storage is used).
+ VORTEX_EXPORT_DB_CONTAINER_REGISTRY_PUSH_PROCEED: 1
+ # Do not build the Drupal front-end.
+ VORTEX_FRONTEND_BUILD_SKIP: 1
+
+ # Build and test is a second step of the build. The testing is performed
+ # within the same job to save time on provisioning during the job.
+ build: &job_build
+ <<: *runner_config
+ parallelism: 2
+ steps:
+ - attach_workspace:
+ at: /tmp/workspace
+
+ - checkout
+ - *step_process_codebase_for_ci
+ - *load_variables_from_dotenv
+
+ - run:
+ name: Validate Composer configuration
+ command: composer validate --strict || [ "${VORTEX_CI_COMPOSER_VALIDATE_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Install Vortex tooling
+ command: ./scripts/vortex-tooling.sh
+
+ - run:
+ name: Set cache keys for database caching
+ command: |
+ echo "${VORTEX_CI_DB_CACHE_BRANCH}" | tee /tmp/db_cache_branch
+ echo "yes" | tee /tmp/db_cache_fallback_yes
+ echo "$(date ${VORTEX_CI_DB_CACHE_TIMESTAMP})" | tee /tmp/db_cache_timestamp
+
+ - restore_cache:
+ keys:
+ # Use cached artifacts from previous builds of this branch.
+ # https://circleci.com/docs/2.0/caching/#restoring-cache
+ - __VERSION__-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback_yes" }}-{{ checksum "/tmp/db_cache_timestamp" }}
+ - __VERSION__-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback_yes" }}-
+
+ - *step_setup_remote_docker
+
+ - run:
+ name: Login to container registry
+ command: ./vendor/bin/vortex-login-container-registry
+
+ - run:
+ name: Build stack
+ command: docker compose up --detach && docker builder prune --all --force
+
+ - run:
+ name: Export built codebase
+ command: |
+ echo "${VORTEX_DEPLOY_TYPES:-}" | grep -vq "artifact" && exit 0 || true
+ mkdir -p "/tmp/workspace/code"
+ docker compose cp -L cli:"/app/." "/tmp/workspace/code"
+ du -sh "/tmp/workspace/code"
+
+ - run:
+ name: Install development dependencies
+ command: |
+ docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c " \
+ if [ -n \"\${PACKAGE_TOKEN:-}\" ]; then composer config --global --auth github-oauth.github.com \"\${PACKAGE_TOKEN}\"; fi && \
+ COMPOSER_MEMORY_LIMIT=-1 composer --ansi install --prefer-dist"
+ docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c "yarn install --frozen-lockfile"
+
+ - run:
+ name: Provision site
+ command: |
+ if [ -f .data/db.sql ]; then
+ docker compose exec cli mkdir -p .data
+ docker compose cp -L .data/db.sql cli:/app/.data/db.sql
+ fi
+ docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli ./vendor/bin/vortex-provision
+ no_output_timeout: 30m
+
+ - run:
+ name: Test with Jest
+ command: docker compose exec -T cli bash -c "yarn test" || [ "${VORTEX_CI_JEST_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Test with PHPUnit
+ command: |
+ [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
+ docker compose exec -T cli vendor/bin/phpunit || [ "${VORTEX_CI_PHPUNIT_IGNORE_FAILURE:-0}" -eq 1 ]
+
+ - run:
+ name: Process PHPUnit logs and coverage
+ command: |
+ [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
+ mkdir -p "${VORTEX_CI_ARTIFACTS}"
+ if docker compose ps --services --filter "status=running" | grep -q cli && docker compose exec cli test -d /app/.logs; then
+ docker compose cp cli:/app/.logs/. "${VORTEX_CI_ARTIFACTS}/"
+ fi
+
+ - run:
+ name: Extract code coverage
+ command: |
+ [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
+ RATE=$(grep -om1 'line-rate="[0-9.]*"' /tmp/artifacts/coverage/phpunit/cobertura.xml | tr -cd '0-9.')
+ PERCENT=$(awk "BEGIN {printf \"%.2f\", $RATE*100}")
+ echo "Coverage: $PERCENT% (threshold: ${VORTEX_CI_CODE_COVERAGE_THRESHOLD:-90}%)"
+ echo "export COVERAGE_PERCENT=${PERCENT}" >> "${BASH_ENV}"
+
+ - run:
+ name: Post coverage summary as PR comment
+ command: |
+ [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
+ [ "${VORTEX_CI_CODE_COVERAGE_PR_COMMENT_SKIP:-0}" = "1" ] && exit 0
+ .circleci/post-coverage-comment.sh /tmp/artifacts/coverage/phpunit/coverage.txt
+
+ - run:
+ name: Check code coverage threshold
+ command: |
+ [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
+ if [ "${COVERAGE_PERCENT//.}" -lt "$((${VORTEX_CI_CODE_COVERAGE_THRESHOLD:-90}*100))" ]; then
+ echo "FAIL: coverage ${COVERAGE_PERCENT}% is below threshold ${VORTEX_CI_CODE_COVERAGE_THRESHOLD:-90}%"
+ exit 1
+ fi
+
+ - run:
+ name: Validate Single Directory Components
+ command: |
+ [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
+ [ "${VORTEX_FRONTEND_BUILD_SKIP:-0}" -eq 1 ] && exit 0
+ output=$(docker compose exec -T cli vendor/bin/drush sdc-devel:validate "${DRUPAL_THEME}" 2>&1)
+ echo "${output}"
+ if echo "${output}" | grep -qE 'Critical|Errors?|Warnings?'; then
+ echo "SDC validation reported problems."
+ [ "${VORTEX_CI_SDC_DEVEL_IGNORE_FAILURE:-0}" -eq 1 ] || exit 1
+ fi
+
+ - run:
+ name: Test with Behat
+ command: |
+ if [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ]; then export VORTEX_CI_BEHAT_PROFILE="${VORTEX_CI_BEHAT_PROFILE:-p${CIRCLE_NODE_INDEX}}"; fi
+ echo "Running with ${VORTEX_CI_BEHAT_PROFILE:-default} profile"
+ docker compose exec -T cli php -d memory_limit=-1 vendor/bin/behat --colors --strict --profile="${VORTEX_CI_BEHAT_PROFILE:-default}" || \
+ docker compose exec -T cli php -d memory_limit=-1 vendor/bin/behat --colors --strict --rerun --profile="${VORTEX_CI_BEHAT_PROFILE:-default}" || \
+ [ "${VORTEX_CI_BEHAT_IGNORE_FAILURE:-0}" -eq 1 ]
+ no_output_timeout: 30m
+
+ - run:
+ name: Process test logs and artifacts
+ command: |
+ mkdir -p "${VORTEX_CI_TEST_RESULTS}" "${VORTEX_CI_ARTIFACTS}"
+ if docker compose ps --services --filter "status=running" | grep -q cli && docker compose exec cli test -d /app/.logs; then
+ docker compose cp cli:/app/.logs/. "${VORTEX_CI_ARTIFACTS}/"
+ if docker compose exec -T cli sh -c '[ -d /app/.logs/test_results/ ]'; then
+ docker compose cp cli:/app/.logs/test_results/. "${VORTEX_CI_TEST_RESULTS}/"
+ fi
+ fi
+ when: always
+
+ - store_test_results:
+ path: *test_results
+
+ - store_artifacts:
+ path: *artifacts
+
+ - persist_to_workspace:
+ root: /tmp/workspace
+ paths:
+ - code
+
+ # Deploy primary branches.
+ deploy: &job_deploy
+ <<: *runner_config
+ steps:
+ - attach_workspace:
+ at: /tmp/workspace
+
+ - add_ssh_keys:
+ fingerprints:
+ - *deploy_ssh_fingerprint
+
+ - checkout
+ - *step_process_codebase_for_ci
+ - *load_variables_from_dotenv
+
+ - run:
+ name: Check if deployment should be skipped
+ command: |
+ if [ "${CIRCLE_PULL_REQUEST}" != "" ] && echo "${CIRCLE_BRANCH}" | grep -q "^project/"; then
+ echo "Skipping deployment - PR from project/* branch"
+ circleci-agent step halt
+ fi
+
+ - run:
+ name: Install Vortex tooling
+ command: ./scripts/vortex-tooling.sh
+
+ - run:
+ name: Deploy
+ command: |
+ VORTEX_DEPLOY_BRANCH="${CIRCLE_BRANCH}" \
+ VORTEX_DEPLOY_PR="$(echo ${CIRCLE_PULL_REQUEST} | cut -d'/' -f 7)" \
+ VORTEX_DEPLOY_PR_HEAD=${CIRCLE_SHA1} \
+ ./vendor/bin/vortex-deploy
+ no_output_timeout: 30m
+
+ - store_artifacts:
+ path: *artifacts
+
+ # Deploy tags.
+ deploy-tags: &job-deploy-tags
+ <<: *runner_config
+ steps:
+ - attach_workspace:
+ at: /tmp/workspace
+
+ - add_ssh_keys:
+ fingerprints:
+ - *deploy_ssh_fingerprint
+
+ - checkout
+ - *step_process_codebase_for_ci
+ - *load_variables_from_dotenv
+
+ - run:
+ name: Install Vortex tooling
+ command: ./scripts/vortex-tooling.sh
+
+ - run:
+ name: Deploy
+ command: VORTEX_DEPLOY_MODE="tag" ./vendor/bin/vortex-deploy
+ no_output_timeout: 30m
+
+ - store_artifacts:
+ path: *artifacts
+
+################################################################################
+# WORKFLOWS
+################################################################################
+
+workflows:
+ # Commit workflow. Runs for every commit push to the remote repository.
+ commit:
+ jobs:
+ - database:
+ filters:
+ tags:
+ only: /.*/
+ - lint:
+ filters:
+ tags:
+ only: /.*/
+ - build:
+ requires:
+ - database
+ filters:
+ tags:
+ only: /.*/
+ - deploy:
+ requires:
+ - build
+ - lint
+ filters:
+ branches:
+ # Allowed branches:
+ # - production, main, master, develop, ci, cisomething
+ # - project/description
+ # - deps/*
+ # - feature/description, feature/123-description
+ # - bugfix/description, bugfix/123-description
+ # - release/__VERSION__, release/__VERSION__ (per https://semver.org/)
+ # - release/2023-04-17, release/2023-04-17.123 (date-based)
+ # - hotfix/__VERSION__, hotfix/__VERSION__ (per https://semver.org/)
+ # - hotfix/2023-04-17, hotfix/2023-04-17.123 (date-based)
+ only: /^(production|main|master|develop)$|^project\/[a-zA-Z0-9\-\.]+|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/
+ tags:
+ ignore: /.*/
+ - deploy-tags:
+ requires:
+ - build
+ - lint
+ filters:
+ branches:
+ ignore: /.*/
+ tags:
+ # Allowed tags:
+ # - __VERSION__, __VERSION__ (per https://semver.org/)
+ # - 2023-04-17, 2023-04-17.123 (date-based)
+ only: /^[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/
+
+ # Nightly database workflow runs overnight to capture fresh database and cache it.
+ nightly-db:
+ triggers:
+ - schedule:
+ cron: *nightly_db_schedule
+ filters:
+ branches:
+ only:
+ - develop
+ jobs:
+ - database-nightly
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.circleci/post-coverage-comment.sh b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.circleci/post-coverage-comment.sh
new file mode 100755
index 0000000000..d9e7374090
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.circleci/post-coverage-comment.sh
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+##
+## Post code coverage summary as a PR comment on GitHub.
+##
+## Minimizes previous coverage comments before posting a new one.
+##
+## Environment variables:
+## CIRCLE_PULL_REQUEST - CircleCI PR URL.
+## GITHUB_TOKEN - GitHub token for API access.
+## CIRCLE_PROJECT_USERNAME - GitHub org/user.
+## CIRCLE_PROJECT_REPONAME - GitHub repo name.
+## VORTEX_CI_CODE_COVERAGE_THRESHOLD - Coverage threshold percentage (default: 90).
+##
+## Usage:
+## .circleci/post-coverage-comment.sh /path/to/coverage.txt
+
+set -euo pipefail
+
+COVERAGE_FILE="${1:-}"
+
+if [ -z "${COVERAGE_FILE}" ] || [ ! -f "${COVERAGE_FILE}" ]; then
+ echo "ERROR: Coverage file not found: ${COVERAGE_FILE}" >&2
+ exit 1
+fi
+
+if [ -z "${CIRCLE_PULL_REQUEST:-}" ]; then
+ echo "Not a pull request. Skipping."
+ exit 0
+fi
+
+if [ -z "${GITHUB_TOKEN:-}" ]; then
+ echo "GITHUB_TOKEN is not set. Skipping."
+ exit 0
+fi
+
+COVERAGE_SUMMARY=$(awk '/^ *Summary:/{f=1;next} f && /^$/{exit} f' "${COVERAGE_FILE}")
+COVERAGE_DETAILS=$(awk 'BEGIN{s=0} /^ *Summary:/{s=1} s==1 && /^$/{s=2;next} s==2' "${COVERAGE_FILE}")
+PR_NUMBER=$(echo "${CIRCLE_PULL_REQUEST}" | cut -d'/' -f 7)
+REPO_SLUG="${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}"
+THRESHOLD="${VORTEX_CI_CODE_COVERAGE_THRESHOLD:-90}"
+
+MARKER=""
+
+BODY=$(jq -n --arg body "**Code coverage** (threshold: ${THRESHOLD}%)
+\`\`\`
+${COVERAGE_SUMMARY}
+\`\`\`
+
+Per-class coverage
+
+\`\`\`
+${COVERAGE_DETAILS}
+\`\`\`
+
+${MARKER}" '{body: $body}')
+
+# Minimize previous coverage comments.
+COMMENTS_JSON=$(curl -s \
+ -H "Authorization: token ${GITHUB_TOKEN}" \
+ -H "Accept: application/vnd.github.v3+json" \
+ "https://api.github.com/repos/${REPO_SLUG}/issues/${PR_NUMBER}/comments?per_page=100")
+
+EXISTING_IDS=$(echo "${COMMENTS_JSON}" | jq -r '.[] | select(.body | contains("")) | .node_id')
+
+for NODE_ID in ${EXISTING_IDS}; do
+ GRAPHQL_BODY=$(jq -n --arg id "${NODE_ID}" '{query: "mutation($id:ID!){minimizeComment(input:{subjectId:$id,classifier:OUTDATED}){minimizedComment{isMinimized}}}", variables: {id: $id}}')
+ curl -s -X POST \
+ -H "Authorization: bearer ${GITHUB_TOKEN}" \
+ -H "Content-Type: application/json" \
+ "https://api.github.com/graphql" \
+ -d "${GRAPHQL_BODY}"
+done
+
+# Post new coverage comment.
+curl -s -X POST \
+ -H "Authorization: token ${GITHUB_TOKEN}" \
+ -H "Accept: application/vnd.github.v3+json" \
+ "https://api.github.com/repos/${REPO_SLUG}/issues/${PR_NUMBER}/comments" \
+ -d "${BODY}"
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.dockerignore b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.dockerignore
new file mode 100644
index 0000000000..91caaf5401
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.dockerignore
@@ -0,0 +1,11 @@
+@@ -40,10 +40,6 @@
+ **/.data
+ **/.logs
+ **/.phpunit.cache
+-**/.twig-cs-fixer.cache
+-
+-# Database cache key files written into the workspace by the CI workflow.
+-db_cache_*
+
+ # Local override files.
+ docker-compose.override.yml
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.github/workflows/-build-test-deploy.yml b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.github/workflows/-build-test-deploy.yml
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.gitignore b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.gitignore
new file mode 100644
index 0000000000..ce68729374
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/.gitignore
@@ -0,0 +1,8 @@
+@@ -51,7 +51,6 @@
+ .data
+ .logs
+ .phpunit.cache
+-.twig-cs-fixer.cache
+
+ # Local override files.
+ /docker-compose.override.yml
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/README.md b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/README.md
new file mode 100644
index 0000000000..3153d5817e
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/README.md
@@ -0,0 +1,9 @@
+@@ -9,7 +9,7 @@
+
+ Drupal 11 implementation of star wars for star wars Org
+
+-[](https://github.com/star_wars_org/star_wars/actions/workflows/build-test-deploy.yml)
++[](https://circleci.com/gh/star_wars_org/star_wars)
+
+ 
+
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/composer.json b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/composer.json
new file mode 100644
index 0000000000..8b447ca73f
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/composer.json
@@ -0,0 +1,10 @@
+@@ -57,8 +57,7 @@
+ "phpstan/phpstan": "__VERSION__",
+ "phpunit/phpunit": "__VERSION__",
+ "pyrech/composer-changelogs": "__VERSION__",
+- "rector/rector": "__VERSION__",
+- "vincentlanglet/twig-cs-fixer": "__VERSION__"
++ "rector/rector": "__VERSION__"
+ },
+ "conflict": {
+ "drupal/drupal": "*"
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/docs/ci.md b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/docs/ci.md
new file mode 100644
index 0000000000..542f580601
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/docs/ci.md
@@ -0,0 +1,12 @@
+@@ -5,9 +5,9 @@
+
+ ## CI provider
+
+-This project uses [GitHub Actions](https://github.com/features/actions).
++This project uses [CircleCI](https://circleci.com/).
+
+-See [GitHub Actions documentation](https://www.vortextemplate.com/docs/continuous-integration/github-actions)
++See [CircleCI documentation](https://www.vortextemplate.com/docs/continuous-integration/circleci)
+ for setup and configuration details.
+
+ ## Project-specific configuration
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/tests/phpunit/CircleCiConfigTest.php b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/tests/phpunit/CircleCiConfigTest.php
new file mode 100644
index 0000000000..8d12726459
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/tests/phpunit/CircleCiConfigTest.php
@@ -0,0 +1,259 @@
+config = Yaml::decode($file);
+ }
+
+ /**
+ * Tests for deploy branch regex.
+ *
+ * @see https://semver.org/
+ */
+ #[DataProvider('dataProviderDeployBranchRegex')]
+ public function testDeployBranchRegex(string $branch, bool $expected = TRUE): void {
+ $pattern = $this->config['workflows']['commit']['jobs'][3]['deploy']['filters']['branches']['only'];
+ $result = preg_match($pattern, $branch);
+ $this->assertEquals($expected, $result);
+ }
+
+ /**
+ * Data provider for testDeployBranchRegex().
+ */
+ public static function dataProviderDeployBranchRegex(): \Iterator {
+ // Positive branches.
+ yield ['production'];
+ yield ['main'];
+ yield ['master'];
+ yield ['develop'];
+
+ yield ['ci'];
+ yield ['cisomething'];
+
+ yield ['release/__VERSION__'];
+ yield ['release/__VERSION__'];
+ yield ['hotfix/__VERSION__'];
+ yield ['hotfix/__VERSION__'];
+
+ yield ['release/2023-04-17'];
+ yield ['release/2023-04-17.1'];
+ yield ['hotfix/2023-04-17'];
+ yield ['hotfix/2023-04-17.1'];
+
+ yield ['feature/description'];
+ yield ['feature/Description'];
+ yield ['feature/Description-With-Hyphens'];
+ yield ['feature/Description-With_Underscores'];
+ yield ['feature/123-description'];
+ yield ['feature/123-Description'];
+ yield ['feature/UNDERSCORES_UNDERSCORES'];
+ yield ['feature/123-Description-With_UNDERSCORES'];
+ yield ['feature/1.x'];
+ yield ['feature/0.x'];
+ yield ['feature/0.1.x'];
+ yield ['feature/__VERSION__.x'];
+ yield ['feature/1.x-description'];
+ yield ['feature/0.x-description'];
+ yield ['feature/0.1.x-description'];
+ yield ['feature/__VERSION__.x-description'];
+
+ yield ['bugfix/description'];
+ yield ['bugfix/Description'];
+ yield ['bugfix/Description-With-Hyphens'];
+ yield ['bugfix/Description-With_Underscores'];
+ yield ['bugfix/123-description'];
+ yield ['bugfix/123-Description'];
+ yield ['bugfix/UNDERSCORES_UNDERSCORES'];
+ yield ['bugfix/123-Description-With_UNDERSCORES'];
+ yield ['bugfix/1.x'];
+ yield ['bugfix/0.x'];
+ yield ['bugfix/0.1.x'];
+ yield ['bugfix/__VERSION__.x'];
+ yield ['bugfix/1.x-description'];
+ yield ['bugfix/0.x-description'];
+ yield ['bugfix/0.1.x-description'];
+ yield ['bugfix/__VERSION__.x-description'];
+
+ yield ['project/description'];
+ yield ['project/Description'];
+ yield ['project/Description-With-Hyphens'];
+ yield ['project/123-description'];
+ yield ['project/123-Description'];
+ yield ['project/1.x'];
+ yield ['project/0.x'];
+ yield ['project/0.1.x'];
+ yield ['project/__VERSION__.x'];
+ yield ['project/1.x-description'];
+ yield ['project/0.x-description'];
+ yield ['project/0.1.x-description'];
+ yield ['project/__VERSION__.x-description'];
+
+ // Negative branches.
+ yield ['something', FALSE];
+ yield ['premain', FALSE];
+ yield ['premaster', FALSE];
+ yield ['predevelop', FALSE];
+ yield ['mainpost', FALSE];
+ yield ['masterpost', FALSE];
+ yield ['developpost', FALSE];
+ yield ['premainpost', FALSE];
+ yield ['premasterpost', FALSE];
+ yield ['predeveloppost', FALSE];
+
+ yield ['preci', FALSE];
+ yield ['precipost', FALSE];
+
+ yield ['deps/something', FALSE];
+ yield ['deps', FALSE];
+ yield ['predeps', FALSE];
+ yield ['depspost', FALSE];
+ yield ['predepspost', FALSE];
+
+ yield ['feature', FALSE];
+ yield ['release', FALSE];
+ yield ['hotfix', FALSE];
+ yield ['prefeature', FALSE];
+ yield ['prerelease', FALSE];
+ yield ['prehotfix', FALSE];
+ yield ['featurepost', FALSE];
+ yield ['releasepost', FALSE];
+ yield ['hotfixpost', FALSE];
+ yield ['prefeaturepost', FALSE];
+ yield ['prereleasepost', FALSE];
+ yield ['prehotfixpost', FALSE];
+
+ yield ['release/123', FALSE];
+ yield ['release/123.456', FALSE];
+ yield ['hotfix/123', FALSE];
+ yield ['hotfix/123.456', FALSE];
+
+ yield ['release/202-04-17', FALSE];
+ yield ['release/2023-4-17', FALSE];
+ yield ['release/2023-04-1', FALSE];
+ yield ['release/pre2023-04-17', FALSE];
+ yield ['release/2023-04-17post', FALSE];
+ yield ['release/pre2023-04-17post', FALSE];
+
+ yield ['hotfix/202-04-17', FALSE];
+ yield ['hotfix/2023-4-17', FALSE];
+ yield ['hotfix/2023-04-1', FALSE];
+ yield ['hotfix/pre2023-04-17', FALSE];
+ yield ['hotfix/2023-04-17post', FALSE];
+ yield ['hotfix/pre2023-04-17post', FALSE];
+
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+ yield ['release/__VERSION__', FALSE];
+
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+ yield ['hotfix/__VERSION__', FALSE];
+
+ yield ['prefeature/something', FALSE];
+ yield ['prefbugfix/something', FALSE];
+ yield ['prerelease/something', FALSE];
+ yield ['prehotfix/something', FALSE];
+ yield ['featurepost/something', FALSE];
+ yield ['bugfixpost/something', FALSE];
+ yield ['releasepost/something', FALSE];
+ yield ['hotfixpost/something', FALSE];
+ yield ['prefeaturepost/something', FALSE];
+ yield ['prebugfixpost/something', FALSE];
+ yield ['prereleasepost/something', FALSE];
+ yield ['prehotfixpost/something', FALSE];
+ yield ['preproject/something', FALSE];
+ yield ['projectpost/something', FALSE];
+ }
+
+ /**
+ * Tests for deploy tag regex.
+ *
+ * @see https://semver.org/
+ */
+ #[DataProvider('dataProviderDeployTagRegex')]
+ public function testDeployTagRegex(string $branch, bool $expected = TRUE): void {
+ $pattern = $this->config['workflows']['commit']['jobs'][4]['deploy-tags']['filters']['tags']['only'];
+ $result = preg_match($pattern, $branch);
+ $this->assertEquals($expected, $result);
+ }
+
+ /**
+ * Data provider for testDeployTagRegex().
+ */
+ public static function dataProviderDeployTagRegex(): \Iterator {
+ // Positive tags.
+ yield ['__VERSION__'];
+ yield ['__VERSION__'];
+ yield ['2023-04-17'];
+ yield ['2023-04-17.123'];
+
+ // Negative tags.
+ yield ['123', FALSE];
+ yield ['123.456', FALSE];
+ yield ['__VERSION__', FALSE];
+ yield ['__VERSION__', FALSE];
+ yield ['__VERSION__', FALSE];
+ yield ['__VERSION__', FALSE];
+ yield ['__VERSION__', FALSE];
+
+ yield ['202-04-17', FALSE];
+ yield ['2023-0-17', FALSE];
+ yield ['2023-04-1', FALSE];
+ yield ['pre2023-04-17', FALSE];
+ yield ['2023-04-17post', FALSE];
+ yield ['pre2023-04-17post', FALSE];
+ yield ['2023-04-17.123.', FALSE];
+ yield ['2023-04-17.pre123', FALSE];
+ yield ['2023-04-17.pre123post', FALSE];
+ yield ['2023-04-17.123post', FALSE];
+ }
+
+}
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/tests/phpunit/Drupal/EnvironmentSettingsTest.php b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/tests/phpunit/Drupal/EnvironmentSettingsTest.php
new file mode 100644
index 0000000000..c9a3f0beb9
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/tests/phpunit/Drupal/EnvironmentSettingsTest.php
@@ -0,0 +1,12 @@
+@@ -308,9 +308,9 @@
+ }
+
+ /**
+- * Test per-environment settings for GitHub Actions.
++ * Test per-environment settings for CircleCI.
+ */
+- public function testEnvironmentGha(): void {
++ public function testEnvironmentCircleCi(): void {
+ $this->setEnvVars([
+ 'CI' => TRUE,
+ ]);
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/web/sites/default/includes/providers/-settings.gha.php b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/web/sites/default/includes/providers/-settings.gha.php
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/web/sites/default/includes/providers/settings.circleci.php b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/web/sites/default/includes/providers/settings.circleci.php
new file mode 100644
index 0000000000..7cad35cf80
--- /dev/null
+++ b/.vortex/installer/tests/Fixtures/handler_process/tools_no_twig_circleci/web/sites/default/includes/providers/settings.circleci.php
@@ -0,0 +1,17 @@
+ [
+ static::cw(function ($test): void {
+ $tools = array_keys(Tools::getToolDefinitions('tools'));
+ $test->prompts[Tools::id()] = array_values(array_diff($tools, [Tools::TWIG_CS_FIXER]));
+ $test->prompts[CiProvider::id()] = CiProvider::GITHUB_ACTIONS;
+ }),
+ static::cw(fn(FunctionalTestCase $test) => $test->assertSutNotContains([
+ 'twig-cs-fixer',
+ 'vincentlanglet/twig-cs-fixer',
+ ])),
+ ];
+ yield 'tools_no_twig_circleci' => [
+ static::cw(function ($test): void {
+ $tools = array_keys(Tools::getToolDefinitions('tools'));
+ $test->prompts[Tools::id()] = array_values(array_diff($tools, [Tools::TWIG_CS_FIXER]));
+ $test->prompts[CiProvider::id()] = CiProvider::CIRCLECI;
+ }),
+ static::cw(fn(FunctionalTestCase $test) => $test->assertSutNotContains([
+ 'twig-cs-fixer',
+ 'vincentlanglet/twig-cs-fixer',
+ ])),
+ ];
yield 'tools_no_eslint' => [
static::cw(function ($test): void {
$tools = array_keys(Tools::getToolDefinitions('tools'));
diff --git a/.vortex/installer/tests/Unit/Handlers/AbstractHandlerDiscoveryTestCase.php b/.vortex/installer/tests/Unit/Handlers/AbstractHandlerDiscoveryTestCase.php
index 6e3581e5c1..212b68adc7 100644
--- a/.vortex/installer/tests/Unit/Handlers/AbstractHandlerDiscoveryTestCase.php
+++ b/.vortex/installer/tests/Unit/Handlers/AbstractHandlerDiscoveryTestCase.php
@@ -145,7 +145,7 @@ protected static function getExpectedDefaults(): array {
VersionScheme::id() => VersionScheme::CALVER,
Timezone::id() => 'UTC',
Services::id() => [Services::CLAMAV, Services::REDIS, Services::SOLR],
- Tools::id() => [Tools::BEHAT, Tools::ESLINT, Tools::JEST, Tools::PHPCS, Tools::PHPSTAN, Tools::PHPUNIT, Tools::RECTOR, Tools::STYLELINT],
+ Tools::id() => [Tools::BEHAT, Tools::ESLINT, Tools::JEST, Tools::PHPCS, Tools::PHPSTAN, Tools::PHPUNIT, Tools::RECTOR, Tools::STYLELINT, Tools::TWIG_CS_FIXER],
HostingProvider::id() => HostingProvider::NONE,
HostingProjectName::id() => NULL,
Webroot::id() => Webroot::WEB,
diff --git a/.vortex/installer/tests/Unit/Handlers/ToolsHandlerDiscoveryTest.php b/.vortex/installer/tests/Unit/Handlers/ToolsHandlerDiscoveryTest.php
index b08d0d108b..67b3b45e5d 100644
--- a/.vortex/installer/tests/Unit/Handlers/ToolsHandlerDiscoveryTest.php
+++ b/.vortex/installer/tests/Unit/Handlers/ToolsHandlerDiscoveryTest.php
@@ -18,11 +18,11 @@ public static function dataProviderRunPrompts(): \Iterator {
$expected_installed = static::getExpectedInstalled();
yield 'tools - prompt - defaults' => [
[Tools::id() => Key::ENTER],
- [Tools::id() => [Tools::BEHAT, Tools::ESLINT, Tools::JEST, Tools::PHPCS, Tools::PHPSTAN, Tools::PHPUNIT, Tools::RECTOR, Tools::STYLELINT]] + $expected_defaults,
+ [Tools::id() => [Tools::BEHAT, Tools::ESLINT, Tools::JEST, Tools::PHPCS, Tools::PHPSTAN, Tools::PHPUNIT, Tools::RECTOR, Tools::STYLELINT, Tools::TWIG_CS_FIXER]] + $expected_defaults,
];
yield 'tools - discovery - all tools' => [
[],
- [Tools::id() => [Tools::BEHAT, Tools::ESLINT, Tools::JEST, Tools::PHPCS, Tools::PHPSTAN, Tools::PHPUNIT, Tools::RECTOR, Tools::STYLELINT]] + $expected_installed,
+ [Tools::id() => [Tools::BEHAT, Tools::ESLINT, Tools::JEST, Tools::PHPCS, Tools::PHPSTAN, Tools::PHPUNIT, Tools::RECTOR, Tools::STYLELINT, Tools::TWIG_CS_FIXER]] + $expected_installed,
function (AbstractHandlerDiscoveryTestCase $test, Config $config): void {
$test->stubVortexProject($config);
$dependencies = [
@@ -31,6 +31,7 @@ function (AbstractHandlerDiscoveryTestCase $test, Config $config): void {
'rector/rector' => '*',
'phpunit/phpunit' => '*',
'behat/behat' => '*',
+ 'vincentlanglet/twig-cs-fixer' => '*',
];
$test->stubComposerJsonDependencies($dependencies, TRUE);
file_put_contents(static::$sut . '/package.json', json_encode(['devDependencies' => ['eslint' => '*', 'jest' => '*', 'stylelint' => '*']], JSON_PRETTY_PRINT));
@@ -218,6 +219,22 @@ function (AbstractHandlerDiscoveryTestCase $test, Config $config): void {
File::dump(static::$sut . '/.stylelintrc.js');
},
];
+ yield 'tools - discovery - twig_cs_fixer' => [
+ [],
+ [Tools::id() => [Tools::TWIG_CS_FIXER]] + $expected_installed,
+ function (AbstractHandlerDiscoveryTestCase $test, Config $config): void {
+ $test->stubVortexProject($config);
+ $test->stubComposerJsonDependencies(['vincentlanglet/twig-cs-fixer' => '*'], TRUE);
+ },
+ ];
+ yield 'tools - discovery - twig_cs_fixer, alt' => [
+ [],
+ [Tools::id() => [Tools::TWIG_CS_FIXER]] + $expected_installed,
+ function (AbstractHandlerDiscoveryTestCase $test, Config $config): void {
+ $test->stubVortexProject($config);
+ File::dump(static::$sut . '/.twig-cs-fixer.php');
+ },
+ ];
}
}