@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.
- package/lib/commands/cli.js +2 -4
- package/lib/commands/execute.js +28 -3
- package/lib/commands/start.js +37 -15
- package/lib/commands/status.js +2 -0
- package/lib/config/docker.js +65 -42
- package/lib/config/get-project-configuration.js +3 -1
- package/lib/config/index.js +10 -7
- package/lib/config/magento/required-php-extensions/index.js +29 -0
- package/lib/config/magento/required-php-extensions/magento-2.3.js +19 -0
- package/lib/config/magento/required-php-extensions/magento-2.4.js +29 -0
- package/lib/config/php/base-repo.js +3 -0
- package/lib/config/php/extensions/apcu.js +12 -0
- package/lib/config/php/extensions/bcmath.js +7 -0
- package/lib/config/php/extensions/curl.js +11 -0
- package/lib/config/php/extensions/gd.js +14 -0
- package/lib/config/php/extensions/index.js +18 -2
- package/lib/config/php/extensions/intl.js +10 -0
- package/lib/config/php/extensions/opcache.js +10 -0
- package/lib/config/php/extensions/pdo_mysql.js +7 -0
- package/lib/config/php/extensions/soap.js +10 -0
- package/lib/config/php/extensions/sodium.js +10 -0
- package/lib/config/php/extensions/xdebug.js +8 -5
- package/lib/config/php/extensions/xsl.js +10 -0
- package/lib/config/php/extensions/zip.js +10 -0
- package/lib/config/php/{releases → versions}/index.js +0 -0
- package/lib/config/php/versions/php-7.2.js +23 -0
- package/lib/config/php/versions/php-7.3.js +23 -0
- package/lib/config/php/versions/php-7.4.js +23 -0
- package/lib/config/php/versions/php-8.1.js +23 -0
- package/lib/config/php-config.js +8 -12
- package/lib/config/port-config.js +1 -5
- package/lib/config/templates/magentorc.template +3 -3
- package/lib/config/templates/php-fpm.template.conf +3 -3
- package/lib/config/templates/php.template.ini +12 -6
- package/lib/config/templates/ssl-terminator.template.conf +1 -1
- package/lib/config/templates/vscode-launch.template.json +3 -1
- package/lib/config/versions/magento-2.3.0.js +8 -2
- package/lib/config/versions/magento-2.3.1.js +8 -2
- package/lib/config/versions/magento-2.3.2-p1.js +44 -0
- package/lib/config/versions/magento-2.3.2-p2.js +8 -2
- package/lib/config/versions/magento-2.3.2.js +8 -2
- package/lib/config/versions/magento-2.3.3-p1.js +8 -2
- package/lib/config/versions/magento-2.3.3.js +8 -2
- package/lib/config/versions/magento-2.3.4-p1.js +44 -0
- package/lib/config/versions/magento-2.3.4-p2.js +8 -2
- package/lib/config/versions/magento-2.3.4.js +8 -2
- package/lib/config/versions/magento-2.3.5-p1.js +8 -2
- package/lib/config/versions/magento-2.3.5-p2.js +8 -2
- package/lib/config/versions/magento-2.3.5.js +8 -2
- package/lib/config/versions/magento-2.3.6-p1.js +8 -2
- package/lib/config/versions/magento-2.3.6.js +8 -2
- package/lib/config/versions/magento-2.3.7-p1.js +8 -2
- package/lib/config/versions/magento-2.3.7-p2.js +8 -2
- package/lib/config/versions/magento-2.3.7-p3.js +8 -2
- package/lib/config/versions/magento-2.3.7.js +8 -2
- package/lib/config/versions/magento-2.4.0-p1.js +9 -3
- package/lib/config/versions/magento-2.4.0.js +9 -3
- package/lib/config/versions/magento-2.4.1-p1.js +6 -5
- package/lib/config/versions/magento-2.4.1.js +9 -2
- package/lib/config/versions/magento-2.4.2-p1.js +6 -5
- package/lib/config/versions/magento-2.4.2-p2.js +6 -6
- package/lib/config/versions/magento-2.4.2.js +6 -6
- package/lib/config/versions/magento-2.4.3-p1.js +7 -7
- package/lib/config/versions/magento-2.4.3-p2.js +7 -7
- package/lib/config/versions/magento-2.4.3.js +7 -7
- package/lib/config/versions/magento-2.4.4.js +9 -2
- package/lib/tasks/cleanup.js +2 -2
- package/lib/tasks/composer/index.js +14 -104
- package/lib/tasks/docker/api.d.ts +71 -0
- package/lib/tasks/docker/api.js +30 -0
- package/lib/tasks/docker/containers/container-api.d.ts +128 -0
- package/lib/tasks/docker/containers/container-api.js +153 -0
- package/lib/tasks/docker/containers/index.js +19 -0
- package/lib/tasks/docker/containers/tasks.js +215 -0
- package/lib/tasks/docker/convert-legacy-volumes.js +7 -3
- package/lib/tasks/docker/image/image-api.d.ts +34 -0
- package/lib/tasks/docker/image/image-api.js +49 -0
- package/lib/tasks/docker/image/index.js +5 -0
- package/lib/tasks/docker/index.js +1 -13
- package/lib/tasks/docker/network/index.js +7 -0
- package/lib/tasks/docker/network/network-api.d.ts +103 -0
- package/lib/tasks/docker/network/network-api.js +99 -0
- package/lib/tasks/docker/{network.js → network/tasks.js} +17 -10
- package/lib/tasks/docker/project-image-builder.js +167 -0
- package/lib/tasks/docker/volumes.js +1 -1
- package/lib/tasks/file-system/create-nginx-config.js +2 -3
- package/lib/tasks/file-system/create-php-config.js +20 -5
- package/lib/tasks/file-system/create-php-fpm-config.js +8 -4
- package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +41 -29
- package/lib/tasks/file-system/create-phpstorm-config/index.js +2 -0
- package/lib/tasks/file-system/create-phpstorm-config/keys.js +15 -1
- package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +4 -1
- package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +3 -3
- package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +81 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +42 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +9 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +66 -0
- package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +11 -9
- package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +2 -1
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +15 -30
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +24 -5
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +50 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +50 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +50 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +15 -15
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +29 -3
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +50 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +42 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +50 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +0 -2
- package/lib/tasks/file-system/create-ssl-terminator-config.js +4 -2
- package/lib/tasks/file-system/create-vscode-config.js +57 -42
- package/lib/tasks/file-system/index.js +2 -1
- package/lib/tasks/link.js +1 -2
- package/lib/tasks/magento/install-magento-project.js +39 -64
- package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +4 -4
- package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +6 -2
- package/lib/tasks/magento/setup-magento/create-admin.js +5 -6
- package/lib/tasks/magento/setup-magento/disable-2fa.js +3 -5
- package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +3 -4
- package/lib/tasks/magento/setup-magento/index.js +1 -3
- package/lib/tasks/magento/setup-magento/install-magento.js +57 -11
- package/lib/tasks/magento/setup-magento/migrate-database.js +12 -11
- package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
- package/lib/tasks/magento/setup-magento/varnish-config.js +7 -5
- package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
- package/lib/tasks/mysql/connect-to-mysql.js +44 -19
- package/lib/tasks/mysql/import-dump-to-mysql.js +161 -25
- package/lib/tasks/php/php-container.js +108 -0
- package/lib/tasks/php/update-env-php.js +35 -19
- package/lib/tasks/php/update-env.php +61 -56
- package/lib/tasks/php/working_health_check.php +85 -0
- package/lib/tasks/requirements/{composer.js → composer-credentials.js} +3 -1
- package/lib/tasks/requirements/docker/index.js +15 -12
- package/lib/tasks/requirements/docker/performance.js +54 -0
- package/lib/tasks/requirements/docker/version.js +8 -8
- package/lib/tasks/requirements/index.js +7 -10
- package/lib/tasks/requirements/php-version.js +8 -116
- package/lib/tasks/requirements/platform.js +12 -25
- package/lib/tasks/start.js +41 -48
- package/lib/tasks/status/index.js +4 -10
- package/lib/tasks/stop.js +0 -2
- package/lib/tasks/theme/install-theme.js +1 -1
- package/lib/tasks/theme/symlink-theme.js +2 -3
- package/lib/util/config-php-json.js +13 -4
- package/lib/util/dockerfile-builder/build-instructions.js +197 -0
- package/lib/util/dockerfile-builder/index.js +276 -0
- package/lib/util/dockerfile-builder/types.d.ts +123 -0
- package/lib/util/env-php-json.js +10 -6
- package/lib/util/exec-async-command.js +3 -9
- package/lib/util/macos-version.js +20 -0
- package/lib/util/magento-task.js +3 -4
- package/lib/util/nginx-logs-parser.js +122 -0
- package/lib/util/php-task.js +3 -6
- package/lib/util/prefix.js +1 -1
- package/lib/util/run-composer.js +6 -14
- package/lib/util/run-container-image.js +17 -0
- package/lib/util/run-magento.js +6 -14
- package/lib/util/run-php.js +6 -17
- package/package.json +9 -9
- package/typings/context.d.ts +3 -9
- package/typings/index.d.ts +38 -57
- package/lib/config/composer.js +0 -11
- package/lib/config/php/extensions/libsodium.js +0 -36
- package/lib/config/php/releases/php-7.2.js +0 -25
- package/lib/config/php/releases/php-7.3.js +0 -25
- package/lib/config/php/releases/php-7.4.js +0 -23
- package/lib/config/php/releases/php-8.1.js +0 -25
- package/lib/config/phpbrew.js +0 -12
- package/lib/tasks/composer/install-prestissimo.js +0 -88
- package/lib/tasks/docker/containers.js +0 -231
- package/lib/tasks/php/bundled-extensions.js +0 -27
- package/lib/tasks/php/compile-options.js +0 -56
- package/lib/tasks/php/compile.js +0 -55
- package/lib/tasks/php/configure.js +0 -89
- package/lib/tasks/php/extensions/disable.js +0 -49
- package/lib/tasks/php/extensions/enable.js +0 -52
- package/lib/tasks/php/extensions/index.js +0 -80
- package/lib/tasks/php/extensions/install.js +0 -54
- package/lib/tasks/php/index.js +0 -79
- package/lib/tasks/php/install-sodium.js +0 -93
- package/lib/tasks/php/update-phpbrew.js +0 -45
- package/lib/tasks/php/validate-php.js +0 -67
- package/lib/tasks/php-fpm/get-process-id.js +0 -14
- package/lib/tasks/php-fpm/index.js +0 -4
- package/lib/tasks/php-fpm/start-php-fpm.js +0 -49
- package/lib/tasks/php-fpm/stop-php-fpm.js +0 -48
- package/lib/tasks/requirements/phpbrew/index.js +0 -61
- package/lib/tasks/requirements/phpbrew/install.js +0 -159
- package/lib/tasks/requirements/phpbrew/version.js +0 -28
|
@@ -2,9 +2,10 @@ const path = require('path');
|
|
|
2
2
|
const envPhpToJson = require('../../util/env-php-json');
|
|
3
3
|
const getJsonfileData = require('../../util/get-jsonfile-data');
|
|
4
4
|
const pathExists = require('../../util/path-exists');
|
|
5
|
-
const
|
|
5
|
+
const { containerApi } = require('../docker/containers');
|
|
6
6
|
|
|
7
7
|
const composerLockPath = path.join(process.cwd(), 'composer.lock');
|
|
8
|
+
const envPhpPath = path.join(process.cwd(), 'app', 'etc', 'env.php');
|
|
8
9
|
/**
|
|
9
10
|
* @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
|
|
10
11
|
*/
|
|
@@ -12,13 +13,19 @@ const updateEnvPHP = () => ({
|
|
|
12
13
|
title: 'Updating env.php',
|
|
13
14
|
task: async (ctx, task) => {
|
|
14
15
|
// update env.php only if it's exist
|
|
15
|
-
if (!await pathExists(
|
|
16
|
+
if (!await pathExists(envPhpPath)) {
|
|
16
17
|
task.skip();
|
|
17
18
|
return;
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
const
|
|
21
|
-
|
|
21
|
+
const { php } = ctx.config.docker.getContainers(ctx.ports);
|
|
22
|
+
|
|
23
|
+
const isLinux = ctx.platform === 'linux';
|
|
24
|
+
const isNativeLinux = isLinux && !ctx.isWsl;
|
|
25
|
+
const hostMachine = isNativeLinux ? '127.0.0.1' : 'host.docker.internal';
|
|
26
|
+
|
|
27
|
+
const useVarnish = (!ctx.debug && ctx.config.overridenConfiguration.configuration.varnish.enabled) ? '1' : '';
|
|
28
|
+
const varnishHost = hostMachine;
|
|
22
29
|
const varnishPort = ctx.ports.varnish;
|
|
23
30
|
const previousVarnishPort = ctx.cachedPorts
|
|
24
31
|
? ctx.cachedPorts.varnish
|
|
@@ -34,7 +41,7 @@ const updateEnvPHP = () => ({
|
|
|
34
41
|
ctx.CSAThemeInstalled = true;
|
|
35
42
|
}
|
|
36
43
|
|
|
37
|
-
const envPhp = await envPhpToJson(
|
|
44
|
+
const envPhp = await envPhpToJson(ctx);
|
|
38
45
|
|
|
39
46
|
const persistedQueryConfig = envPhp.cache && envPhp.cache['persisted-query'];
|
|
40
47
|
|
|
@@ -50,20 +57,29 @@ const updateEnvPHP = () => ({
|
|
|
50
57
|
}
|
|
51
58
|
}
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
const result = await containerApi.run({
|
|
61
|
+
env: {
|
|
62
|
+
USE_VARNISH: useVarnish,
|
|
63
|
+
VARNISH_PORT: `${ varnishPort }`,
|
|
64
|
+
VARNISH_HOST: varnishHost,
|
|
65
|
+
PREVIOUS_VARNISH_PORT: `${ previousVarnishPort }`,
|
|
66
|
+
SETUP_PQ,
|
|
67
|
+
REDIS_PORT: ctx.ports.redis,
|
|
68
|
+
ADMIN_URI: ctx.config.overridenConfiguration.magento.adminuri,
|
|
69
|
+
HOST_MACHINE: hostMachine,
|
|
70
|
+
PORTS: JSON.stringify(ctx.ports)
|
|
71
|
+
},
|
|
72
|
+
command: 'php ./update-env-php.php',
|
|
73
|
+
mountVolumes: [
|
|
74
|
+
`${path.join(__dirname, 'update-env.php')}:${ctx.config.baseConfig.containerMagentoDir}/update-env-php.php`,
|
|
75
|
+
`${envPhpPath}:/${ctx.config.baseConfig.containerMagentoDir}/env.php`
|
|
76
|
+
],
|
|
77
|
+
image: php.image,
|
|
78
|
+
detach: false,
|
|
79
|
+
rm: true
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
task.output = result;
|
|
67
83
|
}
|
|
68
84
|
});
|
|
69
85
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
function varexport($expression, $return=false): string
|
|
4
4
|
{
|
|
5
5
|
$export = var_export($expression, true);
|
|
6
|
-
$export = preg_replace("/^([ ]*)(.*)/m",
|
|
6
|
+
$export = preg_replace("/^([ ]*)(.*)/m", "$1$1$2", $export);
|
|
7
7
|
$array = preg_split("/\r\n|\n|\r/", $export);
|
|
8
|
-
$array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [null,
|
|
8
|
+
$array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [null, "]$1", " => ["], $array);
|
|
9
9
|
$export = join(PHP_EOL, array_filter(["["] + $array));
|
|
10
10
|
if ((bool)$return) {
|
|
11
11
|
return $export;
|
|
@@ -19,12 +19,12 @@ function joinpaths(): string
|
|
|
19
19
|
$paths = array();
|
|
20
20
|
|
|
21
21
|
foreach (func_get_args() as $arg) {
|
|
22
|
-
if ($arg !==
|
|
22
|
+
if ($arg !== "") {
|
|
23
23
|
$paths[] = $arg;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
return preg_replace(
|
|
27
|
+
return preg_replace("#/+#", "/", join("/", $paths));
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
class EnvUpdater
|
|
@@ -42,7 +42,7 @@ class EnvUpdater
|
|
|
42
42
|
|
|
43
43
|
public function loadConfig()
|
|
44
44
|
{
|
|
45
|
-
$this->config = require
|
|
45
|
+
$this->config = require "./env.php";
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/**
|
|
@@ -63,14 +63,14 @@ class EnvUpdater
|
|
|
63
63
|
|
|
64
64
|
public function loadPortConfig()
|
|
65
65
|
{
|
|
66
|
-
$portConfigContent =
|
|
66
|
+
$portConfigContent = getenv("PORTS");
|
|
67
67
|
if ($portConfigContent === false) {
|
|
68
|
-
throw new Error(
|
|
68
|
+
throw new Error("Ports env does not exists");
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
$portConfigJsonData = json_decode($portConfigContent, true);
|
|
72
72
|
if ($portConfigJsonData === null) {
|
|
73
|
-
throw new Error(
|
|
73
|
+
throw new Error("Ports env is not parseable");
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
$this->portConfig = $portConfigJsonData;
|
|
@@ -79,91 +79,96 @@ class EnvUpdater
|
|
|
79
79
|
public function modifyConfig()
|
|
80
80
|
{
|
|
81
81
|
// set admin uri
|
|
82
|
-
$this->config[
|
|
82
|
+
$this->config["backend"]["frontName"] = getenv("ADMIN_URI");
|
|
83
|
+
$hostMachine = getenv("HOST_MACHINE");
|
|
84
|
+
if ($hostMachine === false) {
|
|
85
|
+
$hostMachine = '127.0.0.1';
|
|
86
|
+
}
|
|
83
87
|
|
|
84
88
|
// update mysql config
|
|
85
|
-
if (isset($this->config[
|
|
86
|
-
$conn = &$this->config[
|
|
89
|
+
if (isset($this->config["db"]["connection"]["default"])) {
|
|
90
|
+
$conn = &$this->config["db"]["connection"]["default"];
|
|
91
|
+
$mysqlHost = $hostMachine . ":" . $this->portConfig["mysql"];
|
|
87
92
|
if (
|
|
88
|
-
isset($conn[
|
|
89
|
-
isset($conn[
|
|
90
|
-
$conn[
|
|
91
|
-
$conn[
|
|
93
|
+
isset($conn["engine"]) &&
|
|
94
|
+
isset($conn["host"]) &&
|
|
95
|
+
$conn["engine"] === "innodb" &&
|
|
96
|
+
$conn["host"] !== $mysqlHost
|
|
92
97
|
) {
|
|
93
|
-
$conn[
|
|
98
|
+
$conn["host"] = $mysqlHost;
|
|
94
99
|
}
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
// update redis session config
|
|
98
103
|
if (
|
|
99
|
-
isset($this->config[
|
|
100
|
-
$this->config[
|
|
101
|
-
$this->config[
|
|
104
|
+
isset($this->config["session"]) &&
|
|
105
|
+
$this->config["session"]["save"] === "redis" &&
|
|
106
|
+
$this->config["session"]["redis"]["port"] !== strval($this->portConfig["redis"])
|
|
102
107
|
) {
|
|
103
|
-
$this->config[
|
|
108
|
+
$this->config["session"]["redis"]["port"] = strval($this->portConfig["redis"]);
|
|
104
109
|
}
|
|
105
110
|
|
|
106
111
|
if (
|
|
107
|
-
isset($this->config[
|
|
108
|
-
$this->config[
|
|
109
|
-
$this->config[
|
|
112
|
+
isset($this->config["session"]) &&
|
|
113
|
+
$this->config["session"]["save"] === "redis" &&
|
|
114
|
+
$this->config["session"]["redis"]["host"] !== $hostMachine
|
|
110
115
|
) {
|
|
111
|
-
$this->config[
|
|
116
|
+
$this->config["session"]["redis"]["host"] = $hostMachine;
|
|
112
117
|
}
|
|
113
118
|
|
|
114
119
|
// update redis frontend config
|
|
115
|
-
if (isset($this->config[
|
|
116
|
-
$frontendCache = &$this->config[
|
|
117
|
-
if ($frontendCache[
|
|
118
|
-
$frontendCache[
|
|
120
|
+
if (isset($this->config["cache"]["frontend"]["default"])) {
|
|
121
|
+
$frontendCache = &$this->config["cache"]["frontend"]["default"];
|
|
122
|
+
if ($frontendCache["backend_options"]["port"] !== strval($this->portConfig["redis"])) {
|
|
123
|
+
$frontendCache["backend_options"]["port"] = strval($this->portConfig["redis"]);
|
|
119
124
|
}
|
|
120
|
-
if ($frontendCache[
|
|
121
|
-
$frontendCache[
|
|
125
|
+
if ($frontendCache["backend_options"]["server"] !== $hostMachine) {
|
|
126
|
+
$frontendCache["backend_options"]["server"] = $hostMachine;
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
129
|
|
|
125
130
|
// update persisted query redis config
|
|
126
|
-
if (getenv(
|
|
127
|
-
$cacheConfig = &$this->config[
|
|
128
|
-
$redisPort = getenv(
|
|
131
|
+
if (getenv("SETUP_PQ") == "1") {
|
|
132
|
+
$cacheConfig = &$this->config["cache"];
|
|
133
|
+
$redisPort = getenv("REDIS_PORT");
|
|
129
134
|
|
|
130
|
-
if (isset($cacheConfig) && isset($cacheConfig[
|
|
131
|
-
$cacheConfig[
|
|
135
|
+
if (isset($cacheConfig) && isset($cacheConfig["persisted-query"]) && isset($cacheConfig["persisted-query"]["redis"]) && $cacheConfig["persisted-query"]["redis"]["port"] != $redisPort) {
|
|
136
|
+
$cacheConfig["persisted-query"]["redis"]["port"] = $redisPort;
|
|
132
137
|
} else {
|
|
133
138
|
if (!isset($cacheConfig)) {
|
|
134
|
-
$this->config[
|
|
139
|
+
$this->config["cache"] = [];
|
|
135
140
|
}
|
|
136
|
-
$this->config[
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
$this->config["cache"]["persisted-query"] = [
|
|
142
|
+
"redis" => [
|
|
143
|
+
"host" => $hostMachine,
|
|
144
|
+
"port" => $redisPort,
|
|
145
|
+
"database" => "5",
|
|
146
|
+
"scheme" => "tcp"
|
|
142
147
|
]
|
|
143
148
|
];
|
|
144
149
|
}
|
|
145
150
|
} else {
|
|
146
|
-
unset($this->config[
|
|
151
|
+
unset($this->config["cache"]["persisted-query"]);
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
// set varnish config
|
|
150
|
-
$httpCacheHosts = &$this->config[
|
|
155
|
+
$httpCacheHosts = &$this->config["http_cache_hosts"];
|
|
151
156
|
$httpCacheHosts = [];
|
|
152
157
|
|
|
153
|
-
if (getenv(
|
|
154
|
-
$varnishHost = getenv(
|
|
155
|
-
$varnishPort = getenv(
|
|
156
|
-
$previousVarnishPort = getenv(
|
|
158
|
+
if (getenv("USE_VARNISH") == "1") {
|
|
159
|
+
$varnishHost = getenv("VARNISH_HOST");
|
|
160
|
+
$varnishPort = getenv("VARNISH_PORT");
|
|
161
|
+
$previousVarnishPort = getenv("PREVIOUS_VARNISH_PORT");
|
|
157
162
|
$varnishConfig = [
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
"host" => $varnishHost,
|
|
164
|
+
"port" => $varnishPort
|
|
160
165
|
];
|
|
161
166
|
|
|
162
167
|
if (isset($httpCacheHosts)) {
|
|
163
168
|
$varnishHostExists = false;
|
|
164
169
|
foreach ($httpCacheHosts as $host) {
|
|
165
|
-
if ($host[
|
|
166
|
-
$host[
|
|
170
|
+
if ($host["host"] == $varnishHost && $host["port"] == $previousVarnishPort) {
|
|
171
|
+
$host["port"] = $varnishPort;
|
|
167
172
|
$varnishHostExists = true;
|
|
168
173
|
break;
|
|
169
174
|
}
|
|
@@ -173,10 +178,10 @@ class EnvUpdater
|
|
|
173
178
|
$httpCacheHosts = [$varnishConfig];
|
|
174
179
|
}
|
|
175
180
|
} else {
|
|
176
|
-
$this->config[
|
|
181
|
+
$this->config["http_cache_hosts"] = [$varnishConfig];
|
|
177
182
|
}
|
|
178
183
|
} else {
|
|
179
|
-
unset($this->config[
|
|
184
|
+
unset($this->config["http_cache_hosts"]);
|
|
180
185
|
}
|
|
181
186
|
}
|
|
182
187
|
|
|
@@ -184,7 +189,7 @@ class EnvUpdater
|
|
|
184
189
|
{
|
|
185
190
|
file_put_contents(
|
|
186
191
|
$filePath,
|
|
187
|
-
|
|
192
|
+
"<?php".PHP_EOL."return ".varexport($this->config, true).";" . PHP_EOL
|
|
188
193
|
);
|
|
189
194
|
}
|
|
190
195
|
|
|
@@ -193,7 +198,7 @@ class EnvUpdater
|
|
|
193
198
|
$this->loadConfig();
|
|
194
199
|
$this->loadPortConfig();
|
|
195
200
|
$this->modifyConfig();
|
|
196
|
-
$this->saveConfig(
|
|
201
|
+
$this->saveConfig("./env.php");
|
|
197
202
|
}
|
|
198
203
|
}
|
|
199
204
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © Magento, Inc. All rights reserved.
|
|
4
|
+
* See COPYING.txt for license details.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
use Magento\Framework\Config\ConfigOptionsListConstants;
|
|
8
|
+
|
|
9
|
+
register_shutdown_function("fatalErrorHandler");
|
|
10
|
+
|
|
11
|
+
try {
|
|
12
|
+
// phpcs:ignore Magento2.Security.IncludeFile
|
|
13
|
+
require __DIR__ . '/../app/bootstrap.php';
|
|
14
|
+
/** @var \Magento\Framework\App\ObjectManagerFactory $objectManagerFactory */
|
|
15
|
+
$objectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, []);
|
|
16
|
+
/** @var \Magento\Framework\ObjectManagerInterface $objectManager */
|
|
17
|
+
$objectManager = $objectManagerFactory->create([]);
|
|
18
|
+
/** @var \Magento\Framework\App\DeploymentConfig $deploymentConfig */
|
|
19
|
+
$deploymentConfig = $objectManager->get(\Magento\Framework\App\DeploymentConfig::class);
|
|
20
|
+
/** @var \Psr\Log\LoggerInterface $logger */
|
|
21
|
+
$logger = $objectManager->get(\Psr\Log\LoggerInterface::class);
|
|
22
|
+
} catch (\Exception $e) {
|
|
23
|
+
http_response_code(500);
|
|
24
|
+
// phpcs:ignore Magento2.Security.LanguageConstruct
|
|
25
|
+
exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// check mysql connectivity
|
|
29
|
+
foreach ($deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTIONS) as $connectionData) {
|
|
30
|
+
try {
|
|
31
|
+
/** @var \Magento\Framework\DB\Adapter\Pdo\Mysql $dbAdapter */
|
|
32
|
+
$dbAdapter = $objectManager->create(
|
|
33
|
+
\Magento\Framework\DB\Adapter\Pdo\Mysql::class,
|
|
34
|
+
['config' => $connectionData]
|
|
35
|
+
);
|
|
36
|
+
$dbAdapter->getConnection();
|
|
37
|
+
} catch (\Exception $e) {
|
|
38
|
+
http_response_code(500);
|
|
39
|
+
$logger->error("MySQL connection failed: " . $e->getMessage());
|
|
40
|
+
// phpcs:ignore Magento2.Security.LanguageConstruct
|
|
41
|
+
exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// check cache storage availability
|
|
45
|
+
$cacheConfigs = $deploymentConfig->get(ConfigOptionsListConstants::KEY_CACHE_FRONTEND);
|
|
46
|
+
if ($cacheConfigs) {
|
|
47
|
+
foreach ($cacheConfigs as $cacheConfig) {
|
|
48
|
+
// allow config if only available "id_prefix"
|
|
49
|
+
if (count($cacheConfig) === 1 && isset($cacheConfig['id_prefix'])) {
|
|
50
|
+
continue;
|
|
51
|
+
} elseif (!isset($cacheConfig[ConfigOptionsListConstants::CONFIG_PATH_BACKEND]) ||
|
|
52
|
+
!isset($cacheConfig[ConfigOptionsListConstants::CONFIG_PATH_BACKEND_OPTIONS])) {
|
|
53
|
+
http_response_code(500);
|
|
54
|
+
$logger->error("Cache configuration is invalid");
|
|
55
|
+
// phpcs:ignore Magento2.Security.LanguageConstruct
|
|
56
|
+
exit(1);
|
|
57
|
+
}
|
|
58
|
+
$cacheBackendClass = $cacheConfig[ConfigOptionsListConstants::CONFIG_PATH_BACKEND];
|
|
59
|
+
try {
|
|
60
|
+
/** @var \Magento\Framework\App\Cache\Frontend\Factory $cacheFrontendFactory */
|
|
61
|
+
$cacheFrontendFactory = $objectManager->get(Magento\Framework\App\Cache\Frontend\Factory::class);
|
|
62
|
+
/** @var \Zend_Cache_Backend_Interface $backend */
|
|
63
|
+
$backend = $cacheFrontendFactory->create($cacheConfig);
|
|
64
|
+
$backend->test('test_cache_id');
|
|
65
|
+
} catch (\Exception $e) {
|
|
66
|
+
http_response_code(500);
|
|
67
|
+
$logger->error("Cache storage is not accessible");
|
|
68
|
+
// phpcs:ignore Magento2.Security.LanguageConstruct
|
|
69
|
+
exit(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Handle any fatal errors
|
|
76
|
+
*
|
|
77
|
+
* @return void
|
|
78
|
+
*/
|
|
79
|
+
function fatalErrorHandler()
|
|
80
|
+
{
|
|
81
|
+
$error = error_get_last();
|
|
82
|
+
if ($error !== null && $error['type'] === E_ERROR) {
|
|
83
|
+
http_response_code(500);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -4,10 +4,21 @@ const { execAsyncSpawn } = require('../../../util/exec-async-command');
|
|
|
4
4
|
const openBrowser = require('../../../util/open-browser');
|
|
5
5
|
const installDocker = require('./install');
|
|
6
6
|
const installDockerOnMac = require('./install-on-mac');
|
|
7
|
+
const { checkDockerPerformance } = require('./performance');
|
|
7
8
|
const { checkDockerSocketPermissions } = require('./permissions');
|
|
8
9
|
const checkDockerStatus = require('./running-status');
|
|
9
10
|
const getDockerVersion = require('./version');
|
|
10
11
|
|
|
12
|
+
const setVersionInContextTask = (task) => ({
|
|
13
|
+
task: (ctx) => {
|
|
14
|
+
if (ctx.platform === 'darwin' && ctx.dockerServerData && ctx.dockerServerData.Platform && ctx.dockerServerData.Platform.Name) {
|
|
15
|
+
task.title = `Using ${ctx.dockerServerData.Platform.Name} for Mac`;
|
|
16
|
+
} else {
|
|
17
|
+
task.title = `Using Docker version ${ctx.dockerVersion}`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
11
22
|
const dockerInstallPromptLinux = async (task) => {
|
|
12
23
|
const automaticallyInstallDocker = await task.prompt({
|
|
13
24
|
type: 'Confirm',
|
|
@@ -47,7 +58,6 @@ ${ logger.style.link('https://docs.create-magento-app.com/getting-started/prereq
|
|
|
47
58
|
};
|
|
48
59
|
|
|
49
60
|
/**
|
|
50
|
-
*
|
|
51
61
|
* @param {import('listr2').ListrTaskWrapper} task
|
|
52
62
|
*/
|
|
53
63
|
const dockerInstallPromptMacOS = async (task) => {
|
|
@@ -72,11 +82,7 @@ Would you like to install it automatically using brew cask or you prefer to inst
|
|
|
72
82
|
installDockerOnMac(),
|
|
73
83
|
checkDockerStatus(),
|
|
74
84
|
getDockerVersion(),
|
|
75
|
-
|
|
76
|
-
task: (ctx) => {
|
|
77
|
-
task.title = `Using Docker version ${ctx.dockerVersion}`;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
85
|
+
setVersionInContextTask(task)
|
|
80
86
|
]);
|
|
81
87
|
}
|
|
82
88
|
|
|
@@ -118,11 +124,7 @@ const checkDocker = () => ({
|
|
|
118
124
|
return task.newListr([
|
|
119
125
|
checkDockerStatus(),
|
|
120
126
|
getDockerVersion(),
|
|
121
|
-
|
|
122
|
-
task: (ctx) => {
|
|
123
|
-
task.title = `Using Docker version ${ctx.dockerVersion}`;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
127
|
+
setVersionInContextTask(task)
|
|
126
128
|
]);
|
|
127
129
|
}
|
|
128
130
|
});
|
|
@@ -133,7 +135,8 @@ const checkDocker = () => ({
|
|
|
133
135
|
module.exports = () => ({
|
|
134
136
|
task: (ctx, task) => task.newListr([
|
|
135
137
|
checkDockerSocketPermissions(),
|
|
136
|
-
checkDocker()
|
|
138
|
+
checkDocker(),
|
|
139
|
+
checkDockerPerformance()
|
|
137
140
|
], {
|
|
138
141
|
concurrent: false
|
|
139
142
|
})
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const os = require('os');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const semver = require('semver');
|
|
4
|
+
const getJsonfileData = require('../../../util/get-jsonfile-data');
|
|
5
|
+
const pathExists = require('../../../util/path-exists');
|
|
6
|
+
|
|
7
|
+
const dockerSettingsJsonPath = path.join(
|
|
8
|
+
os.homedir(),
|
|
9
|
+
'Library',
|
|
10
|
+
'Group Containers',
|
|
11
|
+
'group.com.docker',
|
|
12
|
+
'settings.json'
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
17
|
+
*/
|
|
18
|
+
const checkDockerPerformance = () => ({
|
|
19
|
+
title: 'Checking Docker Performance',
|
|
20
|
+
// eslint-disable-next-line no-return-await
|
|
21
|
+
skip: async (ctx) => ctx.platform !== 'darwin' || (ctx.platform === 'darwin' && !(await pathExists(dockerSettingsJsonPath))),
|
|
22
|
+
task: async (ctx, task) => {
|
|
23
|
+
const dockerSettings = await getJsonfileData(dockerSettingsJsonPath);
|
|
24
|
+
|
|
25
|
+
if (!dockerSettings) {
|
|
26
|
+
task.skip();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const dockerForMacVersionMatch = ctx.dockerServerData.Platform.Name.match(/(\d+\.\d+\.\d+)/i);
|
|
31
|
+
|
|
32
|
+
const dockerForMacVersion = dockerForMacVersionMatch && dockerForMacVersionMatch[1];
|
|
33
|
+
|
|
34
|
+
if (ctx.arch === 'arm64'
|
|
35
|
+
&& semver.gt('12.2.0', ctx.platformVersion)
|
|
36
|
+
&& semver.gt(dockerForMacVersion, '4.6.0')) {
|
|
37
|
+
if (!dockerSettings.useVirtualizationFrameworkVirtioFS) {
|
|
38
|
+
task.title = 'Performance is not optimal. VirtioFS is not enabled.';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (ctx.arch === 'x64'
|
|
43
|
+
&& semver.gt('12.3.0', ctx.platformVersion)
|
|
44
|
+
&& semver.gt(dockerForMacVersion, '4.6.0')) {
|
|
45
|
+
if (!dockerSettings.useVirtualizationFrameworkVirtioFS) {
|
|
46
|
+
task.title = 'Performance is not optimal. VirtioFS is not enabled.';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
checkDockerPerformance
|
|
54
|
+
};
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
const UnknownError = require('../../../errors/unknown-error');
|
|
2
|
-
const {
|
|
2
|
+
const { version } = require('../../docker/api');
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
6
6
|
*/
|
|
7
7
|
const getDockerVersion = () => ({
|
|
8
8
|
task: async (ctx) => {
|
|
9
|
-
const
|
|
10
|
-
|
|
9
|
+
const dockerVersion = await version({
|
|
10
|
+
formatToJSON: true
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
ctx.dockerVersion = dockerVersion;
|
|
13
|
+
if (dockerVersion) {
|
|
14
|
+
ctx.dockerServerData = dockerVersion.Server;
|
|
15
|
+
ctx.dockerClientData = dockerVersion.Client;
|
|
16
|
+
ctx.dockerVersion = dockerVersion.Server.Version;
|
|
17
17
|
} else {
|
|
18
|
-
throw new UnknownError(`Got unexpected result during Docker version retrieval!\n\n${
|
|
18
|
+
throw new UnknownError(`Got unexpected result during Docker version retrieval!\n\n${ dockerVersion }`);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
});
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
const checkPlatform = require('./platform');
|
|
2
|
-
const
|
|
3
|
-
const
|
|
2
|
+
const { checkComposerCredentials } = require('./composer-credentials');
|
|
3
|
+
const localAuthJson = require('../composer/local-auth-json');
|
|
4
4
|
const checkDocker = require('./docker');
|
|
5
5
|
const checkNodeVersion = require('./node-version');
|
|
6
|
-
const checkPHPVersion = require('./php-version');
|
|
7
6
|
const checkRosetta = require('./rosetta');
|
|
8
7
|
|
|
9
8
|
/**
|
|
@@ -12,21 +11,19 @@ const checkRosetta = require('./rosetta');
|
|
|
12
11
|
const checkRequirements = () => ({
|
|
13
12
|
title: 'Checking requirements',
|
|
14
13
|
task: (ctx, task) => task.newListr([
|
|
15
|
-
// checking if user is on supported platform
|
|
16
|
-
checkPlatform(),
|
|
17
14
|
// check if rosetta 2 is installed or not on m1 macs
|
|
18
15
|
checkRosetta(),
|
|
16
|
+
// checking if user is on supported platform
|
|
17
|
+
checkPlatform(),
|
|
19
18
|
// check the Docker installation
|
|
20
19
|
checkDocker(),
|
|
21
20
|
// check for Node.js version
|
|
22
21
|
checkNodeVersion(),
|
|
23
|
-
// check the PHPBrew installation
|
|
24
|
-
checkPHPbrew(),
|
|
25
22
|
// check installed PHP version
|
|
26
|
-
checkPHPVersion(),
|
|
23
|
+
// checkPHPVersion(),
|
|
27
24
|
// check for COMPOSER_AUTH or auth.json
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
localAuthJson(),
|
|
26
|
+
checkComposerCredentials()
|
|
30
27
|
], {
|
|
31
28
|
concurrent: false,
|
|
32
29
|
exitOnError: true,
|