@scandipwa/magento-scripts 1.16.1 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/lib/commands/cli.js +4 -6
  2. package/lib/commands/execute.js +29 -4
  3. package/lib/commands/import-db.js +1 -1
  4. package/lib/commands/logs.js +1 -1
  5. package/lib/commands/start.js +38 -20
  6. package/lib/commands/status.js +2 -0
  7. package/lib/config/docker.js +102 -84
  8. package/lib/config/get-project-configuration.js +3 -1
  9. package/lib/config/index.js +10 -7
  10. package/lib/config/magento/required-php-extensions/index.js +29 -0
  11. package/lib/config/magento/required-php-extensions/magento-2.3.js +19 -0
  12. package/lib/config/magento/required-php-extensions/magento-2.4.js +29 -0
  13. package/lib/config/php/base-repo.js +3 -0
  14. package/lib/config/php/extensions/apcu.js +12 -0
  15. package/lib/config/php/extensions/bcmath.js +7 -0
  16. package/lib/config/php/extensions/curl.js +11 -0
  17. package/lib/config/php/extensions/gd.js +14 -0
  18. package/lib/config/php/extensions/index.js +18 -2
  19. package/lib/config/php/extensions/intl.js +10 -0
  20. package/lib/config/php/extensions/opcache.js +10 -0
  21. package/lib/config/php/extensions/pdo_mysql.js +7 -0
  22. package/lib/config/php/extensions/soap.js +10 -0
  23. package/lib/config/php/extensions/sodium.js +10 -0
  24. package/lib/config/php/extensions/xdebug.js +8 -5
  25. package/lib/config/php/extensions/xsl.js +10 -0
  26. package/lib/config/php/extensions/zip.js +10 -0
  27. package/lib/config/php/{releases → versions}/index.js +0 -0
  28. package/lib/config/php/versions/php-7.2.js +23 -0
  29. package/lib/config/php/versions/php-7.3.js +23 -0
  30. package/lib/config/php/versions/php-7.4.js +23 -0
  31. package/lib/config/php/versions/php-8.1.js +23 -0
  32. package/lib/config/php-config.js +8 -12
  33. package/lib/config/port-config.js +2 -6
  34. package/lib/config/services/elasticsearch/base-repo.js +3 -0
  35. package/lib/config/services/elasticsearch/default-es-env.js +6 -0
  36. package/lib/config/services/elasticsearch/versions/elasticsearch-6.8.js +19 -0
  37. package/lib/config/services/elasticsearch/versions/index.js +5 -0
  38. package/lib/config/templates/magentorc.template +5 -5
  39. package/lib/config/templates/mariadb.template.cnf +191 -0
  40. package/lib/config/templates/php-fpm.template.conf +3 -3
  41. package/lib/config/templates/php.template.ini +12 -6
  42. package/lib/config/templates/ssl-terminator.template.conf +1 -1
  43. package/lib/config/templates/vscode-launch.template.json +3 -1
  44. package/lib/config/versions/magento-2.3.0.js +10 -5
  45. package/lib/config/versions/magento-2.3.1.js +10 -5
  46. package/lib/config/versions/magento-2.3.2-p1.js +43 -0
  47. package/lib/config/versions/magento-2.3.2-p2.js +10 -5
  48. package/lib/config/versions/magento-2.3.2.js +10 -5
  49. package/lib/config/versions/magento-2.3.3-p1.js +10 -5
  50. package/lib/config/versions/magento-2.3.3.js +10 -5
  51. package/lib/config/versions/magento-2.3.4-p1.js +43 -0
  52. package/lib/config/versions/magento-2.3.4-p2.js +10 -5
  53. package/lib/config/versions/magento-2.3.4.js +10 -5
  54. package/lib/config/versions/magento-2.3.5-p1.js +8 -2
  55. package/lib/config/versions/magento-2.3.5-p2.js +8 -2
  56. package/lib/config/versions/magento-2.3.5.js +8 -2
  57. package/lib/config/versions/magento-2.3.6-p1.js +8 -2
  58. package/lib/config/versions/magento-2.3.6.js +8 -2
  59. package/lib/config/versions/magento-2.3.7-p1.js +8 -2
  60. package/lib/config/versions/magento-2.3.7-p2.js +8 -2
  61. package/lib/config/versions/magento-2.3.7-p3.js +8 -2
  62. package/lib/config/versions/magento-2.3.7.js +8 -2
  63. package/lib/config/versions/magento-2.4.0-p1.js +9 -3
  64. package/lib/config/versions/magento-2.4.0.js +9 -3
  65. package/lib/config/versions/magento-2.4.1-p1.js +6 -5
  66. package/lib/config/versions/magento-2.4.1.js +9 -2
  67. package/lib/config/versions/magento-2.4.2-p1.js +6 -5
  68. package/lib/config/versions/magento-2.4.2-p2.js +6 -6
  69. package/lib/config/versions/magento-2.4.2.js +6 -6
  70. package/lib/config/versions/magento-2.4.3-p1.js +7 -7
  71. package/lib/config/versions/magento-2.4.3-p2.js +7 -7
  72. package/lib/config/versions/magento-2.4.3.js +7 -7
  73. package/lib/config/versions/magento-2.4.4.js +9 -2
  74. package/lib/tasks/cleanup.js +3 -3
  75. package/lib/tasks/composer/index.js +14 -104
  76. package/lib/tasks/database/connect-to-database.js +117 -0
  77. package/lib/tasks/database/create-magento-database.js +18 -0
  78. package/lib/tasks/{mysql → database}/dump-theme-config.js +3 -3
  79. package/lib/tasks/{mysql → database}/fix-db.js +2 -2
  80. package/lib/tasks/{mysql/import-dump-to-mysql.js → database/import-dump-to-database.js} +65 -22
  81. package/lib/tasks/{mysql → database}/import-remote-db/index.js +0 -0
  82. package/lib/tasks/{mysql/import-remote-db/ssh/mysqldump-command.js → database/import-remote-db/ssh/database-dump-command.js} +2 -2
  83. package/lib/tasks/{mysql → database}/import-remote-db/ssh/index.js +0 -0
  84. package/lib/tasks/{mysql → database}/import-remote-db/ssh/readymage.js +4 -4
  85. package/lib/tasks/{mysql → database}/import-remote-db/ssh/regular-server.js +2 -2
  86. package/lib/tasks/{mysql → database}/index.js +2 -2
  87. package/lib/tasks/{mysql → database}/magento-tables.js +0 -0
  88. package/lib/tasks/{mysql → database}/restore-theme-config.js +4 -4
  89. package/lib/tasks/docker/api.d.ts +71 -0
  90. package/lib/tasks/docker/api.js +30 -0
  91. package/lib/tasks/docker/containers/container-api.d.ts +128 -0
  92. package/lib/tasks/docker/containers/container-api.js +153 -0
  93. package/lib/tasks/docker/containers/index.js +19 -0
  94. package/lib/tasks/docker/containers/tasks.js +215 -0
  95. package/lib/tasks/docker/convert-legacy-volumes.js +15 -10
  96. package/lib/tasks/docker/convert-mysql-to-mariadb.js +284 -0
  97. package/lib/tasks/docker/image/image-api.d.ts +34 -0
  98. package/lib/tasks/docker/image/image-api.js +49 -0
  99. package/lib/tasks/docker/image/index.js +5 -0
  100. package/lib/tasks/docker/index.js +1 -13
  101. package/lib/tasks/docker/network/index.js +7 -0
  102. package/lib/tasks/docker/network/network-api.d.ts +103 -0
  103. package/lib/tasks/docker/network/network-api.js +99 -0
  104. package/lib/tasks/docker/{network.js → network/tasks.js} +17 -10
  105. package/lib/tasks/docker/project-image-builder.js +167 -0
  106. package/lib/tasks/docker/volume/index.js +8 -0
  107. package/lib/tasks/docker/{volumes.js → volume/tasks.js} +5 -19
  108. package/lib/tasks/docker/volume/volume-api.d.ts +39 -0
  109. package/lib/tasks/docker/volume/volume-api.js +66 -0
  110. package/lib/tasks/execute/index.js +5 -2
  111. package/lib/tasks/file-system/create-mariadb-config.js +23 -0
  112. package/lib/tasks/file-system/create-nginx-config.js +2 -3
  113. package/lib/tasks/file-system/create-php-config.js +20 -5
  114. package/lib/tasks/file-system/create-php-fpm-config.js +8 -4
  115. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +41 -29
  116. package/lib/tasks/file-system/create-phpstorm-config/index.js +2 -0
  117. package/lib/tasks/file-system/create-phpstorm-config/keys.js +15 -1
  118. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +4 -1
  119. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +3 -3
  120. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +81 -0
  121. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +42 -0
  122. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +9 -0
  123. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +66 -0
  124. package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +11 -9
  125. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +2 -1
  126. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +15 -30
  127. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +24 -5
  128. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +50 -0
  129. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +50 -0
  130. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +50 -0
  131. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +15 -15
  132. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +29 -3
  133. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +50 -0
  134. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +42 -0
  135. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +50 -0
  136. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +0 -2
  137. package/lib/tasks/file-system/create-ssl-terminator-config.js +4 -2
  138. package/lib/tasks/file-system/create-vscode-config.js +57 -42
  139. package/lib/tasks/file-system/index.js +5 -2
  140. package/lib/tasks/import-dump.js +6 -6
  141. package/lib/tasks/link.js +5 -4
  142. package/lib/tasks/magento/install-magento-project.js +31 -63
  143. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +4 -4
  144. package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +7 -3
  145. package/lib/tasks/magento/setup-magento/create-admin.js +5 -6
  146. package/lib/tasks/magento/setup-magento/delete-admin-users.js +2 -2
  147. package/lib/tasks/magento/setup-magento/delete-customers.js +4 -4
  148. package/lib/tasks/magento/setup-magento/delete-orders.js +4 -4
  149. package/lib/tasks/magento/setup-magento/disable-2fa.js +3 -5
  150. package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +3 -4
  151. package/lib/tasks/magento/setup-magento/increase-admin-session-lifetime.js +2 -2
  152. package/lib/tasks/magento/setup-magento/index.js +2 -0
  153. package/lib/tasks/magento/setup-magento/install-magento.js +21 -20
  154. package/lib/tasks/magento/setup-magento/migrate-database.js +7 -14
  155. package/lib/tasks/magento/setup-magento/set-base-url.js +2 -2
  156. package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
  157. package/lib/tasks/magento/setup-magento/set-url-rewrite.js +2 -2
  158. package/lib/tasks/magento/setup-magento/varnish-config.js +10 -8
  159. package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
  160. package/lib/tasks/php/php-container.js +108 -0
  161. package/lib/tasks/php/update-env-php.js +39 -21
  162. package/lib/tasks/php/update-env.php +66 -61
  163. package/lib/tasks/php/working_health_check.php +85 -0
  164. package/lib/tasks/requirements/{composer.js → composer-credentials.js} +3 -1
  165. package/lib/tasks/requirements/docker/index.js +15 -12
  166. package/lib/tasks/requirements/docker/performance.js +54 -0
  167. package/lib/tasks/requirements/docker/version.js +8 -8
  168. package/lib/tasks/requirements/index.js +5 -8
  169. package/lib/tasks/requirements/php-version.js +8 -116
  170. package/lib/tasks/requirements/platform.js +12 -25
  171. package/lib/tasks/start.js +21 -50
  172. package/lib/tasks/status/index.js +8 -12
  173. package/lib/tasks/stop.js +0 -2
  174. package/lib/tasks/theme/install-theme.js +1 -1
  175. package/lib/tasks/theme/link-theme.js +2 -2
  176. package/lib/tasks/theme/symlink-theme.js +2 -3
  177. package/lib/util/config-file-validator.js +27 -13
  178. package/lib/util/config-php-json.js +13 -4
  179. package/lib/util/database.js +7 -7
  180. package/lib/util/dockerfile-builder/build-instructions.js +197 -0
  181. package/lib/util/dockerfile-builder/index.js +276 -0
  182. package/lib/util/dockerfile-builder/types.d.ts +123 -0
  183. package/lib/util/env-php-json.js +10 -6
  184. package/lib/util/exec-async-command.js +3 -9
  185. package/lib/util/macos-version.js +20 -0
  186. package/lib/util/magento-task.js +3 -4
  187. package/lib/util/nginx-logs-parser.js +122 -0
  188. package/lib/util/php-task.js +3 -6
  189. package/lib/util/run-composer.js +6 -14
  190. package/lib/util/run-container-image.js +17 -0
  191. package/lib/util/run-magento.js +6 -14
  192. package/lib/util/run-php.js +6 -17
  193. package/package.json +9 -9
  194. package/typings/context.d.ts +7 -13
  195. package/typings/index.d.ts +67 -85
  196. package/yarn-error.log +9660 -0
  197. package/lib/config/composer.js +0 -11
  198. package/lib/config/php/extensions/libsodium.js +0 -36
  199. package/lib/config/php/releases/php-7.2.js +0 -25
  200. package/lib/config/php/releases/php-7.3.js +0 -25
  201. package/lib/config/php/releases/php-7.4.js +0 -23
  202. package/lib/config/php/releases/php-8.1.js +0 -25
  203. package/lib/config/phpbrew.js +0 -12
  204. package/lib/tasks/composer/install-prestissimo.js +0 -103
  205. package/lib/tasks/docker/containers.js +0 -231
  206. package/lib/tasks/mysql/connect-to-mysql.js +0 -114
  207. package/lib/tasks/mysql/create-magento-database.js +0 -18
  208. package/lib/tasks/php/bundled-extensions.js +0 -27
  209. package/lib/tasks/php/compile-options.js +0 -56
  210. package/lib/tasks/php/compile.js +0 -55
  211. package/lib/tasks/php/configure.js +0 -89
  212. package/lib/tasks/php/extensions/disable.js +0 -49
  213. package/lib/tasks/php/extensions/enable.js +0 -52
  214. package/lib/tasks/php/extensions/index.js +0 -80
  215. package/lib/tasks/php/extensions/install.js +0 -54
  216. package/lib/tasks/php/index.js +0 -79
  217. package/lib/tasks/php/install-sodium.js +0 -93
  218. package/lib/tasks/php/update-phpbrew.js +0 -45
  219. package/lib/tasks/php/validate-php.js +0 -67
  220. package/lib/tasks/php-fpm/get-process-id.js +0 -14
  221. package/lib/tasks/php-fpm/index.js +0 -4
  222. package/lib/tasks/php-fpm/start-php-fpm.js +0 -49
  223. package/lib/tasks/php-fpm/stop-php-fpm.js +0 -48
  224. package/lib/tasks/requirements/phpbrew/index.js +0 -61
  225. package/lib/tasks/requirements/phpbrew/install.js +0 -159
  226. package/lib/tasks/requirements/phpbrew/version.js +0 -28
