@scandipwa/magento-scripts 2.4.2-alpha.2 → 2.4.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 (29) hide show
  1. package/lib/config/docker.js +19 -20
  2. package/lib/config/services/mariadb/versions/index.js +1 -0
  3. package/lib/config/services/mariadb/versions/mariadb-10.11.js +11 -0
  4. package/lib/config/services/mysql/versions/index.js +3 -1
  5. package/lib/config/services/mysql/versions/mysql-8.4.js +8 -0
  6. package/lib/config/services/varnish/index.js +2 -1
  7. package/lib/config/services/varnish/varnish-7-7.js +15 -0
  8. package/lib/config/versions/magento-2.4.5-p13.js +40 -0
  9. package/lib/config/versions/magento-2.4.6-p11.js +40 -0
  10. package/lib/config/versions/magento-2.4.7-p6.js +41 -0
  11. package/lib/config/versions/magento-2.4.8-p1.js +43 -0
  12. package/lib/config/versions/magento-2.4.8.js +0 -1
  13. package/lib/config/versions/magento-2.4.9-alpha1.js +41 -0
  14. package/lib/tasks/docker/containers/tasks.js +3 -16
  15. package/lib/tasks/docker/convert-mysql-to-mariadb.js +13 -3
  16. package/lib/tasks/docker/project-image-builder.js +6 -10
  17. package/lib/tasks/file-system/create-nginx-config.js +5 -8
  18. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +42 -0
  19. package/lib/tasks/magento/setup-magento/configure-searchengine.js +0 -4
  20. package/lib/tasks/magento/setup-magento/index.js +7 -2
  21. package/lib/tasks/magento/setup-magento/migrate-database.js +3 -21
  22. package/lib/tasks/requirements/elasticsearch-version.js +87 -0
  23. package/lib/tasks/requirements/opensearch-version.js +71 -0
  24. package/lib/tasks/requirements/searchengine-version.js +8 -60
  25. package/lib/tasks/start.js +10 -1
  26. package/lib/tasks/theme/link-theme.js +2 -2
  27. package/package.json +2 -2
  28. package/typings/context.d.ts +0 -2
  29. package/lib/tasks/magento/setup-magento/enable-full-page-cache-with-varnish.js +0 -30
@@ -73,11 +73,11 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
73
73
  redis: {
74
74
  name: `${prefix}_redis-data`
75
75
  },
76
+ elasticsearch: {
77
+ name: `${prefix}_elasticsearch-data`
78
+ },
76
79
  opensearch: {
77
- name:
78
- searchengine === 'elasticsearch'
79
- ? `${prefix}_elasticsearch-data`
80
- : `${prefix}_opensearch-data`
80
+ name: `${prefix}_opensearch-data`
81
81
  },
