@scandipwa/magento-scripts 1.16.1 → 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 +31 -63
- 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/install-magento.js +10 -9
- package/lib/tasks/magento/setup-magento/migrate-database.js +7 -8
- package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
- package/lib/tasks/magento/setup-magento/varnish-config.js +6 -4
- package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
- package/lib/tasks/mysql/connect-to-mysql.js +34 -21
- package/lib/tasks/mysql/import-dump-to-mysql.js +46 -3
- 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 +5 -8
- package/lib/tasks/requirements/php-version.js +8 -116
- package/lib/tasks/requirements/platform.js +12 -25
- package/lib/tasks/start.js +38 -47
- 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 -103
- 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
|
@@ -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
|
/**
|
|
@@ -20,13 +19,11 @@ const checkRequirements = () => ({
|
|
|
20
19
|
checkDocker(),
|
|
21
20
|
// check for Node.js version
|
|
22
21
|
checkNodeVersion(),
|
|
23
|
-
// check the PHPBrew installation
|
|
24
|
-
checkPHPbrew(),
|
|
25
22
|
// check installed PHP version
|
|
26
|
-
checkPHPVersion(),
|
|
23
|
+
// checkPHPVersion(),
|
|
27
24
|
// check for COMPOSER_AUTH or auth.json
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
localAuthJson(),
|
|
26
|
+
checkComposerCredentials()
|
|
30
27
|
], {
|
|
31
28
|
concurrent: false,
|
|
32
29
|
exitOnError: true,
|
|
@@ -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 {
|
|
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
|
|
8
|
+
title: 'Checking container PHP version',
|
|
101
9
|
task: async (ctx, task) => {
|
|
102
|
-
const
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
|
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 (
|
|
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
|
|
package/lib/tasks/start.js
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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,9 +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');
|
|
35
33
|
const waitingForVarnish = require('./magento/setup-magento/waiting-for-varnish');
|
|
34
|
+
const checkPHPVersion = require('./requirements/php-version');
|
|
35
|
+
const volumes = require('./docker/volumes');
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* @type {() => import('listr2').ListrTask<import('../../typings/context').ListrContext>}
|
|
@@ -63,15 +63,8 @@ const retrieveProjectConfiguration = () => ({
|
|
|
63
63
|
const stopProject = () => ({
|
|
64
64
|
title: 'Stopping project',
|
|
65
65
|
task: (ctx, task) => task.newListr([
|
|
66
|
-
stopContainers()
|
|
67
|
-
|
|
68
|
-
], {
|
|
69
|
-
concurrent: true,
|
|
70
|
-
rendererOptions: {
|
|
71
|
-
collapse: true,
|
|
72
|
-
showTimer: false
|
|
73
|
-
}
|
|
74
|
-
}),
|
|
66
|
+
stopContainers()
|
|
67
|
+
]),
|
|
75
68
|
options: {
|
|
76
69
|
showTimer: false
|
|
77
70
|
}
|
|
@@ -104,24 +97,22 @@ const retrieveFreshProjectConfiguration = () => ({
|
|
|
104
97
|
const configureProject = () => ({
|
|
105
98
|
title: 'Configuring project',
|
|
106
99
|
task: (ctx, task) => task.newListr([
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
pullImages(),
|
|
101
|
+
dockerNetwork.tasks.createNetwork(),
|
|
102
|
+
volumes.createVolumes(),
|
|
109
103
|
{
|
|
110
104
|
task: (ctx, task) => task.newListr([
|
|
111
|
-
|
|
112
|
-
|
|
105
|
+
buildProjectImage(),
|
|
106
|
+
buildDebugProjectImage()
|
|
113
107
|
], {
|
|
114
|
-
concurrent: true
|
|
115
|
-
exitOnError: true
|
|
108
|
+
concurrent: true
|
|
116
109
|
})
|
|
117
110
|
},
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
installPrestissimo(),
|
|
111
|
+
checkPHPVersion(),
|
|
112
|
+
getComposerVersionTask(),
|
|
113
|
+
prepareFileSystem(),
|
|
122
114
|
installMagentoProject(),
|
|
123
115
|
enableMagentoComposerPlugins(),
|
|
124
|
-
startPhpFpm(),
|
|
125
116
|
startServices(),
|
|
126
117
|
connectToMySQL()
|
|
127
118
|
])
|
|
@@ -134,22 +125,22 @@ const finishProjectConfiguration = () => ({
|
|
|
134
125
|
title: 'Finishing project configuration',
|
|
135
126
|
skip: ({ skipSetup }) => skipSetup,
|
|
136
127
|
task: (ctx, task) => task.newListr([
|
|
137
|
-
{
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
},
|
|
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
|
+
// },
|
|
153
144
|
setupThemes(),
|
|
154
145
|
waitingForVarnish()
|
|
155
146
|
], {
|
|
@@ -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(
|
|
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(
|
|
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())}`)
|