@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
@@ -1,32 +1,27 @@
1
1
  const path = require('path');
2
2
  const fs = require('fs');
3
- const os = require('os');
3
+ const logger = require('@scandipwa/scandipwa-dev-utils/logger');
4
4
  const runComposerCommand = require('../../util/run-composer');
5
5
  const matchFilesystem = require('../../util/match-filesystem');
6
- const moveFile = require('../../util/move-file');
7
6
  const pathExists = require('../../util/path-exists');
8
7
  const getJsonFileData = require('../../util/get-jsonfile-data');
9
- const rmdirSafe = require('../../util/rmdir-safe');
10
8
  const KnownError = require('../../errors/known-error');
11
9
  const UnknownError = require('../../errors/unknown-error');
12
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
10
+ const { runPHPContainerCommand } = require('../php/php-container');
13
11
 
14
12
  const magentoProductEnterpriseEdition = 'magento/product-enterprise-edition';
15
13
  const magentoProductCommunityEdition = 'magento/product-community-edition';
16
14
 
17
15
  /**
18
- * Adjust composer.json file configuration for magento
16
+ * @param {import('../../../typings/context').ListrContext} ctx
17
+ * @param {import('listr2').ListrTaskWrapper<import('../../../typings/context').ListrContext>} task
19
18
  */