82
82
  maildev: {
83
83
  name: `${prefix}_maildev-data`
@@ -115,7 +115,7 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
115
115
  : {}
116
116
 
117
117
  /**
118
- * @type {Record<string, import('../tasks/docker/containers/container-api').ContainerRunOptions & { _?: string, forwardedPorts?: string[], remoteImages?: string[], connectCommand?: string[], description?: string, pullImage?: boolean, dependsOn?: string[], serviceReadyLog?: string }>}
118
+ * @type {Record<string, import('../tasks/docker/containers/container-api').ContainerRunOptions & { _?: string, forwardedPorts?: string[], remoteImages?: string[], connectCommand?: string[], description?: string, pullImage?: boolean, dependsOn?: string[] }>}
119
119
  */
120
120
  const dockerConfig = {
121
121
  php: {
@@ -169,8 +169,7 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
169
169
  (ctx.platform === 'linux' && isDockerDesktop) ||
170
170
  !isDockerDesktop
171
171
  ? `${os.userInfo().uid}:${os.userInfo().gid}`
172
- : '',
173
- serviceReadyLog: 'ready to handle connections'
172
+ : ''
174
173
  },
175
174
  phpWithXdebug: {
176
175
  _: 'PHP with Xdebug',
@@ -229,8 +228,7 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
229
228
  (ctx.platform === 'linux' && isDockerDesktop) ||
230
229
  !isDockerDesktop
231
230
  ? `${os.userInfo().uid}:${os.userInfo().gid}`
232
- : '',
233
- serviceReadyLog: 'ready to handle connections'
231
+ : ''
234
232
  },
235
233
  sslTerminator: {
236
234
  _: 'SSL Terminator (Nginx)',
@@ -339,8 +337,7 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
339
337
  redis.version ? `redis:${redis.version}` : redis.image
340
338
  }`,
341
339
  name: `${prefix}_redis`,
342
- connectCommand: ['redis-cli'],
343
- serviceReadyLog: 'Ready to accept connections'
340
+ connectCommand: ['redis-cli']
344
341
  },
345
342
  mariadb: {
346
343
  _: 'MariaDB',
@@ -394,13 +391,15 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
394
391
  ports: [`127.0.0.1:${ports.elasticsearch}:9200`],
395
392
  forwardedPorts: [`127.0.0.1:${ports.elasticsearch}:9200`],
396
393
  mountVolumes: [
397
- containerVolume({
398
- source: volumes.opensearch.name,
399
- target:
400
- searchengine === 'elasticsearch'
401
- ? '/usr/share/elasticsearch/data'
402
- : '/usr/share/opensearch/data'
403
- })
394
+ searchengine === 'elasticsearch'
395
+ ? containerVolume({
396
+ source: volumes.elasticsearch.name,
397
+ target: '/usr/share/elasticsearch/data'
398
+ })
399
+ : containerVolume({
400
+ source: volumes.opensearch.name,
401
+ target: '/usr/share/opensearch/data'
402
+ })
404
403
  ],
405
404
  env:
406
405
  searchengine === 'elasticsearch'
@@ -446,7 +445,7 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
446
445
  mountVolumes: [
447
446
  containerVolume({
448
447
  source: volumes.maildev.name,
449
- target: '/tmp'
448
+ target: '/tmp/maildev'
450
449
  })
451
450
  ],
452
451
  env: {
@@ -456,7 +455,7 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
456
455
  MAILDEV_WEB_PORT: isDockerDesktop
457
456
  ? '1080'
458
457
  : ports.maildevWeb,
459
- MAILDEV_MAIL_DIRECTORY: '/tmp'
458
+ MAILDEV_MAIL_DIRECTORY: '/tmp/maildev'
460
459
  },
461
460
  name: `${prefix}_maildev`,
462
461
  network: isDockerDesktop ? network.name : 'host',
@@ -3,6 +3,7 @@ module.exports = {
3
3
  mariadb103: require('./mariadb-10.3'),
4
4
  mariadb104: require('./mariadb-10.4'),
5
5
  mariadb106: require('./mariadb-10.6'),
6
+ mariadb1011: require('./mariadb-10.11'),
6
7
  mariadb114: require('./mariadb-11.4'),
7
8
  mariadb116: require('./mariadb-11.6')
8
9
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @returns {import('../../../../../typings/index').MariaDBConfiguration}
3
+ */
4
+ const mariadb106 = () => ({
5
+ image: 'mariadb:10.11',
6
+ useOptimizerSwitch: true,
7
+ binFileName: 'mysql',
8
+ binAdminFileName: 'mysqladmin'
9
+ })
10
+
11
+ module.exports = mariadb106
@@ -1,9 +1,11 @@
1
1
  const mysql57 = require('./mysql-5.7')
2
2
  const mysql80 = require('./mysql-8.0')
3
3
  const mysql8028 = require('./mysql-8.0.28')
4
+ const mysql84 = require('./mysql-8.4')
4
5
 
5
6
  module.exports = {
6
7
  mysql57,
7
8
  mysql80,
8
- mysql8028
9
+ mysql8028,
10
+ mysql84
9
11
  }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @returns {import("../../../../../typings/common").CMAConfigurationWithMySQL['configuration']['mysql']}
3
+ */
4
+ const mysql84 = () => ({
5
+ image: 'mysql:8.4'
6
+ })
7
+
8
+ module.exports = mysql84
@@ -6,5 +6,6 @@ module.exports = {
6
6
  varnish73: require('./varnish-7-3'),
7
7
  varnish74: require('./varnish-7-4'),
8
8
  varnish75: require('./varnish-7-5'),
9
- varnish76: require('./varnish-7-6')
9
+ varnish76: require('./varnish-7-6'),
10
+ varnish77: require('./varnish-7-7')
10
11
  }
@@ -0,0 +1,15 @@
1
+ const path = require('path')
2
+
3
+ /**
4
+ * @param {Object} param0
5
+ * @param {string} param0.templateDir
6
+ * @returns {import('../../../../typings/index').VarnishConfiguration}
7
+ */
8
+ const varnish77 = ({ templateDir }) => ({
9
+ enabled: false,
10
+ healthCheck: false,
11
+ image: 'varnish:7.7',
12
+ configTemplate: path.join(templateDir || '', 'varnish.template.vcl')
13
+ })
14
+
15
+ module.exports = varnish77
@@ -0,0 +1,40 @@
1
+ const sodium = require('../services/php/extensions/sodium')
2
+ const {
3
+ magento24PHPExtensionList
4
+ } = require('../magento/required-php-extensions')
5
+ const { php81 } = require('../services/php/versions')
6
+ const { sslTerminator } = require('../services/ssl-terminator')
7
+ const { varnish77 } = require('../services/varnish')
8
+ const { repo } = require('../services/php/base-repo')
9
+ const { nginx126 } = require('../services/nginx/versions')
10
+ const { composer22 } = require('../services/composer/versions')
11
+ const { maildev } = require('../services/maildev')
12
+ const { redis72 } = require('../services/redis')
13
+ const { mariadb106 } = require('../services/mariadb/versions')
14
+ const { elasticsearch717 } = require('../services/elasticsearch/versions')
15
+ const { mysql80 } = require('../services/mysql/versions')
16
+ const { opensearch219 } = require('../services/opensearch/versions')
17
+
18
+ /**
19
+ * @type {import('../../../typings/common').MagentoVersionConfigurationFunction}
20
+ */
21
+ module.exports = ({ templateDir }) => ({
22
+ magentoVersion: '2.4.5-p13',
23
+ configuration: {
24
+ php: php81({
25
+ templateDir,
26
+ extensions: { ...magento24PHPExtensionList, sodium },
27
+ baseImage: `${repo}:php-8.1-magento-2.4`
28
+ }),
29
+ nginx: nginx126({ templateDir }),
30
+ redis: redis72(),
31
+ mysql: mysql80(),
32
+ mariadb: mariadb106(),
33
+ elasticsearch: elasticsearch717(),
34
+ composer: composer22(),
35
+ varnish: varnish77({ templateDir }),
36
+ sslTerminator: sslTerminator({ templateDir }),
37
+ maildev: maildev(),
38
+ opensearch: opensearch219()
39
+ }
40
+ })
@@ -0,0 +1,40 @@
1
+ const sodium = require('../services/php/extensions/sodium')
2
+ const {
3
+ magento24PHPExtensionList
4
+ } = require('../magento/required-php-extensions')
5
+ const { php81 } = require('../services/php/versions')
6
+ const { sslTerminator } = require('../services/ssl-terminator')
7
+ const { varnish77 } = require('../services/varnish')
8
+ const { repo } = require('../services/php/base-repo')
9
+ const { nginx126 } = require('../services/nginx/versions')
10
+ const { composer22 } = require('../services/composer/versions')
11
+ const { maildev } = require('../services/maildev')
12
+ const { redis72 } = require('../services/redis')
13
+ const { mariadb1011 } = require('../services/mariadb/versions')
14
+ const { elasticsearch717 } = require('../services/elasticsearch/versions')
15
+ const { mysql80 } = require('../services/mysql/versions')
16
+ const { opensearch219 } = require('../services/opensearch/versions')
17
+
18
+ /**
19
+ * @type {import('../../../typings/common').MagentoVersionConfigurationFunction}
20
+ */
21
+ module.exports = ({ templateDir }) => ({
22
+ magentoVersion: '2.4.6-p11',
23
+ configuration: {
24
+ php: php81({
25
+ templateDir,
26
+ extensions: { ...magento24PHPExtensionList, sodium },
27
+ baseImage: `${repo}:php-8.1-magento-2.4`
28
+ }),
29
+ nginx: nginx126({ templateDir }),
30
+ redis: redis72(),
31
+ mysql: mysql80(),
32
+ mariadb: mariadb1011(),
33
+ elasticsearch: elasticsearch717(),
34
+ composer: composer22(),
35
+ varnish: varnish77({ templateDir }),
36
+ sslTerminator: sslTerminator({ templateDir }),
37
+ maildev: maildev(),
38
+ opensearch: opensearch219()
39
+ }
40
+ })
@@ -0,0 +1,41 @@
1
+ const sodium = require('../services/php/extensions/sodium')
2
+ const {
3
+ magento24PHPExtensionList
4
+ } = require('../magento/required-php-extensions')
5
+ const { php82 } = require('../services/php/versions')
6
+ const { sslTerminator } = require('../services/ssl-terminator')
7
+ const { varnish76 } = require('../services/varnish')
8
+ const { repo } = require('../services/php/base-repo')
9
+ const { nginx126 } = require('../services/nginx/versions')
10
+ const { composer28 } = require('../services/composer/versions')
11
+ const { maildev } = require('../services/maildev')
12
+ const { redis72 } = require('../services/redis')
13
+ const { mariadb1011 } = require('../services/mariadb/versions')
14
+ const { elasticsearch817 } = require('../services/elasticsearch/versions')
15
+ const { mysql80 } = require('../services/mysql/versions')
16
+ const { opensearch219 } = require('../services/opensearch/versions')
17
+
18
+ /**
19
+ * @type {import('../../../typings/common').MagentoVersionConfigurationFunction}
20
+ */
21
+ module.exports = ({ templateDir }) => ({
22
+ magentoVersion: '2.4.7-p6',
23
+ configuration: {
24
+ php: php82({
25
+ templateDir,
26
+ extensions: { ...magento24PHPExtensionList, sodium },
27
+ baseImage: `${repo}:php-8.2-magento-2.4`
28
+ }),
29
+ nginx: nginx126({ templateDir }),
30
+ redis: redis72(),
31
+ mysql: mysql80(),
32
+ mariadb: mariadb1011(),
33
+ elasticsearch: elasticsearch817(),
34
+ composer: composer28(),
35
+ varnish: varnish76({ templateDir }),
36
+ sslTerminator: sslTerminator({ templateDir }),
37
+ maildev: maildev(),
38
+ opensearch: opensearch219(),
39
+ searchengine: 'opensearch'
40
+ }
41
+ })
@@ -0,0 +1,43 @@
1
+ const sodium = require('../services/php/extensions/sodium')
2
+ const ftp = require('../services/php/extensions/ftp')
3
+ const {
4
+ magento24PHPExtensionList
5
+ } = require('../magento/required-php-extensions')
6
+ const { php83 } = require('../services/php/versions')
7
+ const { sslTerminator } = require('../services/ssl-terminator')
8
+ const { varnish76 } = require('../services/varnish')
9
+ const { repo } = require('../services/php/base-repo')
10
+ const { nginx126 } = require('../services/nginx/versions')
11
+ const { composer28 } = require('../services/composer/versions')
12
+ const { maildev } = require('../services/maildev')
13
+ const { valkey80 } = require('../services/redis')
14
+ const { mariadb114 } = require('../services/mariadb/versions')
15
+ const { elasticsearch817 } = require('../services/elasticsearch/versions')
16
+ const { mysql80 } = require('../services/mysql/versions')
17
+ const { opensearch219 } = require('../services/opensearch/versions')
18
+
19
+ /**
20
+ * @type {import('../../../typings/common').MagentoVersionConfigurationFunction}
21
+ */
22
+ module.exports = ({ templateDir }) => ({
23
+ magentoVersion: '2.4.8-p1',
24
+ isDefault: true,
25
+ configuration: {
26
+ php: php83({
27
+ templateDir,
28
+ extensions: { ...magento24PHPExtensionList, sodium, ftp },
29
+ baseImage: `${repo}:php-8.3-magento-2.4`
30
+ }),
31
+ nginx: nginx126({ templateDir }),
32
+ redis: valkey80(),
33
+ mysql: mysql80(),
34
+ mariadb: mariadb114(),
35
+ elasticsearch: elasticsearch817(),
36
+ composer: composer28(),
37
+ varnish: varnish76({ templateDir }),
38
+ sslTerminator: sslTerminator({ templateDir }),
39
+ maildev: maildev(),
40
+ opensearch: opensearch219(),
41
+ searchengine: 'opensearch'
42
+ }
43
+ })
@@ -21,7 +21,6 @@ const { opensearch219 } = require('../services/opensearch/versions')
21
21
  */
22
22
  module.exports = ({ templateDir }) => ({
23
23
  magentoVersion: '2.4.8',
24
- isDefault: true,
25
24
  configuration: {
26
25
  php: php83({
27
26
  templateDir,
@@ -0,0 +1,41 @@
1
+ const sodium = require('../services/php/extensions/sodium')
2
+ const {
3
+ magento24PHPExtensionList
4
+ } = require('../magento/required-php-extensions')
5
+ const { php83 } = require('../services/php/versions')
6
+ const { sslTerminator } = require('../services/ssl-terminator')
7
+ const { varnish77 } = require('../services/varnish')
8
+ const { repo } = require('../services/php/base-repo')
9
+ const { nginx126 } = require('../services/nginx/versions')
10
+ const { composer28 } = require('../services/composer/versions')
11
+ const { maildev } = require('../services/maildev')
12
+ const { valkey80 } = require('../services/redis')
13
+ const { mariadb114 } = require('../services/mariadb/versions')
14
+ const { elasticsearch87 } = require('../services/elasticsearch/versions')
15
+ const { mysql84 } = require('../services/mysql/versions')
16
+ const { opensearch219 } = require('../services/opensearch/versions')
17
+
18
+ /**
19
+ * @type {import('../../../typings/common').MagentoVersionConfigurationFunction}
20
+ */
21
+ module.exports = ({ templateDir }) => ({
22
+ magentoVersion: '2.4.9-alpha1',
23
+ configuration: {
24
+ php: php83({
25
+ templateDir,
26
+ extensions: { ...magento24PHPExtensionList, sodium },
27
+ baseImage: `${repo}:php-8.3-magento-2.4`
28
+ }),
29
+ nginx: nginx126({ templateDir }),
30
+ redis: valkey80(),
31
+ mysql: mysql84(),
32
+ mariadb: mariadb114(),
33
+ elasticsearch: elasticsearch87(),
34
+ composer: composer28(),
35
+ varnish: varnish77({ templateDir }),
36
+ sslTerminator: sslTerminator({ templateDir }),
37
+ maildev: maildev(),
38
+ opensearch: opensearch219(),
39
+ searchengine: 'opensearch'
40
+ }
41
+ })
@@ -5,7 +5,6 @@ const KnownError = require('../../../errors/known-error')
5
5
  const containerApi = require('./container-api')
6
6
  const { imageApi } = require('../image')
7
7
  const { execAsyncSpawn } = require('../../../util/exec-async-command')
8
- const waitForLogs = require('../../../util/wait-for-logs')
9
8
 
10
9
  /**
11
10
  * @param {string[]} containers
@@ -155,9 +154,7 @@ const startContainers = () => ({
155
154
  all: true
156
155
  })
157
156
 
158
- const containers = docker.getContainers(ports)
159
-
160
- const missingContainers = Object.entries(containers)
157
+ const missingContainers = Object.entries(docker.getContainers(ports))
161
158
  .filter(
162
159
  ([nameWithoutPrefix, { name }]) =>
163
160
  !containerList.some((c) => c.Names === name)
@@ -192,9 +189,7 @@ const startContainers = () => ({
192
189
  const startedContainers = []
193
190
  subTask.title = `Container ${
194
191
  container._
195
- } is waiting for ${dependsOn
196
- .map((a) => containers[a]._)
197
- .join(', ')} to start...`
192
+ } is waiting for ${dependsOn.join(', ')} to start...`
198
193
  await Promise.all(
199
194
  dependsOn.map(
200
195
  async (name) =>
@@ -222,7 +217,6 @@ const startContainers = () => ({
222
217
  d
223
218
  )
224
219
  )
225
- .map((d) => containers[d]._)
226
220
  .join(', ')} to start...`
227
221
  clearTimeout(timeout)
228
222
  resolve()
@@ -237,13 +231,6 @@ const startContainers = () => ({
237
231
 
238
232
  await containerApi.run(container)
239
233
 
240
- if (container.serviceReadyLog) {
241
- await waitForLogs({
242
- containerName: container.name,
243
- matchText: container.serviceReadyLog
244
- })
245
- }
246
-
247
234
  containerStatuses[
248
235
  container.nameWithoutPrefix
249
236
  ].started = true
@@ -253,7 +240,7 @@ const startContainers = () => ({
253
240
  cb()
254
241
  })
255
242
 
256
- subTask.title = `${container._} container started`
243
+ subTask.output = `${container._} container started`
257
244
  }
258
245
  })),
259
246
  {
@@ -24,7 +24,7 @@ const { createCacheFolder } = require('../cache')
24
24
  const { getSystemConfigTask } = require('../../config/system-config')
25
25
  const sleep = require('../../util/sleep')
26
26
  const { setProjectConfigTask } = require('../project-config')
27
- const checkSearchEngineVersion = require('../requirements/searchengine-version')
27
+ const checkElasticSearchVersion = require('../requirements/elasticsearch-version')
28
28
 
29
29
  /**
30
30
  * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
@@ -235,13 +235,23 @@ Please wait, this will take some time and do not restart the MySQL container unt
235
235
  dockerNetwork.tasks.createNetwork(),
236
236
  createVolumes(),
237
237
  buildProjectImage(),
238
- checkPHPVersion(),
238
+ {
239
+ task: (ctx, subTask) =>
240
+ subTask.newListr(
241
+ [
242
+ checkPHPVersion(),
243
+ checkElasticSearchVersion()
244
+ ],
245
+ {
246
+ concurrent: true
247
+ }
248
+ )
249
+ },
239
250
  getComposerVersionTask(),
240
251
  prepareFileSystem(),
241
252
  installMagentoProject(),
242
253
  enableMagentoComposerPlugins(),
243
254
  startServices(),
244
- checkSearchEngineVersion(),
245
255
  connectToDatabase(),
246
256
  importDumpToDatabase(),
247
257
  {
@@ -316,11 +316,9 @@ const buildProjectImage = () => ({
316
316
  ${dockerFileInstructions}
317
317
  EOF`,
318
318
  {
319
- callback: !ctx.verbose
320
- ? undefined
321
- : (t) => {
322
- task.output = t
323
- }
319
+ callback: (r) => {
320
+ task.output = r
321
+ }
324
322
  }
325
323
  )
326
324
  } catch (e) {
@@ -346,11 +344,9 @@ EOF`,
346
344
  ${debugImageInstructions}
347
345
  EOF`,
348
346
  {
349
- callback: !ctx.verbose
350
- ? undefined
351
- : (t) => {
352
- task.output = t
353
- }
347
+ callback: (r) => {
348
+ task.output = r
349
+ }
354
350
  }
355
351
  )
356
352
  } catch (e) {
@@ -28,16 +28,13 @@ const createNginxConfig = () => ({
28
28
  }
29
29
 
30
30
  if (isDockerDesktop) {
31
- // const containers = docker.getContainers(ports)
31
+ const containers = docker.getContainers(ports)
32
32
 
33
- // networkSettings.phpNetwork = containers.php.name
34
- // networkSettings.phpWithXdebugNetwork = containers.phpWithXdebug.name
33
+ networkSettings.phpNetwork = containers.php.name
34
+ networkSettings.phpWithXdebugNetwork = containers.phpWithXdebug.name
35
35
 
36
- networkSettings.phpNetwork = 'host.docker.internal'
37
- networkSettings.phpWithXdebugNetwork = 'host.docker.internal'
38
-
39
- // networkSettings.fpmPort = 9000
40
- // networkSettings.fpmXdebugPort = 9000
36
+ networkSettings.fpmPort = 9000
37
+ networkSettings.fpmXdebugPort = 9000
41
38
 
42
39
  networkSettings.hostPort = 80
43
40
  }
@@ -0,0 +1,42 @@
1
+ const envPhpToJson = require('../../../util/env-php-json')
2
+ const magentoTask = require('../../../util/magento-task')
3
+
4
+ /**
5
+ * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
6
+ */
7
+ const disableFullPageCache = () => ({
8
+ title: 'Adjusting full_page cache setting',
9
+ task: async (ctx, task) => {
10
+ const envData = await envPhpToJson(ctx)
11
+ if (
12
+ envData &&
13
+ envData.cache_types &&
14
+ typeof envData.cache_types.full_page === 'number'
15
+ ) {
16
+ if (
17
+ envData.cache_types.full_page !== 0 &&
18
+ !ctx.config.overridenConfiguration.configuration.varnish.enabled
19
+ ) {
20
+ task.title = 'Disabling full_page cache in Magento'
21
+ return task.newListr(magentoTask('cache:disable full_page'))
22
+ }
23
+
24
+ if (
25
+ ctx.config.overridenConfiguration.configuration.varnish
26
+ .enabled &&
27
+ envData.cache_types.full_page !== 1
28
+ ) {
29
+ task.title =
30
+ 'Enabling full_page cache in Magento (Varnish is enabled)'
31
+ return task.newListr(magentoTask('cache:enable full_page'))
32
+ }
33
+ } else {
34
+ task.skip('full_page cache type is not set in env.php')
35
+ return
36
+ }
37
+
38
+ task.skip()
39
+ }
40
+ })
41
+
42
+ module.exports = disableFullPageCache
@@ -167,8 +167,6 @@ const configureElasticSearchInDatabase = () => ({
167
167
  }
168
168
  }
169
169
  )
170
-
171
- task.title = `Using Elasticsearch ${ctx.elasticSearchVersion}`
172
170
  }
