@scandipwa/magento-scripts 1.16.0 → 2.0.0-alpha.1
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 +4 -6
- package/lib/commands/execute.js +29 -4
- package/lib/commands/import-db.js +1 -1
- package/lib/commands/logs.js +1 -1
- package/lib/commands/start.js +38 -20
- package/lib/commands/status.js +2 -0
- package/lib/config/docker.js +98 -83
- 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 +2 -6
- package/lib/config/services/elasticsearch/base-repo.js +3 -0
- package/lib/config/services/elasticsearch/versions/elasticsearch-6.8.js +23 -0
- package/lib/config/services/elasticsearch/versions/index.js +5 -0
- package/lib/config/templates/magentorc.template +5 -5
- package/lib/config/templates/mariadb.template.cnf +191 -0
- 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 +10 -5
- package/lib/config/versions/magento-2.3.1.js +10 -5
- package/lib/config/versions/magento-2.3.2-p1.js +43 -0
- package/lib/config/versions/magento-2.3.2-p2.js +10 -5
- package/lib/config/versions/magento-2.3.2.js +10 -5
- package/lib/config/versions/magento-2.3.3-p1.js +10 -5
- package/lib/config/versions/magento-2.3.3.js +10 -5
- package/lib/config/versions/magento-2.3.4-p1.js +43 -0
- package/lib/config/versions/magento-2.3.4-p2.js +10 -5
- package/lib/config/versions/magento-2.3.4.js +10 -5
- 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 +3 -3
- package/lib/tasks/composer/index.js +14 -104
- package/lib/tasks/database/connect-to-database.js +117 -0
- package/lib/tasks/database/create-magento-database.js +18 -0
- package/lib/tasks/{mysql → database}/dump-theme-config.js +3 -3
- package/lib/tasks/{mysql → database}/fix-db.js +2 -2
- package/lib/tasks/{mysql/import-dump-to-mysql.js → database/import-dump-to-database.js} +65 -22
- package/lib/tasks/{mysql → database}/import-remote-db/index.js +0 -0
- package/lib/tasks/{mysql/import-remote-db/ssh/mysqldump-command.js → database/import-remote-db/ssh/database-dump-command.js} +2 -2
- package/lib/tasks/{mysql → database}/import-remote-db/ssh/index.js +0 -0
- package/lib/tasks/{mysql → database}/import-remote-db/ssh/readymage.js +4 -4
- package/lib/tasks/{mysql → database}/import-remote-db/ssh/regular-server.js +2 -2
- package/lib/tasks/{mysql → database}/index.js +2 -2
- package/lib/tasks/{mysql → database}/magento-tables.js +0 -0
- package/lib/tasks/{mysql → database}/restore-theme-config.js +4 -4
- 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 +15 -10
- package/lib/tasks/docker/convert-mysql-to-mariadb.js +284 -0
- 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/volume/index.js +8 -0
- package/lib/tasks/docker/{volumes.js → volume/tasks.js} +5 -19
- package/lib/tasks/docker/volume/volume-api.d.ts +39 -0
- package/lib/tasks/docker/volume/volume-api.js +66 -0
- package/lib/tasks/execute/index.js +5 -2
- package/lib/tasks/file-system/create-mariadb-config.js +23 -0
- 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 +5 -2
- package/lib/tasks/import-dump.js +6 -6
- package/lib/tasks/link.js +5 -4
- 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 +7 -3
- package/lib/tasks/magento/setup-magento/create-admin.js +5 -6
- package/lib/tasks/magento/setup-magento/delete-admin-users.js +2 -2
- package/lib/tasks/magento/setup-magento/delete-customers.js +4 -4
- package/lib/tasks/magento/setup-magento/delete-orders.js +4 -4
- 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/increase-admin-session-lifetime.js +2 -2
- package/lib/tasks/magento/setup-magento/index.js +3 -3
- package/lib/tasks/magento/setup-magento/install-magento.js +47 -40
- package/lib/tasks/magento/setup-magento/migrate-database.js +7 -14
- package/lib/tasks/magento/setup-magento/set-base-url.js +2 -2
- package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
- package/lib/tasks/magento/setup-magento/set-url-rewrite.js +2 -2
- package/lib/tasks/magento/setup-magento/varnish-config.js +11 -9
- package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
- package/lib/tasks/php/php-container.js +108 -0
- package/lib/tasks/php/update-env-php.js +39 -21
- package/lib/tasks/php/update-env.php +66 -61
- 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 +24 -51
- package/lib/tasks/status/index.js +8 -12
- package/lib/tasks/stop.js +0 -2
- package/lib/tasks/theme/install-theme.js +1 -1
- package/lib/tasks/theme/link-theme.js +2 -2
- package/lib/tasks/theme/symlink-theme.js +2 -3
- package/lib/util/config-file-validator.js +27 -13
- package/lib/util/config-php-json.js +13 -4
- package/lib/util/database.js +7 -7
- 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/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 +7 -13
- package/typings/index.d.ts +67 -85
- package/yarn-error.log +9660 -0
- 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/mysql/connect-to-mysql.js +0 -114
- package/lib/tasks/mysql/create-magento-database.js +0 -18
- 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
|
@@ -10,8 +10,8 @@ const setUrlRewrite = require('./set-url-rewrite');
|
|
|
10
10
|
const increaseAdminSessionLifetime = require('./increase-admin-session-lifetime');
|
|
11
11
|
const magentoTask = require('../../../util/magento-task');
|
|
12
12
|
const urnHighlighter = require('./urn-highlighter');
|
|
13
|
-
const waitingForVarnish = require('./waiting-for-varnish');
|
|
14
13
|
const adjustFullPageCache = require('./adjust-full-page-cache');
|
|
14
|
+
const updateEnvPHP = require('../../php/update-env-php');
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* @param {Object} [options]
|
|
@@ -33,6 +33,7 @@ const setupMagento = (options = {}) => ({
|
|
|
33
33
|
return task.newListr([
|
|
34
34
|
flushRedisConfig(),
|
|
35
35
|
waitingForRedis(),
|
|
36
|
+
updateEnvPHP(),
|
|
36
37
|
migrateDatabase(),
|
|
37
38
|
{
|
|
38
39
|
title: 'Configuring Magento settings',
|
|
@@ -50,8 +51,7 @@ const setupMagento = (options = {}) => ({
|
|
|
50
51
|
disable2fa(),
|
|
51
52
|
urnHighlighter(),
|
|
52
53
|
adjustFullPageCache(),
|
|
53
|
-
magentoTask('cache:flush')
|
|
54
|
-
waitingForVarnish()
|
|
54
|
+
magentoTask('cache:flush')
|
|
55
55
|
], {
|
|
56
56
|
concurrent: false,
|
|
57
57
|
exitOnError: true,
|
|
@@ -24,50 +24,58 @@ const installMagento = ({ isDbEmpty = false } = {}) => ({
|
|
|
24
24
|
magentoConfiguration
|
|
25
25
|
},
|
|
26
26
|
ports,
|
|
27
|
-
|
|
27
|
+
databaseConnection
|
|
28
28
|
} = ctx;
|
|
29
29
|
|
|
30
|
-
const
|
|
31
|
-
|
|
30
|
+
const isLinux = ctx.platform === 'linux';
|
|
31
|
+
const isNativeLinux = isLinux && !ctx.isWsl;
|
|
32
|
+
const hostMachine = isNativeLinux ? '127.0.0.1' : 'host.docker.internal';
|
|
33
|
+
|
|
34
|
+
const [tableResponse] = await databaseConnection.query(
|
|
35
|
+
'SELECT * FROM information_schema.tables WHERE table_schema = \'magento\' AND table_name = \'admin_user\' LIMIT 1;'
|
|
32
36
|
);
|
|
33
37
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
if (tableResponse.length > 0) {
|
|
39
|
+
const response = await databaseConnection.query(
|
|
40
|
+
'select * from admin_user where username=\'admin\';'
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const usersWithUsernameAdmin = response && response.length > 0 && response[0];
|
|
44
|
+
|
|
45
|
+
if (usersWithUsernameAdmin && usersWithUsernameAdmin.length > 0) {
|
|
46
|
+
const confirmDeleteAdminUsers = await task.prompt({
|
|
47
|
+
type: 'Select',
|
|
48
|
+
message: `In order to install Magento in database you will need to delete admin user with username ${logger.style.command('admin')}`,
|
|
49
|
+
choices: [
|
|
50
|
+
{
|
|
51
|
+
name: 'delete-all',
|
|
52
|
+
message: `Delete all admin users (${logger.style.code('Recommended')})`
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'delete-only-admin',
|
|
56
|
+
message: `Delete only admin user with ${logger.style.command('admin')} username`
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
});
|
|
51
60
|
|
|
52
|
-
|
|
61
|
+
await databaseConnection.query('SET FOREIGN_KEY_CHECKS = 0;');
|
|
53
62
|
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
if (confirmDeleteAdminUsers === 'delete-all') {
|
|
64
|
+
await databaseConnection.query(`
|
|
56
65
|
TRUNCATE TABLE admin_user;
|
|
57
66
|
`);
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
} else {
|
|
68
|
+
await databaseConnection.query(`
|
|
60
69
|
DELETE FROM admin_user WHERE username='admin';
|
|
61
70
|
`);
|
|
62
|
-
|
|
71
|
+
}
|
|
63
72
|
|
|
64
|
-
|
|
73
|
+
await databaseConnection.query('SET FOREIGN_KEY_CHECKS = 1;');
|
|
74
|
+
}
|
|
65
75
|
}
|
|
66
76
|
|
|
67
|
-
const {
|
|
68
|
-
const envPhpData = await envPhpToJson(
|
|
69
|
-
magentoVersion: ctx.magentoVersion
|
|
70
|
-
});
|
|
77
|
+
const { mariadb: { env } } = docker.getContainers(ports);
|
|
78
|
+
const envPhpData = await envPhpToJson(ctx);
|
|
71
79
|
|
|
72
80
|
const envPhpHaveEncryptionKey = envPhpData && envPhpData.crypt && envPhpData.crypt.key && envPhpData.crypt.key;
|
|
73
81
|
|
|
@@ -89,7 +97,7 @@ const installMagento = ({ isDbEmpty = false } = {}) => ({
|
|
|
89
97
|
|
|
90
98
|
const elasticsearchConfiguration = ` \
|
|
91
99
|
--search-engine='elasticsearch7' \
|
|
92
|
-
--elasticsearch-host='
|
|
100
|
+
--elasticsearch-host='${ hostMachine }' \
|
|
93
101
|
--elasticsearch-port='${ ports.elasticsearch }'`;
|
|
94
102
|
|
|
95
103
|
/**
|
|
@@ -108,25 +116,24 @@ const installMagento = ({ isDbEmpty = false } = {}) => ({
|
|
|
108
116
|
${ !isMagento23 ? elasticsearchConfiguration : '' } \
|
|
109
117
|
${encryptionKeyOption || ''} \
|
|
110
118
|
--session-save=redis \
|
|
111
|
-
--session-save-redis-host='
|
|
119
|
+
--session-save-redis-host='${ hostMachine }' \
|
|
112
120
|
--session-save-redis-port='${ ports.redis }' \
|
|
113
121
|
--session-save-redis-log-level='3' \
|
|
114
122
|
--session-save-redis-max-concurrency='30' \
|
|
115
123
|
--session-save-redis-db='1' \
|
|
116
124
|
--session-save-redis-disable-locking='1' \
|
|
117
125
|
--cache-backend='redis' \
|
|
118
|
-
--cache-backend-redis-server='
|
|
126
|
+
--cache-backend-redis-server='${ hostMachine }' \
|
|
119
127
|
--cache-backend-redis-port='${ ports.redis }' \
|
|
120
128
|
--cache-backend-redis-db='0't \
|
|
121
|
-
--db-host='
|
|
122
|
-
--db-name='${ env.
|
|
123
|
-
--db-user='${ env.
|
|
124
|
-
--db-password='${ env.
|
|
129
|
+
--db-host='${ hostMachine }:${ ports.mariadb }' \
|
|
130
|
+
--db-name='${ env.MARIADB_DATABASE }' \
|
|
131
|
+
--db-user='${ env.MARIADB_USER }' \
|
|
132
|
+
--db-password='${ env.MARIADB_PASSWORD }' \
|
|
125
133
|
--backend-frontname='${ magentoConfiguration.adminuri }' \
|
|
126
134
|
--no-interaction`;
|
|
127
135
|
|
|
128
|
-
await runMagentoCommand(command, {
|
|
129
|
-
magentoVersion,
|
|
136
|
+
await runMagentoCommand(ctx, command, {
|
|
130
137
|
throwNonZeroCode: true,
|
|
131
138
|
callback: !ctx.verbose ? undefined : (t) => {
|
|
132
139
|
task.output = t;
|
|
@@ -8,6 +8,7 @@ const upgradeMagento = require('./upgrade-magento');
|
|
|
8
8
|
const varnishConfigSetup = require('./varnish-config');
|
|
9
9
|
const pathExists = require('../../../util/path-exists');
|
|
10
10
|
const updateEnvPHP = require('../../php/update-env-php');
|
|
11
|
+
const UnknownError = require('../../../errors/unknown-error');
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* @param {Object} [options]
|
|
@@ -17,12 +18,9 @@ const updateEnvPHP = require('../../php/update-env-php');
|
|
|
17
18
|
const migrateDatabase = (options = {}) => ({
|
|
18
19
|
title: 'Migrating database',
|
|
19
20
|
task: async (ctx, task) => {
|
|
20
|
-
const {
|
|
21
|
-
magentoVersion,
|
|
22
|
-
mysqlConnection
|
|
23
|
-
} = ctx;
|
|
21
|
+
const { databaseConnection } = ctx;
|
|
24
22
|
|
|
25
|
-
const [[{ tableCount }]] = await
|
|
23
|
+
const [[{ tableCount }]] = await databaseConnection.query(`
|
|
26
24
|
SELECT count(*) AS tableCount
|
|
27
25
|
FROM INFORMATION_SCHEMA.TABLES
|
|
28
26
|
WHERE TABLE_SCHEMA = 'magento';
|
|
@@ -35,9 +33,9 @@ const migrateDatabase = (options = {}) => ({
|
|
|
35
33
|
) {
|
|
36
34
|
if (options.onlyInstallMagento) {
|
|
37
35
|
ctx.isSetupUpgradeNeeded = false;
|
|
38
|
-
return task.newListr(
|
|
36
|
+
return task.newListr([
|
|
39
37
|
installMagento({ isDbEmpty: true })
|
|
40
|
-
);
|
|
38
|
+
]);
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
return task.newListr([
|
|
@@ -57,8 +55,7 @@ const migrateDatabase = (options = {}) => ({
|
|
|
57
55
|
});
|
|
58
56
|
}
|
|
59
57
|
|
|
60
|
-
const { code } = await runMagentoCommand('setup:db:status', {
|
|
61
|
-
magentoVersion,
|
|
58
|
+
const { code, result } = await runMagentoCommand(ctx, 'setup:db:status', {
|
|
62
59
|
throwNonZeroCode: false
|
|
63
60
|
});
|
|
64
61
|
|
|
@@ -67,7 +64,6 @@ const migrateDatabase = (options = {}) => ({
|
|
|
67
64
|
ctx.isSetupUpgradeNeeded = false;
|
|
68
65
|
// no setup is needed, but still to be sure configure ES
|
|
69
66
|
return task.newListr([
|
|
70
|
-
updateEnvPHP(),
|
|
71
67
|
varnishConfigSetup(),
|
|
72
68
|
configureElasticsearch()
|
|
73
69
|
], {
|
|
@@ -107,7 +103,6 @@ const migrateDatabase = (options = {}) => ({
|
|
|
107
103
|
}
|
|
108
104
|
case 2: {
|
|
109
105
|
return task.newListr([
|
|
110
|
-
updateEnvPHP(),
|
|
111
106
|
varnishConfigSetup(),
|
|
112
107
|
configureElasticsearch(),
|
|
113
108
|
upgradeMagento()
|
|
@@ -121,9 +116,7 @@ const migrateDatabase = (options = {}) => ({
|
|
|
121
116
|
});
|
|
122
117
|
}
|
|
123
118
|
default: {
|
|
124
|
-
|
|
125
|
-
task.title = 'Migrating database failed: manual action is required!';
|
|
126
|
-
break;
|
|
119
|
+
throw new UnknownError(`Migrating database failed: manual action is required!\n\n${result}`);
|
|
127
120
|
}
|
|
128
121
|
}
|
|
129
122
|
},
|
|
@@ -14,7 +14,7 @@ module.exports = () => ({
|
|
|
14
14
|
ssl
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
|
-
|
|
17
|
+
databaseConnection
|
|
18
18
|
} = ctx;
|
|
19
19
|
const isNgrok = host.endsWith('ngrok.io');
|
|
20
20
|
const enableSecureFrontend = ssl.enabled ? '1' : '0';
|
|
@@ -29,6 +29,6 @@ module.exports = () => ({
|
|
|
29
29
|
{ path: 'web/secure/use_in_frontend', value: enableSecureFrontend },
|
|
30
30
|
{ path: 'web/secure/use_in_adminhtml', value: enableSecureFrontend },
|
|
31
31
|
{ path: 'web/cookie/cookie_domain', value: null }
|
|
32
|
-
], {
|
|
32
|
+
], { databaseConnection, task });
|
|
33
33
|
}
|
|
34
34
|
});
|
|
@@ -6,10 +6,10 @@ const runMagentoCommand = require('../../../util/run-magento');
|
|
|
6
6
|
*/
|
|
7
7
|
module.exports = () => ({
|
|
8
8
|
title: 'Switching Magento mode',
|
|
9
|
-
task: async (
|
|
10
|
-
const {
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
task: async (ctx, task) => {
|
|
10
|
+
const { config: { magentoConfiguration: { mode } } } = ctx;
|
|
11
|
+
const { result } = await runMagentoCommand(ctx, 'deploy:mode:show', {
|
|
12
|
+
throwNonZeroCode: false
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
if (result.includes(mode)) {
|
|
@@ -5,13 +5,13 @@ const { updateTableValues } = require('../../../util/database');
|
|
|
5
5
|
*/
|
|
6
6
|
const setUrlRewrite = () => ({
|
|
7
7
|
title: 'Setting up url-rewrites',
|
|
8
|
-
task: async ({
|
|
8
|
+
task: async ({ databaseConnection }, task) => {
|
|
9
9
|
await updateTableValues('core_config_data', [
|
|
10
10
|
{
|
|
11
11
|
path: 'web/seo/use_rewrites',
|
|
12
12
|
value: '1'
|
|
13
13
|
}
|
|
14
|
-
], {
|
|
14
|
+
], { databaseConnection, task });
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
|
|
@@ -6,7 +6,7 @@ const getIsWsl = require('../../../util/is-wsl');
|
|
|
6
6
|
* @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
7
7
|
*/
|
|
8
8
|
const varnishConfigSetup = () => ({
|
|
9
|
-
title: 'Varnish setup',
|
|
9
|
+
title: 'Varnish Database setup',
|
|
10
10
|
task: async (ctx, task) => {
|
|
11
11
|
const {
|
|
12
12
|
config: {
|
|
@@ -18,18 +18,20 @@ const varnishConfigSetup = () => ({
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
-
|
|
22
|
-
ports
|
|
21
|
+
databaseConnection,
|
|
22
|
+
ports,
|
|
23
|
+
debug
|
|
23
24
|
} = ctx;
|
|
24
25
|
|
|
25
26
|
const isLinux = os.platform() === 'linux';
|
|
26
27
|
const isWsl = await getIsWsl();
|
|
28
|
+
const isNativeLinux = isLinux && !isWsl;
|
|
27
29
|
|
|
28
|
-
if (varnishEnabled) {
|
|
30
|
+
if (!debug && varnishEnabled) {
|
|
29
31
|
await updateTableValues('core_config_data', [
|
|
30
32
|
{
|
|
31
33
|
path: 'system/full_page_cache/varnish/backend_host',
|
|
32
|
-
value: 'localhost'
|
|
34
|
+
value: !isNativeLinux ? 'host.docker.internal' : 'localhost'
|
|
33
35
|
},
|
|
34
36
|
{
|
|
35
37
|
path: 'system/full_page_cache/varnish/backend_port',
|
|
@@ -37,16 +39,16 @@ const varnishConfigSetup = () => ({
|
|
|
37
39
|
},
|
|
38
40
|
{
|
|
39
41
|
path: 'system/full_page_cache/varnish/access_list',
|
|
40
|
-
value:
|
|
42
|
+
value: !isNativeLinux ? 'host.docker.internal,localhost' : 'localhost'
|
|
41
43
|
},
|
|
42
44
|
{
|
|
43
45
|
path: 'system/full_page_cache/caching_application',
|
|
44
46
|
value: '2'
|
|
45
47
|
}
|
|
46
|
-
], {
|
|
48
|
+
], { databaseConnection, task });
|
|
47
49
|
} else {
|
|
48
50
|
// delete varnish configuration if exists
|
|
49
|
-
await
|
|
51
|
+
await databaseConnection.query(`
|
|
50
52
|
DELETE FROM core_config_data WHERE path LIKE '%varnish%';
|
|
51
53
|
`);
|
|
52
54
|
|
|
@@ -57,7 +59,7 @@ const varnishConfigSetup = () => ({
|
|
|
57
59
|
path: 'system/full_page_cache/caching_application',
|
|
58
60
|
value: '0'
|
|
59
61
|
}
|
|
60
|
-
], {
|
|
62
|
+
], { databaseConnection, task });
|
|
61
63
|
}
|
|
62
64
|
},
|
|
63
65
|
options: {
|
|
@@ -1,14 +1,48 @@
|
|
|
1
|
+
const logger = require('@scandipwa/scandipwa-dev-utils/logger');
|
|
2
|
+
const semver = require('semver');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
1
5
|
const { request } = require('smol-request');
|
|
2
6
|
const KnownError = require('../../../errors/known-error');
|
|
7
|
+
const { execAsyncSpawn } = require('../../../util/exec-async-command');
|
|
8
|
+
const { NginxParser } = require('../../../util/nginx-logs-parser');
|
|
3
9
|
const sleep = require('../../../util/sleep');
|
|
4
10
|
|
|
11
|
+
const pathToWorkingHealthCheckPhp = path.join(__dirname, '..', '..', 'php', 'working_health_check.php');
|
|
12
|
+
const pathToProjectsHealthCheckPhp = path.join(process.cwd(), 'pub', 'health_check.php');
|
|
13
|
+
const pathToHealthCheckBackupPhp = path.join(process.cwd(), 'pub', 'health_check-super-backup-file.php');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {import('../../../../typings/context').ListrContext} ctx
|
|
17
|
+
*/
|
|
18
|
+
const getIsHealthCheckRequestBroken = async (ctx) => {
|
|
19
|
+
const { nginx } = ctx.config.docker.getContainers(ctx.ports);
|
|
20
|
+
|
|
21
|
+
const nginxLogs = await execAsyncSpawn(`docker logs ${nginx.name}`);
|
|
22
|
+
|
|
23
|
+
const healthCheckRequests = nginxLogs
|
|
24
|
+
.split('\n')
|
|
25
|
+
.filter((line) => line.includes('"GET /health_check.php HTTP/1.1"'));
|
|
26
|
+
|
|
27
|
+
// eslint-disable-next-line max-len
|
|
28
|
+
const parser = new NginxParser('$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"');
|
|
29
|
+
|
|
30
|
+
const parsedRequests = healthCheckRequests.map((line) => parser.parseLine(line));
|
|
31
|
+
|
|
32
|
+
return parsedRequests.every((parsedRequest) => parsedRequest.status !== '200');
|
|
33
|
+
};
|
|
34
|
+
|
|
5
35
|
/**
|
|
6
36
|
* @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
7
37
|
*/
|
|
8
38
|
const waitingForVarnish = () => ({
|
|
9
39
|
title: 'Waiting for Varnish to return code 200',
|
|
10
|
-
skip: (ctx) => !ctx.config.overridenConfiguration.configuration.varnish.enabled,
|
|
11
|
-
task: async (ctx) => {
|
|
40
|
+
skip: (ctx) => ctx.debug || !ctx.config.overridenConfiguration.configuration.varnish.enabled,
|
|
41
|
+
task: async (ctx, task) => {
|
|
42
|
+
const pureMagentoVersion = ctx.magentoVersion.match(/^([0-9]+\.[0-9]+\.[0-9]+)/)[1];
|
|
43
|
+
|
|
44
|
+
const isMagento23 = semver.satisfies(pureMagentoVersion, '<2.4');
|
|
45
|
+
|
|
12
46
|
let tries = 0;
|
|
13
47
|
while (tries < 10) {
|
|
14
48
|
try {
|
|
@@ -28,6 +62,94 @@ const waitingForVarnish = () => ({
|
|
|
28
62
|
}
|
|
29
63
|
}
|
|
30
64
|
|
|
65
|
+
if (tries === 10 && isMagento23) {
|
|
66
|
+
const isHealthCheckRequestBroken = await getIsHealthCheckRequestBroken(ctx);
|
|
67
|
+
if (isHealthCheckRequestBroken) {
|
|
68
|
+
const confirm = await task.prompt({
|
|
69
|
+
type: 'Select',
|
|
70
|
+
message: `We detected that your Magento instance is experiencing problems with Varnish server.
|
|
71
|
+
Health Check request is returning status 500.
|
|
72
|
+
|
|
73
|
+
Do you want to try resolving this issue by replacing ${logger.style.file('./pub/health_check.php')} file content with content from newer Magento version (2.4.4)?`,
|
|
74
|
+
choices: [
|
|
75
|
+
{
|
|
76
|
+
name: 'yes',
|
|
77
|
+
message: 'Okay, let\'s try that'
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'no',
|
|
81
|
+
message: 'I will try to fix this myself, thanks for the info!'
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (confirm === 'yes') {
|
|
87
|
+
await fs.promises.writeFile(
|
|
88
|
+
pathToHealthCheckBackupPhp,
|
|
89
|
+
await fs.promises.readFile(pathToProjectsHealthCheckPhp, 'utf-8'),
|
|
90
|
+
'utf-8'
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
task.output = `Backup made! Available at ${logger.style.file(pathToHealthCheckBackupPhp)}`;
|
|
94
|
+
|
|
95
|
+
await fs.promises.writeFile(
|
|
96
|
+
pathToProjectsHealthCheckPhp,
|
|
97
|
+
await fs.promises.readFile(pathToWorkingHealthCheckPhp, 'utf-8'),
|
|
98
|
+
'utf-8'
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
task.output = `${logger.style.file('./pub/health_check.php')} content is replaced, waiting for nginx logs...`;
|
|
102
|
+
|
|
103
|
+
let connectionFixed = false;
|
|
104
|
+
|
|
105
|
+
for (let i = 0; i < 10; i++) {
|
|
106
|
+
try {
|
|
107
|
+
const response = await request(`http://localhost:${ctx.ports.sslTerminator}/`, {
|
|
108
|
+
responseType: 'headers'
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
if (response.status !== 200) {
|
|
112
|
+
await sleep(2000);
|
|
113
|
+
} else {
|
|
114
|
+
connectionFixed = true;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
} catch (e) {
|
|
118
|
+
await sleep(200);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (connectionFixed) {
|
|
123
|
+
task.output = 'Connection looks good!';
|
|
124
|
+
const secondConfirm = await task.prompt({
|
|
125
|
+
type: 'Select',
|
|
126
|
+
message: `Okay, looks like it helped!
|
|
127
|
+
Do you want to keep backed up ${logger.style.file('health_check.php')} file?`,
|
|
128
|
+
choices: [
|
|
129
|
+
{
|
|
130
|
+
name: 'no',
|
|
131
|
+
message: 'I don\'t think I will need it anymore, thanks'
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'yes',
|
|
135
|
+
message: 'I will keep it, maybe it will be useful (X to doubt)'
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
if (secondConfirm === 'no') {
|
|
141
|
+
await fs.promises.rm(pathToHealthCheckBackupPhp);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
task.skip('User choose to fix issue himself');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
31
153
|
if (tries === 10) {
|
|
32
154
|
throw new KnownError(`After 20 seconds website is still responding with non-200 code, which might indicate issue with setup.
|
|
33
155
|
Or Varnish is still loading...
|
|
@@ -35,7 +157,10 @@ Or Varnish is still loading...
|
|
|
35
157
|
Please check the logs!`);
|
|
36
158
|
}
|
|
37
159
|
},
|
|
38
|
-
exitOnError: false
|
|
160
|
+
exitOnError: false,
|
|
161
|
+
options: {
|
|
162
|
+
bottomBar: 10
|
|
163
|
+
}
|
|
39
164
|
});
|
|
40
165
|
|
|
41
166
|
module.exports = waitingForVarnish;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/* eslint-disable no-use-before-define */
|
|
2
|
+
const { deepmerge } = require('../../util/deepmerge');
|
|
3
|
+
const { containerApi } = require('../docker/containers');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {import('../../../typings/context').ListrContext} ctx
|
|
7
|
+
* @param {import('../../util/exec-async-command').ExecAsyncSpawnOptions<false> & { useXDebugContainer?: boolean }} [options]
|
|
8
|
+
* @param {string} command
|
|
9
|
+
*/
|
|
10
|
+
const runPHPContainerCommand = async (ctx, command, options = {}) => {
|
|
11
|
+
const { php } = ctx.config.docker.getContainers(ctx.ports);
|
|
12
|
+
|
|
13
|
+
const containers = await containerApi.ls({ formatToJSON: true, all: true });
|
|
14
|
+
|
|
15
|
+
if (containers.some((c) => c.Names === php.name)) {
|
|
16
|
+
return execPHPContainerCommand(ctx, command, options);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return containerApi.run(
|
|
20
|
+
deepmerge(
|
|
21
|
+
php,
|
|
22
|
+
{
|
|
23
|
+
detach: false,
|
|
24
|
+
rm: true
|
|
25
|
+
},
|
|
26
|
+
options.useXDebugContainer
|
|
27
|
+
? {
|
|
28
|
+
image: `${ php.image }.xdebug`
|
|
29
|
+
}
|
|
30
|
+
: {},
|
|
31
|
+
{
|
|
32
|
+
command
|
|
33
|
+
},
|
|
34
|
+
),
|
|
35
|
+
options
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {string} command
|
|
41
|
+
* @param {import('../../util/exec-async-command').ExecAsyncSpawnOptions<false> & { useXDebugContainer?: boolean }} [options]
|
|
42
|
+
* @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
|
|
43
|
+
*/
|
|
44
|
+
const runPHPContainerCommandTask = (command, options = {}) => ({
|
|
45
|
+
title: `Running command "${command}"`,
|
|
46
|
+
task: (ctx, task) => runPHPContainerCommand(ctx, command, {
|
|
47
|
+
callback: !ctx.verbose ? undefined : (t) => {
|
|
48
|
+
task.output = t;
|
|
49
|
+
},
|
|
50
|
+
...options
|
|
51
|
+
}),
|
|
52
|
+
option: {
|
|
53
|
+
bottomBar: 10
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
*
|
|
59
|
+
* @param {import('../../../typings/context').ListrContext} ctx
|
|
60
|
+
* @param {import('../../util/exec-async-command').ExecAsyncSpawnOptions<false> & { useXDebugContainer?: boolean }} [options]
|
|
61
|
+
* @param {string} command
|
|
62
|
+
*/
|
|
63
|
+
const execPHPContainerCommand = async (ctx, command, options = {}) => {
|
|
64
|
+
const { php } = ctx.config.docker.getContainers(ctx.ports);
|
|
65
|
+
|
|
66
|
+
const containers = await containerApi.ls({ formatToJSON: true, all: true });
|
|
67
|
+
|
|
68
|
+
if (!containers.some((c) => c.Names === php.name)) {
|
|
69
|
+
return runPHPContainerCommand(ctx, command, options);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return containerApi.exec(
|
|
73
|
+
command,
|
|
74
|
+
php.name,
|
|
75
|
+
deepmerge(
|
|
76
|
+
php,
|
|
77
|
+
options.env ? {
|
|
78
|
+
env: options.env
|
|
79
|
+
} : {}
|
|
80
|
+
),
|
|
81
|
+
options
|
|
82
|
+
);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @param {string} command
|
|
87
|
+
* @param {import('../../util/exec-async-command').ExecAsyncSpawnOptions<false> & { useXDebugContainer?: boolean, title?: string }} [options]
|
|
88
|
+
* @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
|
|
89
|
+
*/
|
|
90
|
+
const execPHPContainerCommandTask = (command, options = {}) => ({
|
|
91
|
+
title: typeof options.title === 'string' && options.title === '' ? undefined : options.title || `Running command "${command}"`,
|
|
92
|
+
task: (ctx, task) => execPHPContainerCommand(ctx, command, {
|
|
93
|
+
callback: !ctx.verbose ? undefined : (t) => {
|
|
94
|
+
task.output = t;
|
|
95
|
+
},
|
|
96
|
+
...options
|
|
97
|
+
}),
|
|
98
|
+
option: {
|
|
99
|
+
bottomBar: 10
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
module.exports = {
|
|
104
|
+
runPHPContainerCommand,
|
|
105
|
+
runPHPContainerCommandTask,
|
|
106
|
+
execPHPContainerCommand,
|
|
107
|
+
execPHPContainerCommandTask
|
|
108
|
+
};
|