@@ -0,0 +1,85 @@
1
+ <?php
2
+ /**
3
+ * Copyright © Magento, Inc. All rights reserved.
4
+ * See COPYING.txt for license details.
5
+ */
6
+
7
+ use Magento\Framework\Config\ConfigOptionsListConstants;
8
+
9
+ register_shutdown_function("fatalErrorHandler");
10
+
11
+ try {
12
+ // phpcs:ignore Magento2.Security.IncludeFile
13
+ require __DIR__ . '/../app/bootstrap.php';
14
+ /** @var \Magento\Framework\App\ObjectManagerFactory $objectManagerFactory */
15
+ $objectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, []);
16
+ /** @var \Magento\Framework\ObjectManagerInterface $objectManager */
17
+ $objectManager = $objectManagerFactory->create([]);
18
+ /** @var \Magento\Framework\App\DeploymentConfig $deploymentConfig */
19
+ $deploymentConfig = $objectManager->get(\Magento\Framework\App\DeploymentConfig::class);
20
+ /** @var \Psr\Log\LoggerInterface $logger */
21
+ $logger = $objectManager->get(\Psr\Log\LoggerInterface::class);
22
+ } catch (\Exception $e) {
23
+ http_response_code(500);
24
+ // phpcs:ignore Magento2.Security.LanguageConstruct
25
+ exit(1);
26
+ }
27
+
28
+ // check mysql connectivity
29
+ foreach ($deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTIONS) as $connectionData) {
30
+ try {
31
+ /** @var \Magento\Framework\DB\Adapter\Pdo\Mysql $dbAdapter */
32
+ $dbAdapter = $objectManager->create(
33
+ \Magento\Framework\DB\Adapter\Pdo\Mysql::class,
34
+ ['config' => $connectionData]
35
+ );
36
+ $dbAdapter->getConnection();
37
+ } catch (\Exception $e) {
38
+ http_response_code(500);
39
+ $logger->error("MySQL connection failed: " . $e->getMessage());
40
+ // phpcs:ignore Magento2.Security.LanguageConstruct
41
+ exit(1);
42
+ }
43
+ }
44
+ // check cache storage availability
45
+ $cacheConfigs = $deploymentConfig->get(ConfigOptionsListConstants::KEY_CACHE_FRONTEND);
46
+ if ($cacheConfigs) {
47
+ foreach ($cacheConfigs as $cacheConfig) {
48
+ // allow config if only available "id_prefix"
49
+ if (count($cacheConfig) === 1 && isset($cacheConfig['id_prefix'])) {
50
+ continue;
51
+ } elseif (!isset($cacheConfig[ConfigOptionsListConstants::CONFIG_PATH_BACKEND]) ||
52
+ !isset($cacheConfig[ConfigOptionsListConstants::CONFIG_PATH_BACKEND_OPTIONS])) {
53
+ http_response_code(500);
54
+ $logger->error("Cache configuration is invalid");
55
+ // phpcs:ignore Magento2.Security.LanguageConstruct
56
+ exit(1);
57
+ }
58
+ $cacheBackendClass = $cacheConfig[ConfigOptionsListConstants::CONFIG_PATH_BACKEND];
59
+ try {
60
+ /** @var \Magento\Framework\App\Cache\Frontend\Factory $cacheFrontendFactory */
61
+ $cacheFrontendFactory = $objectManager->get(Magento\Framework\App\Cache\Frontend\Factory::class);
62
+ /** @var \Zend_Cache_Backend_Interface $backend */
63
+ $backend = $cacheFrontendFactory->create($cacheConfig);
64
+ $backend->test('test_cache_id');
65
+ } catch (\Exception $e) {
66
+ http_response_code(500);
67
+ $logger->error("Cache storage is not accessible");
68
+ // phpcs:ignore Magento2.Security.LanguageConstruct
69
+ exit(1);
70
+ }
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Handle any fatal errors
76
+ *
77
+ * @return void
78
+ */
79
+ function fatalErrorHandler()
80
+ {
81
+ $error = error_get_last();
82
+ if ($error !== null && $error['type'] === E_ERROR) {
83
+ http_response_code(500);
84
+ }
85
+ }
@@ -279,4 +279,6 @@ Error message that we got: ${e}`
279
279
  }
280
280
  });
281
281
 
282
- module.exports = checkComposerCredentials;
282
+ module.exports = {
283
+ checkComposerCredentials
284
+ };
@@ -4,10 +4,21 @@ const { execAsyncSpawn } = require('../../../util/exec-async-command');
4
4
  const openBrowser = require('../../../util/open-browser');
5
5
  const installDocker = require('./install');
6
6
  const installDockerOnMac = require('./install-on-mac');
7
+ const { checkDockerPerformance } = require('./performance');
7
8
  const { checkDockerSocketPermissions } = require('./permissions');
8
9
  const checkDockerStatus = require('./running-status');
9
10
  const getDockerVersion = require('./version');
10
11
 
12
+ const setVersionInContextTask = (task) => ({
13
+ task: (ctx) => {
14
+ if (ctx.platform === 'darwin' && ctx.dockerServerData && ctx.dockerServerData.Platform && ctx.dockerServerData.Platform.Name) {
15
+ task.title = `Using ${ctx.dockerServerData.Platform.Name} for Mac`;
16
+ } else {
17
+ task.title = `Using Docker version ${ctx.dockerVersion}`;
18
+ }
19
+ }
20
+ });
21
+
11
22
  const dockerInstallPromptLinux = async (task) => {
12
23
  const automaticallyInstallDocker = await task.prompt({
13
24
  type: 'Confirm',
@@ -47,7 +58,6 @@ ${ logger.style.link('https://docs.create-magento-app.com/getting-started/prereq
47
58
  };
48
59
 
49
60
  /**
50
- *
51
61
  * @param {import('listr2').ListrTaskWrapper} task
52
62
  */
53
63
  const dockerInstallPromptMacOS = async (task) => {
@@ -72,11 +82,7 @@ Would you like to install it automatically using brew cask or you prefer to inst
72
82
  installDockerOnMac(),
73
83
  checkDockerStatus(),
74
84
  getDockerVersion(),
75
- {
76
- task: (ctx) => {
77
- task.title = `Using Docker version ${ctx.dockerVersion}`;
78
- }
79
- }
85
+ setVersionInContextTask(task)
80
86
  ]);
81
87
  }
82
88
 
@@ -118,11 +124,7 @@ const checkDocker = () => ({
118
124
  return task.newListr([
119
125
  checkDockerStatus(),
120
126
  getDockerVersion(),
121
- {
122
- task: (ctx) => {
123
- task.title = `Using Docker version ${ctx.dockerVersion}`;
124
- }
125
- }
127
+ setVersionInContextTask(task)
126
128
  ]);
127
129
  }
128
130
  });
@@ -133,7 +135,8 @@ const checkDocker = () => ({
133
135
  module.exports = () => ({
134
136
  task: (ctx, task) => task.newListr([
135
137
  checkDockerSocketPermissions(),
136
- checkDocker()
138
+ checkDocker(),
139
+ checkDockerPerformance()
137
140
  ], {
138
141
  concurrent: false
139
142
  })
@@ -0,0 +1,54 @@
1
+ const os = require('os');
2
+ const path = require('path');
3
+ const semver = require('semver');
4
+ const getJsonfileData = require('../../../util/get-jsonfile-data');
5
+ const pathExists = require('../../../util/path-exists');
6
+
7
+ const dockerSettingsJsonPath = path.join(
8
+ os.homedir(),
9
+ 'Library',
10
+ 'Group Containers',
11
+ 'group.com.docker',
12
+ 'settings.json'
13
+ );
14
+
15
+ /**
16
+ * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
17
+ */
18
+ const checkDockerPerformance = () => ({
19
+ title: 'Checking Docker Performance',
20
+ // eslint-disable-next-line no-return-await
21
+ skip: async (ctx) => ctx.platform !== 'darwin' || (ctx.platform === 'darwin' && !(await pathExists(dockerSettingsJsonPath))),
22
+ task: async (ctx, task) => {
23
+ const dockerSettings = await getJsonfileData(dockerSettingsJsonPath);
24
+
25
+ if (!dockerSettings) {
26
+ task.skip();
27
+ return;
28
+ }
29
+
30
+ const dockerForMacVersionMatch = ctx.dockerServerData.Platform.Name.match(/(\d+\.\d+\.\d+)/i);
31
+
32
+ const dockerForMacVersion = dockerForMacVersionMatch && dockerForMacVersionMatch[1];
33
+
34
+ if (ctx.arch === 'arm64'
35
+ && semver.gt('12.2.0', ctx.platformVersion)
36
+ && semver.gt(dockerForMacVersion, '4.6.0')) {
37
+ if (!dockerSettings.useVirtualizationFrameworkVirtioFS) {
38
+ task.title = 'Performance is not optimal. VirtioFS is not enabled.';
39
+ }
40
+ }
41
+
42
+ if (ctx.arch === 'x64'
43
+ && semver.gt('12.3.0', ctx.platformVersion)
44
+ && semver.gt(dockerForMacVersion, '4.6.0')) {
45
+ if (!dockerSettings.useVirtualizationFrameworkVirtioFS) {
46
+ task.title = 'Performance is not optimal. VirtioFS is not enabled.';
47
+ }
48
+ }
49
+ }
50
+ });
51
+
52
+ module.exports = {
53
+ checkDockerPerformance
54
+ };
@@ -1,21 +1,21 @@
1
1
  const UnknownError = require('../../../errors/unknown-error');
2
- const { execAsyncSpawn } = require('../../../util/exec-async-command');
2
+ const { version } = require('../../docker/api');
3
3
 
4
4
  /**
5
5
  * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
6
6
  */
7
7
  const getDockerVersion = () => ({
8
8
  task: async (ctx) => {
9
- const { result, code } = await execAsyncSpawn('docker version --format {{.Server.Version}}', {
10
- withCode: true
9
+ const dockerVersion = await version({
10
+ formatToJSON: true
11
11
  });
12
12
 
13
- if (code === 0) {
14
- const dockerVersion = result.split('').filter((c) => /[\d.]/i.test(c)).join('') || result;
15
-
16
- ctx.dockerVersion = dockerVersion;
13
+ if (dockerVersion) {
14
+ ctx.dockerServerData = dockerVersion.Server;
15
+ ctx.dockerClientData = dockerVersion.Client;
16
+ ctx.dockerVersion = dockerVersion.Server.Version;
17
17
  } else {
18
- throw new UnknownError(`Got unexpected result during Docker version retrieval!\n\n${ result }`);
18
+ throw new UnknownError(`Got unexpected result during Docker version retrieval!\n\n${ dockerVersion }`);
19
19
  }
20
20
  }
21
21
  });
@@ -1,9 +1,8 @@
1
1
  const checkPlatform = require('./platform');
2
- const checkPHPbrew = require('./phpbrew');
3
- const checkComposer = require('./composer');
2
+ const { checkComposerCredentials } = require('./composer-credentials');
3
+ const localAuthJson = require('../composer/local-auth-json');
4
4
  const checkDocker = require('./docker');
5
5
  const checkNodeVersion = require('./node-version');
6
- const checkPHPVersion = require('./php-version');
7
6
  const checkRosetta = require('./rosetta');
8
7
 
9
8
  /**
@@ -20,13 +19,11 @@ const checkRequirements = () => ({
20
19
  checkDocker(),
21
20
  // check for Node.js version
22
21
  checkNodeVersion(),
23
- // check the PHPBrew installation
24
- checkPHPbrew(),
25
22
  // check installed PHP version
26
- checkPHPVersion(),
23
+ // checkPHPVersion(),
27
24
  // check for COMPOSER_AUTH or auth.json
28
- // localAuthJson(),
29
- checkComposer()
25
+ localAuthJson(),
26
+ checkComposerCredentials()
30
27
  ], {
31
28
  concurrent: false,
32
29
  exitOnError: true,
@@ -1,132 +1,24 @@
1
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
2
- const fs = require('fs');
3
- const path = require('path');
4
- const semver = require('semver');
5
- const phpbrewConfig = require('../../config/phpbrew');
6
- const KnownError = require('../../errors/known-error');
7
1
  const UnknownError = require('../../errors/unknown-error');
8
- const { execAsyncSpawn } = require('../../util/exec-async-command');
9
- const { getBrewCommandSync } = require('../../util/get-brew-bin-path');
10
- const pathExists = require('../../util/path-exists');
11
- const compileOptions = require('../php/compile-options');
12
-
13
- const latestStablePHP74 = '7.4.27';
14
- const phpbrewPHPName = `php-${latestStablePHP74}-phpbrew`;
15
-
16
- /**
17
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
18
- */
19
- const installPHPForPHPBrew = () => ({
20
- title: `Installing PHP ${latestStablePHP74} for PHPBrew...`,
21
- task: async (ctx, task) => {
22
- const compileOptionsForPhp = {
23
- linux: {
24
- ...compileOptions.linux,
25
- variants: [
26
- '+default'
27
- ],
28
- extraOptions: []
29
- },
30
- darwin: {
31
- ...compileOptions.darwin,
32
- variants: [
33
- '+default',
34
- `+openssl=$(${getBrewCommandSync({ native: false })} --prefix openssl@1.1)`
35
- ],
36
- extraOptions: []
37
- }
38
- };
39
- const platformCompileOptions = compileOptionsForPhp[process.platform];
40
-
41
- if (!await pathExists(path.join(phpbrewConfig.phpPath, `${phpbrewPHPName}`, 'bin'))) {
42
- const commandEnv = Object.entries(platformCompileOptions.env || {}).map(([key, value]) => `${key}="${value}"`).join(' ');
43
- // eslint-disable-next-line max-len
44
- const compileCommand = ` ${commandEnv ? `${commandEnv} && ` : ''}phpbrew install -j ${platformCompileOptions.cpuCount} ${latestStablePHP74} as ${phpbrewPHPName} ${platformCompileOptions.variants.join(' ')}`;
45
-
46
- try {
47
- await execAsyncSpawn(
48
- compileCommand,
49
- {
50
- callback: (t) => {
51
- task.output = t;
52
- },
53
- useRosetta2: true
54
- }
55
- );
56
- } catch (e) {
57
- throw new KnownError(
58
- `Failed to compile the required by PHPBrew PHP version.
59
- Tried compiling the PHP version ${ latestStablePHP74 }.
60
- Use your favorite search engine to resolve the issue.
61
- See error details in the output below.\n\n${e}`
62
- );
63
- }
64
- }
65
-
66
- try {
67
- const phpbrewInitFileContent = `# DO NOT EDIT THIS FILE
68
-
69
- export PHPBREW_ROOT=${phpbrewConfig.homePath}
70
- export PHPBREW_HOME=${phpbrewConfig.homePath}
71
- export PHPBREW_PHP=${phpbrewPHPName}
72
- export PHPBREW_PATH=${phpbrewConfig.homePath}/php/${phpbrewPHPName}/bin
73
- # Run this command to configure your shell:
74
- # eval "$(phpbrew env)"\n`;
75
-
76
- await fs.promises.writeFile(
77
- path.join(phpbrewConfig.homePath, 'init'),
78
- phpbrewInitFileContent,
79
- {
80
- encoding: 'utf-8'
81
- }
82
- );
83
- } catch (e) {
84
- throw new UnknownError(`Something went wrong when trying to switch PHP to ${phpbrewPHPName}!\n\n${e}`);
85
- }
86
-
87
- throw new KnownError(`You will need to restart your terminal and run ${logger.style.command('start')} again.
88
-
89
- You can use keyboard shortcut ${logger.style.command('CTRL+D')} to close terminal.`);
90
- },
91
- options: {
92
- bottomBar: 10
93
- }
94
- });
2
+ const { runContainerImage } = require('../../util/run-container-image');
95
3
 
