@scandipwa/magento-scripts 1.16.0-alpha.4 → 2.0.0-alpha.0

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 (190) hide show
  1. package/lib/commands/cli.js +2 -4
  2. package/lib/commands/execute.js +28 -3
  3. package/lib/commands/start.js +37 -15
  4. package/lib/commands/status.js +2 -0
  5. package/lib/config/docker.js +65 -42
  6. package/lib/config/get-project-configuration.js +3 -1
  7. package/lib/config/index.js +10 -7
  8. package/lib/config/magento/required-php-extensions/index.js +29 -0
  9. package/lib/config/magento/required-php-extensions/magento-2.3.js +19 -0
  10. package/lib/config/magento/required-php-extensions/magento-2.4.js +29 -0
  11. package/lib/config/php/base-repo.js +3 -0
  12. package/lib/config/php/extensions/apcu.js +12 -0
  13. package/lib/config/php/extensions/bcmath.js +7 -0
  14. package/lib/config/php/extensions/curl.js +11 -0
  15. package/lib/config/php/extensions/gd.js +14 -0
  16. package/lib/config/php/extensions/index.js +18 -2
  17. package/lib/config/php/extensions/intl.js +10 -0
  18. package/lib/config/php/extensions/opcache.js +10 -0
  19. package/lib/config/php/extensions/pdo_mysql.js +7 -0
  20. package/lib/config/php/extensions/soap.js +10 -0
  21. package/lib/config/php/extensions/sodium.js +10 -0
  22. package/lib/config/php/extensions/xdebug.js +8 -5
  23. package/lib/config/php/extensions/xsl.js +10 -0
  24. package/lib/config/php/extensions/zip.js +10 -0
  25. package/lib/config/php/{releases → versions}/index.js +0 -0
  26. package/lib/config/php/versions/php-7.2.js +23 -0
  27. package/lib/config/php/versions/php-7.3.js +23 -0
  28. package/lib/config/php/versions/php-7.4.js +23 -0
  29. package/lib/config/php/versions/php-8.1.js +23 -0
  30. package/lib/config/php-config.js +8 -12
  31. package/lib/config/port-config.js +1 -5
  32. package/lib/config/templates/magentorc.template +3 -3
  33. package/lib/config/templates/php-fpm.template.conf +3 -3
  34. package/lib/config/templates/php.template.ini +12 -6
  35. package/lib/config/templates/ssl-terminator.template.conf +1 -1
  36. package/lib/config/templates/vscode-launch.template.json +3 -1
  37. package/lib/config/versions/magento-2.3.0.js +8 -2
  38. package/lib/config/versions/magento-2.3.1.js +8 -2
  39. package/lib/config/versions/magento-2.3.2-p1.js +44 -0
  40. package/lib/config/versions/magento-2.3.2-p2.js +8 -2
  41. package/lib/config/versions/magento-2.3.2.js +8 -2
  42. package/lib/config/versions/magento-2.3.3-p1.js +8 -2
  43. package/lib/config/versions/magento-2.3.3.js +8 -2
  44. package/lib/config/versions/magento-2.3.4-p1.js +44 -0
  45. package/lib/config/versions/magento-2.3.4-p2.js +8 -2
  46. package/lib/config/versions/magento-2.3.4.js +8 -2
  47. package/lib/config/versions/magento-2.3.5-p1.js +8 -2
  48. package/lib/config/versions/magento-2.3.5-p2.js +8 -2
  49. package/lib/config/versions/magento-2.3.5.js +8 -2
  50. package/lib/config/versions/magento-2.3.6-p1.js +8 -2
  51. package/lib/config/versions/magento-2.3.6.js +8 -2
  52. package/lib/config/versions/magento-2.3.7-p1.js +8 -2
  53. package/lib/config/versions/magento-2.3.7-p2.js +8 -2
  54. package/lib/config/versions/magento-2.3.7-p3.js +8 -2
  55. package/lib/config/versions/magento-2.3.7.js +8 -2
  56. package/lib/config/versions/magento-2.4.0-p1.js +9 -3
  57. package/lib/config/versions/magento-2.4.0.js +9 -3
  58. package/lib/config/versions/magento-2.4.1-p1.js +6 -5
  59. package/lib/config/versions/magento-2.4.1.js +9 -2
  60. package/lib/config/versions/magento-2.4.2-p1.js +6 -5
  61. package/lib/config/versions/magento-2.4.2-p2.js +6 -6
  62. package/lib/config/versions/magento-2.4.2.js +6 -6
  63. package/lib/config/versions/magento-2.4.3-p1.js +7 -7
  64. package/lib/config/versions/magento-2.4.3-p2.js +7 -7
  65. package/lib/config/versions/magento-2.4.3.js +7 -7
  66. package/lib/config/versions/magento-2.4.4.js +9 -2
  67. package/lib/tasks/cleanup.js +2 -2
  68. package/lib/tasks/composer/index.js +14 -104
  69. package/lib/tasks/docker/api.d.ts +71 -0
  70. package/lib/tasks/docker/api.js +30 -0
  71. package/lib/tasks/docker/containers/container-api.d.ts +128 -0
  72. package/lib/tasks/docker/containers/container-api.js +153 -0
  73. package/lib/tasks/docker/containers/index.js +19 -0
  74. package/lib/tasks/docker/containers/tasks.js +215 -0
  75. package/lib/tasks/docker/convert-legacy-volumes.js +7 -3
  76. package/lib/tasks/docker/image/image-api.d.ts +34 -0
  77. package/lib/tasks/docker/image/image-api.js +49 -0
  78. package/lib/tasks/docker/image/index.js +5 -0
  79. package/lib/tasks/docker/index.js +1 -13
  80. package/lib/tasks/docker/network/index.js +7 -0
  81. package/lib/tasks/docker/network/network-api.d.ts +103 -0
  82. package/lib/tasks/docker/network/network-api.js +99 -0
  83. package/lib/tasks/docker/{network.js → network/tasks.js} +17 -10
  84. package/lib/tasks/docker/project-image-builder.js +167 -0
  85. package/lib/tasks/docker/volumes.js +1 -1
  86. package/lib/tasks/file-system/create-nginx-config.js +2 -3
  87. package/lib/tasks/file-system/create-php-config.js +20 -5
  88. package/lib/tasks/file-system/create-php-fpm-config.js +8 -4
  89. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +41 -29
  90. package/lib/tasks/file-system/create-phpstorm-config/index.js +2 -0
  91. package/lib/tasks/file-system/create-phpstorm-config/keys.js +15 -1
  92. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +4 -1
  93. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +3 -3
  94. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +81 -0
  95. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +42 -0
  96. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +9 -0
  97. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +66 -0
  98. package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +11 -9
  99. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +2 -1
  100. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +15 -30
  101. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +24 -5
  102. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +50 -0
  103. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +50 -0
  104. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +50 -0
  105. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +15 -15
  106. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +29 -3
  107. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +50 -0
  108. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +42 -0
  109. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +50 -0
  110. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +0 -2
  111. package/lib/tasks/file-system/create-ssl-terminator-config.js +4 -2
  112. package/lib/tasks/file-system/create-vscode-config.js +57 -42
  113. package/lib/tasks/file-system/index.js +2 -1
  114. package/lib/tasks/link.js +1 -2
  115. package/lib/tasks/magento/install-magento-project.js +39 -64
  116. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +4 -4
  117. package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +6 -2
  118. package/lib/tasks/magento/setup-magento/create-admin.js +5 -6
  119. package/lib/tasks/magento/setup-magento/disable-2fa.js +3 -5
  120. package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +3 -4
  121. package/lib/tasks/magento/setup-magento/index.js +1 -3
  122. package/lib/tasks/magento/setup-magento/install-magento.js +57 -11
  123. package/lib/tasks/magento/setup-magento/migrate-database.js +12 -11
  124. package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
  125. package/lib/tasks/magento/setup-magento/varnish-config.js +7 -5
  126. package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
  127. package/lib/tasks/mysql/connect-to-mysql.js +44 -19
  128. package/lib/tasks/mysql/import-dump-to-mysql.js +161 -25
  129. package/lib/tasks/php/php-container.js +108 -0
  130. package/lib/tasks/php/update-env-php.js +35 -19
  131. package/lib/tasks/php/update-env.php +61 -56
  132. package/lib/tasks/php/working_health_check.php +85 -0
  133. package/lib/tasks/requirements/{composer.js → composer-credentials.js} +3 -1
  134. package/lib/tasks/requirements/docker/index.js +15 -12
  135. package/lib/tasks/requirements/docker/performance.js +54 -0
  136. package/lib/tasks/requirements/docker/version.js +8 -8
  137. package/lib/tasks/requirements/index.js +7 -10
  138. package/lib/tasks/requirements/php-version.js +8 -116
  139. package/lib/tasks/requirements/platform.js +12 -25
  140. package/lib/tasks/start.js +41 -48
  141. package/lib/tasks/status/index.js +4 -10
  142. package/lib/tasks/stop.js +0 -2
  143. package/lib/tasks/theme/install-theme.js +1 -1
  144. package/lib/tasks/theme/symlink-theme.js +2 -3
  145. package/lib/util/config-php-json.js +13 -4
  146. package/lib/util/dockerfile-builder/build-instructions.js +197 -0
  147. package/lib/util/dockerfile-builder/index.js +276 -0
  148. package/lib/util/dockerfile-builder/types.d.ts +123 -0
  149. package/lib/util/env-php-json.js +10 -6
  150. package/lib/util/exec-async-command.js +3 -9
  151. package/lib/util/macos-version.js +20 -0
  152. package/lib/util/magento-task.js +3 -4
  153. package/lib/util/nginx-logs-parser.js +122 -0
  154. package/lib/util/php-task.js +3 -6
  155. package/lib/util/prefix.js +1 -1
  156. package/lib/util/run-composer.js +6 -14
  157. package/lib/util/run-container-image.js +17 -0
  158. package/lib/util/run-magento.js +6 -14
  159. package/lib/util/run-php.js +6 -17
  160. package/package.json +9 -9
  161. package/typings/context.d.ts +3 -9
  162. package/typings/index.d.ts +38 -57
  163. package/lib/config/composer.js +0 -11
  164. package/lib/config/php/extensions/libsodium.js +0 -36
  165. package/lib/config/php/releases/php-7.2.js +0 -25
  166. package/lib/config/php/releases/php-7.3.js +0 -25
  167. package/lib/config/php/releases/php-7.4.js +0 -23
  168. package/lib/config/php/releases/php-8.1.js +0 -25
  169. package/lib/config/phpbrew.js +0 -12
  170. package/lib/tasks/composer/install-prestissimo.js +0 -88
  171. package/lib/tasks/docker/containers.js +0 -231
  172. package/lib/tasks/php/bundled-extensions.js +0 -27
  173. package/lib/tasks/php/compile-options.js +0 -56
  174. package/lib/tasks/php/compile.js +0 -55
  175. package/lib/tasks/php/configure.js +0 -89
  176. package/lib/tasks/php/extensions/disable.js +0 -49
  177. package/lib/tasks/php/extensions/enable.js +0 -52
  178. package/lib/tasks/php/extensions/index.js +0 -80
  179. package/lib/tasks/php/extensions/install.js +0 -54
  180. package/lib/tasks/php/index.js +0 -79
  181. package/lib/tasks/php/install-sodium.js +0 -93
  182. package/lib/tasks/php/update-phpbrew.js +0 -45
  183. package/lib/tasks/php/validate-php.js +0 -67
  184. package/lib/tasks/php-fpm/get-process-id.js +0 -14
  185. package/lib/tasks/php-fpm/index.js +0 -4
  186. package/lib/tasks/php-fpm/start-php-fpm.js +0 -49
  187. package/lib/tasks/php-fpm/stop-php-fpm.js +0 -48
  188. package/lib/tasks/requirements/phpbrew/index.js +0 -61
  189. package/lib/tasks/requirements/phpbrew/install.js +0 -159
  190. package/lib/tasks/requirements/phpbrew/version.js +0 -28