173
171
  })
174
172
 
@@ -358,8 +356,6 @@ const configureOpenSearchInDatabase = () => ({
358
356
  }
359
357
  }
360
358
  )
361
-
362
- task.title = `Using OpenSearch ${ctx.openSearchVersion}`
363
359
  }
364
360
  })
365
361
 
@@ -1,14 +1,16 @@
1
1
  const flushRedisConfig = require('./flush-redis-config')
2
+ const waitingForRedis = require('./waiting-for-redis')
2
3
  const migrateDatabase = require('./migrate-database')
3
4
  const createAdmin = require('./create-admin')
4
5
  const setDeploymentMode = require('./set-deployment-mode')
5
6
  const setBaseUrl = require('./set-base-url')
6
7
  const disableMaintenanceMode = require('./disable-maintenance-mode')
8
+ const disable2fa = require('./disable-2fa')
7
9
  const setUrlRewrite = require('./set-url-rewrite')
8
10
  const increaseAdminSessionLifetime = require('./increase-admin-session-lifetime')
9
11
  const magentoTask = require('../../../util/magento-task')
10
12
  const urnHighlighter = require('./urn-highlighter')
11
- const enableFullPageCacheWithVarnish = require('./enable-full-page-cache-with-varnish')
13
+ const adjustFullPageCache = require('./adjust-full-page-cache')
12
14
  const updateEnvPHP = require('../../php/update-env-php')