96
4
  /**
97
5
  * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
98
6
  */
99
7
  const checkPHPVersion = () => ({
100
- title: 'Checking system PHP version',
8
+ title: 'Checking container PHP version',
101
9
  task: async (ctx, task) => {
102
- const phpVersionResponse = await execAsyncSpawn('php --version');
10
+ const { php } = ctx.config.docker.getContainers(ctx.ports);
11
+ const phpVersionResponse = await runContainerImage(php.image, 'php --version');
103
12
 
104
13
  const phpVersionResponseResult = phpVersionResponse.match(/PHP\s(\d+\.\d+\.\d+)/i);
105
14
 
106
15
  if (phpVersionResponseResult && phpVersionResponseResult.length > 0) {
107
16
  const phpVersion = phpVersionResponseResult[1];
108
17
 
109
- if (semver.satisfies(phpVersion, '>=8.1.x')) {
110
- const userConfirmation = await task.prompt({
111
- type: 'Confirm',
112
- message: `You have PHP ${phpVersion} installed in the system.
113
- PHPBrew can work with this version but it will have a lot of warning.
114
- To fix that we will build special PHP version that will be used by PHPBrew, please confirm this action.`
115
- });
116
-
117
- if (userConfirmation) {
118
- return task.newListr(
119
- installPHPForPHPBrew,
120
- {
121
- rendererOptions: {
122
- collapse: false
123
- }
124
- }
125
- );
126
- }
127
- }
128
-
129
- task.title = `Using PHP version ${phpVersion} in system`;
18
+ ctx.phpVersion = phpVersion;
19
+ task.title = `Using PHP version ${phpVersion} in container`;
20
+ } else {
21
+ throw new UnknownError(`Cannot retrieve PHP Version!\n\n${phpVersionResponse}`);
130
22
  }
131
23
  }
132
24
  });
