@scandipwa/magento-scripts 1.16.0 → 2.0.0-alpha.1

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 (225) 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 +98 -83
  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/versions/elasticsearch-6.8.js +23 -0
  36. package/lib/config/services/elasticsearch/versions/index.js +5 -0
  37. package/lib/config/templates/magentorc.template +5 -5
  38. package/lib/config/templates/mariadb.template.cnf +191 -0
  39. package/lib/config/templates/php-fpm.template.conf +3 -3
  40. package/lib/config/templates/php.template.ini +12 -6
  41. package/lib/config/templates/ssl-terminator.template.conf +1 -1
  42. package/lib/config/templates/vscode-launch.template.json +3 -1
  43. package/lib/config/versions/magento-2.3.0.js +10 -5
  44. package/lib/config/versions/magento-2.3.1.js +10 -5
  45. package/lib/config/versions/magento-2.3.2-p1.js +43 -0
  46. package/lib/config/versions/magento-2.3.2-p2.js +10 -5
  47. package/lib/config/versions/magento-2.3.2.js +10 -5
  48. package/lib/config/versions/magento-2.3.3-p1.js +10 -5
  49. package/lib/config/versions/magento-2.3.3.js +10 -5
  50. package/lib/config/versions/magento-2.3.4-p1.js +43 -0
  51. package/lib/config/versions/magento-2.3.4-p2.js +10 -5
  52. package/lib/config/versions/magento-2.3.4.js +10 -5
  53. package/lib/config/versions/magento-2.3.5-p1.js +8 -2
  54. package/lib/config/versions/magento-2.3.5-p2.js +8 -2
  55. package/lib/config/versions/magento-2.3.5.js +8 -2
  56. package/lib/config/versions/magento-2.3.6-p1.js +8 -2
  57. package/lib/config/versions/magento-2.3.6.js +8 -2
  58. package/lib/config/versions/magento-2.3.7-p1.js +8 -2
  59. package/lib/config/versions/magento-2.3.7-p2.js +8 -2
  60. package/lib/config/versions/magento-2.3.7-p3.js +8 -2
  61. package/lib/config/versions/magento-2.3.7.js +8 -2
  62. package/lib/config/versions/magento-2.4.0-p1.js +9 -3
  63. package/lib/config/versions/magento-2.4.0.js +9 -3
  64. package/lib/config/versions/magento-2.4.1-p1.js +6 -5
  65. package/lib/config/versions/magento-2.4.1.js +9 -2
  66. package/lib/config/versions/magento-2.4.2-p1.js +6 -5
  67. package/lib/config/versions/magento-2.4.2-p2.js +6 -6
  68. package/lib/config/versions/magento-2.4.2.js +6 -6
  69. package/lib/config/versions/magento-2.4.3-p1.js +7 -7
  70. package/lib/config/versions/magento-2.4.3-p2.js +7 -7
  71. package/lib/config/versions/magento-2.4.3.js +7 -7
  72. package/lib/config/versions/magento-2.4.4.js +9 -2
  73. package/lib/tasks/cleanup.js +3 -3
  74. package/lib/tasks/composer/index.js +14 -104
  75. package/lib/tasks/database/connect-to-database.js +117 -0
  76. package/lib/tasks/database/create-magento-database.js +18 -0
  77. package/lib/tasks/{mysql → database}/dump-theme-config.js +3 -3
  78. package/lib/tasks/{mysql → database}/fix-db.js +2 -2
  79. package/lib/tasks/{mysql/import-dump-to-mysql.js → database/import-dump-to-database.js} +65 -22
  80. package/lib/tasks/{mysql → database}/import-remote-db/index.js +0 -0
  81. package/lib/tasks/{mysql/import-remote-db/ssh/mysqldump-command.js → database/import-remote-db/ssh/database-dump-command.js} +2 -2
  82. package/lib/tasks/{mysql → database}/import-remote-db/ssh/index.js +0 -0
  83. package/lib/tasks/{mysql → database}/import-remote-db/ssh/readymage.js +4 -4
  84. package/lib/tasks/{mysql → database}/import-remote-db/ssh/regular-server.js +2 -2
  85. package/lib/tasks/{mysql → database}/index.js +2 -2
  86. package/lib/tasks/{mysql → database}/magento-tables.js +0 -0
  87. package/lib/tasks/{mysql → database}/restore-theme-config.js +4 -4
  88. package/lib/tasks/docker/api.d.ts +71 -0
  89. package/lib/tasks/docker/api.js +30 -0
  90. package/lib/tasks/docker/containers/container-api.d.ts +128 -0
  91. package/lib/tasks/docker/containers/container-api.js +153 -0
  92. package/lib/tasks/docker/containers/index.js +19 -0
  93. package/lib/tasks/docker/containers/tasks.js +215 -0
  94. package/lib/tasks/docker/convert-legacy-volumes.js +15 -10
  95. package/lib/tasks/docker/convert-mysql-to-mariadb.js +284 -0
  96. package/lib/tasks/docker/image/image-api.d.ts +34 -0
  97. package/lib/tasks/docker/image/image-api.js +49 -0
  98. package/lib/tasks/docker/image/index.js +5 -0
  99. package/lib/tasks/docker/index.js +1 -13
  100. package/lib/tasks/docker/network/index.js +7 -0
  101. package/lib/tasks/docker/network/network-api.d.ts +103 -0
  102. package/lib/tasks/docker/network/network-api.js +99 -0
  103. package/lib/tasks/docker/{network.js → network/tasks.js} +17 -10
  104. package/lib/tasks/docker/project-image-builder.js +167 -0
  105. package/lib/tasks/docker/volume/index.js +8 -0
  106. package/lib/tasks/docker/{volumes.js → volume/tasks.js} +5 -19
  107. package/lib/tasks/docker/volume/volume-api.d.ts +39 -0
  108. package/lib/tasks/docker/volume/volume-api.js +66 -0
  109. package/lib/tasks/execute/index.js +5 -2
  110. package/lib/tasks/file-system/create-mariadb-config.js +23 -0
  111. package/lib/tasks/file-system/create-nginx-config.js +2 -3
  112. package/lib/tasks/file-system/create-php-config.js +20 -5
  113. package/lib/tasks/file-system/create-php-fpm-config.js +8 -4
  114. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +41 -29
  115. package/lib/tasks/file-system/create-phpstorm-config/index.js +2 -0
  116. package/lib/tasks/file-system/create-phpstorm-config/keys.js +15 -1
  117. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +4 -1
  118. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +3 -3
  119. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +81 -0
  120. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +42 -0
  121. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +9 -0
  122. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +66 -0
  123. package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +11 -9
  124. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +2 -1
  125. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +15 -30
  126. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +24 -5
  127. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +50 -0
  128. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +50 -0
  129. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +50 -0
  130. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +15 -15
  131. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +29 -3
  132. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +50 -0
  133. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +42 -0
  134. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +50 -0
  135. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +0 -2
  136. package/lib/tasks/file-system/create-ssl-terminator-config.js +4 -2
  137. package/lib/tasks/file-system/create-vscode-config.js +57 -42
  138. package/lib/tasks/file-system/index.js +5 -2
  139. package/lib/tasks/import-dump.js +6 -6
  140. package/lib/tasks/link.js +5 -4
  141. package/lib/tasks/magento/install-magento-project.js +31 -63
  142. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +4 -4
  143. package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +7 -3
  144. package/lib/tasks/magento/setup-magento/create-admin.js +5 -6
  145. package/lib/tasks/magento/setup-magento/delete-admin-users.js +2 -2
  146. package/lib/tasks/magento/setup-magento/delete-customers.js +4 -4
  147. package/lib/tasks/magento/setup-magento/delete-orders.js +4 -4
  148. package/lib/tasks/magento/setup-magento/disable-2fa.js +3 -5
  149. package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +3 -4
  150. package/lib/tasks/magento/setup-magento/increase-admin-session-lifetime.js +2 -2
  151. package/lib/tasks/magento/setup-magento/index.js +3 -3
  152. package/lib/tasks/magento/setup-magento/install-magento.js +47 -40
  153. package/lib/tasks/magento/setup-magento/migrate-database.js +7 -14
  154. package/lib/tasks/magento/setup-magento/set-base-url.js +2 -2
  155. package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
  156. package/lib/tasks/magento/setup-magento/set-url-rewrite.js +2 -2
  157. package/lib/tasks/magento/setup-magento/varnish-config.js +11 -9
  158. package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
  159. package/lib/tasks/php/php-container.js +108 -0
  160. package/lib/tasks/php/update-env-php.js +39 -21
  161. package/lib/tasks/php/update-env.php +66 -61
  162. package/lib/tasks/php/working_health_check.php +85 -0
  163. package/lib/tasks/requirements/{composer.js → composer-credentials.js} +3 -1
  164. package/lib/tasks/requirements/docker/index.js +15 -12
  165. package/lib/tasks/requirements/docker/performance.js +54 -0
  166. package/lib/tasks/requirements/docker/version.js +8 -8
  167. package/lib/tasks/requirements/index.js +5 -8
  168. package/lib/tasks/requirements/php-version.js +8 -116
  169. package/lib/tasks/requirements/platform.js +12 -25
  170. package/lib/tasks/start.js +24 -51
  171. package/lib/tasks/status/index.js +8 -12
  172. package/lib/tasks/stop.js +0 -2
  173. package/lib/tasks/theme/install-theme.js +1 -1
  174. package/lib/tasks/theme/link-theme.js +2 -2
  175. package/lib/tasks/theme/symlink-theme.js +2 -3
  176. package/lib/util/config-file-validator.js +27 -13
  177. package/lib/util/config-php-json.js +13 -4
  178. package/lib/util/database.js +7 -7
  179. package/lib/util/dockerfile-builder/build-instructions.js +197 -0
  180. package/lib/util/dockerfile-builder/index.js +276 -0
  181. package/lib/util/dockerfile-builder/types.d.ts +123 -0
  182. package/lib/util/env-php-json.js +10 -6
  183. package/lib/util/exec-async-command.js +3 -9
  184. package/lib/util/macos-version.js +20 -0
  185. package/lib/util/magento-task.js +3 -4
  186. package/lib/util/nginx-logs-parser.js +122 -0
  187. package/lib/util/php-task.js +3 -6
  188. package/lib/util/run-composer.js +6 -14
  189. package/lib/util/run-container-image.js +17 -0
  190. package/lib/util/run-magento.js +6 -14
  191. package/lib/util/run-php.js +6 -17
  192. package/package.json +9 -9
  193. package/typings/context.d.ts +7 -13
  194. package/typings/index.d.ts +67 -85
  195. package/yarn-error.log +9660 -0
  196. package/lib/config/composer.js +0 -11
  197. package/lib/config/php/extensions/libsodium.js +0 -36
  198. package/lib/config/php/releases/php-7.2.js +0 -25
  199. package/lib/config/php/releases/php-7.3.js +0 -25
  200. package/lib/config/php/releases/php-7.4.js +0 -23
  201. package/lib/config/php/releases/php-8.1.js +0 -25
  202. package/lib/config/phpbrew.js +0 -12
  203. package/lib/tasks/composer/install-prestissimo.js +0 -103
  204. package/lib/tasks/docker/containers.js +0 -231
  205. package/lib/tasks/mysql/connect-to-mysql.js +0 -114
  206. package/lib/tasks/mysql/create-magento-database.js +0 -18
  207. package/lib/tasks/php/bundled-extensions.js +0 -27
  208. package/lib/tasks/php/compile-options.js +0 -56
  209. package/lib/tasks/php/compile.js +0 -55
  210. package/lib/tasks/php/configure.js +0 -89
  211. package/lib/tasks/php/extensions/disable.js +0 -49
  212. package/lib/tasks/php/extensions/enable.js +0 -52
  213. package/lib/tasks/php/extensions/index.js +0 -80
  214. package/lib/tasks/php/extensions/install.js +0 -54
  215. package/lib/tasks/php/index.js +0 -79
  216. package/lib/tasks/php/install-sodium.js +0 -93
  217. package/lib/tasks/php/update-phpbrew.js +0 -45
  218. package/lib/tasks/php/validate-php.js +0 -67
  219. package/lib/tasks/php-fpm/get-process-id.js +0 -14
  220. package/lib/tasks/php-fpm/index.js +0 -4
  221. package/lib/tasks/php-fpm/start-php-fpm.js +0 -49
  222. package/lib/tasks/php-fpm/stop-php-fpm.js +0 -48
  223. package/lib/tasks/requirements/phpbrew/index.js +0 -61
  224. package/lib/tasks/requirements/phpbrew/install.js +0 -159
  225. package/lib/tasks/requirements/phpbrew/version.js +0 -28