20
- const adjustComposerJson = async ({
21
- baseConfig,
19
+ const adjustComposerJson = async (ctx, task, {
22
20
  magentoEdition,
23
21
  magentoProductSelectedEdition,
24
- magentoVersion,
25
- magentoPackageVersion,
26
- task,
27
- verbose
22
+ magentoPackageVersion
28
23
  }) => {
29
- const composerData = await getJsonFileData(path.join(baseConfig.magentoDir, 'composer.json'));
24
+ const composerData = await getJsonFileData(path.join(ctx.config.baseConfig.magentoDir, 'composer.json'));
30
25
 
31
26
  // fix composer magento repository
32
27
  if (composerData && (!composerData.repositories
@@ -37,9 +32,8 @@ const adjustComposerJson = async ({
37
32
  && !Object.values(composerData.repositories).some((repo) => repo.type === 'composer' && repo.url.includes('repo.magento.com')))
38
33
  )) {
39
34
  task.output = 'No Magento repository is set in composer.json! Setting up...';
40
- await runComposerCommand('config repo.0 composer https://repo.magento.com', {
41
- magentoVersion,
42
- callback: !verbose ? undefined : (t) => {
35
+ await runComposerCommand(ctx, 'config repo.0 composer https://repo.magento.com', {
36
+ callback: !ctx.verbose ? undefined : (t) => {
43
37
  task.output = t;
44
38
  }
45
39
  });
@@ -48,10 +42,9 @@ const adjustComposerJson = async ({
48
42
  // if composer-root-update-plugin is not installed in composer, install it.
49
43
  if (composerData && !composerData.require['magento/composer-root-update-plugin']) {
50
44
  task.output = 'Installing magento/composer-root-update-plugin!';
51
- await runComposerCommand('require magento/composer-root-update-plugin:^1',
45
+ await runComposerCommand(ctx, 'require magento/composer-root-update-plugin:^1',
52
46
  {
53
- magentoVersion,
54
- callback: !verbose ? undefined : (t) => {
47
+ callback: !ctx.verbose ? undefined : (t) => {
55
48
  task.output = t;
56
49
  }
57
50
  });
@@ -62,7 +55,8 @@ const adjustComposerJson = async ({
62
55
  && composerData.require[magentoProductCommunityEdition]
63
56
  && composerData.require[magentoProductEnterpriseEdition]
64
57
  ) {
65
- throw new KnownError('Somehow, both Magento editions are installed!\nPlease choose only one edition an modify your composer.json manually!');
58
+ throw new KnownError(`Somehow, both Magento editions are installed!
59
+ Please choose only one edition an modify your composer.json manually!`);
66
60
  }
67
61
 
68
62
  const oppositeEdition = [magentoProductCommunityEdition, magentoProductEnterpriseEdition]
@@ -76,13 +70,11 @@ Change magento edition in config file or manually reinstall correct magento edit
76
70
  }
77
71
 
78
72
  // if magento package is not installed in composer, require it.
79
-
80
73
  if (composerData && !composerData.require[magentoProductSelectedEdition]) {
81
74
  task.output = `Installing ${magentoProductSelectedEdition}=${magentoPackageVersion}!`;
82
- await runComposerCommand(`require ${magentoProductSelectedEdition}:${magentoPackageVersion}`,
75
+ await runComposerCommand(ctx, `require ${magentoProductSelectedEdition}:${magentoPackageVersion}`,
83
76
  {
84
- magentoVersion,
85
- callback: !verbose ? undefined : (t) => {
77
+ callback: !ctx.verbose ? undefined : (t) => {
86
78
  task.output = t;
87
79
  }
88
80
  });
@@ -90,16 +82,14 @@ Change magento edition in config file or manually reinstall correct magento edit
90
82
  };
91
83
 
92
84
  /**
93
- * Create Magento Project
85
+ * @param {import('../../../typings/context').ListrContext} ctx
86
+ * @param {import('listr2').ListrTaskWrapper<import('../../../typings/context').ListrContext>} task
94
87
  */
95
- const createMagentoProject = async ({
88
+ const createMagentoProject = async (ctx, task, {
96
89
  magentoProject,
97
- magentoPackageVersion,
98
- magentoVersion,
99
- task,
100
- verbose
90
+ magentoPackageVersion
101
91
  }) => {
102
- const tempDir = path.join(os.tmpdir(), `magento-tmpdir-${Date.now()}`);
92
+ const tempDir = `/tmp/magento-tmpdir-${Date.now()}`;
103
93
  const installCommand = [
104
94
  'create-project',
105
95
  `--repository=https://repo.magento.com/ ${magentoProject}=${magentoPackageVersion}`,
@@ -107,22 +97,8 @@ const createMagentoProject = async ({
107
97
  `"${tempDir}"`
108
98
  ];
109
99
 
110
- await runComposerCommand(
111
- installCommand.join(' '),
112
- {
113
- magentoVersion,
114
- callback: !verbose ? undefined : (t) => {
115
- task.output = t;
116
- }
117
- }
118
- );
119
-
120
- await moveFile({
121
- from: path.join(tempDir, 'composer.json'),
122
- to: path.join(process.cwd(), 'composer.json')
123
- });
124
-
125
- await rmdirSafe(tempDir);
100
+ await runPHPContainerCommand(ctx, `composer ${installCommand.join(' ')} \n
101
+ && mv ${tempDir}/composer.json ${ctx.config.baseConfig.containerMagentoDir}/composer.json`);
126
102
  };
127
103
 
128
104
  /**
@@ -131,7 +107,7 @@ const createMagentoProject = async ({
131
107
  const installMagentoProject = () => ({
132
108
  title: 'Installing Magento Project',
133
109
  task: async (ctx, task) => {
134
- const { magentoVersion, config: { baseConfig, overridenConfiguration }, verbose } = ctx;
110
+ const { config: { baseConfig, overridenConfiguration } } = ctx;
135
111
  const {
136
112
  magento: { edition: magentoEdition },
137
113
  magentoVersion: magentoPackageVersion
@@ -141,15 +117,10 @@ const installMagentoProject = () => ({
141
117
  const magentoProject = `magento/project-${magentoEdition}-edition`;
142
118
 
143
119
  if (await pathExists(path.join(baseConfig.magentoDir, 'composer.json'))) {
144
- await adjustComposerJson({
145
- baseConfig,
146
- isEnterprise,
120
+ await adjustComposerJson(ctx, task, {
147
121
  magentoEdition,
148
122
  magentoPackageVersion,
149
- magentoProductSelectedEdition,
150
- magentoVersion,
151
- task,
152
- verbose
123
+ magentoProductSelectedEdition
153
124
  });
154
125
  }
155
126
 
@@ -173,12 +144,9 @@ const installMagentoProject = () => ({
173
144
  task.output = 'Creating Magento project';
174
145
 
175
146
  if (!await pathExists(path.join(process.cwd(), 'composer.json'))) {
176
- await createMagentoProject({
147
+ await createMagentoProject(ctx, task, {
177
148
  magentoProject,
178
- magentoPackageVersion,
179
- magentoVersion,
180
- task,
181
- verbose
149
+ magentoPackageVersion
182
150
  });
183
151
  }
184
152
 
@@ -187,18 +155,18 @@ const installMagentoProject = () => ({
187
155
  recursive: true
188
156
  });
189
157
  }
158
+
190
159
  try {
191
- await runComposerCommand('install',
160
+ await runComposerCommand(ctx, 'install',
192
161
  {
193
- magentoVersion,
194
- callback: !verbose ? undefined : (t) => {
162
+ callback: !ctx.verbose ? undefined : (t) => {
195
163
  task.output = t;
196
164
  }
197
165
  });
198
166
  } catch (e) {
199
167
  if (e.message.includes('man-in-the-middle attack')) {
200
168
  throw new KnownError(`Probably you haven't setup pubkeys in composer.
201
- Please run ${logger.style.command('composer diagnose')} in cli to get mode.\n\n${e}`);
169
+ Please run ${logger.style.command('composer diagnose')} in cli to get mode.\n\n${e}`);
202
170
  }
203
171
 
204
172
  throw new UnknownError(`Unexpected error during composer install.\n\n${e}`);
@@ -6,15 +6,15 @@ const magentoTask = require('../../../util/magento-task');
6
6
  */
7
7
  const disableFullPageCache = () => ({
8
8
  title: 'Adjusting full_page cache setting',
9
- task: async ({ magentoVersion, config }, task) => {
10
- const { cache_types } = await envPhpToJson(process.cwd(), { magentoVersion });
9
+ task: async (ctx, task) => {
10
+ const { cache_types } = await envPhpToJson(ctx);
11
11
  if (cache_types && typeof cache_types.full_page === 'number') {
12
- if (cache_types.full_page !== 0 && !config.overridenConfiguration.configuration.varnish.enabled) {
12
+ if (cache_types.full_page !== 0 && !ctx.config.overridenConfiguration.configuration.varnish.enabled) {
13
13
  task.title = 'Disabling full_page cache in Magento';
14
14
  return task.newListr(magentoTask('cache:disable full_page'));
15
15
  }
16
16
 
17
- if (config.overridenConfiguration.configuration.varnish.enabled && cache_types.full_page !== 1) {
17
+ if (ctx.config.overridenConfiguration.configuration.varnish.enabled && cache_types.full_page !== 1) {
18
18
  task.title = 'Enabling full_page cache in Magento (Varnish is enabled)';
19
19
  return task.newListr(magentoTask('cache:enable full_page'));
20
20
  }
@@ -6,11 +6,15 @@ const { updateTableValues, isTableExists } = require('../../../util/database');
6
6
  module.exports = () => ({
7
7
  title: 'Configuring Elasticsearch',
8
8
  skip: async (ctx) => !(await isTableExists('magento', 'core_config_data', ctx)),
9
- task: async ({ ports, mysqlConnection }, task) => {
9
+ task: async (ctx, task) => {
10
+ const { ports, databaseConnection } = ctx;
11
+ const isLinux = ctx.platform === 'linux';
12
+ const isNativeLinux = isLinux && !ctx.isWsl;
13
+ const hostMachine = isNativeLinux ? '127.0.0.1' : 'host.docker.internal';
10
14
  await updateTableValues('core_config_data', [
11
15
  { path: 'catalog/search/engine', value: 'elasticsearch7' },
12
- { path: 'catalog/search/elasticsearch7_server_hostname', value: '127.0.0.1' },
16
+ { path: 'catalog/search/elasticsearch7_server_hostname', value: hostMachine },
13
17
  { path: 'catalog/search/elasticsearch7_server_port', value: `${ports.elasticsearch}` }
14
- ], { mysqlConnection, task });
18
+ ], { databaseConnection, task });
15
19
  }
16
20
  });
@@ -5,8 +5,9 @@ const runMagentoCommand = require('../../../util/run-magento');
5
5
  */
6
6
  module.exports = () => ({
7
7
  title: 'Creating admin user',
8
- task: async ({ magentoVersion, mysqlConnection, config: { magentoConfiguration } }, task) => {
9
- const [[{ userCount }]] = await mysqlConnection.query(`
8
+ task: async (ctx, task) => {
9
+ const { config: { magentoConfiguration } } = ctx;
10
+ const [[{ userCount }]] = await ctx.databaseConnection.query(`
10
11
  SELECT count(*) AS userCount
11
12
  FROM admin_user
12
13
  WHERE username = ?;
@@ -17,13 +18,11 @@ module.exports = () => ({
17
18
  return;
18
19
  }
19
20
 
20
- await runMagentoCommand(`admin:user:create \
21
+ await runMagentoCommand(ctx, `admin:user:create \
21
22
  --admin-firstname='${ magentoConfiguration.first_name }' \
22
23
  --admin-lastname='${ magentoConfiguration.last_name }' \
23
24
  --admin-email='${ magentoConfiguration.email }' \
24
25
  --admin-user='${ magentoConfiguration.user }' \
25
- --admin-password='${ magentoConfiguration.password }'`, {
26
- magentoVersion
27
- });
26
+ --admin-password='${ magentoConfiguration.password }'`);
28
27
  }
29
28
  });
@@ -7,8 +7,8 @@ const deleteAdminUsers = () => ({
7
7
  title: 'Deleting old admin users',
8
8
  skip: async (ctx) => !(await isTableExists('magento', 'admin_user', ctx)),
9
9
  task: async (ctx) => {
10
- const { mysqlConnection } = ctx;
11
- await mysqlConnection.query(`
10
+ const { databaseConnection } = ctx;
11
+ await databaseConnection.query(`
12
12
  TRUNCATE TABLE admin_user;
13
13
  `);
14
14
  }
@@ -1,4 +1,4 @@
1
- const { customerTables } = require('../../mysql/magento-tables');
1
+ const { customerTables } = require('../../database/magento-tables');
2
2
 
3
3
  /**
4
4
  * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
@@ -6,19 +6,19 @@ const { customerTables } = require('../../mysql/magento-tables');
6
6
  const deleteCustomers = () => ({
7
7
  title: 'Deleting customers',
8
8
  task: async (ctx, task) => {
9
- const { mysqlConnection, withCustomersData } = ctx;
9
+ const { databaseConnection, withCustomersData } = ctx;
10
10
 
11
11
  if (withCustomersData) {
12
12
  task.skip();
13
13
  return;
14
14
  }
15
15
 
16
- const [rows] = await mysqlConnection.query('select TABLE_NAME from information_schema.TABLES;');
16
+ const [rows] = await databaseConnection.query('select TABLE_NAME from information_schema.TABLES;');
17
17
 
18
18
  await Promise.all(
19
19
  customerTables
20
20
  .filter((tableName) => rows.some((row) => row.TABLE_NAME === tableName))
21
- .map((tableName) => mysqlConnection.query(`TRUNCATE TABLE \`${ tableName }\`;`))
21
+ .map((tableName) => databaseConnection.query(`TRUNCATE TABLE \`${ tableName }\`;`))
22
22
  );
23
23
  }
24
24
  });
@@ -1,4 +1,4 @@
1
- const { orderTables } = require('../../mysql/magento-tables');
1
+ const { orderTables } = require('../../database/magento-tables');
2
2
 
3
3
  /**
4
4
  * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
@@ -6,19 +6,19 @@ const { orderTables } = require('../../mysql/magento-tables');
6
6
  const deleteOrders = () => ({
7
7
  title: 'Deleting orders',
8
8
  task: async (ctx, task) => {
9
- const { mysqlConnection, withCustomersData } = ctx;
9
+ const { databaseConnection, withCustomersData } = ctx;
10
10
 
11
11
  if (withCustomersData) {
12
12
  task.skip();
13
13
  return;
14
14
  }
15
15
 
16
- const [rows] = await mysqlConnection.query('select TABLE_NAME from information_schema.TABLES;');
16
+ const [rows] = await databaseConnection.query('select TABLE_NAME from information_schema.TABLES;');
17
17
 
18
18
  await Promise.all(
19
19
  orderTables
20
20
  .filter((tableName) => rows.some((row) => row.TABLE_NAME === tableName))
21
- .map((tableName) => mysqlConnection.query(`TRUNCATE TABLE \`${ tableName }\`;`))
21
+ .map((tableName) => databaseConnection.query(`TRUNCATE TABLE \`${ tableName }\`;`))
22
22
  );
23
23
  }
24
24
  });
@@ -6,13 +6,11 @@ const runMagentoCommand = require('../../../util/run-magento');
6
6
  */
7
7
  module.exports = () => ({
8
8
  title: 'Disabling 2fa for admin',
9
- task: async ({ magentoVersion }, task) => {
10
- const { modules } = await configPhpToJson(process.cwd(), { magentoVersion });
9
+ task: async (ctx, task) => {
10
+ const { modules } = await configPhpToJson(ctx);
11
11
 
12
12
  if (modules.Magento_TwoFactorAuth !== undefined && modules.Magento_TwoFactorAuth !== 0) {
13
- await runMagentoCommand('module:disable Magento_TwoFactorAuth', {
14
- magentoVersion
15
- });
13
+ await runMagentoCommand(ctx, 'module:disable Magento_TwoFactorAuth');
16
14
 
17
15
  return;
18
16
  }
@@ -5,9 +5,8 @@ const runMagentoCommand = require('../../../util/run-magento');
5
5
  */
6
6
  const disableMaintenanceMode = () => ({
7
7
  title: 'Disabling maintenance mode',
8
- task: async ({ magentoVersion }, task) => {
9
- const { result } = await runMagentoCommand('maintenance:status', {
10
- magentoVersion,
8
+ task: async (ctx, task) => {
9
+ const { result } = await runMagentoCommand(ctx, 'maintenance:status', {
11
10
  throwNonZeroCode: false
12
11
  });
13
12
 
@@ -16,7 +15,7 @@ const disableMaintenanceMode = () => ({
16
15
  return;
17
16
  }
18
17
 
19
- await runMagentoCommand('maintenance:disable', { magentoVersion });
18
+ await runMagentoCommand(ctx, 'maintenance:disable');
20
19
  }
21
20
  });
22
21
 
@@ -5,7 +5,7 @@ const { updateTableValues } = require('../../../util/database');
5
5
  */
6
6
  const increaseAdminSessionLifetime = () => ({
7
7
  title: 'Increase admin session lifetime to 1 month',
8
- task: async ({ mysqlConnection }, task) => updateTableValues('core_config_data', [
8
+ task: async ({ databaseConnection }, task) => updateTableValues('core_config_data', [
9
9
  {
10
10
  path: 'admin/security/session_lifetime',
11
11
  value: '2800000'
@@ -15,7 +15,7 @@ const increaseAdminSessionLifetime = () => ({
15
15
  value: null
16
16
  }
17
17
  ], {
18
- mysqlConnection,
18
+ databaseConnection,
19
19
  task
20
20
  })
21
21
 
@@ -11,6 +11,7 @@ const increaseAdminSessionLifetime = require('./increase-admin-session-lifetime'
11
11
  const magentoTask = require('../../../util/magento-task');
12
12
  const urnHighlighter = require('./urn-highlighter');
13
13
  const adjustFullPageCache = require('./adjust-full-page-cache');
14
+ const updateEnvPHP = require('../../php/update-env-php');
14
15
 
15
16
  /**
16
17
  * @param {Object} [options]
@@ -32,6 +33,7 @@ const setupMagento = (options = {}) => ({
32
33
  return task.newListr([
33
34
  flushRedisConfig(),
34
35
  waitingForRedis(),
36
+ updateEnvPHP(),
35
37
  migrateDatabase(),
36
38
  {
37
39
  title: 'Configuring Magento settings',
@@ -24,15 +24,19 @@ const installMagento = ({ isDbEmpty = false } = {}) => ({
24
24
  magentoConfiguration
25
25
  },
26
26
  ports,
27
- mysqlConnection
27
+ databaseConnection
28
28
  } = ctx;
29
29
 
30
- const [tableResponse] = await mysqlConnection.query(
30
+ const isLinux = ctx.platform === 'linux';
31
+ const isNativeLinux = isLinux && !ctx.isWsl;
32
+ const hostMachine = isNativeLinux ? '127.0.0.1' : 'host.docker.internal';
33
+
34
+ const [tableResponse] = await databaseConnection.query(
31
35
  'SELECT * FROM information_schema.tables WHERE table_schema = \'magento\' AND table_name = \'admin_user\' LIMIT 1;'
32
36
  );
33
37
 
34
38
  if (tableResponse.length > 0) {
35
- const response = await mysqlConnection.query(
39
+ const response = await databaseConnection.query(
36
40
  'select * from admin_user where username=\'admin\';'
37
41
  );
38
42
 
@@ -54,26 +58,24 @@ const installMagento = ({ isDbEmpty = false } = {}) => ({
54
58
  ]
55
59
  });
56
60
 
57
- await mysqlConnection.query('SET FOREIGN_KEY_CHECKS = 0;');
61
+ await databaseConnection.query('SET FOREIGN_KEY_CHECKS = 0;');
58
62
 
59
63
  if (confirmDeleteAdminUsers === 'delete-all') {
60
- await mysqlConnection.query(`
64
+ await databaseConnection.query(`
61
65
  TRUNCATE TABLE admin_user;
62
66
  `);
63
67
  } else {
64
- await mysqlConnection.query(`
68
+ await databaseConnection.query(`
65
69
  DELETE FROM admin_user WHERE username='admin';
66
70
  `);
67
71
  }
68
72
 
69
- await mysqlConnection.query('SET FOREIGN_KEY_CHECKS = 1;');
73
+ await databaseConnection.query('SET FOREIGN_KEY_CHECKS = 1;');
70
74
  }
71
75
  }
72
76
 
73
- const { mysql: { env } } = docker.getContainers(ports);
74
- const envPhpData = await envPhpToJson(process.cwd(), {
75
- magentoVersion: ctx.magentoVersion
76
- });
77
+ const { mariadb: { env } } = docker.getContainers(ports);
78
+ const envPhpData = await envPhpToJson(ctx);
77
79
 
78
80
  const envPhpHaveEncryptionKey = envPhpData && envPhpData.crypt && envPhpData.crypt.key && envPhpData.crypt.key;
79
81
 
@@ -95,7 +97,7 @@ const installMagento = ({ isDbEmpty = false } = {}) => ({
95
97
 
96
98
  const elasticsearchConfiguration = ` \
97
99
  --search-engine='elasticsearch7' \
98
- --elasticsearch-host='127.0.0.1' \
100
+ --elasticsearch-host='${ hostMachine }' \
99
101
  --elasticsearch-port='${ ports.elasticsearch }'`;
100
102
 
101
103
  /**
@@ -114,25 +116,24 @@ const installMagento = ({ isDbEmpty = false } = {}) => ({
114
116
  ${ !isMagento23 ? elasticsearchConfiguration : '' } \
115
117
  ${encryptionKeyOption || ''} \
116
118
  --session-save=redis \
117
- --session-save-redis-host='127.0.0.1' \
119
+ --session-save-redis-host='${ hostMachine }' \
118
120
  --session-save-redis-port='${ ports.redis }' \
119
121
  --session-save-redis-log-level='3' \
120
122
  --session-save-redis-max-concurrency='30' \
121
123
  --session-save-redis-db='1' \
122
124
  --session-save-redis-disable-locking='1' \
123
125
  --cache-backend='redis' \
124
- --cache-backend-redis-server='127.0.0.1' \
126
+ --cache-backend-redis-server='${ hostMachine }' \
125
127
  --cache-backend-redis-port='${ ports.redis }' \
126
128
  --cache-backend-redis-db='0't \
127
- --db-host='127.0.0.1:${ ports.mysql }' \
128
- --db-name='${ env.MYSQL_DATABASE }' \
129
- --db-user='${ env.MYSQL_USER }' \
130
- --db-password='${ env.MYSQL_PASSWORD }' \
129
+ --db-host='${ hostMachine }:${ ports.mariadb }' \
130
+ --db-name='${ env.MARIADB_DATABASE }' \
131
+ --db-user='${ env.MARIADB_USER }' \
132
+ --db-password='${ env.MARIADB_PASSWORD }' \
131
133
  --backend-frontname='${ magentoConfiguration.adminuri }' \
132
134
  --no-interaction`;
133
135
 
134
- await runMagentoCommand(command, {
135
- magentoVersion,
136
+ await runMagentoCommand(ctx, command, {
136
137
  throwNonZeroCode: true,
137
138
  callback: !ctx.verbose ? undefined : (t) => {
138
139
  task.output = t;
@@ -8,6 +8,7 @@ const upgradeMagento = require('./upgrade-magento');
8
8
  const varnishConfigSetup = require('./varnish-config');
9
9
  const pathExists = require('../../../util/path-exists');
10
10
  const updateEnvPHP = require('../../php/update-env-php');
11
+ const UnknownError = require('../../../errors/unknown-error');
11
12
 
12
13
  /**
13
14
  * @param {Object} [options]
@@ -17,12 +18,9 @@ const updateEnvPHP = require('../../php/update-env-php');
17
18
  const migrateDatabase = (options = {}) => ({
18
19
  title: 'Migrating database',
19
20
  task: async (ctx, task) => {
20
- const {
21
- magentoVersion,
22
- mysqlConnection
23
- } = ctx;
21
+ const { databaseConnection } = ctx;
24
22
 
25
- const [[{ tableCount }]] = await mysqlConnection.query(`
23
+ const [[{ tableCount }]] = await databaseConnection.query(`
26
24
  SELECT count(*) AS tableCount
27
25
  FROM INFORMATION_SCHEMA.TABLES
28
26
  WHERE TABLE_SCHEMA = 'magento';
@@ -35,9 +33,9 @@ const migrateDatabase = (options = {}) => ({
35
33
  ) {
36
34
  if (options.onlyInstallMagento) {
37
35
  ctx.isSetupUpgradeNeeded = false;
38
- return task.newListr(
36
+ return task.newListr([
39
37
  installMagento({ isDbEmpty: true })
40
- );
38
+ ]);
41
39
  }
42
40
 
43
41
  return task.newListr([
@@ -57,8 +55,7 @@ const migrateDatabase = (options = {}) => ({
57
55
  });
58
56
  }
59
57
 
60
- const { code } = await runMagentoCommand('setup:db:status', {
61
- magentoVersion,
58
+ const { code, result } = await runMagentoCommand(ctx, 'setup:db:status', {
62
59
  throwNonZeroCode: false
63
60
  });
64
61
 
@@ -67,7 +64,6 @@ const migrateDatabase = (options = {}) => ({
67
64
  ctx.isSetupUpgradeNeeded = false;
68
65
  // no setup is needed, but still to be sure configure ES
69
66
  return task.newListr([
70
- updateEnvPHP(),
71
67
  varnishConfigSetup(),
72
68
  configureElasticsearch()
73
69
  ], {
@@ -107,7 +103,6 @@ const migrateDatabase = (options = {}) => ({
107
103
  }
108
104
  case 2: {
109
105
  return task.newListr([
110
- updateEnvPHP(),
111
106
  varnishConfigSetup(),
112
107
  configureElasticsearch(),
113
108
  upgradeMagento()
@@ -121,9 +116,7 @@ const migrateDatabase = (options = {}) => ({
121
116
  });
122
117
  }
123
118
  default: {
124
- // TODO: handle these statuses ?
125
- task.title = 'Migrating database failed: manual action is required!';
126
- break;
119
+ throw new UnknownError(`Migrating database failed: manual action is required!\n\n${result}`);
127
120
  }
128
121
  }
129
122
  },
@@ -14,7 +14,7 @@ module.exports = () => ({
14
14
  ssl
15
15
  }
16
16
  },
17
- mysqlConnection
17
+ databaseConnection
18
18
  } = ctx;
19
19
  const isNgrok = host.endsWith('ngrok.io');
20
20
  const enableSecureFrontend = ssl.enabled ? '1' : '0';
@@ -29,6 +29,6 @@ module.exports = () => ({
29
29
  { path: 'web/secure/use_in_frontend', value: enableSecureFrontend },
30
30
  { path: 'web/secure/use_in_adminhtml', value: enableSecureFrontend },
31
31
  { path: 'web/cookie/cookie_domain', value: null }
32
- ], { mysqlConnection, task });
32
+ ], { databaseConnection, task });
33
33
  }
34
34
  });
@@ -6,10 +6,10 @@ const runMagentoCommand = require('../../../util/run-magento');
6
6
  */
7
7
  module.exports = () => ({
8
8
  title: 'Switching Magento mode',
9
- task: async ({ magentoVersion, config: { magentoConfiguration: { mode } } }, task) => {
10
- const { result } = await runMagentoCommand('deploy:mode:show', {
11
- throwNonZeroCode: false,
12
- magentoVersion
9
+ task: async (ctx, task) => {
10
+ const { config: { magentoConfiguration: { mode } } } = ctx;
11
+ const { result } = await runMagentoCommand(ctx, 'deploy:mode:show', {
12
+ throwNonZeroCode: false
13
13
  });
14
14
 
15
15
  if (result.includes(mode)) {
@@ -5,13 +5,13 @@ const { updateTableValues } = require('../../../util/database');
5
5
  */
6
6
  const setUrlRewrite = () => ({
7
7
  title: 'Setting up url-rewrites',
8
- task: async ({ mysqlConnection }, task) => {
8
+ task: async ({ databaseConnection }, task) => {
9
9
  await updateTableValues('core_config_data', [
10
10
  {
11
11
  path: 'web/seo/use_rewrites',
12
12
  value: '1'
13
13
  }
14
- ], { mysqlConnection, task });
14
+ ], { databaseConnection, task });
15
15
  }
16
16
  });
17
17