@@ -1,12 +1,12 @@
1
1
  const os = require('os');
2
- const macosVersion = require('macos-version');
2
+ const semver = require('semver');
3
3
  const systeminformation = require('systeminformation');
4
4
  const logger = require('@scandipwa/scandipwa-dev-utils/logger');
5
5
  const { platforms, darwinMinimalVersion } = require('../../config');
6
- const dependencyCheck = require('./dependency');
7
6
  const { getArch } = require('../../util/arch');
8
7
  const getIsWsl = require('../../util/is-wsl');
9
8
  const KnownError = require('../../errors/known-error');
9
+ const { getMacOSVersion } = require('../../util/macos-version');
10
10
 
11
11
  /**
12
12
  * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
@@ -16,6 +16,15 @@ const checkPlatform = () => ({
16
16
  task: async (ctx, task) => {
17
17
  const currentPlatform = os.platform();
18
18
 
19
+ ctx.arch = await getArch();
20
+
21
+ ctx.isArm = ctx.arch === 'arm64';
22
+ ctx.isWsl = await getIsWsl();
23
+
24
+ ctx.platform = currentPlatform;
25
+ ctx.platformVersion = currentPlatform !== 'darwin' ? os.release() : await getMacOSVersion();
26
+ ctx.isArmMac = ctx.isArm && ctx.platform === 'darwin';
27
+
19
28
  if (!platforms.includes(currentPlatform)) {
20
29
  throw new KnownError(
21
30
  `Your current OS platform is ${ logger.style.misc(currentPlatform) }.
@@ -23,38 +32,16 @@ const checkPlatform = () => ({
23
32
  );
24
33
  }
25
34
 
26
- if (macosVersion.isMacOS && !macosVersion.isGreaterThanOrEqualTo(darwinMinimalVersion)) {
35
+ if (currentPlatform === 'darwin' && !semver.gt(ctx.platformVersion, semver.coerce(darwinMinimalVersion).version)) {
27
36
  throw new KnownError(
28
37
  'Please update your system!',
29
38
  `MacOS bellow version ${ logger.style.misc(darwinMinimalVersion) } is not supported.`
30
39
  );
31
40
  }
32
41
 
33
- ctx.arch = await getArch();
34
-
35
- ctx.isArm = ctx.arch === 'arm64';
36
- ctx.isWsl = await getIsWsl();
37
-
38
- ctx.platform = currentPlatform;
39
- ctx.platformVersion = currentPlatform !== 'darwin' ? os.release() : macosVersion();
40
- ctx.isArmMac = ctx.isArm && ctx.platform === 'darwin';
41
-
42
42
  const { manufacturer, brand, cores } = await systeminformation.cpu();
43
43
 
44
44
  task.title = `Running on ${currentPlatform} ${ctx.platformVersion} (${manufacturer} ${brand} ${cores} threads)`;
45
-
46
- const installDependenciesTask = await dependencyCheck();
47
-
48
- if (installDependenciesTask) {
49
- return task.newListr(
50
- installDependenciesTask,
51
- {
52
- rendererOptions: {
53
- showTimer: false
54
- }
55
- }
56
- );
57
- }
58
45
  }
59
46
  });
60
47
 
@@ -3,23 +3,17 @@ const openBrowser = require('../util/open-browser');
3
3
  const getMagentoVersionConfig = require('../config/get-magento-version-config');
4
4
  const { saveConfiguration } = require('../config/save-config');
5
5
  const { getAvailablePorts, getCachedPorts } = require('../config/get-port-config');
6
- const { installComposer, installPrestissimo } = require('./composer');
6
+ const { getComposerVersionTask } = require('./composer');
7
7
  const { startServices } = require('./docker');
8
- const { installPhp, configurePhp } = require('./php');
9
8
  const { checkRequirements } = require('./requirements');
10
9
  const { createCacheFolder } = require('./cache');
11
- const { startPhpFpm, stopPhpFpm } = require('./php-fpm');
12
10
  const { prepareFileSystem } = require('./file-system');
13
11
  const { installMagentoProject, setupMagento } = require('./magento');
14
- const { pullContainers, stopContainers } = require('./docker/containers');
12
+ const { pullImages, stopContainers } = require('./docker/containers');
13
+ const dockerNetwork = require('./docker/network');
15
14
  const { setPrefix } = require('./prefix');
16
- const {
17
- connectToMySQL,
18
- importDumpToMySQL,
19
- fixDB,
20
- restoreThemeConfig,
21
- dumpThemeConfig
22
- } = require('./mysql');
15
+ const { connectToDatabase } = require('./database');
16
+ const { buildProjectImage, buildDebugProjectImage } = require('./docker/project-image-builder');
23
17
  const getProjectConfiguration = require('../config/get-project-configuration');
24
18
  const { getSystemConfigTask } = require('../config/system-config');
25
19
  const setupThemes = require('./theme/setup-themes');
@@ -30,9 +24,10 @@ const enableMagentoComposerPlugins = require('./magento/enable-magento-composer-
30
24
  const getIsWsl = require('../util/is-wsl');
31
25
  const checkForXDGOpen = require('../util/xdg-open-exists');
32
26
  const { getInstanceMetadata, constants: { WEB_LOCATION_TITLE } } = require('../util/instance-metadata');
33
- const validatePHPInstallation = require('./php/validate-php');
34
- const installSodiumExtension = require('./php/install-sodium');
35
27
  const waitingForVarnish = require('./magento/setup-magento/waiting-for-varnish');
28
+ const checkPHPVersion = require('./requirements/php-version');
29
+ const volumes = require('./docker/volume/tasks');
30
+ const convertMySQLDatabaseToMariaDB = require('./docker/convert-mysql-to-mariadb');
36
31
 
37
32
  /**
38
33
  * @type {() => import('listr2').ListrTask<import('../../typings/context').ListrContext>}
@@ -44,6 +39,7 @@ const retrieveProjectConfiguration = () => ({
44
39
  checkConfigurationFile(),
45
40
  getProjectConfiguration(),
46
41
  convertLegacyVolumes(),
42
+ convertMySQLDatabaseToMariaDB(),
47
43
  createCacheFolder(),
48
44
  getSystemConfigTask(),
49
45
  getCachedPorts()
@@ -63,15 +59,8 @@ const retrieveProjectConfiguration = () => ({
63
59
  const stopProject = () => ({
64
60
  title: 'Stopping project',
65
61
  task: (ctx, task) => task.newListr([
66
- stopContainers(),
67
- stopPhpFpm()
68
- ], {
69
- concurrent: true,
70
- rendererOptions: {
71
- collapse: true,
72
- showTimer: false
73
- }
74
- }),
62
+ stopContainers()
63
+ ]),
75
64
  options: {
76
65
  showTimer: false
77
66
  }
@@ -104,26 +93,24 @@ const retrieveFreshProjectConfiguration = () => ({
104
93
  const configureProject = () => ({
105
94
  title: 'Configuring project',
106
95
  task: (ctx, task) => task.newListr([
107
- installPhp(),
108
- installComposer(),
96
+ pullImages(),
97
+ dockerNetwork.tasks.createNetwork(),
98
+ volumes.createVolumes(),
109
99
  {
110
100
  task: (ctx, task) => task.newListr([
111
- prepareFileSystem(),
112
- pullContainers()
101
+ buildProjectImage(),
102
+ buildDebugProjectImage()
113
103
  ], {
114
- concurrent: true,
115
- exitOnError: true
104
+ concurrent: true
116
105
  })
117
106
  },
118
- installSodiumExtension(),
119
- configurePhp(),
120
- validatePHPInstallation(),
121
- installPrestissimo(),
107
+ checkPHPVersion(),
108
+ getComposerVersionTask(),
109
+ prepareFileSystem(),
122
110
  installMagentoProject(),
123
111
  enableMagentoComposerPlugins(),
124
- startPhpFpm(),
125
112
  startServices(),
126
- connectToMySQL()
113
+ connectToDatabase()
127
114
  ])
128
115
  });
129
116
 
@@ -134,22 +121,6 @@ const finishProjectConfiguration = () => ({
134
121
  title: 'Finishing project configuration',
135
122
  skip: ({ skipSetup }) => skipSetup,
136
123
  task: (ctx, task) => task.newListr([
137
- {
138
- skip: (ctx) => !ctx.importDb,
139
- task: (ctx, task) => {
140
- task.title = 'Importing database dump';
141
- return task.newListr([
142
- dumpThemeConfig(),
143
- importDumpToMySQL(),
144
- fixDB(),
145
- restoreThemeConfig(),
146
- setupMagento()
147
- ], {
148
- concurrent: false,
149
- exitOnError: true
150
- });
151
- }
152
- },
153
124
  setupThemes(),
154
125
  waitingForVarnish()
155
126
  ], {