@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
|
@@ -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,8 +30,9 @@ const enableMagentoComposerPlugins = require('./magento/enable-magento-composer-
|
|
|
30
30
|
const getIsWsl = require('../util/is-wsl');
|
|
31
31
|
const checkForXDGOpen = require('../util/xdg-open-exists');
|
|
32
32
|
const { getInstanceMetadata, constants: { WEB_LOCATION_TITLE } } = require('../util/instance-metadata');
|
|
33
|
-
const
|
|
34
|
-
const
|
|
33
|
+
const waitingForVarnish = require('./magento/setup-magento/waiting-for-varnish');
|
|
34
|
+
const checkPHPVersion = require('./requirements/php-version');
|
|
35
|
+
const volumes = require('./docker/volumes');
|
|
35
36
|
|
|
36
37
|
/**
|
|
37
38
|
* @type {() => import('listr2').ListrTask<import('../../typings/context').ListrContext>}
|
|
@@ -62,15 +63,8 @@ const retrieveProjectConfiguration = () => ({
|
|
|
62
63
|
const stopProject = () => ({
|
|
63
64
|
title: 'Stopping project',
|
|
64
65
|
task: (ctx, task) => task.newListr([
|
|
65
|
-
stopContainers()
|
|
66
|
-
|
|
67
|
-
], {
|
|
68
|
-
concurrent: true,
|
|
69
|
-
rendererOptions: {
|
|
70
|
-
collapse: true,
|
|
71
|
-
showTimer: false
|
|
72
|
-
}
|
|
73
|
-
}),
|
|
66
|
+
stopContainers()
|
|
67
|
+
]),
|
|
74
68
|
options: {
|
|
75
69
|
showTimer: false
|
|
76
70
|
}
|
|
@@ -103,25 +97,23 @@ const retrieveFreshProjectConfiguration = () => ({
|
|
|
103
97
|
const configureProject = () => ({
|
|
104
98
|
title: 'Configuring project',
|
|
105
99
|
task: (ctx, task) => task.newListr([
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
pullImages(),
|
|
101
|
+
dockerNetwork.tasks.createNetwork(),
|
|
102
|
+
volumes.createVolumes(),
|
|
108
103
|
{
|
|
109
104
|
task: (ctx, task) => task.newListr([
|
|
110
|
-
|
|
111
|
-
|
|
105
|
+
buildProjectImage(),
|
|
106
|
+
buildDebugProjectImage()
|
|
112
107
|
], {
|
|
113
|
-
concurrent: true
|
|
114
|
-
exitOnError: true
|
|
108
|
+
concurrent: true
|
|
115
109
|
})
|
|
116
110
|
},
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
installPrestissimo(),
|
|
111
|
+
checkPHPVersion(),
|
|
112
|
+
getComposerVersionTask(),
|
|
113
|
+
prepareFileSystem(),
|
|
121
114
|
installMagentoProject(),
|
|
122
115
|
enableMagentoComposerPlugins(),
|
|
123
116
|
startServices(),
|
|
124
|
-
startPhpFpm(),
|
|
125
117
|
connectToMySQL()
|
|
126
118
|
])
|
|
127
119
|
});
|
|
@@ -133,23 +125,24 @@ const finishProjectConfiguration = () => ({
|
|
|
133
125
|
title: 'Finishing project configuration',
|
|
134
126
|
skip: ({ skipSetup }) => skipSetup,
|
|
135
127
|
task: (ctx, task) => task.newListr([
|
|
136
|
-
{
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
},
|
|
152
|
-
setupThemes()
|
|
128
|
+
// {
|
|
129
|
+
// skip: (ctx) => !ctx.importDb,
|
|
130
|
+
// task: (ctx, task) => {
|
|
131
|
+
// task.title = 'Importing database dump';
|
|
132
|
+
// return task.newListr([
|
|
133
|
+
// dumpThemeConfig(),
|
|
134
|
+
// importDumpToMySQL(),
|
|
135
|
+
// fixDB(),
|
|
136
|
+
// restoreThemeConfig(),
|
|
137
|
+
// setupMagento()
|
|
138
|
+
// ], {
|
|
139
|
+
// concurrent: false,
|
|
140
|
+
// exitOnError: true
|
|
141
|
+
// });
|
|
142
|
+
// }
|
|
143
|
+
// },
|
|
144
|
+
setupThemes(),
|
|
145
|
+
waitingForVarnish()
|
|
153
146
|
], {
|
|
154
147
|
rendererOptions: {
|
|
155
148
|
collapse: false
|
|
@@ -25,19 +25,16 @@ const parsePort = (port) => {
|
|
|
25
25
|
const prettyStatus = async (ctx) => {
|
|
26
26
|
const {
|
|
27
27
|
config: {
|
|
28
|
-
baseConfig
|
|
29
|
-
php,
|
|
30
|
-
composer
|
|
28
|
+
baseConfig
|
|
31
29
|
},
|
|
32
30
|
magentoVersion,
|
|
33
31
|
dockerVersion,
|
|
34
|
-
PHPBrewVersion,
|
|
35
32
|
platform,
|
|
36
33
|
platformVersion,
|
|
37
34
|
containers
|
|
38
35
|
} = ctx;
|
|
39
36
|
const projectCreatedAt = getProjectCreatedAt();
|
|
40
|
-
const composerVersion = await getComposerVersion(
|
|
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())}`)
|
package/lib/tasks/stop.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const { stopServices } = require('./docker');
|
|
2
2
|
const getMagentoVersionConfig = require('../config/get-magento-version-config');
|
|
3
|
-
const { stopPhpFpm } = require('./php-fpm');
|
|
4
3
|
const getProjectConfiguration = require('../config/get-project-configuration');
|
|
5
4
|
const checkConfigurationFile = require('../config/check-configuration-file');
|
|
6
5
|
|
|
@@ -13,7 +12,6 @@ const stop = () => ({
|
|
|
13
12
|
getMagentoVersionConfig(),
|
|
14
13
|
checkConfigurationFile(),
|
|
15
14
|
getProjectConfiguration(),
|
|
16
|
-
stopPhpFpm(),
|
|
17
15
|
stopServices()
|
|
18
16
|
], {
|
|
19
17
|
concurrent: false,
|
|
@@ -18,7 +18,7 @@ const installTheme = (theme) => ({
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
try {
|
|
21
|
-
await runComposerCommand(`require ${theme.composerData.name}`, {
|
|
21
|
+
await runComposerCommand(ctx, `require ${theme.composerData.name}`, {
|
|
22
22
|
magentoVersion,
|
|
23
23
|
callback: !verbose ? undefined : (t) => {
|
|
24
24
|
task.output = t;
|
|
@@ -9,7 +9,7 @@ const runComposerCommand = require('../../util/run-composer');
|
|
|
9
9
|
const symlinkTheme = (theme) => ({
|
|
10
10
|
title: 'Setting symbolic link for theme in composer.json',
|
|
11
11
|
task: async (ctx, task) => {
|
|
12
|
-
const {
|
|
12
|
+
const { verbose = false } = ctx;
|
|
13
13
|
const composerJsonData = await getJsonfileData(path.join(process.cwd(), 'composer.json'));
|
|
14
14
|
|
|
15
15
|
if (!composerJsonData.repositories) {
|
|
@@ -27,8 +27,7 @@ const symlinkTheme = (theme) => ({
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
try {
|
|
30
|
-
await runComposerCommand(`config repo.scandipwa path ${theme.absoluteThemePath}`, {
|
|
31
|
-
magentoVersion,
|
|
30
|
+
await runComposerCommand(ctx, `config repo.scandipwa path ${theme.absoluteThemePath}`, {
|
|
32
31
|
callback: !verbose ? undefined : (t) => {
|
|
33
32
|
task.output = t;
|
|
34
33
|
}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
2
|
const UnknownError = require('../errors/unknown-error');
|
|
3
|
-
const
|
|
3
|
+
const { runPHPContainerCommand } = require('../tasks/php/php-container');
|
|
4
|
+
const pathExists = require('./path-exists');
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* @param {import('../../typings/context').ListrContext} ctx
|
|
8
|
+
*/
|
|
9
|
+
const configPhpToJson = async (ctx) => {
|
|
10
|
+
const configPhpOnSystemPath = path.join(ctx.config.baseConfig.magentoDir, 'app', 'etc', 'config.php');
|
|
11
|
+
const configPhpInContainerPath = path.join(ctx.config.baseConfig.containerMagentoDir, 'app', 'etc', 'config.php');
|
|
12
|
+
if (!await pathExists(configPhpOnSystemPath)) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const { code, result } = await runPHPContainerCommand(ctx, `php -r "echo json_encode(require '${configPhpInContainerPath}');"`, {
|
|
16
|
+
withCode: true
|
|
8
17
|
});
|
|
9
18
|
|
|
10
19
|
if (code !== 0) {
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {import('./types').DockerfileInstruction[]} instructions
|
|
4
|
+
*/
|
|
5
|
+
const buildInstructions = (instructions) => {
|
|
6
|
+
/**
|
|
7
|
+
* @type {string[]}
|
|
8
|
+
*/
|
|
9
|
+
const dockerFileInstructions = [];
|
|
10
|
+
|
|
11
|
+
for (const instruction of instructions) {
|
|
12
|
+
switch (instruction.type) {
|
|
13
|
+
case 'COPY':
|
|
14
|
+
case 'ADD': {
|
|
15
|
+
let addInstruction = instruction.type;
|
|
16
|
+
|
|
17
|
+
if (instruction.type === 'COPY' && instruction.from) {
|
|
18
|
+
addInstruction += ` --from=${instruction.from}`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (instruction.chown) {
|
|
22
|
+
addInstruction += ` --chown=${instruction.chown}`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
addInstruction += ` ${instruction.src.join(' ')}`;
|
|
26
|
+
addInstruction += ` ${instruction.dest}`;
|
|
27
|
+
|
|
28
|
+
dockerFileInstructions.push(addInstruction);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
case 'ARG': {
|
|
32
|
+
let argInstruction = instruction.type;
|
|
33
|
+
|
|
34
|
+
argInstruction += ` ${instruction.name}`;
|
|
35
|
+
|
|
36
|
+
if (instruction.defaultValue) {
|
|
37
|
+
argInstruction += `=${instruction.defaultValue}`;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
dockerFileInstructions.push(argInstruction);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
case 'RUN':
|
|
44
|
+
case 'ENTRYPOINT':
|
|
45
|
+
case 'CMD': {
|
|
46
|
+
let cmdInstruction = instruction.type;
|
|
47
|
+
|
|
48
|
+
if (typeof instruction.command === 'string') {
|
|
49
|
+
cmdInstruction += ` ${instruction.command}`;
|
|
50
|
+
} else if (Array.isArray(instruction.command) && instruction.command.every((c) => typeof c === 'string')) {
|
|
51
|
+
cmdInstruction += ` ["${instruction.command.join('", "')}"]`;
|
|
52
|
+
} else {
|
|
53
|
+
throw new Error(`Unknown command type, it must be string or array of strings! ${instruction.command}`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
dockerFileInstructions.push(cmdInstruction);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
case 'COMMENT': {
|
|
61
|
+
const commentInstruction = `# ${instruction.comment}`;
|
|
62
|
+
|
|
63
|
+
dockerFileInstructions.push(commentInstruction);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case 'ENV': {
|
|
67
|
+
let envInstruction = instruction.type;
|
|
68
|
+
|
|
69
|
+
envInstruction += ` ${instruction.name}="${instruction.value}"`;
|
|
70
|
+
|
|
71
|
+
dockerFileInstructions.push(envInstruction);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case 'EXPOSE': {
|
|
75
|
+
let exposeInstruction = instruction.type;
|
|
76
|
+
|
|
77
|
+
if (instruction.protocol) {
|
|
78
|
+
exposeInstruction += ` ${instruction.port}/${instruction.protocol}`;
|
|
79
|
+
} else {
|
|
80
|
+
exposeInstruction += ` ${instruction.port}`;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
dockerFileInstructions.push(exposeInstruction);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case 'FROM': {
|
|
87
|
+
let fromInstruction = instruction.type;
|
|
88
|
+
|
|
89
|
+
if (instruction.platform) {
|
|
90
|
+
fromInstruction += ` --platform=${instruction.platform}`;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
fromInstruction += ` ${instruction.image}:${instruction.tag || 'latest'}`;
|
|
94
|
+
|
|
95
|
+
if (instruction.name) {
|
|
96
|
+
fromInstruction += ` AS ${instruction.name}`;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
dockerFileInstructions.push(fromInstruction);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'HEALTHCHECK': {
|
|
103
|
+
let healthCheckInstruction = instruction.type;
|
|
104
|
+
|
|
105
|
+
if (instruction.interval) {
|
|
106
|
+
healthCheckInstruction += ` --interval=${instruction.interval}`;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (instruction.retries) {
|
|
110
|
+
healthCheckInstruction += ` --retries=${instruction.retries}`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (instruction.startPeriod) {
|
|
114
|
+
healthCheckInstruction += ` --start-period=${instruction.startPeriod}`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (instruction.timeout) {
|
|
118
|
+
healthCheckInstruction += ` --timeout=${instruction.timeout}`;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
healthCheckInstruction += ` ${instruction.command}`;
|
|
122
|
+
|
|
123
|
+
dockerFileInstructions.push(healthCheckInstruction);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case 'LABEL': {
|
|
127
|
+
Object.entries(instruction.labels).forEach(([name, value]) => {
|
|
128
|
+
let labelInstruction = instruction.type;
|
|
129
|
+
labelInstruction += ` "${name}"="${value}"`;
|
|
130
|
+
dockerFileInstructions.push(labelInstruction);
|
|
131
|
+
});
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
case 'ONBUILD': {
|
|
135
|
+
let onBuildInstruction = instruction.type;
|
|
136
|
+
|
|
137
|
+
onBuildInstruction += ` ${instruction.instruction}`;
|
|
138
|
+
|
|
139
|
+
dockerFileInstructions.push(onBuildInstruction);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case 'SHELL': {
|
|
143
|
+
let shellInstruction = instruction.type;
|
|
144
|
+
|
|
145
|
+
shellInstruction += ` ["${instruction.exec.join('", "')}"]`;
|
|
146
|
+
|
|
147
|
+
dockerFileInstructions.push(shellInstruction);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
case 'STOPSIGNAL': {
|
|
151
|
+
let stopSignalInstruction = instruction.type;
|
|
152
|
+
|
|
153
|
+
stopSignalInstruction += ` ${instruction.signal}`;
|
|
154
|
+
|
|
155
|
+
dockerFileInstructions.push(stopSignalInstruction);
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
case 'USER': {
|
|
159
|
+
let userInstruction = instruction.type;
|
|
160
|
+
|
|
161
|
+
userInstruction += ` ${instruction.user}`;
|
|
162
|
+
|
|
163
|
+
dockerFileInstructions.push(userInstruction);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case 'VOLUME': {
|
|
167
|
+
let volumeInstruction = instruction.type;
|
|
168
|
+
|
|
169
|
+
if (typeof instruction.volume === 'string') {
|
|
170
|
+
volumeInstruction += ` ${instruction.volume}`;
|
|
171
|
+
} else if (Array.isArray(instruction.volume) && instruction.volume.every((c) => typeof c === 'string')) {
|
|
172
|
+
volumeInstruction += ` ["${instruction.volume.join('", "')}"]`;
|
|
173
|
+
} else {
|
|
174
|
+
throw new Error(`Unknown volume type, it must be string or array of strings! ${instruction.volume}`);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
dockerFileInstructions.push(volumeInstruction);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
case 'WORKDIR': {
|
|
181
|
+
const workDirInstruction = `${instruction.type} ${instruction.workdir}`;
|
|
182
|
+
|
|
183
|
+
dockerFileInstructions.push(workDirInstruction);
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
default: {
|
|
187
|
+
throw new Error(`I don't know instruction with type ${instruction.type}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return dockerFileInstructions.join('\n');
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
module.exports = {
|
|
196
|
+
buildInstructions
|
|
197
|
+
};
|