@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.
Files changed (190) hide show
  1. package/lib/commands/cli.js +2 -4
  2. package/lib/commands/execute.js +28 -3
  3. package/lib/commands/start.js +37 -15
  4. package/lib/commands/status.js +2 -0
  5. package/lib/config/docker.js +65 -42
  6. package/lib/config/get-project-configuration.js +3 -1
  7. package/lib/config/index.js +10 -7
  8. package/lib/config/magento/required-php-extensions/index.js +29 -0
  9. package/lib/config/magento/required-php-extensions/magento-2.3.js +19 -0
  10. package/lib/config/magento/required-php-extensions/magento-2.4.js +29 -0
  11. package/lib/config/php/base-repo.js +3 -0
  12. package/lib/config/php/extensions/apcu.js +12 -0
  13. package/lib/config/php/extensions/bcmath.js +7 -0
  14. package/lib/config/php/extensions/curl.js +11 -0
  15. package/lib/config/php/extensions/gd.js +14 -0
  16. package/lib/config/php/extensions/index.js +18 -2
  17. package/lib/config/php/extensions/intl.js +10 -0
  18. package/lib/config/php/extensions/opcache.js +10 -0
  19. package/lib/config/php/extensions/pdo_mysql.js +7 -0
  20. package/lib/config/php/extensions/soap.js +10 -0
  21. package/lib/config/php/extensions/sodium.js +10 -0
  22. package/lib/config/php/extensions/xdebug.js +8 -5
  23. package/lib/config/php/extensions/xsl.js +10 -0
  24. package/lib/config/php/extensions/zip.js +10 -0
  25. package/lib/config/php/{releases → versions}/index.js +0 -0
  26. package/lib/config/php/versions/php-7.2.js +23 -0
  27. package/lib/config/php/versions/php-7.3.js +23 -0
  28. package/lib/config/php/versions/php-7.4.js +23 -0
  29. package/lib/config/php/versions/php-8.1.js +23 -0
  30. package/lib/config/php-config.js +8 -12
  31. package/lib/config/port-config.js +1 -5
  32. package/lib/config/templates/magentorc.template +3 -3
  33. package/lib/config/templates/php-fpm.template.conf +3 -3
  34. package/lib/config/templates/php.template.ini +12 -6
  35. package/lib/config/templates/ssl-terminator.template.conf +1 -1
  36. package/lib/config/templates/vscode-launch.template.json +3 -1
  37. package/lib/config/versions/magento-2.3.0.js +8 -2
  38. package/lib/config/versions/magento-2.3.1.js +8 -2
  39. package/lib/config/versions/magento-2.3.2-p1.js +44 -0
  40. package/lib/config/versions/magento-2.3.2-p2.js +8 -2
  41. package/lib/config/versions/magento-2.3.2.js +8 -2
  42. package/lib/config/versions/magento-2.3.3-p1.js +8 -2
  43. package/lib/config/versions/magento-2.3.3.js +8 -2
  44. package/lib/config/versions/magento-2.3.4-p1.js +44 -0
  45. package/lib/config/versions/magento-2.3.4-p2.js +8 -2
  46. package/lib/config/versions/magento-2.3.4.js +8 -2
  47. package/lib/config/versions/magento-2.3.5-p1.js +8 -2
  48. package/lib/config/versions/magento-2.3.5-p2.js +8 -2
  49. package/lib/config/versions/magento-2.3.5.js +8 -2
  50. package/lib/config/versions/magento-2.3.6-p1.js +8 -2
  51. package/lib/config/versions/magento-2.3.6.js +8 -2
  52. package/lib/config/versions/magento-2.3.7-p1.js +8 -2
  53. package/lib/config/versions/magento-2.3.7-p2.js +8 -2
  54. package/lib/config/versions/magento-2.3.7-p3.js +8 -2
  55. package/lib/config/versions/magento-2.3.7.js +8 -2
  56. package/lib/config/versions/magento-2.4.0-p1.js +9 -3
  57. package/lib/config/versions/magento-2.4.0.js +9 -3
  58. package/lib/config/versions/magento-2.4.1-p1.js +6 -5
  59. package/lib/config/versions/magento-2.4.1.js +9 -2
  60. package/lib/config/versions/magento-2.4.2-p1.js +6 -5
  61. package/lib/config/versions/magento-2.4.2-p2.js +6 -6
  62. package/lib/config/versions/magento-2.4.2.js +6 -6
  63. package/lib/config/versions/magento-2.4.3-p1.js +7 -7
  64. package/lib/config/versions/magento-2.4.3-p2.js +7 -7
  65. package/lib/config/versions/magento-2.4.3.js +7 -7
  66. package/lib/config/versions/magento-2.4.4.js +9 -2
  67. package/lib/tasks/cleanup.js +2 -2
  68. package/lib/tasks/composer/index.js +14 -104
  69. package/lib/tasks/docker/api.d.ts +71 -0
  70. package/lib/tasks/docker/api.js +30 -0
  71. package/lib/tasks/docker/containers/container-api.d.ts +128 -0
  72. package/lib/tasks/docker/containers/container-api.js +153 -0
  73. package/lib/tasks/docker/containers/index.js +19 -0
  74. package/lib/tasks/docker/containers/tasks.js +215 -0
  75. package/lib/tasks/docker/convert-legacy-volumes.js +7 -3
  76. package/lib/tasks/docker/image/image-api.d.ts +34 -0
  77. package/lib/tasks/docker/image/image-api.js +49 -0
  78. package/lib/tasks/docker/image/index.js +5 -0
  79. package/lib/tasks/docker/index.js +1 -13
  80. package/lib/tasks/docker/network/index.js +7 -0
  81. package/lib/tasks/docker/network/network-api.d.ts +103 -0
  82. package/lib/tasks/docker/network/network-api.js +99 -0
  83. package/lib/tasks/docker/{network.js → network/tasks.js} +17 -10
  84. package/lib/tasks/docker/project-image-builder.js +167 -0
  85. package/lib/tasks/docker/volumes.js +1 -1
  86. package/lib/tasks/file-system/create-nginx-config.js +2 -3
  87. package/lib/tasks/file-system/create-php-config.js +20 -5
  88. package/lib/tasks/file-system/create-php-fpm-config.js +8 -4
  89. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +41 -29
  90. package/lib/tasks/file-system/create-phpstorm-config/index.js +2 -0
  91. package/lib/tasks/file-system/create-phpstorm-config/keys.js +15 -1
  92. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +4 -1
  93. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +3 -3
  94. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +81 -0
  95. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +42 -0
  96. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +9 -0
  97. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +66 -0
  98. package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +11 -9
  99. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +2 -1
  100. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +15 -30
  101. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +24 -5
  102. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +50 -0
  103. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +50 -0
  104. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +50 -0
  105. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +15 -15
  106. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +29 -3
  107. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +50 -0
  108. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +42 -0
  109. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +50 -0
  110. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +0 -2
  111. package/lib/tasks/file-system/create-ssl-terminator-config.js +4 -2
  112. package/lib/tasks/file-system/create-vscode-config.js +57 -42
  113. package/lib/tasks/file-system/index.js +2 -1
  114. package/lib/tasks/link.js +1 -2
  115. package/lib/tasks/magento/install-magento-project.js +39 -64
  116. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +4 -4
  117. package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +6 -2
  118. package/lib/tasks/magento/setup-magento/create-admin.js +5 -6
  119. package/lib/tasks/magento/setup-magento/disable-2fa.js +3 -5
  120. package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +3 -4
  121. package/lib/tasks/magento/setup-magento/index.js +1 -3
  122. package/lib/tasks/magento/setup-magento/install-magento.js +57 -11
  123. package/lib/tasks/magento/setup-magento/migrate-database.js +12 -11
  124. package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
  125. package/lib/tasks/magento/setup-magento/varnish-config.js +7 -5
  126. package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
  127. package/lib/tasks/mysql/connect-to-mysql.js +44 -19
  128. package/lib/tasks/mysql/import-dump-to-mysql.js +161 -25
  129. package/lib/tasks/php/php-container.js +108 -0
  130. package/lib/tasks/php/update-env-php.js +35 -19
  131. package/lib/tasks/php/update-env.php +61 -56
  132. package/lib/tasks/php/working_health_check.php +85 -0
  133. package/lib/tasks/requirements/{composer.js → composer-credentials.js} +3 -1
  134. package/lib/tasks/requirements/docker/index.js +15 -12
  135. package/lib/tasks/requirements/docker/performance.js +54 -0
  136. package/lib/tasks/requirements/docker/version.js +8 -8
  137. package/lib/tasks/requirements/index.js +7 -10
  138. package/lib/tasks/requirements/php-version.js +8 -116
  139. package/lib/tasks/requirements/platform.js +12 -25
  140. package/lib/tasks/start.js +41 -48
  141. package/lib/tasks/status/index.js +4 -10
  142. package/lib/tasks/stop.js +0 -2
  143. package/lib/tasks/theme/install-theme.js +1 -1
  144. package/lib/tasks/theme/symlink-theme.js +2 -3
  145. package/lib/util/config-php-json.js +13 -4
  146. package/lib/util/dockerfile-builder/build-instructions.js +197 -0
  147. package/lib/util/dockerfile-builder/index.js +276 -0
  148. package/lib/util/dockerfile-builder/types.d.ts +123 -0
  149. package/lib/util/env-php-json.js +10 -6
  150. package/lib/util/exec-async-command.js +3 -9
  151. package/lib/util/macos-version.js +20 -0
  152. package/lib/util/magento-task.js +3 -4
  153. package/lib/util/nginx-logs-parser.js +122 -0
  154. package/lib/util/php-task.js +3 -6
  155. package/lib/util/prefix.js +1 -1
  156. package/lib/util/run-composer.js +6 -14
  157. package/lib/util/run-container-image.js +17 -0
  158. package/lib/util/run-magento.js +6 -14
  159. package/lib/util/run-php.js +6 -17
  160. package/package.json +9 -9
  161. package/typings/context.d.ts +3 -9
  162. package/typings/index.d.ts +38 -57
  163. package/lib/config/composer.js +0 -11
  164. package/lib/config/php/extensions/libsodium.js +0 -36
  165. package/lib/config/php/releases/php-7.2.js +0 -25
  166. package/lib/config/php/releases/php-7.3.js +0 -25
  167. package/lib/config/php/releases/php-7.4.js +0 -23
  168. package/lib/config/php/releases/php-8.1.js +0 -25
  169. package/lib/config/phpbrew.js +0 -12
  170. package/lib/tasks/composer/install-prestissimo.js +0 -88
  171. package/lib/tasks/docker/containers.js +0 -231
  172. package/lib/tasks/php/bundled-extensions.js +0 -27
  173. package/lib/tasks/php/compile-options.js +0 -56
  174. package/lib/tasks/php/compile.js +0 -55
  175. package/lib/tasks/php/configure.js +0 -89
  176. package/lib/tasks/php/extensions/disable.js +0 -49
  177. package/lib/tasks/php/extensions/enable.js +0 -52
  178. package/lib/tasks/php/extensions/index.js +0 -80
  179. package/lib/tasks/php/extensions/install.js +0 -54
  180. package/lib/tasks/php/index.js +0 -79
  181. package/lib/tasks/php/install-sodium.js +0 -93
  182. package/lib/tasks/php/update-phpbrew.js +0 -45
  183. package/lib/tasks/php/validate-php.js +0 -67
  184. package/lib/tasks/php-fpm/get-process-id.js +0 -14
  185. package/lib/tasks/php-fpm/index.js +0 -4
  186. package/lib/tasks/php-fpm/start-php-fpm.js +0 -49
  187. package/lib/tasks/php-fpm/stop-php-fpm.js +0 -48
  188. package/lib/tasks/requirements/phpbrew/index.js +0 -61
  189. package/lib/tasks/requirements/phpbrew/install.js +0 -159
  190. package/lib/tasks/requirements/phpbrew/version.js +0 -28