@@ -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,23 @@ 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
15
  const {
17
- connectToMySQL,
18
- importDumpToMySQL,
19
- fixDB,
20
- restoreThemeConfig,
21
- dumpThemeConfig
16
+ connectToMySQL
17
+ // importDumpToMySQL,
18
+ // fixDB,
19
+ // restoreThemeConfig,
20
+ // dumpThemeConfig
22
21
  } = require('./mysql');
22
+ const { buildProjectImage, buildDebugProjectImage } = require('./docker/project-image-builder');
23
23
  const getProjectConfiguration = require('../config/get-project-configuration');
24
24
  const { getSystemConfigTask } = require('../config/system-config');
25
25
  const setupThemes = require('./theme/setup-themes');
@@ -30,8 +30,9 @@ const enableMagentoComposerPlugins = require('./magento/enable-magento-composer-
30
30
  const getIsWsl = require('../util/is-wsl');
31
31
  const checkForXDGOpen = require('../util/xdg-open-exists');
32
32
  const { getInstanceMetadata, constants: { WEB_LOCATION_TITLE } } = require('../util/instance-metadata');
33
- const validatePHPInstallation = require('./php/validate-php');
34
- const installSodiumExtension = require('./php/install-sodium');
33
+ const waitingForVarnish = require('./magento/setup-magento/waiting-for-varnish');
34
+ const checkPHPVersion = require('./requirements/php-version');
35
+ const volumes = require('./docker/volumes');
35
36
 
36
37
  /**
37
38
  * @type {() => import('listr2').ListrTask<import('../../typings/context').ListrContext>}
@@ -62,15 +63,8 @@ const retrieveProjectConfiguration = () => ({
62
63
  const stopProject = () => ({
63
64
  title: 'Stopping project',
64
65
  task: (ctx, task) => task.newListr([
65
- stopContainers(),
66
- stopPhpFpm()
67
- ], {
68
- concurrent: true,
69
- rendererOptions: {
70
- collapse: true,
71
- showTimer: false
72
- }
73
- }),
66
+ stopContainers()
67
+ ]),
74
68
  options: {
75
69
  showTimer: false
76
70
  }
@@ -103,25 +97,23 @@ const retrieveFreshProjectConfiguration = () => ({
103
97
  const configureProject = () => ({
104
98
  title: 'Configuring project',
105
99
  task: (ctx, task) => task.newListr([
106
- installPhp(),
107
- installComposer(),
100
+ pullImages(),
101
+ dockerNetwork.tasks.createNetwork(),
102
+ volumes.createVolumes(),
108
103
  {
109
104
  task: (ctx, task) => task.newListr([
110
- prepareFileSystem(),
111
- pullContainers()
105
+ buildProjectImage(),
106
+ buildDebugProjectImage()
112
107
  ], {
113
- concurrent: true,
114
- exitOnError: true
108
+ concurrent: true
115
109
  })
116
110
  },
117
- installSodiumExtension(),
118
- configurePhp(),
119
- validatePHPInstallation(),
120
- installPrestissimo(),
111
+ checkPHPVersion(),
112
+ getComposerVersionTask(),
113
+ prepareFileSystem(),
121
114
  installMagentoProject(),
122
115
  enableMagentoComposerPlugins(),
123
116
  startServices(),
124
- startPhpFpm(),
125
117
  connectToMySQL()
126
118
  ])
127
119
  });
@@ -133,23 +125,24 @@ const finishProjectConfiguration = () => ({
133
125
  title: 'Finishing project configuration',
134
126
  skip: ({ skipSetup }) => skipSetup,
135
127
  task: (ctx, task) => task.newListr([
136
- {
137
- skip: (ctx) => !ctx.importDb,
138
- task: (ctx, task) => {
139
- task.title = 'Importing database dump';
140
- return task.newListr([
141
- dumpThemeConfig(),
142
- importDumpToMySQL(),
143
- fixDB(),
144
- restoreThemeConfig(),
145
- setupMagento()
146
- ], {
147
- concurrent: false,
148
- exitOnError: true
149
- });
150
- }
151
- },
152
- setupThemes()
128
+ // {
129
+ // skip: (ctx) => !ctx.importDb,
130
+ // task: (ctx, task) => {
131
+ // task.title = 'Importing database dump';
132
+ // return task.newListr([
133
+ // dumpThemeConfig(),
134
+ // importDumpToMySQL(),
135
+ // fixDB(),
136
+ // restoreThemeConfig(),
137
+ // setupMagento()
138
+ // ], {
139
+ // concurrent: false,
140
+ // exitOnError: true
141
+ // });
142
+ // }
143
+ // },
144
+ setupThemes(),
145
+ waitingForVarnish()
153
146
  ], {
154
147
  rendererOptions: {
155
148
  collapse: false
@@ -25,19 +25,16 @@ const parsePort = (port) => {
25
25
  const prettyStatus = async (ctx) => {
26
26
  const {
27
27
  config: {
28
- baseConfig,
29
- php,
30
- composer
28
+ baseConfig
31
29
  },
32
30
  magentoVersion,
33
31
  dockerVersion,
34
- PHPBrewVersion,
35
32
  platform,
36
33
  platformVersion,
37
34
  containers
38
35
  } = ctx;
39
36
  const projectCreatedAt = getProjectCreatedAt();
40
- const composerVersion = await getComposerVersion({ composer, php });
37
+ const composerVersion = await getComposerVersion(ctx);
41
38
 
42
39
  const prefix = getPrefix();
43
40
 
@@ -48,7 +45,7 @@ const prettyStatus = async (ctx) => {
48
45
  block
49
46
  .addHeader(`magento-scripts version: ${ logger.style.link(packageVersion) }`)
50
47
  .addEmptyLine()
51
- .addLine(`Project: ${logger.style.file(baseConfig.prefix)} ${prefix === folderName ? '(without prefix)' : '(with prefix)'}`)
48
+ .addLine(`Project: ${logger.style.file(baseConfig.prefix)} ${prefix === folderName ? '(without prefix)' : '(with prefix)'} (with php container)`)
52
49
  .addLine(`Project location: ${logger.style.link(process.cwd())}`);
53
50
 
54
51
  if (projectCreatedAt) {
@@ -57,12 +54,9 @@ const prettyStatus = async (ctx) => {
57
54
 
58
55
  block
59
56
  .addLine(`Magento 2 version: ${logger.style.file(magentoVersion)}`)
60
- .addLine(`PHP version: ${logger.style.file(php.version)}`)
61
- .addLine(`PHP location: ${logger.style.link(php.binPath)}`)
57
+ .addLine(`PHP version: ${logger.style.file(ctx.phpVersion)}`)
62
58
  .addLine(`Composer version: ${logger.style.file(composerVersion)}`)
63
- .addLine(`Composer location: ${logger.style.link(path.relative(process.cwd(), composer.binPath))}`)
64
59
  .addLine(`Docker version: ${logger.style.file(dockerVersion)}`)
65
- .addLine(`PHPBrew version: ${logger.style.file(PHPBrewVersion)}`)
66
60
  .addLine(`Platform: ${logger.style.code(platform)}`)
67
61
  .addLine(`Platform version: ${logger.style.file(platformVersion)}`)
68
62
  .addLine(`Platform architecture: ${logger.style.file(getArchSync())}`)
package/lib/tasks/stop.js CHANGED
@@ -1,6 +1,5 @@
1
1
  const { stopServices } = require('./docker');
2
2
  const getMagentoVersionConfig = require('../config/get-magento-version-config');
3
- const { stopPhpFpm } = require('./php-fpm');
4
3
  const getProjectConfiguration = require('../config/get-project-configuration');
5
4
  const checkConfigurationFile = require('../config/check-configuration-file');
6
5
 
@@ -13,7 +12,6 @@ const stop = () => ({
13
12
  getMagentoVersionConfig(),
14
13
  checkConfigurationFile(),
15
14
  getProjectConfiguration(),
16
- stopPhpFpm(),
17
15
  stopServices()
18
16
  ], {
19
17
  concurrent: false,
@@ -18,7 +18,7 @@ const installTheme = (theme) => ({
18
18
  }
19
19
 
20
20
  try {
21
- await runComposerCommand(`require ${theme.composerData.name}`, {
21
+ await runComposerCommand(ctx, `require ${theme.composerData.name}`, {
22
22
  magentoVersion,
23
23
  callback: !verbose ? undefined : (t) => {
24
24
  task.output = t;
@@ -9,7 +9,7 @@ const runComposerCommand = require('../../util/run-composer');
9
9
  const symlinkTheme = (theme) => ({
10
10
  title: 'Setting symbolic link for theme in composer.json',
11
11
  task: async (ctx, task) => {
12
- const { magentoVersion, verbose = false } = ctx;
12
+ const { verbose = false } = ctx;
13
13
  const composerJsonData = await getJsonfileData(path.join(process.cwd(), 'composer.json'));
14
14
 
15
15
  if (!composerJsonData.repositories) {
@@ -27,8 +27,7 @@ const symlinkTheme = (theme) => ({
27
27
  }
28
28
 
29
29
  try {
30
- await runComposerCommand(`config repo.scandipwa path ${theme.absoluteThemePath}`, {
31
- magentoVersion,
30
+ await runComposerCommand(ctx, `config repo.scandipwa path ${theme.absoluteThemePath}`, {
32
31
  callback: !verbose ? undefined : (t) => {
33
32
  task.output = t;
34
33
  }
@@ -1,10 +1,19 @@
1
1
  const path = require('path');
2
2
  const UnknownError = require('../errors/unknown-error');
3
- const runPhpCode = require('./run-php');
3
+ const { runPHPContainerCommand } = require('../tasks/php/php-container');
4
+ const pathExists = require('./path-exists');
4
5
 
5
- const configPhpToJson = async (projectPath = process.cwd(), { magentoVersion }) => {
6
- const { code, result } = await runPhpCode(`-r "echo json_encode(require '${path.join(projectPath, 'app', 'etc', 'config.php')}');"`, {
7
- magentoVersion
6
+ /**
7
+ * @param {import('../../typings/context').ListrContext} ctx
8
+ */
9
+ const configPhpToJson = async (ctx) => {
10
+ const configPhpOnSystemPath = path.join(ctx.config.baseConfig.magentoDir, 'app', 'etc', 'config.php');
11
+ const configPhpInContainerPath = path.join(ctx.config.baseConfig.containerMagentoDir, 'app', 'etc', 'config.php');
12
+ if (!await pathExists(configPhpOnSystemPath)) {
13
+ return null;
14
+ }
15
+ const { code, result } = await runPHPContainerCommand(ctx, `php -r "echo json_encode(require '${configPhpInContainerPath}');"`, {
16
+ withCode: true
8
17
  });
9
18
 
10
19
  if (code !== 0) {
@@ -0,0 +1,197 @@
1
+ /**
2
+ *
3
+ * @param {import('./types').DockerfileInstruction[]} instructions
4
+ */
5
+ const buildInstructions = (instructions) => {
6
+ /**
7
+ * @type {string[]}
8
+ */
9
+ const dockerFileInstructions = [];
10
+
11
+ for (const instruction of instructions) {
12
+ switch (instruction.type) {
13
+ case 'COPY':
14
+ case 'ADD': {
15
+ let addInstruction = instruction.type;
16
+
17
+ if (instruction.type === 'COPY' && instruction.from) {
18
+ addInstruction += ` --from=${instruction.from}`;
19
+ }
20
+
21
+ if (instruction.chown) {
22
+ addInstruction += ` --chown=${instruction.chown}`;
23
+ }
24
+
25
+ addInstruction += ` ${instruction.src.join(' ')}`;
26
+ addInstruction += ` ${instruction.dest}`;
27
+
28
+ dockerFileInstructions.push(addInstruction);
29
+ break;
30
+ }
31
+ case 'ARG': {
32
+ let argInstruction = instruction.type;
33
+
34
+ argInstruction += ` ${instruction.name}`;
35
+
36
+ if (instruction.defaultValue) {
37
+ argInstruction += `=${instruction.defaultValue}`;
38
+ }
39
+
40
+ dockerFileInstructions.push(argInstruction);
41
+ break;
42
+ }
43
+ case 'RUN':
44
+ case 'ENTRYPOINT':
45
+ case 'CMD': {
46
+ let cmdInstruction = instruction.type;
47
+
48
+ if (typeof instruction.command === 'string') {
49
+ cmdInstruction += ` ${instruction.command}`;
50
+ } else if (Array.isArray(instruction.command) && instruction.command.every((c) => typeof c === 'string')) {
51
+ cmdInstruction += ` ["${instruction.command.join('", "')}"]`;
52
+ } else {
53
+ throw new Error(`Unknown command type, it must be string or array of strings! ${instruction.command}`);
54
+ }
55
+
56
+ dockerFileInstructions.push(cmdInstruction);
57
+ break;
58
+ }
59
+
60
+ case 'COMMENT': {
61
+ const commentInstruction = `# ${instruction.comment}`;
62
+
63
+ dockerFileInstructions.push(commentInstruction);
64
+ break;
65
+ }
66
+ case 'ENV': {
67
+ let envInstruction = instruction.type;
68
+
69
+ envInstruction += ` ${instruction.name}="${instruction.value}"`;
70
+
71
+ dockerFileInstructions.push(envInstruction);
72
+ break;
73
+ }
74
+ case 'EXPOSE': {
75
+ let exposeInstruction = instruction.type;
76
+
77
+ if (instruction.protocol) {
78
+ exposeInstruction += ` ${instruction.port}/${instruction.protocol}`;
79
+ } else {
80
+ exposeInstruction += ` ${instruction.port}`;
81
+ }
82
+
83
+ dockerFileInstructions.push(exposeInstruction);
84
+ break;
85
+ }
86
+ case 'FROM': {
87
+ let fromInstruction = instruction.type;
88
+
89
+ if (instruction.platform) {
90
+ fromInstruction += ` --platform=${instruction.platform}`;
91
+ }
92
+
93
+ fromInstruction += ` ${instruction.image}:${instruction.tag || 'latest'}`;
94
+
95
+ if (instruction.name) {
96
+ fromInstruction += ` AS ${instruction.name}`;
97
+ }
98
+
99
+ dockerFileInstructions.push(fromInstruction);
100
+ break;
101
+ }
102
+ case 'HEALTHCHECK': {
103
+ let healthCheckInstruction = instruction.type;
104
+
105
+ if (instruction.interval) {
106
+ healthCheckInstruction += ` --interval=${instruction.interval}`;
107
+ }
108
+
109
+ if (instruction.retries) {
110
+ healthCheckInstruction += ` --retries=${instruction.retries}`;
111
+ }
112
+
113
+ if (instruction.startPeriod) {
114
+ healthCheckInstruction += ` --start-period=${instruction.startPeriod}`;
115
+ }
116
+
117
+ if (instruction.timeout) {
118
+ healthCheckInstruction += ` --timeout=${instruction.timeout}`;
119
+ }
120
+
121
+ healthCheckInstruction += ` ${instruction.command}`;
122
+
123
+ dockerFileInstructions.push(healthCheckInstruction);
124
+ break;
125
+ }
126
+ case 'LABEL': {
127
+ Object.entries(instruction.labels).forEach(([name, value]) => {
128
+ let labelInstruction = instruction.type;
129
+ labelInstruction += ` "${name}"="${value}"`;
130
+ dockerFileInstructions.push(labelInstruction);
131
+ });
132
+ break;
133
+ }
134
+ case 'ONBUILD': {
135
+ let onBuildInstruction = instruction.type;
136
+
137
+ onBuildInstruction += ` ${instruction.instruction}`;
138
+
139
+ dockerFileInstructions.push(onBuildInstruction);
140
+ break;
141
+ }
142
+ case 'SHELL': {
143
+ let shellInstruction = instruction.type;
144
+
145
+ shellInstruction += ` ["${instruction.exec.join('", "')}"]`;
146
+
147
+ dockerFileInstructions.push(shellInstruction);
148
+ break;
149
+ }
150
+ case 'STOPSIGNAL': {
151
+ let stopSignalInstruction = instruction.type;
152
+
153
+ stopSignalInstruction += ` ${instruction.signal}`;
154
+
155
+ dockerFileInstructions.push(stopSignalInstruction);
156
+ break;
157
+ }
158
+ case 'USER': {
159
+ let userInstruction = instruction.type;
160
+
161
+ userInstruction += ` ${instruction.user}`;
162
+
163
+ dockerFileInstructions.push(userInstruction);
164
+ break;
165
+ }
166
+ case 'VOLUME': {
167
+ let volumeInstruction = instruction.type;
168
+
169
+ if (typeof instruction.volume === 'string') {
170
+ volumeInstruction += ` ${instruction.volume}`;
171
+ } else if (Array.isArray(instruction.volume) && instruction.volume.every((c) => typeof c === 'string')) {
172
+ volumeInstruction += ` ["${instruction.volume.join('", "')}"]`;
173
+ } else {
174
+ throw new Error(`Unknown volume type, it must be string or array of strings! ${instruction.volume}`);
175
+ }
176
+
177
+ dockerFileInstructions.push(volumeInstruction);
178
+ break;
179
+ }
180
+ case 'WORKDIR': {
181
+ const workDirInstruction = `${instruction.type} ${instruction.workdir}`;
182
+
183
+ dockerFileInstructions.push(workDirInstruction);
184
+ break;
185
+ }
186
+ default: {
187
+ throw new Error(`I don't know instruction with type ${instruction.type}`);
188
+ }
189
+ }
190
+ }
191
+
192
+ return dockerFileInstructions.join('\n');
193
+ };
194
+
195
+ module.exports = {
196
+ buildInstructions
197
+ };