@commercetools-frontend/application-cli 1.8.1 → 2.0.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/README.md +3 -3
- package/cli/dist/commercetools-frontend-application-cli-cli.cjs.d.ts +1 -1
- package/cli/dist/commercetools-frontend-application-cli-cli.cjs.dev.js +284 -141
- package/cli/dist/commercetools-frontend-application-cli-cli.cjs.prod.js +284 -141
- package/cli/dist/commercetools-frontend-application-cli-cli.esm.js +279 -137
- package/dist/commercetools-frontend-application-cli.cjs.d.ts +1 -1
- package/dist/declarations/src/index.d.ts +1 -1
- package/dist/declarations/src/types.d.ts +23 -5
- package/package.json +9 -10
- package/cli/dist/commercetools-frontend-application-cli-cli.cjs.d.ts.map +0 -1
- package/dist/commercetools-frontend-application-cli.cjs.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -23,11 +23,11 @@ pnpm application-cli compile-deployments \
|
|
|
23
23
|
--build-revision=<git_sha>
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
The environments to compile the deployments for must be specified in a `
|
|
26
|
+
The environments to compile the deployments for must be specified in a `storage-buckets` [cosmiconfig](https://github.com/davidtheclark/cosmiconfig) file for example `storage-buckets.config.cjs` with the bucket region mapping to multiple environments. For example:
|
|
27
27
|
|
|
28
28
|
```js
|
|
29
29
|
/**
|
|
30
|
-
* @type {import('@commercetools-frontend/application-cli').
|
|
30
|
+
* @type {import('@commercetools-frontend/application-cli').TStorageBucketsConfig}
|
|
31
31
|
*/
|
|
32
32
|
module.exports = {
|
|
33
33
|
'merchant-center-north-america': ['gcp-production-us'],
|
|
@@ -64,7 +64,7 @@ The configuration also supports an expanded version in which each cloud environm
|
|
|
64
64
|
|
|
65
65
|
```js
|
|
66
66
|
/**
|
|
67
|
-
* @type {import('@commercetools-frontend/application-cli').
|
|
67
|
+
* @type {import('@commercetools-frontend/application-cli').TStorageBucketsConfig}
|
|
68
68
|
*/
|
|
69
69
|
module.exports = {
|
|
70
70
|
'merchant-center-europe': [
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "../../dist/declarations/src/cli";
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2V0b29scy1mcm9udGVuZC1hcHBsaWNhdGlvbi1jbGktY2xpLmNqcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGlzdC9kZWNsYXJhdGlvbnMvc3JjL2NsaS5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIn0=
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var cac = require('cac');
|
|
6
6
|
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
|
|
7
7
|
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
|
|
8
|
+
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
|
|
8
9
|
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
|
|
9
10
|
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
|
|
10
11
|
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
|
|
@@ -12,46 +13,53 @@ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/ob
|
|
|
12
13
|
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
|
|
13
14
|
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
14
15
|
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
|
|
15
|
-
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
|
|
16
16
|
var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
|
|
17
17
|
var _Object$entries = require('@babel/runtime-corejs3/core-js-stable/object/entries');
|
|
18
|
-
var
|
|
18
|
+
var _Set = require('@babel/runtime-corejs3/core-js-stable/set');
|
|
19
|
+
var _flatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/flat');
|
|
19
20
|
var fs = require('fs');
|
|
20
21
|
var path = require('path');
|
|
21
22
|
var listr2 = require('listr2');
|
|
22
23
|
var execa = require('execa');
|
|
23
24
|
var cosmiconfig = require('cosmiconfig');
|
|
24
25
|
var findRoot = require('@manypkg/find-root');
|
|
26
|
+
var _possibleConstructorReturn = require('@babel/runtime-corejs3/helpers/possibleConstructorReturn');
|
|
27
|
+
var _get = require('@babel/runtime-corejs3/helpers/get');
|
|
28
|
+
var _getPrototypeOf = require('@babel/runtime-corejs3/helpers/getPrototypeOf');
|
|
29
|
+
var _inherits = require('@babel/runtime-corejs3/helpers/inherits');
|
|
30
|
+
var _classCallCheck = require('@babel/runtime-corejs3/helpers/classCallCheck');
|
|
31
|
+
var _createClass = require('@babel/runtime-corejs3/helpers/createClass');
|
|
32
|
+
var _Reflect$construct = require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
|
|
25
33
|
var dotenv = require('dotenv');
|
|
26
34
|
var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
|
|
27
35
|
var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
|
|
28
36
|
var applicationConfig = require('@commercetools-frontend/application-config');
|
|
29
37
|
var l10n = require('@commercetools-frontend/l10n');
|
|
30
38
|
var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
|
|
31
|
-
var fetch = require('node-fetch');
|
|
32
39
|
var jsonschema = require('jsonschema');
|
|
33
40
|
|
|
34
41
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
35
42
|
|
|
36
43
|
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
|
|
37
44
|
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
|
|
45
|
+
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
|
|
38
46
|
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
|
|
39
47
|
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
|
|
40
48
|
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
|
|
41
49
|
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
|
|
42
50
|
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
|
|
43
|
-
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
|
|
44
51
|
var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
|
|
45
52
|
var _Object$entries__default = /*#__PURE__*/_interopDefault(_Object$entries);
|
|
46
|
-
var
|
|
53
|
+
var _Set__default = /*#__PURE__*/_interopDefault(_Set);
|
|
54
|
+
var _flatInstanceProperty__default = /*#__PURE__*/_interopDefault(_flatInstanceProperty);
|
|
47
55
|
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
48
56
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
49
57
|
var execa__default = /*#__PURE__*/_interopDefault(execa);
|
|
58
|
+
var _Reflect$construct__default = /*#__PURE__*/_interopDefault(_Reflect$construct);
|
|
50
59
|
var dotenv__default = /*#__PURE__*/_interopDefault(dotenv);
|
|
51
60
|
var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
|
|
52
61
|
var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
|
|
53
62
|
var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
|
|
54
|
-
var fetch__default = /*#__PURE__*/_interopDefault(fetch);
|
|
55
63
|
|
|
56
64
|
function getApplicationDirectory(cwd) {
|
|
57
65
|
return fs__default["default"].realpathSync(cwd);
|
|
@@ -66,19 +74,167 @@ function isCI() {
|
|
|
66
74
|
return process.env.CI === true || process.env.CI === 'true';
|
|
67
75
|
}
|
|
68
76
|
|
|
69
|
-
function
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
function ownKeys$4(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
78
|
+
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var _context3, _context4; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context3 = ownKeys$4(Object(t), !0)).call(_context3, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context4 = ownKeys$4(Object(t))).call(_context4, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
|
|
79
|
+
function _callSuper(_this, derived, args) {
|
|
80
|
+
function isNativeReflectConstruct() {
|
|
81
|
+
if (typeof Reflect === "undefined" || !_Reflect$construct__default["default"]) return false;
|
|
82
|
+
if (_Reflect$construct__default["default"].sham) return false;
|
|
83
|
+
if (typeof Proxy === "function") return true;
|
|
84
|
+
try {
|
|
85
|
+
return !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {}));
|
|
86
|
+
} catch (e) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
derived = _getPrototypeOf(derived);
|
|
91
|
+
return _possibleConstructorReturn(_this, isNativeReflectConstruct() ? _Reflect$construct__default["default"](derived, args || [], _getPrototypeOf(_this).constructor) : derived.apply(_this, args));
|
|
92
|
+
}
|
|
93
|
+
let StorageProvider = /*#__PURE__*/function () {
|
|
94
|
+
function StorageProvider() {
|
|
95
|
+
_classCallCheck(this, StorageProvider);
|
|
96
|
+
}
|
|
97
|
+
_createClass(StorageProvider, [{
|
|
98
|
+
key: "getBucketNamespace",
|
|
99
|
+
value:
|
|
100
|
+
/**
|
|
101
|
+
* Construct the storage bucket URL for the specific application and cloud environment.
|
|
102
|
+
*
|
|
103
|
+
* 1. Static assets are uploaded to `:bucketRegion/:prNumber?/:applicationName`
|
|
104
|
+
* 2. The application index is uploaded to `:bucketRegion/:prNumber?/:applicationName/:cloudEnvironment`
|
|
105
|
+
*
|
|
106
|
+
* This allows all cloud environments sharing the same static assets while each application's index
|
|
107
|
+
* is uploaded with different headers (e.g. CSP rules).
|
|
108
|
+
*/
|
|
109
|
+
function getBucketNamespace(prNumber) {
|
|
110
|
+
if (!prNumber) return;
|
|
111
|
+
if (prNumber === 'merchant-center-preview') return prNumber;
|
|
112
|
+
return `mc-${prNumber}`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Construct the storage bucket URL for the specific application and cloud environment.
|
|
117
|
+
*/
|
|
118
|
+
}, {
|
|
119
|
+
key: "getAssetsBucketUrl",
|
|
120
|
+
value: function getAssetsBucketUrl(_ref) {
|
|
121
|
+
var _context;
|
|
122
|
+
let bucketProtocol = _ref.bucketProtocol,
|
|
123
|
+
bucketRegion = _ref.bucketRegion,
|
|
124
|
+
bucketNamespace = _ref.bucketNamespace,
|
|
125
|
+
applicationName = _ref.applicationName;
|
|
126
|
+
const assetsBucketUrl = _filterInstanceProperty__default["default"](_context = [bucketRegion, bucketNamespace, applicationName]).call(_context, Boolean).join('/');
|
|
127
|
+
return `${bucketProtocol}${assetsBucketUrl}`;
|
|
128
|
+
}
|
|
129
|
+
}, {
|
|
130
|
+
key: "getApplicationIndexBucketUrl",
|
|
131
|
+
value: function getApplicationIndexBucketUrl(_ref2) {
|
|
132
|
+
let bucketProtocol = _ref2.bucketProtocol,
|
|
133
|
+
bucketRegion = _ref2.bucketRegion,
|
|
134
|
+
bucketNamespace = _ref2.bucketNamespace,
|
|
135
|
+
prNumber = _ref2.prNumber,
|
|
136
|
+
applicationName = _ref2.applicationName,
|
|
137
|
+
bucketEnvironment = _ref2.bucketEnvironment;
|
|
138
|
+
const applicationAssetsBucketUrl = this.getAssetsBucketUrl({
|
|
139
|
+
bucketProtocol,
|
|
140
|
+
bucketRegion,
|
|
141
|
+
bucketNamespace,
|
|
142
|
+
prNumber,
|
|
143
|
+
applicationName
|
|
144
|
+
});
|
|
145
|
+
const applicationIndexBucketUrl = `${applicationAssetsBucketUrl}/${bucketEnvironment}`;
|
|
146
|
+
return applicationIndexBucketUrl;
|
|
147
|
+
}
|
|
148
|
+
}, {
|
|
149
|
+
key: "getCdnUrl",
|
|
150
|
+
value: function getCdnUrl(_ref3) {
|
|
151
|
+
var _context2;
|
|
152
|
+
let publicBaseUrl = _ref3.publicBaseUrl,
|
|
153
|
+
bucketRegion = _ref3.bucketRegion,
|
|
154
|
+
prNumber = _ref3.prNumber,
|
|
155
|
+
applicationName = _ref3.applicationName;
|
|
156
|
+
return _filterInstanceProperty__default["default"](_context2 = [publicBaseUrl, bucketRegion, this.getBucketNamespace(prNumber), applicationName]).call(_context2, Boolean).join('/');
|
|
157
|
+
}
|
|
158
|
+
}]);
|
|
159
|
+
return StorageProvider;
|
|
160
|
+
}();
|
|
161
|
+
let GoogleStorageProvider = /*#__PURE__*/function (_StorageProvider) {
|
|
162
|
+
_inherits(GoogleStorageProvider, _StorageProvider);
|
|
163
|
+
function GoogleStorageProvider() {
|
|
164
|
+
_classCallCheck(this, GoogleStorageProvider);
|
|
165
|
+
return _callSuper(this, GoogleStorageProvider, arguments);
|
|
166
|
+
}
|
|
167
|
+
_createClass(GoogleStorageProvider, [{
|
|
168
|
+
key: "getTag",
|
|
169
|
+
value: function getTag() {
|
|
170
|
+
return 'gs';
|
|
171
|
+
}
|
|
172
|
+
}, {
|
|
173
|
+
key: "getProtocol",
|
|
174
|
+
value: function getProtocol() {
|
|
175
|
+
return 'gs://';
|
|
176
|
+
}
|
|
177
|
+
}, {
|
|
178
|
+
key: "getPublicBaseUrl",
|
|
179
|
+
value: function getPublicBaseUrl() {
|
|
180
|
+
return 'https://storage.googleapis.com';
|
|
181
|
+
}
|
|
182
|
+
}, {
|
|
183
|
+
key: "getCdnUrl",
|
|
184
|
+
value: function getCdnUrl(config) {
|
|
185
|
+
return _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getCdnUrl", this).call(this, _objectSpread$4({
|
|
186
|
+
publicBaseUrl: this.getPublicBaseUrl()
|
|
187
|
+
}, config));
|
|
188
|
+
}
|
|
189
|
+
}, {
|
|
190
|
+
key: "getAssetsBucketUrl",
|
|
191
|
+
value: function getAssetsBucketUrl(config) {
|
|
192
|
+
return _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getAssetsBucketUrl", this).call(this, _objectSpread$4({
|
|
193
|
+
bucketProtocol: this.getProtocol(),
|
|
194
|
+
bucketNamespace: _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getBucketNamespace", this).call(this, config.prNumber)
|
|
195
|
+
}, config));
|
|
196
|
+
}
|
|
197
|
+
}, {
|
|
198
|
+
key: "getApplicationIndexBucketUrl",
|
|
199
|
+
value: function getApplicationIndexBucketUrl(config) {
|
|
200
|
+
return _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getApplicationIndexBucketUrl", this).call(this, _objectSpread$4({
|
|
201
|
+
bucketProtocol: this.getProtocol(),
|
|
202
|
+
bucketNamespace: _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getBucketNamespace", this).call(this, config.prNumber)
|
|
203
|
+
}, config));
|
|
204
|
+
}
|
|
205
|
+
}]);
|
|
206
|
+
return GoogleStorageProvider;
|
|
207
|
+
}(StorageProvider); // TODO: to be implemented.
|
|
208
|
+
function getStorageProvider(storageProvider) {
|
|
209
|
+
switch (storageProvider) {
|
|
210
|
+
case 'gs':
|
|
211
|
+
return new GoogleStorageProvider();
|
|
212
|
+
default:
|
|
213
|
+
throw new Error(`Storage provider ${storageProvider} not supported`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
let GoogleStorageUploadScriptsGenerator = /*#__PURE__*/function () {
|
|
218
|
+
function GoogleStorageUploadScriptsGenerator() {
|
|
219
|
+
_classCallCheck(this, GoogleStorageUploadScriptsGenerator);
|
|
220
|
+
}
|
|
221
|
+
_createClass(GoogleStorageUploadScriptsGenerator, [{
|
|
222
|
+
key: "getApplicationIndexUploadScript",
|
|
223
|
+
value: function getApplicationIndexUploadScript(_ref) {
|
|
224
|
+
let packageManagerName = _ref.packageManagerName,
|
|
225
|
+
bucketUrl = _ref.bucketUrl,
|
|
226
|
+
cdnUrl = _ref.cdnUrl,
|
|
227
|
+
bucketEnvironment = _ref.bucketEnvironment,
|
|
228
|
+
buildRevision = _ref.buildRevision,
|
|
229
|
+
buildNumber = _ref.buildNumber,
|
|
230
|
+
applicationIndexOutFile = _ref.applicationIndexOutFile;
|
|
231
|
+
return `
|
|
232
|
+
#!/usr/bin/env bash
|
|
78
233
|
|
|
79
234
|
set -e
|
|
80
235
|
|
|
81
|
-
echo "Uploading compiled ${applicationIndexOutFile} to bucket ${bucketUrl}"
|
|
236
|
+
echo "Uploading compiled ${applicationIndexOutFile} to Google Storage bucket ${bucketUrl}"
|
|
237
|
+
|
|
82
238
|
gcloud storage cp \\
|
|
83
239
|
"$(dirname "$0")/${applicationIndexOutFile}" \\
|
|
84
240
|
"${bucketUrl}/" \\
|
|
@@ -101,14 +257,15 @@ gcloud storage cp \\
|
|
|
101
257
|
--content-type="application/json" \\
|
|
102
258
|
--cache-control="public,max-age=0,no-transform"
|
|
103
259
|
`;
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
260
|
+
}
|
|
261
|
+
}, {
|
|
262
|
+
key: "getProductionBundlesUploadScript",
|
|
263
|
+
value: function getProductionBundlesUploadScript(_ref2) {
|
|
264
|
+
let bucketUrl = _ref2.bucketUrl,
|
|
265
|
+
assetsPath = _ref2.assetsPath,
|
|
266
|
+
skipMenu = _ref2.skipMenu;
|
|
267
|
+
return `
|
|
268
|
+
#!/usr/bin/env bash
|
|
112
269
|
|
|
113
270
|
set -e
|
|
114
271
|
|
|
@@ -121,7 +278,7 @@ set -e
|
|
|
121
278
|
# "valid" lifetime of an asset to be cached.
|
|
122
279
|
# 4. The '-n' will skip uploading existing files and prevents them to
|
|
123
280
|
# be overwritten
|
|
124
|
-
echo "Uploading static assets to bucket ${bucketUrl}"
|
|
281
|
+
echo "Uploading static assets to Google Storage bucket ${bucketUrl}"
|
|
125
282
|
|
|
126
283
|
gcloud storage cp \\
|
|
127
284
|
${assetsPath}/public/{*.css,*.js,*.js.map,*.png,*.html,robots.txt} \\
|
|
@@ -160,7 +317,17 @@ else
|
|
|
160
317
|
--cache-control="public,max-age=0,no-transform"
|
|
161
318
|
fi
|
|
162
319
|
`;
|
|
163
|
-
|
|
320
|
+
}
|
|
321
|
+
}]);
|
|
322
|
+
return GoogleStorageUploadScriptsGenerator;
|
|
323
|
+
}(); // TODO: To be implemented.
|
|
324
|
+
function getUploadScriptsGenerator(storageProvider) {
|
|
325
|
+
switch (storageProvider) {
|
|
326
|
+
case 'gs':
|
|
327
|
+
return new GoogleStorageUploadScriptsGenerator();
|
|
328
|
+
default:
|
|
329
|
+
throw new Error(`Storage provider ${storageProvider} not supported`);
|
|
330
|
+
}
|
|
164
331
|
}
|
|
165
332
|
|
|
166
333
|
function ownKeys$3(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -201,14 +368,10 @@ function loadDotenvFiles(_ref) {
|
|
|
201
368
|
}
|
|
202
369
|
|
|
203
370
|
function ownKeys$2(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
204
|
-
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var
|
|
205
|
-
const buckedConfigExplorer = cosmiconfig.cosmiconfig('
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
function assertExpandedBucketEnvironmentConfig(bucketEnvironmentConfigOrBucketEnvironment) {
|
|
210
|
-
return typeof bucketEnvironmentConfigOrBucketEnvironment == 'object' && typeof bucketEnvironmentConfigOrBucketEnvironment.cloudEnvironment == 'string' && typeof bucketEnvironmentConfigOrBucketEnvironment.bucketEnvironment == 'string';
|
|
211
|
-
}
|
|
371
|
+
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var _context4, _context5; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context4 = ownKeys$2(Object(t), !0)).call(_context4, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context5 = ownKeys$2(Object(t))).call(_context5, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
|
|
372
|
+
const buckedConfigExplorer = cosmiconfig.cosmiconfig('storage-buckets', {
|
|
373
|
+
searchStrategy: 'project'
|
|
374
|
+
});
|
|
212
375
|
function writeUploadScriptFile(_ref) {
|
|
213
376
|
let fileName = _ref.fileName,
|
|
214
377
|
fileContent = _ref.fileContent,
|
|
@@ -219,56 +382,15 @@ function writeUploadScriptFile(_ref) {
|
|
|
219
382
|
encoding: 'utf8'
|
|
220
383
|
});
|
|
221
384
|
}
|
|
222
|
-
function
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
* 1. Static assets are uploaded to `:bucketRegion/:prNumber?/:applicationName`
|
|
232
|
-
* 2. The application index is uploaded to `:bucketRegion/:prNumber?/:applicationName/:cloudEnvironment`
|
|
233
|
-
*
|
|
234
|
-
* This allows all cloud environments sharing the same static assets while each application's index
|
|
235
|
-
* is uploaded with different headers (e.g. CSP rules).
|
|
236
|
-
*/
|
|
237
|
-
|
|
238
|
-
function getApplicationAssetsBucketUrl(_ref2) {
|
|
239
|
-
var _context;
|
|
240
|
-
let bucketRegion = _ref2.bucketRegion,
|
|
241
|
-
prNumber = _ref2.prNumber,
|
|
242
|
-
applicationName = _ref2.applicationName;
|
|
243
|
-
const applicationAssetsBucketUrl = _filterInstanceProperty__default["default"](_context = [`gs://${bucketRegion}`, getBucketNamespace(prNumber), applicationName]).call(_context, Boolean);
|
|
244
|
-
return applicationAssetsBucketUrl.join('/');
|
|
245
|
-
}
|
|
246
|
-
function getApplicationIndexBucketUrl(_ref3) {
|
|
247
|
-
let bucketRegion = _ref3.bucketRegion,
|
|
248
|
-
prNumber = _ref3.prNumber,
|
|
249
|
-
applicationName = _ref3.applicationName,
|
|
250
|
-
bucketEnvironment = _ref3.bucketEnvironment;
|
|
251
|
-
const applicationAssetsBucketUrl = getApplicationAssetsBucketUrl({
|
|
252
|
-
bucketRegion,
|
|
253
|
-
prNumber,
|
|
254
|
-
applicationName
|
|
255
|
-
});
|
|
256
|
-
const applicationIndexBucketUrl = `${applicationAssetsBucketUrl}/${bucketEnvironment}`;
|
|
257
|
-
return applicationIndexBucketUrl;
|
|
258
|
-
}
|
|
259
|
-
function getCdnUrl(_ref4) {
|
|
260
|
-
var _context2;
|
|
261
|
-
let bucketRegion = _ref4.bucketRegion,
|
|
262
|
-
prNumber = _ref4.prNumber,
|
|
263
|
-
applicationName = _ref4.applicationName;
|
|
264
|
-
return _filterInstanceProperty__default["default"](_context2 = [`https://storage.googleapis.com/${bucketRegion}`, getBucketNamespace(prNumber), applicationName]).call(_context2, Boolean).join('/');
|
|
265
|
-
}
|
|
266
|
-
async function compileApplicationAssets(_ref5) {
|
|
267
|
-
let cliFlags = _ref5.cliFlags,
|
|
268
|
-
bucketRegion = _ref5.bucketRegion,
|
|
269
|
-
paths = _ref5.paths;
|
|
270
|
-
const applicationAssetsUploadScriptContent = createApplicationAssetsUploadScript({
|
|
271
|
-
bucketUrl: getApplicationAssetsBucketUrl({
|
|
385
|
+
async function compileApplicationAssets(_ref2) {
|
|
386
|
+
let cliFlags = _ref2.cliFlags,
|
|
387
|
+
storageProvider = _ref2.storageProvider,
|
|
388
|
+
uploadScriptsGenerator = _ref2.uploadScriptsGenerator,
|
|
389
|
+
bucketRegion = _ref2.bucketRegion,
|
|
390
|
+
paths = _ref2.paths;
|
|
391
|
+
const applicationAssetsUploadScriptContent = uploadScriptsGenerator.getProductionBundlesUploadScript({
|
|
392
|
+
storageProvider,
|
|
393
|
+
bucketUrl: storageProvider.getAssetsBucketUrl({
|
|
272
394
|
bucketRegion,
|
|
273
395
|
prNumber: cliFlags.prNumber,
|
|
274
396
|
applicationName: cliFlags.applicationName
|
|
@@ -281,16 +403,18 @@ async function compileApplicationAssets(_ref5) {
|
|
|
281
403
|
writeUploadScriptFile({
|
|
282
404
|
fileName: applicationAssetsUploadScriptFileName,
|
|
283
405
|
fileContent: applicationAssetsUploadScriptContent,
|
|
284
|
-
filePath: paths.deploymentsPath
|
|
406
|
+
filePath: path__default["default"].join(paths.deploymentsPath, storageProvider.getTag())
|
|
285
407
|
});
|
|
286
408
|
}
|
|
287
|
-
async function compileEnvironmentApplicationIndexes(
|
|
288
|
-
let cliFlags =
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
409
|
+
async function compileEnvironmentApplicationIndexes(_ref3) {
|
|
410
|
+
let cliFlags = _ref3.cliFlags,
|
|
411
|
+
storageProvider = _ref3.storageProvider,
|
|
412
|
+
uploadScriptsGenerator = _ref3.uploadScriptsGenerator,
|
|
413
|
+
paths = _ref3.paths,
|
|
414
|
+
bucketRegion = _ref3.bucketRegion,
|
|
415
|
+
cloudEnvironment = _ref3.cloudEnvironment,
|
|
416
|
+
bucketEnvironment = _ref3.bucketEnvironment;
|
|
417
|
+
const cloudEnvironmentDeploymentPath = path__default["default"].join(paths.deploymentsPath, storageProvider.getTag(), cloudEnvironment);
|
|
294
418
|
// Ensure the folder exists
|
|
295
419
|
const createDeploymentsFolderResult = await execa__default["default"]('mkdir', ['-p', cloudEnvironmentDeploymentPath], {
|
|
296
420
|
encoding: 'utf8'
|
|
@@ -300,7 +424,7 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
|
|
|
300
424
|
}
|
|
301
425
|
|
|
302
426
|
// Construct the proper CDN URL for the specific application
|
|
303
|
-
const cdnUrl = getCdnUrl({
|
|
427
|
+
const cdnUrl = storageProvider.getCdnUrl({
|
|
304
428
|
bucketRegion,
|
|
305
429
|
prNumber: cliFlags.prNumber,
|
|
306
430
|
applicationName: cliFlags.applicationName
|
|
@@ -343,9 +467,10 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
|
|
|
343
467
|
if (compileResult.failed) {
|
|
344
468
|
throw new Error(compileResult.stderr);
|
|
345
469
|
}
|
|
346
|
-
const applicationIndexUploadScriptContent =
|
|
470
|
+
const applicationIndexUploadScriptContent = uploadScriptsGenerator.getApplicationIndexUploadScript({
|
|
471
|
+
storageProvider,
|
|
347
472
|
packageManagerName: cliFlags.packageManagerName,
|
|
348
|
-
bucketUrl: getApplicationIndexBucketUrl({
|
|
473
|
+
bucketUrl: storageProvider.getApplicationIndexBucketUrl({
|
|
349
474
|
bucketRegion,
|
|
350
475
|
prNumber: cliFlags.prNumber,
|
|
351
476
|
applicationName: cliFlags.applicationName,
|
|
@@ -357,8 +482,6 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
|
|
|
357
482
|
buildNumber: cliFlags.buildNumber,
|
|
358
483
|
applicationIndexOutFile: cliFlags.applicationIndexOutFile
|
|
359
484
|
});
|
|
360
|
-
// Generate bash scripts to run the `gcloud storage` upload command.
|
|
361
|
-
|
|
362
485
|
writeUploadScriptFile({
|
|
363
486
|
fileName: cliFlags.applicationIndexUploadScriptOutFile,
|
|
364
487
|
fileContent: applicationIndexUploadScriptContent,
|
|
@@ -366,23 +489,22 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
|
|
|
366
489
|
});
|
|
367
490
|
|
|
368
491
|
// Move the compiled `index.html` to the deployments folder of the related cloud environment.
|
|
369
|
-
|
|
370
492
|
const moveResult = await execa__default["default"]('mv', [path__default["default"].join(paths.publicAssetsPath, 'index.html'), path__default["default"].join(cloudEnvironmentDeploymentPath, cliFlags.applicationIndexOutFile)]);
|
|
371
493
|
if (moveResult.failed) {
|
|
372
494
|
throw new Error(moveResult.stderr);
|
|
373
495
|
}
|
|
374
496
|
}
|
|
375
497
|
async function command$3(cliFlags, cwd) {
|
|
376
|
-
var
|
|
498
|
+
var _context;
|
|
377
499
|
let cloudEnvironmentsGroupedByBucketRegions;
|
|
378
500
|
try {
|
|
379
501
|
// This is the list of the supported cloud environments and their related bucket location.
|
|
380
502
|
cloudEnvironmentsGroupedByBucketRegions = await buckedConfigExplorer.search();
|
|
381
503
|
} catch (e) {
|
|
382
|
-
throw new Error('Failed loading a
|
|
504
|
+
throw new Error('Failed loading a storage bucket configuration. Create a cosmiconfig for `storage-buckets` for example `storage-buckets.config.cjs`.');
|
|
383
505
|
}
|
|
384
506
|
if (!cloudEnvironmentsGroupedByBucketRegions) {
|
|
385
|
-
throw new Error('Failed loading a
|
|
507
|
+
throw new Error('Failed loading a storage bucket configuration');
|
|
386
508
|
}
|
|
387
509
|
const applicationDirectory = getApplicationDirectory(cwd);
|
|
388
510
|
let assetsPath;
|
|
@@ -398,45 +520,67 @@ async function command$3(cliFlags, cwd) {
|
|
|
398
520
|
dotenvPath: cliFlags.dotenvFolder && path__default["default"].join(monorepoRoot.rootDir, cliFlags.dotenvFolder),
|
|
399
521
|
assetsPath
|
|
400
522
|
};
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
523
|
+
const defaultStorageProviders = ['gs'];
|
|
524
|
+
const taskList = new listr2.Listr(_mapInstanceProperty__default["default"](_context = _Object$entries__default["default"](cloudEnvironmentsGroupedByBucketRegions.config)).call(_context, _ref4 => {
|
|
525
|
+
let _ref5 = _slicedToArray(_ref4, 2),
|
|
526
|
+
bucketRegion = _ref5[0],
|
|
527
|
+
bucketEnvironmentConfigs = _ref5[1];
|
|
405
528
|
return {
|
|
406
529
|
title: `Compiling for bucket region ${bucketRegion}`,
|
|
407
|
-
task: () => {
|
|
408
|
-
var
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
} else if (assertCollapsedBucketEnvironmentConfig(bucketEnvironmentConfigOrBucketEnvironment)) {
|
|
416
|
-
cloudEnvironment = bucketEnvironmentConfigOrBucketEnvironment;
|
|
417
|
-
bucketEnvironment = bucketEnvironmentConfigOrBucketEnvironment;
|
|
418
|
-
}
|
|
530
|
+
task: (_bucketRegionCtx, bucketRegionTask) => {
|
|
531
|
+
var _context2;
|
|
532
|
+
// NOTE: Application assets need to be compiled
|
|
533
|
+
// for all storage providers once per region.
|
|
534
|
+
const allStorageProvidersForBucketRegion = [...new _Set__default["default"](_flatInstanceProperty__default["default"](_context2 = _mapInstanceProperty__default["default"](bucketEnvironmentConfigs).call(bucketEnvironmentConfigs, bucketEnvironmentConfig => bucketEnvironmentConfig.storageProviders || defaultStorageProviders)).call(_context2))];
|
|
535
|
+
const allApplicationAssetTasks = _mapInstanceProperty__default["default"](allStorageProvidersForBucketRegion).call(allStorageProvidersForBucketRegion, storageProviderTag => {
|
|
536
|
+
const storageProvider = getStorageProvider(storageProviderTag);
|
|
537
|
+
const uploadScriptsGenerator = getUploadScriptsGenerator(storageProviderTag);
|
|
419
538
|
return {
|
|
420
|
-
title: `Compiling application
|
|
421
|
-
task: () =>
|
|
539
|
+
title: `Compiling application assets for '${storageProviderTag}'`,
|
|
540
|
+
task: () => compileApplicationAssets({
|
|
422
541
|
cliFlags,
|
|
423
|
-
|
|
542
|
+
storageProvider,
|
|
543
|
+
uploadScriptsGenerator,
|
|
424
544
|
bucketRegion,
|
|
425
|
-
|
|
426
|
-
bucketEnvironment
|
|
545
|
+
paths
|
|
427
546
|
})
|
|
428
547
|
};
|
|
429
|
-
})
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
548
|
+
});
|
|
549
|
+
const allApplicationIndexTasks = _mapInstanceProperty__default["default"](bucketEnvironmentConfigs).call(bucketEnvironmentConfigs, bucketEnvironmentConfig => {
|
|
550
|
+
const cloudEnvironment = bucketEnvironmentConfig.cloudEnvironment,
|
|
551
|
+
bucketEnvironment = bucketEnvironmentConfig.bucketEnvironment,
|
|
552
|
+
storageProviders = bucketEnvironmentConfig.storageProviders;
|
|
553
|
+
return {
|
|
554
|
+
title: `Compiling for cloud environment '${cloudEnvironment}'`,
|
|
555
|
+
task: (_storageProviderCtx, storageProviderTask) => {
|
|
556
|
+
var _context3;
|
|
557
|
+
const applicationIndexTasksForStorageProviders = _mapInstanceProperty__default["default"](_context3 = storageProviders || defaultStorageProviders).call(_context3, storageProviderTag => {
|
|
558
|
+
const storageProvider = getStorageProvider(storageProviderTag);
|
|
559
|
+
const uploadScriptsGenerator = getUploadScriptsGenerator(storageProviderTag);
|
|
560
|
+
return {
|
|
561
|
+
title: `Compiling application index for storage provider '${storageProviderTag}'`,
|
|
562
|
+
task: () => {
|
|
563
|
+
return compileEnvironmentApplicationIndexes({
|
|
564
|
+
cliFlags,
|
|
565
|
+
storageProvider,
|
|
566
|
+
uploadScriptsGenerator,
|
|
567
|
+
paths,
|
|
568
|
+
bucketRegion,
|
|
569
|
+
cloudEnvironment,
|
|
570
|
+
bucketEnvironment
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
});
|
|
575
|
+
return storageProviderTask.newListr(applicationIndexTasksForStorageProviders);
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
});
|
|
579
|
+
return bucketRegionTask.newListr([...allApplicationIndexTasks, ...allApplicationAssetTasks]);
|
|
437
580
|
}
|
|
438
581
|
};
|
|
439
582
|
}), {
|
|
583
|
+
// @ts-ignore
|
|
440
584
|
renderer: isCI() ? 'verbose' : 'default'
|
|
441
585
|
});
|
|
442
586
|
await taskList.run();
|
|
@@ -569,7 +713,7 @@ async function command$1(cliFlags) {
|
|
|
569
713
|
var _context, _context2;
|
|
570
714
|
// The last build's JSON becomes the first rollback
|
|
571
715
|
// while all previous rollbacks remain but are sliced.
|
|
572
|
-
const lastVersionResponse = await
|
|
716
|
+
const lastVersionResponse = await fetch(cliFlags.versionUrl);
|
|
573
717
|
const lastVersionJson = await lastVersionResponse.json();
|
|
574
718
|
const previousBuild = lastVersionJson && {
|
|
575
719
|
buildNumber: lastVersionJson.buildNumber,
|
|
@@ -718,7 +862,7 @@ async function command(cliFlags) {
|
|
|
718
862
|
|
|
719
863
|
var pkgJson = {
|
|
720
864
|
name: "@commercetools-frontend/application-cli",
|
|
721
|
-
version: "
|
|
865
|
+
version: "2.0.0",
|
|
722
866
|
description: "Internal CLI to manage Merchant Center application deployments across various environments.",
|
|
723
867
|
keywords: [
|
|
724
868
|
"commercetools",
|
|
@@ -743,26 +887,25 @@ var pkgJson = {
|
|
|
743
887
|
"@babel/core": "^7.22.11",
|
|
744
888
|
"@babel/runtime": "^7.21.0",
|
|
745
889
|
"@babel/runtime-corejs3": "^7.21.0",
|
|
746
|
-
"@commercetools-frontend/application-config": "22.
|
|
747
|
-
"@commercetools-frontend/constants": "22.
|
|
748
|
-
"@commercetools-frontend/l10n": "22.
|
|
890
|
+
"@commercetools-frontend/application-config": "22.16.0",
|
|
891
|
+
"@commercetools-frontend/constants": "22.16.0",
|
|
892
|
+
"@commercetools-frontend/l10n": "22.16.0",
|
|
749
893
|
"@manypkg/find-root": "2.2.1",
|
|
750
894
|
cac: "^6.7.14",
|
|
751
|
-
cosmiconfig: "
|
|
752
|
-
dotenv: "16.3.
|
|
895
|
+
cosmiconfig: "9.0.0",
|
|
896
|
+
dotenv: "16.3.2",
|
|
753
897
|
execa: "5.1.1",
|
|
754
898
|
jsonschema: "^1.4.1",
|
|
755
|
-
listr2: "
|
|
899
|
+
listr2: "8.0.1",
|
|
756
900
|
"node-fetch": "2.7.0"
|
|
757
901
|
},
|
|
758
902
|
devDependencies: {
|
|
759
903
|
"@tsconfig/node20": "20.1.2",
|
|
760
|
-
"@types/node": "20.
|
|
761
|
-
"@types/node-fetch": "2.6.2",
|
|
904
|
+
"@types/node": "20.11.5",
|
|
762
905
|
typescript: "5.2.2"
|
|
763
906
|
},
|
|
764
907
|
engines: {
|
|
765
|
-
node: ">=
|
|
908
|
+
node: ">=18",
|
|
766
909
|
npm: ">=6"
|
|
767
910
|
},
|
|
768
911
|
publishConfig: {
|