@@ -1,231 +0,0 @@
1
- /* eslint-disable max-len */
2
- const { execAsyncSpawn } = require('../../util/exec-async-command');
3
- const sleep = require('../../util/sleep');
4
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
5
- const KnownError = require('../../errors/known-error');
6
-
7
- /**
8
- * @param {Object} options
9
- * @param {number[]} [options.ports] Publish or expose port [docs](https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose)
10
- * @param {number[]} [options.mounts] Add bind mounts or volumes using the --mount flag [docs](https://docs.docker.com/engine/reference/commandline/run/#add-bind-mounts-or-volumes-using-the---mount-flag)
11
- * @param {number[]} [options.mountVolumes] Mount volume [docs](https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only)
12
- * @param {Record<string, string>} [options.env] Set environment variables [docs](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file)
13
- * @param {string} [options.image]
14
- * @param {string} [options.restart] Restart policies [docs](https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart)
15
- * @param {string} [options.name] Container name
16
- * @param {string} [options.entrypoint] Container entrypoint
17
- * @param {string} [options.command] Container command
18
- * @param {Record<"cmd" | "interval" | "retries" | "start-period" | "timeout", string>} [options.healthCheck] Container heathcheck properties
19
- * @param {string[]} [options.securityOptions] Security options [docs](https://docs.docker.com/engine/reference/commandline/run/#optional-security-options---security-opt)
20
- * @param {string[]} [options.tmpfs]
21
- */
22
- const run = (options) => {
23
- const {
24
- ports = [],
25
- mounts = [],
26
- mountVolumes = [],
27
- env = {},
28
- image,
29
- restart,
30
- network,
31
- name,
32
- entrypoint,
33
- command = '',
34
- healthCheck,
35
- securityOptions = [],
36
- tmpfs = [],
37
- expose = []
38
- } = options;
39
-
40
- const exposeArg = expose && expose.map((e) => `--expose=${ e }`);
41
- const restartArg = restart && `--restart ${ restart }`;
42
- const networkArg = network && `--network ${ network }`;
43
- const portsArgs = ports.map((port) => `-p ${ port }`).join(' ');
44
- const mountsArgs = mounts.map((mount) => `--mount ${ mount }`).join(' ');
45
- const mountVolumesArgs = mountVolumes.map((mount) => `-v ${mount}`).join(' ');
46
- const envArgs = Object.entries(env).map(([key, value]) => `--env ${ key }=${ value }`).join(' ');
47
- const nameArg = name && `--name ${name}`;
48
- const entrypointArg = entrypoint && `--entrypoint "${entrypoint}"`;
49
- const healthCheckArg = healthCheck && Object.entries(healthCheck).map(([key, value]) => `--health-${key} '${value}'`).join(' ');
50
- const securityArg = securityOptions.length > 0 && securityOptions.map((opt) => `--security-opt ${opt}`).join(' ');
51
- const tmpfsArg = tmpfs.length > 0 && tmpfs.map((t) => `--tmpfs ${t}`).join(' ');
52
-
53
- const dockerCommand = [
54
- 'docker',
55
- 'run',
56
- '-d',
57
- nameArg,
58
- networkArg,
59
- restartArg,
60
- portsArgs,
61
- exposeArg,
62
- mountsArgs,
63
- mountVolumesArgs,
64
- envArgs,
65
- entrypointArg,
66
- healthCheckArg,
67
- securityArg,
68
- tmpfsArg,
69
- image,
70
- command
71
- ].filter(Boolean).join(' ');
72
-
73
- return execAsyncSpawn(dockerCommand);
74
- };
75
-
76
- const stop = async (containers) => {
77
- await execAsyncSpawn(`docker container stop ${containers.join(' ')}`);
78
- await execAsyncSpawn(`docker container rm ${containers.join(' ')}`);
79
- };
80
-
81
- const pull = async (image) => execAsyncSpawn(`docker pull ${image}`);
82
-
83
- /**
84
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
85
- */
86
- const pullContainers = () => ({
87
- title: 'Pulling container images',
88
- task: async ({ config: { docker } }, task) => {
89
- const containers = Object.values(docker.getContainers());
90
- const containerFilters = containers
91
- .map((container) => `-f=reference='${container.imageDetails.name}:${container.imageDetails.tag}'`)
92
- .join(' ');
93
- const existingImages = await execAsyncSpawn(`docker images ${containerFilters}`);
94
- const missingContainerImages = containers.filter((container) => !existingImages.split('\n')
95
- .some((line) => line.includes(container.imageDetails.name) && line.includes(container.imageDetails.tag)))
96
- .reduce((acc, val) => acc.concat(acc.some((c) => c.imageDetails.name === val.imageDetails.name && c.imageDetails.tag === val.imageDetails.tag) ? [] : val), []);
97
-
98
- if (missingContainerImages.length === 0) {
99
- task.skip();
100
- return;
101
- }
102
-
103
- return task.newListr(
104
- missingContainerImages.map((container) => ({
105
- title: `Pulling ${ logger.style.file(`${container.imageDetails.name}:${container.imageDetails.tag}`) } image`,
106
- task: () => pull(`${container.imageDetails.name}:${container.imageDetails.tag}`)
107
- })), {
108
- concurrent: true,
109
- exitOnError: true
110
- }
111
- );
112
- }
113
- });
114
-
115
- /**
116
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
117
- */
118
- const startContainers = () => ({
119
- title: 'Starting containers',
120
- task: async ({ ports, config: { docker } }, task) => {
121
- const containerList = (await execAsyncSpawn('docker container ls --all --format="{{.Names}}"')).split('\n');
122
-
123
- const missingContainers = Object.values(docker.getContainers(ports)).filter(
124
- ({ name }) => !containerList.includes(name)
125
- );
126
-
127
- if (missingContainers.length === 0) {
128
- task.skip();
129
- return;
130
- }
131
-
132
- // TODO: we might stop containers here ?
133
- await Promise.all(missingContainers.map((container) => run(container).then((out) => {
134
- task.output = `From ${container._}: ${out}`;
135
- })));
136
- },
137
- options: {
138
- bottomBar: 10
139
- }
140
- });
141
-
142
- /**
143
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
144
- */
145
- const stopContainers = () => ({
146
- title: 'Stopping Docker containers',
147
- task: async ({ config: { baseConfig: { prefix } } }, task) => {
148
- const containerList = (await execAsyncSpawn('docker container ls --all --format="{{.Names}}"')).split('\n');
149
-
150
- const runningContainers = containerList.filter((containerName) => containerName.startsWith(prefix));
151
-
152
- if (runningContainers.length === 0) {
153
- task.skip();
154
- return;
155
- }
156
-
157
- await stop(runningContainers);
158
- }
159
- });
160
-
161
- const getContainerStatus = async (containerName) => {
162
- try {
163
- return JSON.parse(await execAsyncSpawn(`docker inspect --format='{{json .State}}' ${containerName}`));
164
- } catch {
165
- return null;
166
- }
167
- };
168
-
169
- /**
170
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
171
- */
172
- const checkContainersAreRunning = () => ({
173
- title: 'Checking container statuses',
174
- task: async (ctx, task) => {
175
- const { config: { docker }, ports } = ctx;
176
- const containers = Object.values(docker.getContainers(ports));
177
- let tries = 0;
178
- while (tries < 3) {
179
- const containersWithStatus = await Promise.all(
180
- containers.map(async (container) => ({
181
- ...container,
182
- status: await getContainerStatus(container.name)
183
- }))
184
- );
185
-
186
- if (containersWithStatus.some((c) => c.status.Status !== 'running')) {
187
- if (tries === 2) {
188
- throw new KnownError(`${containersWithStatus.filter((c) => c.status.Status !== 'running').map((c) => c._).join(', ')} containers are not running! Please check container logs for more details!`);
189
- } else {
190
- task.output = `${containersWithStatus.filter((c) => c.status.Status !== 'running').map((c) => c._).join(', ')} are not running, waiting if something will change...`;
191
- await sleep(2000);
192
- tries++;
193
- }
194
- } else {
195
- break;
196
- }
197
- }
198
- },
199
- options: {
200
- bottomBar: 10
201
- }
202
- });
203
-
204
- /**
205
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
206
- */
207
- const statusContainers = () => ({
208
- task: async (ctx) => {
209
- const { config: { docker }, ports } = ctx;
210
- const containers = Object.values(docker.getContainers(ports));
211
-
212
- ctx.containers = await Promise.all(
213
- containers.map(async (container) => ({
214
- ...container,
215
- status: await getContainerStatus(container.name)
216
- }))
217
- );
218
- },
219
- options: {
220
- bottomBar: 10
221
- }
222
- });
223
-
224
- module.exports = {
225
- startContainers,
226
- stopContainers,
227
- pullContainers,
228
- statusContainers,
229
- checkContainersAreRunning,
230
- getContainerStatus
231
- };
@@ -1,27 +0,0 @@
1
- const bundledExtensions = [
2
- 'bz2',
3
- 'bcmath',
4
- 'ctype',
5
- 'curl',
6
- 'intl',
7
- 'dom',
8
- 'filter',
9
- 'hash',
10
- 'sockets',
11
- 'iconv',
12
- 'json',
13
- 'mbstring',
14
- 'openssl',
15
- 'xml',
16
- 'mysql',
17
- 'pdo',
18
- 'soap',
19
- 'xml',
20
- 'zip',
21
- 'fpm',
22
- 'gd'
23
- ];
24
-
25
- module.exports = {
26
- bundledExtensions
27
- };
@@ -1,56 +0,0 @@
1
- /* eslint-disable max-len */
2
- const { getBrewCommandSync, getBrewBinPathSync } = require('../../util/get-brew-bin-path');
3
- const { bundledExtensions } = require('./bundled-extensions');
4
-
5
- const darwinVariants = [
6
- `openssl=$(${getBrewCommandSync()} --prefix openssl@1.1)`, // ="$(brew --prefix openssl@1.1)"
7
- `curl=$(${getBrewCommandSync()} --prefix curl)`,
8
- `intl=$(${getBrewCommandSync()} --prefix icu4c)`,
9
- `bz2="$(${getBrewCommandSync()} --prefix bzip2)"`
10
- ];
11
-
12
- const compileOptions = {
13
- linux: {
14
- cpuCount: '$(nproc)',
15
- variants: bundledExtensions.map((ext) => `+${ext}`),
16
- extraOptions: [
17
- '--with-freetype-dir=/usr/include/freetype2',
18
- '--with-openssl=/usr/',
19
- '--with-gd=shared',
20
- '--with-jpeg-dir=/usr/',
21
- '--with-png-dir=/usr/'
22
- ],
23
- env: {
24
- CXX: 'g++ -DTRUE=1 -DFALSE=0',
25
- CC: 'gcc -DTRUE=1 -DFALSE=0'
26
- }
27
- },
28
- darwin: {
29
- cpuCount: '$(sysctl -n hw.ncpu)',
30
- variants: bundledExtensions.map((ext) => {
31
- const darwinVariant = darwinVariants.find((dv) => dv.startsWith(ext));
32
- if (darwinVariant) {
33
- return `+${darwinVariant}`;
34
- }
35
-
36
- return `+${ext}`;
37
- }),
38
- extraOptions: [
39
- `--with-zlib-dir=$(${getBrewCommandSync()} --prefix zlib)`,
40
- `--with-iconv=$(${getBrewCommandSync()} --prefix libiconv)`,
41
- '--with-gd=shared'
42
- ],
43
- env: {
44
- // eslint-disable-next-line max-len
45
- PKG_CONFIG_PATH: `$PKG_CONFIG_PATH:$(${getBrewCommandSync()} --prefix libxml2)/lib/pkgconfig:$(${getBrewCommandSync()} --prefix icu4c)/lib/pkgconfig:$(${getBrewCommandSync()} --prefix openssl@1.1)/lib/pkgconfig:$(${getBrewCommandSync()} --prefix curl)/lib/pkgconfig:$(${getBrewCommandSync()} --prefix zlib)/lib/pkgconfig`,
46
- CPATH: `$CPATH:$(${getBrewCommandSync()} --prefix openssl@1.1)/include`,
47
- CXX: 'g++ -DTRUE=1 -DFALSE=0',
48
- CC: 'gcc -DTRUE=1 -DFALSE=0',
49
- LDFLAGS: `$(${getBrewCommandSync()} --prefix openssl@1.1)/lib/libssl.dylib $(${getBrewCommandSync()} --prefix openssl@1.1)/lib/libcrypto.dylib`,
50
- CFLAGS: '-Wno-implicit-function-declaration', // https://github.com/phpbrew/phpbrew/issues/1222
51
- PATH: `${getBrewBinPathSync().replace('/brew', '')}:${process.env.PATH}`
52
- }
53
- }
54
- };
55
-
56
- module.exports = compileOptions;
@@ -1,55 +0,0 @@
1
- const systeminformation = require('systeminformation');
2
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
3
- const { execAsyncSpawn } = require('../../util/exec-async-command');
4
- const compileOptions = require('./compile-options');
5
- const UnknownError = require('../../errors/unknown-error');
6
- const { getPHPForPHPBrewBin } = require('../../util/get-php-for-phpbrew');
7
-
8
- /**
9
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
10
- */
11
- const compilePHP = () => ({
12
- title: 'Compiling PHP',
13
- task: async ({ config: { php } }, task) => {
14
- const phpBinForPHPBrew = await getPHPForPHPBrewBin();
15
- const platformCompileOptions = compileOptions[process.platform];
16
- if (process.platform === 'linux') {
17
- const { distro } = await systeminformation.osInfo();
18
- if (['Fedora', 'Manjaro'].some((d) => distro.includes(d))) {
19
- platformCompileOptions.extraOptions.push('--with-libdir=lib64');
20
- }
21
- }
22
- const commandEnv = Object.entries(platformCompileOptions.env || {}).map(([key, value]) => `export ${key}="${value}"`).join(' && ');
23
- const phpCompileCommand = `${commandEnv ? `${commandEnv} && ` : ''} \
24
- phpbrew install -j ${platformCompileOptions.cpuCount} ${php.version} ${platformCompileOptions.variants.join(' ')} \
25
- -- ${platformCompileOptions.extraOptions.join(' ')}`;
26
-
27
- try {
28
- await execAsyncSpawn(
29
- phpCompileCommand,
30
- {
31
- callback: (t) => {
32
- task.output = t;
33
- },
34
- useRosetta2: true,
35
- env: phpBinForPHPBrew ? {
36
- ...process.env,
37
- PATH: `${phpBinForPHPBrew}:${process.env.PATH}`
38
- } : process.env
39
- }
40
- );
41
- } catch (e) {
42
- throw new UnknownError(
43
- `Failed to compile the required PHP version.
44
- Tried compiling the PHP version ${ logger.style.misc(php.version) }.
45
- Use your favorite search engine to resolve the issue.
46
- See error details in the output below.\n\n${e}`
47
- );
48
- }
49
- },
50
- options: {
51
- bottomBar: 10
52
- }
53
- });
54
-
55
- module.exports = compilePHP;
@@ -1,89 +0,0 @@
1
- /* eslint-disable max-len */
2
- const enableExtension = require('./extensions/enable');
3
- const installExtension = require('./extensions/install');
4
- const disableExtension = require('./extensions/disable');
5
- const {
6
- getEnabledExtensions,
7
- getInstalledExtensions,
8
- getDisabledExtensions
9
- } = require('./extensions');
10
-
11
- /**
12
- * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
13
- */
14
- const configurePHP = () => ({
15
- title: 'Configuring PHP extensions',
16
- task: async ({ config, debug }, task) => {
17
- const { php, php: { disabledExtensions = [] } } = config;
18
- const enabledExtensions = await getEnabledExtensions(config);
19
- const installedExtensions = await getInstalledExtensions(config);
20
- const disabledExtensionsInPHP = await getDisabledExtensions(config);
21
-
22
- if (!debug && enabledExtensions.xdebug && !disabledExtensions.includes('xdebug')) {
23
- disabledExtensions.push('xdebug');
24
- }
25
-
26
- /** @type {[string, import('../../../typings/index').PHPExtension][]} */
27
- const missingExtensions = Object.entries(php.extensions)
28
- .filter(([name, options]) => {
29
- const extensionName = options.extensionName || name;
30
-
31
- return !disabledExtensions.includes(extensionName);
32
- })
33
- // check if module is not loaded and if it is loaded check installed version
34
- .filter(([name, options]) => {
35
- const extensionName = options.extensionName || name;
36
- if (extensionName === 'xdebug' && !debug) {
37
- return false;
38
- }
39
- if (!enabledExtensions[extensionName]) {
40
- return true;
41
- }
42
-
43
- if (options && options.version && enabledExtensions[extensionName] !== options.version) {
44
- return true;
45
- }
46
-
47
- return false;
48
- });
49
-
50
- /** @type {import('listr2').ListrTask[]} */
51
- const extensionTasks = [];
52
-
53
- if (missingExtensions.length > 0) {
54
- missingExtensions.forEach(([extensionName, extensionOptions]) => {
55
- if (installedExtensions.includes(extensionName) && disabledExtensionsInPHP.includes(extensionName)) {
56
- extensionTasks.push(enableExtension(extensionName, extensionOptions));
57
- } else {
58
- extensionTasks.push(installExtension(extensionName, extensionOptions));
59
- }
60
- });
61
- }
62
-
63
- if (disabledExtensions.length > 0) {
64
- disabledExtensions.forEach((extensionName) => {
65
- extensionTasks.push(disableExtension(extensionName));
66
- });
67
- }
68
-
69
- if (extensionTasks.length === 0) {
70
- task.skip();
71
- return;
72
- }
73
-
74
- return task.newListr(
75
- extensionTasks,
76
- {
77
- concurrent: false,
78
- rendererOptions: {
79
- collapse: false
80
- }
81
- }
82
- );
83
- },
84
- options: {
85
- bottomBar: 10
86
- }
87
- });
88
-
89
- module.exports = configurePHP;
@@ -1,49 +0,0 @@
1
- /* eslint-disable max-len */
2
- const phpbrewConfig = require('../../../config/phpbrew');
3
- const { execAsyncSpawn } = require('../../../util/exec-async-command');
4
- const { getPHPForPHPBrewBin } = require('../../../util/get-php-for-phpbrew');
5
-
6
- /**
7
- * @param {String} extensionName
8
- * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
9
- */
10
- const disableExtension = (extensionName) => ({
11
- title: `Disabling ${extensionName} extension`,
12
- task: async (ctx, task) => {
13
- const phpBinForPHPBrew = await getPHPForPHPBrewBin();
14
- const {
15
- config,
16
- config: { php }
17
- } = ctx;
18
- const extensionOptions = php.extensions[extensionName] || {};
19
- const { hooks } = extensionOptions;
20
- if (extensionOptions.disable) {
21
- await Promise.resolve(extensionOptions.disable(ctx, task));
22
- } else {
23
- if (hooks && hooks.preDisable) {
24
- await Promise.resolve(hooks.preDisable(config));
25
- }
26
- await execAsyncSpawn(`source ${phpbrewConfig.bashrcPath} && \
27
- phpbrew use ${ php.version } && \
28
- phpbrew ext disable ${ extensionName }`,
29
- {
30
- callback: (t) => {
31
- task.output = t;
32
- },
33
- useRosetta2: true,
34
- env: phpBinForPHPBrew ? {
35
- ...process.env,
36
- PATH: `${phpBinForPHPBrew}:${process.env.PATH}`
37
- } : process.env
38
- });
39
- if (hooks && hooks.postDisable) {
40
- await Promise.resolve(hooks.postDisable(config));
41
- }
42
- }
43
- },
44
- options: {
45
- bottomBar: 10
46
- }
47
- });
48
-
49
- module.exports = disableExtension;
@@ -1,52 +0,0 @@
1
- /* eslint-disable max-len */
2
- const phpbrewConfig = require('../../../config/phpbrew');
3
- const { execAsyncSpawn } = require('../../../util/exec-async-command');
4
- const { getPHPForPHPBrewBin } = require('../../../util/get-php-for-phpbrew');
5
-
6
- /**
7
- * @param {String} extensionName
8
- * @param {import('../../../../typings/index').PHPExtension} extensionOptions
9
- * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
10
- */
11
- const enableExtension = (extensionName, extensionOptions) => ({
12
- title: `Enabling ${extensionName} extension`,
13
- task: async (ctx, task) => {
14
- const phpBinForPHPBrew = await getPHPForPHPBrewBin();
15
- const {
16
- config,
17
- config: { php }
18
- } = ctx;
19
- const { hooks } = extensionOptions;
20
-
21
- if (extensionOptions.enable) {
22
- await Promise.resolve(extensionOptions.enable(ctx, task));
23
- } else {
24
- if (hooks && hooks.postEnable) {
25
- await Promise.resolve(hooks.postEnable(config));
26
- }
27
-
28
- await execAsyncSpawn(`source ${phpbrewConfig.bashrcPath} && \
29
- phpbrew use ${ php.version } && \
30
- phpbrew ext enable ${ extensionName }`,
31
- {
32
- callback: (t) => {
33
- task.output = t;
34
- },
35
- useRosetta2: true,
36
- env: phpBinForPHPBrew ? {
37
- ...process.env,
38
- PATH: `${phpBinForPHPBrew}:${process.env.PATH}`
39
- } : process.env
40
- });
41
-
42
- if (hooks && hooks.postEnable) {
43
- await Promise.resolve(hooks.postEnable(config));
44
- }
45
- }
46
- },
47
- options: {
48
- bottomBar: 10
49
- }
50
- });
51
-
52
- module.exports = enableExtension;
@@ -1,80 +0,0 @@
1
- /* eslint-disable max-len */
2
- const path = require('path');
3
- const fs = require('fs');
4
- const { execAsyncSpawn } = require('../../../util/exec-async-command');
5
- const pathExists = require('../../../util/path-exists');
6
- const phpbrewConfig = require('../../../config/phpbrew');
7
- const { getPHPForPHPBrewBin } = require('../../../util/get-php-for-phpbrew');
8
-
9
- /**
10
- * Get enabled extensions list with versions
11
- * @param {import('../../../../typings/context').ListrContext['config']} param0
12
- * @returns {Promise<{[key: string]: string}}>}
13
- */
14
- const getEnabledExtensions = async ({ php }) => {
15
- const phpBinForPHPBrew = await getPHPForPHPBrewBin();
16
- const output = await execAsyncSpawn(
17
- `${ php.binPath } -c ${php.iniPath} -r 'foreach (get_loaded_extensions() as $extension) echo "$extension:" . phpversion($extension) . "\n";'`,
18
- {
19
- useRosetta2: true,
20
- env: phpBinForPHPBrew ? {
21
- ...process.env,
22
- PATH: `${phpBinForPHPBrew}:${process.env.PATH}`
23
- } : process.env
24
- }
25
- );
26
-
27
- return output
28
- .split('\n')
29
- .map((m) => {
30
- // eslint-disable-next-line no-unused-vars
31
- const [_, moduleName, moduleVersion] = m.match(/(.+):(.+)/i);
32
-
33
- return [moduleName, moduleVersion];
34
- })
35
- .reduce((acc, [name, version]) => ({ ...acc, [name]: version }), {});
36
- };
37
-
38
- /**
39
- * Get disabled extensions list
40
- * @param {import('../../../../typings/context').ListrContext['config']} param0
41
- * @returns {Promise<string[]>}
42
- */
43
- const getDisabledExtensions = async ({ php }) => {
44
- const extensionsIniDirectory = path.join(phpbrewConfig.phpPath, `php-${php.version}`, 'var', 'db');
45
-
46
- if (!await pathExists(extensionsIniDirectory)) {
47
- return [];
48
- }
49
-
50
- const extensionIniList = await fs.promises.readdir(
51
- extensionsIniDirectory,
52
- {
53
- encoding: 'utf-8',
54
- withFileTypes: true
55
- }
56
- );
57
-
58
- return extensionIniList.filter((f) => f.isFile() && f.name.endsWith('.disabled')).map((f) => f.name.replace('.ini.disabled', ''));
59
- };
60
-
61
- /**
62
- * Get installed extensions
63
- * @param {import('../../../../typings/context').ListrContext['config']} param0
64
- * @returns {Promise<string[]>}
65
- */
66
- const getInstalledExtensions = async ({ php }) => {
67
- const extensionDirectory = path.join(phpbrewConfig.buildPath, `php-${php.version}`, 'ext');
68
-
69
- const availableExtensions = await fs.promises.readdir(extensionDirectory, {
70
- encoding: 'utf-8'
71
- });
72
-
73
- return availableExtensions;
74
- };
75
-
76
- module.exports = {
77
- getEnabledExtensions,
78
- getDisabledExtensions,
79
- getInstalledExtensions
80
- };