@@ -1,10 +1,12 @@
1
1
  const path = require('path');
2
+ const os = require('os');
2
3
  const envPhpToJson = require('../../util/env-php-json');
3
4
  const getJsonfileData = require('../../util/get-jsonfile-data');
4
5
  const pathExists = require('../../util/path-exists');
5
- const phpTask = require('../../util/php-task');
6
+ const { containerApi } = require('../docker/containers');
6
7
 
7
8
  const composerLockPath = path.join(process.cwd(), 'composer.lock');
9
+ const envPhpPath = path.join(process.cwd(), 'app', 'etc', 'env.php');
8
10
  /**
9
11
  * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
10
12
  */
@@ -12,13 +14,19 @@ const updateEnvPHP = () => ({
12
14
  title: 'Updating env.php',
13
15
  task: async (ctx, task) => {
14
16
  // update env.php only if it's exist
15
- if (!await pathExists(path.join(process.cwd(), 'app', 'etc', 'env.php'))) {
17
+ if (!await pathExists(envPhpPath)) {
16
18
  task.skip();
17
19
  return;
18
20
  }
19
21
 
20
- const useVarnish = ctx.config.overridenConfiguration.configuration.varnish.enabled ? '1' : '';
21
- const varnishHost = '127.0.0.1';
22
+ const { php } = ctx.config.docker.getContainers(ctx.ports);
23
+
24
+ const isLinux = ctx.platform === 'linux';
25
+ const isNativeLinux = isLinux && !ctx.isWsl;
26
+ const hostMachine = isNativeLinux ? '127.0.0.1' : 'host.docker.internal';
27
+
28
+ const useVarnish = (!ctx.debug && ctx.config.overridenConfiguration.configuration.varnish.enabled) ? '1' : '';
29
+ const varnishHost = hostMachine;
22
30
  const varnishPort = ctx.ports.varnish;
23
31
  const previousVarnishPort = ctx.cachedPorts
24
32
  ? ctx.cachedPorts.varnish
@@ -34,15 +42,15 @@ const updateEnvPHP = () => ({
34
42
  ctx.CSAThemeInstalled = true;
35
43
  }
36
44
 
37
- const envPhp = await envPhpToJson(process.cwd(), { magentoVersion: ctx.magentoVersion });
45
+ const envPhp = await envPhpToJson(ctx);
38
46
 
39
47
  const persistedQueryConfig = envPhp.cache && envPhp.cache['persisted-query'];
40
48
 
41
49
  if (
42
50
  persistedQueryConfig
43
51
  && persistedQueryConfig.redis
44
- && persistedQueryConfig.redis.port === `${ ctx.ports.redis }`
45
- && persistedQueryConfig.redis.host === 'localhost'
52
+ && (persistedQueryConfig.redis.port !== `${ ctx.ports.redis }`
53
+ || persistedQueryConfig.redis.host === hostMachine)
46
54
  ) {
47
55
  SETUP_PQ = '';
48
56
  return;
@@ -50,20 +58,30 @@ const updateEnvPHP = () => ({
50
58
  }
51
59
  }
52
60
 
53
- return task.newListr(
54
- phpTask(`-f ${ path.join(__dirname, 'update-env.php') }`, {
55
- noTitle: true,
56
- env: {
57
- USE_VARNISH: useVarnish,
58
- VARNISH_PORT: `${ varnishPort }`,
59
- VARNISH_HOST: varnishHost,
60
- PREVIOUS_VARNISH_PORT: `${ previousVarnishPort }`,
61
- SETUP_PQ,
62
- REDIS_PORT: ctx.ports.redis,
63
- ADMIN_URI: ctx.config.overridenConfiguration.magento.adminuri
64
- }
65
- })
66
- );
61
+ const result = await containerApi.run({
62
+ env: {
63
+ USE_VARNISH: useVarnish,
64
+ VARNISH_PORT: `${ varnishPort }`,
65
+ VARNISH_HOST: varnishHost,
66
+ PREVIOUS_VARNISH_PORT: `${ previousVarnishPort }`,
67
+ SETUP_PQ,
68
+ REDIS_PORT: ctx.ports.redis,
69
+ ADMIN_URI: ctx.config.overridenConfiguration.magento.adminuri,
70
+ HOST_MACHINE: hostMachine,
71
+ PORTS: JSON.stringify(ctx.ports)
72
+ },
73
+ command: 'php ./update-env-php.php',
74
+ mountVolumes: [
75
+ `${path.join(__dirname, 'update-env.php')}:${ctx.config.baseConfig.containerMagentoDir}/update-env-php.php`,
76
+ `${envPhpPath}:/${ctx.config.baseConfig.containerMagentoDir}/env.php`
77
+ ],
78
+ image: php.image,
79
+ detach: false,
80
+ rm: true,
81
+ user: isLinux ? `${os.userInfo().uid}:${os.userInfo().gid}` : ''
82
+ });
83
+
84
+ task.output = result;
67
85
  }
68
86
  });
69
87
 
@@ -3,9 +3,9 @@
3
3
  function varexport($expression, $return=false): string
4
4
  {
5
5
  $export = var_export($expression, true);
6
- $export = preg_replace("/^([ ]*)(.*)/m", '$1$1$2', $export);
6
+ $export = preg_replace("/^([ ]*)(.*)/m", "$1$1$2", $export);
7
7
  $array = preg_split("/\r\n|\n|\r/", $export);
8
- $array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [null, ']$1', ' => ['], $array);
8
+ $array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [null, "]$1", " => ["], $array);
9
9
  $export = join(PHP_EOL, array_filter(["["] + $array));
10
10
  if ((bool)$return) {
11
11
  return $export;
@@ -19,12 +19,12 @@ function joinpaths(): string
19
19
  $paths = array();
20
20
 
21
21
  foreach (func_get_args() as $arg) {
22
- if ($arg !== '') {
22
+ if ($arg !== "") {
23
23
  $paths[] = $arg;
24
24
  }
25
25
  }
26
26
 
27
- return preg_replace('#/+#', '/', join('/', $paths));
27
+ return preg_replace("#/+#", "/", join("/", $paths));
28
28
  }
29
29
 
30
30
  class EnvUpdater
@@ -42,7 +42,7 @@ class EnvUpdater
42
42
 
43
43
  public function loadConfig()
44
44
  {
45
- $this->config = require './app/etc/env.php';
45
+ $this->config = require "./env.php";
46
46
  }
47
47
 
48
48
  /**
@@ -63,14 +63,14 @@ class EnvUpdater
63
63
 
64
64
  public function loadPortConfig()
65
65
  {
66
- $portConfigContent = file_get_contents('./node_modules/.create-magento-app-cache/port-config.json');
66
+ $portConfigContent = getenv("PORTS");
67
67
  if ($portConfigContent === false) {
68
- throw new Error('Port config file does not exists in cache directory');
68
+ throw new Error("Ports env does not exists");
69
69
  }
70
70
 
71
71
  $portConfigJsonData = json_decode($portConfigContent, true);
72
72
  if ($portConfigJsonData === null) {
73
- throw new Error('Port config file is not content');
73
+ throw new Error("Ports env is not parseable");
74
74
  }
75
75
 
76
76
  $this->portConfig = $portConfigJsonData;
@@ -79,91 +79,96 @@ class EnvUpdater
79
79
  public function modifyConfig()
80
80
  {
81
81
  // set admin uri
82
- $this->config['backend']['frontName'] = getenv('ADMIN_URI');
83
-
84
- // update mysql config
85
- if (isset($this->config['db']['connection']['default'])) {
86
- $conn = &$this->config['db']['connection']['default'];
87
- if (
88
- isset($conn['engine']) &&
89
- isset($conn['host']) &&
90
- $conn['engine'] === 'innodb' &&
91
- $conn['host'] !== '127.0.0.1:' . $this->portConfig['mysql']
92
- ) {
93
- $conn['host'] = '127.0.0.1:' . $this->portConfig['mysql'];
94
- }
82
+ $this->config["backend"]["frontName"] = getenv("ADMIN_URI");
83
+ $hostMachine = getenv("HOST_MACHINE");
84
+ if ($hostMachine === false) {
85
+ $hostMachine = '127.0.0.1';
86
+ }
87
+
88
+ // update mariadb config
89
+ if (isset($this->config["db"]["connection"]["default"])) {
90
+ $conn = &$this->config["db"]["connection"]["default"];
91
+ $mysqlHost = $hostMachine . ":" . $this->portConfig["mariadb"];
92
+
93
+ $conn["host"] = $mysqlHost;
95
94
  }
96
95
 
97
96
  // update redis session config
98
97
  if (
99
- isset($this->config['session']) &&
100
- $this->config['session']['save'] === 'redis' &&
101
- $this->config['session']['redis']['port'] !== strval($this->portConfig['redis'])
98
+ isset($this->config["session"]) &&
99
+ $this->config["session"]["save"] === "redis" &&
100
+ $this->config["session"]["redis"]["port"] !== strval($this->portConfig["redis"])
102
101
  ) {
103
- $this->config['session']['redis']['port'] = strval($this->portConfig['redis']);
102
+ $this->config["session"]["redis"]["port"] = strval($this->portConfig["redis"]);
104
103
  }
105
104
 
106
105
  if (
107
- isset($this->config['session']) &&
108
- $this->config['session']['save'] === 'redis' &&
109
- $this->config['session']['redis']['host'] !== '127.0.0.1'
106
+ isset($this->config["session"]) &&
107
+ $this->config["session"]["save"] === "redis" &&
108
+ $this->config["session"]["redis"]["host"] !== $hostMachine
110
109
  ) {
111
- $this->config['session']['redis']['host'] = '127.0.0.1';
110
+ $this->config["session"]["redis"]["host"] = $hostMachine;
112
111
  }
113
112
 
114
113
  // update redis frontend config
115
- if (isset($this->config['cache']['frontend']['default'])) {
116
- $frontendCache = &$this->config['cache']['frontend']['default'];
117
- if ($frontendCache['backend_options']['port'] !== strval($this->portConfig['redis'])) {
118
- $frontendCache['backend_options']['port'] = strval($this->portConfig['redis']);
114
+ if (isset($this->config["cache"]["frontend"]["default"])) {
115
+ $frontendCache = &$this->config["cache"]["frontend"]["default"];
116
+ if ($frontendCache["backend_options"]["port"] !== strval($this->portConfig["redis"])) {
117
+ $frontendCache["backend_options"]["port"] = strval($this->portConfig["redis"]);
119
118
  }
120
- if ($frontendCache['backend_options']['server'] !== '127.0.0.1') {
121
- $frontendCache['backend_options']['server'] = '127.0.0.1';
119
+ if ($frontendCache["backend_options"]["server"] !== $hostMachine) {
120
+ $frontendCache["backend_options"]["server"] = $hostMachine;
122
121
  }
123
122
  }
124
123
 
125
124
  // update persisted query redis config
126
- if (getenv('SETUP_PQ') == '1') {
127
- $cacheConfig = &$this->config['cache'];
128
- $redisPort = getenv('REDIS_PORT');
125
+ if (getenv("SETUP_PQ") == "1") {
126
+ $cacheConfig = &$this->config["cache"];
127
+ $redisPort = getenv("REDIS_PORT");
129
128
 
130
- if (isset($cacheConfig) && isset($cacheConfig['persisted-query']) && isset($cacheConfig['persisted-query']['redis']) && $cacheConfig['persisted-query']['redis']['port'] != $redisPort) {
131
- $cacheConfig['persisted-query']['redis']['port'] = $redisPort;
129
+ if (isset($cacheConfig) && isset($cacheConfig["persisted-query"]) && isset($cacheConfig["persisted-query"]["redis"])) {
130
+ if ($cacheConfig["persisted-query"]["redis"]["port"] !== $redisPort) {
131
+ $cacheConfig["persisted-query"]["redis"]["port"] = $redisPort;
132
+ }
133
+
134
+ if ($cacheConfig["persisted-query"]["redis"]["host"] !== $hostMachine) {
135
+ $cacheConfig["persisted-query"]["redis"]["host"] = $hostMachine;
136
+ }
132
137
  } else {
133
138
  if (!isset($cacheConfig)) {
134
- $this->config['cache'] = [];
139
+ $this->config["cache"] = [];
135
140
  }
136
- $this->config['cache']['persisted-query'] = [
137
- 'redis' => [
138
- 'host' => 'localhost',
139
- 'port' => $redisPort,
140
- 'database' => '5',
141
- 'scheme' => 'tcp'
141
+ $this->config["cache"]["persisted-query"] = [
142
+ "redis" => [
143
+ "host" => $hostMachine,
144
+ "port" => $redisPort,
145
+ "database" => "5",
146
+ "scheme" => "tcp"
142
147
  ]
143
148
  ];
144
149
  }
145
150
  } else {
146
- unset($this->config['cache']['persisted-query']);
151
+ unset($this->config["cache"]["persisted-query"]);
147
152
  }
148
153
 
149
154
  // set varnish config
150
- $httpCacheHosts = &$this->config['http_cache_hosts'];
155
+ $httpCacheHosts = &$this->config["http_cache_hosts"];
151
156
  $httpCacheHosts = [];
152
157
 
153
- if (getenv('USE_VARNISH') == '1') {
154
- $varnishHost = getenv('VARNISH_HOST');
155
- $varnishPort = getenv('VARNISH_PORT');
156
- $previousVarnishPort = getenv('PREVIOUS_VARNISH_PORT');
158
+ if (getenv("USE_VARNISH") == "1") {
159
+ $varnishHost = getenv("VARNISH_HOST");
160
+ $varnishPort = getenv("VARNISH_PORT");
161
+ $previousVarnishPort = getenv("PREVIOUS_VARNISH_PORT");
157
162
  $varnishConfig = [
158
- 'host' => $varnishHost,
159
- 'port' => $varnishPort
163
+ "host" => $varnishHost,
164
+ "port" => $varnishPort
160
165
  ];
161
166
 
162
167
  if (isset($httpCacheHosts)) {
163
168
  $varnishHostExists = false;
164
169
  foreach ($httpCacheHosts as $host) {
165
- if ($host['host'] == $varnishHost && $host['port'] == $previousVarnishPort) {
166
- $host['port'] = $varnishPort;
170
+ if ($host["host"] == $varnishHost && $host["port"] == $previousVarnishPort) {
171
+ $host["port"] = $varnishPort;
167
172
  $varnishHostExists = true;
168
173
  break;
169
174
  }
@@ -173,10 +178,10 @@ class EnvUpdater
173
178
  $httpCacheHosts = [$varnishConfig];
174
179
  }
175
180
  } else {
176
- $this->config['http_cache_hosts'] = [$varnishConfig];
181
+ $this->config["http_cache_hosts"] = [$varnishConfig];
177
182
  }
178
183
  } else {
179
- unset($this->config['http_cache_hosts']);
184
+ unset($this->config["http_cache_hosts"]);
180
185
  }
181
186
  }
182
187
 
@@ -184,7 +189,7 @@ class EnvUpdater
184
189
  {
185
190
  file_put_contents(
186
191
  $filePath,
187
- '<?php'.PHP_EOL.'return '.varexport($this->config, true).';' . PHP_EOL
192
+ "<?php".PHP_EOL."return ".varexport($this->config, true).";" . PHP_EOL
188
193
  );
189
194
  }
190
195
 
@@ -193,7 +198,7 @@ class EnvUpdater
193
198
  $this->loadConfig();
194
199
  $this->loadPortConfig();
195
200
  $this->modifyConfig();
196
- $this->saveConfig(joinpaths(getcwd(), './app/etc/env.php'));
201
+ $this->saveConfig("./env.php");
197
202
  }
198
203
  }
199
204
 
@@ -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,