13
15
  const setMailConfig = require('./set-mail-config')
14
16
  const { setupMagentoFilePermissions } = require('./setup-file-permissions')
@@ -25,12 +27,14 @@ const setupMagento = (options = {}) => ({
25
27
  if (options.onlyInstallMagento) {
26
28
  return task.newListr([
27
29
  flushRedisConfig(),
30
+ waitingForRedis(),
28
31
  migrateDatabase({ onlyInstallMagento: true })
29
32
  ])
30
33
  }
31
34
 
32
35
  return task.newListr(
33
36
  [
37
+ waitingForRedis(),
34
38
  setupMagentoFilePermissions(),
35
39
  updateEnvPHP(),
36
40
  migrateDatabase(),
@@ -56,8 +60,9 @@ const setupMagento = (options = {}) => ({
56
60
  createAdmin(),
57
61
  setDeploymentMode(),
58
62
  disableMaintenanceMode(),
63
+ disable2fa(),
59
64
  urnHighlighter(),
60
- enableFullPageCacheWithVarnish(),
65
+ adjustFullPageCache(),
61
66
  magentoTask('cache:flush')
62
67
  ],
63
68
  {
@@ -9,7 +9,6 @@ const varnishConfigSetup = require('./varnish-config')
9
9
  const pathExists = require('../../../util/path-exists')
10
10
  const updateEnvPHP = require('../../php/update-env-php')
11
11
  const UnknownError = require('../../../errors/unknown-error')
12
- const checkSearchEngineVersion = require('../../requirements/searchengine-version')
13
12
 
14
13
  /**
15
14
  * @param {Object} [options]
@@ -20,7 +19,6 @@ const migrateDatabase = (options = {}) => ({
20
19
  title: 'Migrating database',
21
20
  task: async (ctx, task) => {
22
21
  const { databaseConnection } = ctx
23
- const { varnish } = ctx.config.overridenConfiguration.configuration
24
22
 
25
23
  const [[{ tableCount }]] = await databaseConnection.query(`
26
24
  SELECT count(*) AS tableCount
@@ -46,17 +44,12 @@ const migrateDatabase = (options = {}) => ({
46
44
 
47
45
  return task.newListr(
48
46
  [
49
- checkSearchEngineVersion(),
50
47
  installMagento({ isDbEmpty: true }),
51
48
  updateEnvPHP(),
52
49
  varnishConfigSetup(),
53
50
  configureSearchEngine(),
54
51
  upgradeMagento(),
55
- magentoTask(
56
- `cache:disable block_html layout${
57
- !varnish.enabled ? ' full_page' : ''
58
- }`
59
- )
52
+ magentoTask('cache:enable')
60
53
  ],
61
54
  {
62
55
  concurrent: false,
@@ -82,11 +75,7 @@ const migrateDatabase = (options = {}) => ({
82
75
  ctx.isSetupUpgradeNeeded = false
83
76
  // no setup is needed, but still to be sure configure ES
84
77
  return task.newListr(
85
- [
86
- checkSearchEngineVersion(),
87
- varnishConfigSetup(),
88
- configureSearchEngine()
89
- ],
78
+ [varnishConfigSetup(), configureSearchEngine()],
90
79
  {
91
80
  concurrent: false,
92
81
  exitOnError: true,
@@ -101,7 +90,6 @@ const migrateDatabase = (options = {}) => ({
101
90
  if (options.onlyInstallMagento) {
102
91
  ctx.isSetupUpgradeNeeded = false
103
92
  return task.newListr([
104
- checkSearchEngineVersion(),
105
93
  installMagentoProject(),
106
94
  installMagento()
107
95
  ])
@@ -109,18 +97,13 @@ const migrateDatabase = (options = {}) => ({
109
97
 
110
98
  return task.newListr(
111
99
  [
112
- checkSearchEngineVersion(),
113
100
  installMagentoProject(),
114
101
  installMagento(),
115
102
  updateEnvPHP(),
116
103
  varnishConfigSetup(),
117
104
  configureSearchEngine(),
118
105
  upgradeMagento(),
119
- magentoTask(
120
- `cache:disable block_html layout${
121
- !varnish.enabled ? ' full_page' : ''
122
- }`
123
- )
106
+ magentoTask('cache:enable')
124
107
  ],
125
108
  {
126
109
  concurrent: false,
@@ -135,7 +118,6 @@ const migrateDatabase = (options = {}) => ({
135
118
  case 2: {
136
119
  return task.newListr(
137
120
  [
138
- checkSearchEngineVersion(),
139
121
  varnishConfigSetup(),
140
122
  configureSearchEngine(),
141
123
  upgradeMagento()
@@ -0,0 +1,87 @@
1
+ const { getPort } = require('../../config/port-config')
2
+ const KnownError = require('../../errors/known-error')
3
+ const UnknownError = require('../../errors/unknown-error')
4
+ const { containerApi } = require('../docker/containers')
5
+
6
+ /**
7
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
8
+ */
9
+ const checkElasticSearchVersion = () => ({
10
+ title: 'Checking container ElasticSearch version',
11
+ task: async (ctx, task) => {
12
+ const { elasticsearch } =
13
+ ctx.config.overridenConfiguration.configuration
14
+ const { ports } = ctx
15
+
16
+ const { elasticsearch: elasticSearchContainer } =
17
+ ctx.config.docker.getContainers(ports)
18
+
19
+ let elasticSearchVersionResponse
20
+
21
+ const elasticSearchContainerRunning = await containerApi.ls({
22
+ filter: `name=${elasticSearchContainer.name}`,
23
+ formatToJSON: true
24
+ })
25
+
26
+ if (
27
+ elasticSearchContainerRunning.length !== 0 &&
28
+ elasticSearchContainerRunning[0].State === 'running'
29
+ ) {
30
+ elasticSearchVersionResponse = await containerApi.exec({
31
+ command: 'elasticsearch --version',
32
+ container: elasticSearchContainer.name
33
+ })
34
+ } else {
35
+ try {
36
+ const availableElasticSearchPort = await getPort(
37
+ ports.elasticsearch
38
+ )
39
+ elasticSearchVersionResponse = await containerApi.run({
40
+ ...elasticsearch,
41
+ command: 'elasticsearch --version',
42
+ detach: false,
43
+ rm: true,
44
+ ports: [`127.0.0.1:${availableElasticSearchPort}:9200`],
45
+ memory: '2gb'
46
+ })
47
+ } catch (e) {
48
+ elasticSearchVersionResponse = e.message
49
+ }
50
+ }
51
+
52
+ if (
53
+ ctx.cgroupVersion === 'v2' &&
54
+ elasticSearchVersionResponse.includes(
55
+ 'Cannot invoke "jdk.internal.platform.CgroupInfo.getMountPoint()" because "anyController" is null'
56
+ )
57
+ ) {
58
+ throw new KnownError(`ElasticSearch failed to start up due to a JVM bug with CGroup version 2.
59
+ Similar issue on StackOverflow: https://stackoverflow.com/q/71532170.
60
+
61
+ Right now is check if OpenSearch works with your version of Magento.
62
+ Follow the documentation: https://docs.create-magento-app.com/getting-started/config-file#searchengine-opensearch-elasticsearch
63
+
64
+ If it will not help, try updating ElasticSearch image version: https://docs.create-magento-app.com/getting-started/config-file#elasticsearch
65
+ `)
66
+ }
67
+
68
+ const elasticSearchVersionResponseResult =
69
+ elasticSearchVersionResponse.match(/Version:\s(\d+\.\d+\.\d+)/i)
70
+
71
+ if (
72
+ elasticSearchVersionResponseResult &&
73
+ elasticSearchVersionResponseResult.length > 0
74
+ ) {
75
+ const elasticSearchVersion = elasticSearchVersionResponseResult[1]
76
+
77
+ ctx.elasticSearchVersion = elasticSearchVersion
78
+ task.title = `Using ElasticSearch version ${elasticSearchVersion} in container`
79
+ } else {
80
+ throw new UnknownError(
81
+ `Cannot retrieve ElasticSearch Version!\n\n${elasticSearchVersionResponse}`
82
+ )
83
+ }
84
+ }
85
+ })
86
+
87
+ module.exports = checkElasticSearchVersion
@@ -0,0 +1,71 @@
1
+ const { getPort } = require('../../config/port-config')
2
+ const UnknownError = require('../../errors/unknown-error')
3
+ const { containerApi } = require('../docker/containers')
4
+
5
+ /**
6
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
7
+ */
8
+ const checkOpenSearchVersion = () => ({
9
+ title: 'Checking container OpenSearch version',
10
+ task: async (ctx, task) => {
11
+ const { opensearch } = ctx.config.overridenConfiguration.configuration
12
+ const { ports } = ctx
13
+
14
+ const { elasticsearch: openSearchContainer } =
15
+ ctx.config.docker.getContainers(ports)
16
+
17
+ let openSearchVersionResponse
18
+
19
+ const openSearchContainerRunning = await containerApi.ls({
20
+ filter: `name=${openSearchContainer.name}`,
21
+ formatToJSON: true
22
+ })
23
+
24
+ if (
25
+ openSearchContainerRunning.length !== 0 &&
26
+ openSearchContainerRunning[0].State === 'running'
27
+ ) {
28
+ openSearchVersionResponse = await containerApi.exec({
29
+ command: 'opensearch --version',
30
+ container: openSearchContainer.name
31
+ })
32
+ } else {
33
+ try {
34
+ const availableOpenSearchPort = await getPort(
35
+ ports.elasticsearch
36
+ )
37
+ openSearchVersionResponse = await containerApi.run({
38
+ ...opensearch,
39
+ command: 'opensearch --version',
40
+ detach: false,
41
+ rm: true,
42
+ ports: [`127.0.0.1:${availableOpenSearchPort}:9200`],
43
+ memory: '2gb'
44
+ })
45
+ } catch (e) {
46
+ openSearchVersionResponse = e.message
47
+ }
48
+ }
49
+
50
+ const openSearchVersionResponseResult = openSearchVersionResponse.match(
51
+ /Version:\s(\d+\.\d+\.\d+)/i
52
+ )
53
+
54
+ if (
55
+ openSearchVersionResponseResult &&
56
+ openSearchVersionResponseResult.length > 0
57
+ ) {
58
+ const openSearchVersion = openSearchVersionResponseResult[1]
59
+
60
+ ctx.openSearchVersion = openSearchVersion
61
+ task.title = `Using OpenSearch version ${openSearchVersion} in container`
62
+ } else {
63
+ throw new UnknownError(
64
+ `Cannot retrieve OpenSearch Version!\n\n${openSearchVersionResponse}`
65
+ )
66
+ }
67
+ },
68
+ exitOnError: false
69
+ })
70
+
71
+ module.exports = checkOpenSearchVersion
@@ -1,70 +1,18 @@
1
- const { request } = require('smol-request')
2
- const UnknownError = require('../../errors/unknown-error')
3
- const waitForLogs = require('../../util/wait-for-logs')
1
+ const checkElasticSearchVersion = require('./elasticsearch-version')
2
+ const checkOpenSearchVersion = require('./opensearch-version')
4
3
 
5
4
  /**
6
5
  * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
7
6
  */
8
7
  const checkSearchEngineVersion = () => ({
9
8
  task: async (ctx, task) => {
10
- const {
11
- ports,
12
- config: {
13
- overridenConfiguration: {
14
- configuration: { searchengine }
15
- }
16
- }
17
- } = ctx
18
-
19
- const { elasticsearch } = ctx.config.docker.getContainers(ports)
20
-
21
- await waitForLogs({
22
- containerName: elasticsearch.name,
23
- matchText:
24
- searchengine === 'elasticsearch' ? '"started"' : '] started'
25
- })
26
-
27
- try {
28
- const response = await request(
29
- `http://localhost:${ports.elasticsearch}/`,
30
- {
31
- method: 'GET',
32
- responseType: 'json'
33
- }
34
- )
35
-
36
- if (response.status !== 200) {
37
- if (
38
- ctx.config.overridenConfiguration.configuration
39
- .searchengine === 'opensearch'
40
- ) {
41
- throw new UnknownError(
42
- `OpenSearch container is not running!\n\nStatus code: ${response.status}, Response: ${response.data.message}`
43
- )
44
- } else {
45
- throw new UnknownError(
46
- `ElasticSearch container is not running!\n\nStatus code: ${response.status}, Response: ${response.data.message}`
47
- )
48
- }
49
- }
50
-
51
- const searchEngineVersion = response.data.version.number
52
- if (searchengine === 'elasticsearch') {
53
- ctx.elasticSearchVersion = searchEngineVersion
54
- } else {
55
- ctx.openSearchVersion = searchEngineVersion
56
- }
57
- } catch (e) {
58
- if (searchengine === 'opensearch') {
59
- throw new UnknownError(
60
- `Cannot connect to OpenSearch container!\n\n${e.message}`
61
- )
62
- } else {
63
- throw new UnknownError(
64
- `Cannot connect to ElasticSearch container!\n\n${e.message}`
65
- )
66
- }
9
+ const { searchengine = 'elasticsearch' } =
10
+ ctx.config.overridenConfiguration.configuration
11
+ if (searchengine === 'opensearch') {
12
+ return task.newListr(checkOpenSearchVersion())
67
13
  }
14
+
15
+ return task.newListr(checkElasticSearchVersion())
68
16
  }
69
17
  })
70
18
 
@@ -38,6 +38,7 @@ const { setProjectConfigTask } = require('./project-config')
38
38
  const {
39
39
  convertComposerHomeToComposerCacheVolume
40
40
  } = require('./docker/convert-composer-home-to-composer-cache-volume')
41
+ const checkSearchEngineVersion = require('./requirements/searchengine-version')
41
42
 
42
43
  /**
43
44
  * @returns {import('listr2').ListrTask<import('../../typings/context').ListrContext>}
@@ -128,7 +129,15 @@ const configureProject = () => ({
128
129
  { concurrent: true }
129
130
  )
130
131
  },
131
- checkPHPVersion(),
132
+ {
133
+ task: (ctx, subTask) =>
134
+ subTask.newListr(
135
+ [checkPHPVersion(), checkSearchEngineVersion()],
136
+ {
137
+ concurrent: true
138
+ }
139
+ )
140
+ },
132
141
  buildProjectImage(),
133
142
  getComposerVersionTask(),
134
143
  prepareFileSystem(),
@@ -1,6 +1,6 @@
1
1
  const symlinkTheme = require('./symlink-theme')
2
2
  const installTheme = require('./install-theme')
3
- const enableFullPageCacheWithVarnish = require('../magento/setup-magento/enable-full-page-cache-with-varnish')
3
+ const adjustFullPageCache = require('../magento/setup-magento/adjust-full-page-cache')
4
4
  const disablePageBuilder = require('../magento/setup-magento/disable-page-builder')
5
5
  const buildTheme = require('./build-theme')
6
6
  const upgradeMagento = require('../magento/setup-magento/upgrade-magento')
@@ -55,7 +55,7 @@ const linkTheme = () => ({
55
55
  installTheme(theme),
56
56
  updateEnvPHP(),
57
57
  upgradeMagento(),
58
- enableFullPageCacheWithVarnish(),
58
+ adjustFullPageCache(),
59
59
  ...(isPageBuilderInstalled && Number(isPagebuilderEnabled)
60
60
  ? [disablePageBuilder()]
61
61
  : []),
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Scripts and configuration used by CMA.",
4
4
  "homepage": "https://docs.create-magento-app.com/",
5
5
  "repository": "github:scandipwa/create-magento-app",
6
- "version": "2.4.2-alpha.2",
6
+ "version": "2.4.2",
7
7
  "main": "./index.js",
8
8
  "types": "./typings/index.d.ts",
9
9
  "license": "OSL-3.0",
@@ -59,5 +59,5 @@
59
59
  "@types/node": "^20.14.11",
60
60
  "@types/yargs": "^17.0.32"
61
61
  },
62
- "gitHead": "3b0fbecf1e4a2ac197e21a53b5433cafeb81eaae"
62
+ "gitHead": "fc6fc272e01ce2442814452a14e0d2c6fe28a9f7"
63
63
  }
@@ -118,7 +118,6 @@ export interface ListrContext {
118
118
  command: string
119
119
  connectCommand: string[]
120
120
  dependsOn?: string[]
121
- serviceReadyLog?: string
122
121
  }
123
122
  >
124
123
  }
@@ -155,5 +154,4 @@ export interface ListrContext {
155
154
  dockerServerData?: DockerVersionResult['Server']
156
155
  dockerClientData?: DockerVersionResult['Client']
157
156
  dockerVersion?: DockerVersionResult['Server']['Version']
158
- dockerMemoryLimit: number
159
157
  }
@@ -1,30 +0,0 @@
1
- const envPhpToJson = require('../../../util/env-php-json')
2
- const magentoTask = require('../../../util/magento-task')
3
-
4
- /**
5
- * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
6
- */
7
- const enableFullPageCacheWithVarnish = () => ({
8
- skip: (ctx) => {
9
- const { varnish } = ctx.config.overridenConfiguration.configuration
10
-
11
- return !varnish.enabled
12
- },
13
- task: async (ctx, task) => {
14
- const envData = await envPhpToJson(ctx)
15
- if (
16
- envData &&
17
- envData.cache_types &&
18
- typeof envData.cache_types.full_page === 'number' &&
19
- envData.cache_types.full_page !== 1
20
- ) {
21
- task.title =
22
- 'Enabling full_page cache in Magento (Varnish is enabled)'
23
- return task.newListr(magentoTask('cache:enable full_page'))
24
- }
25
-
26
- task.skip()
27
- }
28
- })
29
-
30
- module.exports = enableFullPageCacheWithVarnish