@contentstack/cli-cm-bulk-publish 0.1.1-beta.5 → 1.0.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/LICENSE +21 -0
- package/README.md +522 -318
- package/oclif.manifest.json +1 -1
- package/package.json +26 -11
- package/src/commands/cm/assets/publish.js +243 -0
- package/src/commands/cm/assets/unpublish.js +179 -0
- package/src/commands/cm/bulk-publish/cross-publish.js +181 -67
- package/src/commands/cm/bulk-publish/index.js +5 -6
- package/src/commands/cm/entries/publish-modified.js +197 -0
- package/src/commands/cm/entries/publish-non-localized-fields.js +208 -0
- package/src/commands/cm/entries/publish-only-unpublished.js +109 -0
- package/src/commands/cm/entries/publish.js +254 -0
- package/src/commands/cm/entries/unpublish.js +184 -0
- package/src/commands/cm/entries/update-and-publish.js +191 -0
- package/src/commands/cm/stacks/publish-clear-logs.js +82 -0
- package/src/commands/cm/stacks/publish-configure.js +46 -0
- package/src/commands/cm/stacks/publish-revert.js +102 -0
- package/src/commands/cm/stacks/publish.js +110 -0
- package/src/commands/cm/stacks/unpublish.js +282 -0
- package/src/config/index.js +18 -57
- package/src/consumer/publish.js +589 -362
- package/src/producer/add-fields.js +204 -179
- package/src/producer/cross-publish.js +177 -99
- package/src/producer/nonlocalized-field-changes.js +225 -194
- package/src/producer/publish-assets.js +97 -83
- package/src/producer/publish-edits.js +113 -88
- package/src/producer/publish-entries.js +121 -90
- package/src/producer/publish-unpublished-env.js +114 -90
- package/src/producer/revert.js +261 -230
- package/src/producer/unpublish.js +154 -97
- package/src/services/publish-only-unpublished.js +130 -0
- package/src/util/client.js +14 -15
- package/src/util/command-helper.js +25 -0
- package/src/util/fs.js +10 -11
- package/src/util/index.js +38 -36
- package/src/util/logger.js +21 -25
- package/src/util/queue.js +13 -13
- package/src/util/retryfailed.js +8 -4
- package/src/util/store.js +43 -47
- package/src/commands/cm/bulk-publish/add-fields.js +0 -122
- package/src/commands/cm/bulk-publish/assets.js +0 -122
- package/src/commands/cm/bulk-publish/clear.js +0 -65
- package/src/commands/cm/bulk-publish/configure.js +0 -44
- package/src/commands/cm/bulk-publish/entries.js +0 -131
- package/src/commands/cm/bulk-publish/entry-edits.js +0 -129
- package/src/commands/cm/bulk-publish/nonlocalized-field-changes.js +0 -121
- package/src/commands/cm/bulk-publish/revert.js +0 -81
- package/src/commands/cm/bulk-publish/unpublish.js +0 -169
- package/src/commands/cm/bulk-publish/unpublished-entries.js +0 -127
- package/src/util/request.js +0 -59
|
@@ -3,43 +3,39 @@
|
|
|
3
3
|
/* eslint-disable camelcase */
|
|
4
4
|
/* eslint-disable complexity */
|
|
5
5
|
/* eslint-disable max-params */
|
|
6
|
-
const {getQueue} = require('../util/queue')
|
|
7
|
-
const defaults = require('../config/defaults.json')
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
let
|
|
23
|
-
let bulkPublishAssetSet = []
|
|
24
|
-
let changedFlag = false
|
|
25
|
-
let logFileName
|
|
26
|
-
let filePath
|
|
6
|
+
const { getQueue } = require('../util/queue');
|
|
7
|
+
const defaults = require('../config/defaults.json');
|
|
8
|
+
const { performBulkPublish, publishEntry, publishAsset, initializeLogger } = require('../consumer/publish');
|
|
9
|
+
const retryFailedLogs = require('../util/retryfailed');
|
|
10
|
+
const { validateFile } = require('../util/fs');
|
|
11
|
+
const queue = getQueue();
|
|
12
|
+
const entryQueue = getQueue();
|
|
13
|
+
const assetQueue = getQueue();
|
|
14
|
+
const { Command } = require('@contentstack/cli-command');
|
|
15
|
+
const command = new Command();
|
|
16
|
+
const { isEmpty } = require('../util');
|
|
17
|
+
|
|
18
|
+
let bulkPublishSet = [];
|
|
19
|
+
let bulkPublishAssetSet = [];
|
|
20
|
+
let changedFlag = false;
|
|
21
|
+
let logFileName;
|
|
22
|
+
let filePath;
|
|
27
23
|
|
|
28
24
|
function getQueryParams(filter) {
|
|
29
|
-
let queryString = ''
|
|
30
|
-
Object.keys(filter).forEach(key => {
|
|
25
|
+
let queryString = '';
|
|
26
|
+
Object.keys(filter).forEach((key) => {
|
|
31
27
|
if (filter[key]) {
|
|
32
|
-
queryString = `${queryString}&${key}=${filter[key]}
|
|
28
|
+
queryString = `${queryString}&${key}=${filter[key]}`;
|
|
33
29
|
}
|
|
34
|
-
})
|
|
30
|
+
});
|
|
35
31
|
|
|
36
|
-
return queryString
|
|
32
|
+
return queryString;
|
|
37
33
|
}
|
|
38
34
|
|
|
39
35
|
async function bulkAction(stack, items, bulkPublish, filter, destEnv) {
|
|
40
|
-
return new Promise(async resolve => {
|
|
36
|
+
return new Promise(async (resolve) => {
|
|
41
37
|
for (let index = 0; index < items.length; index++) {
|
|
42
|
-
changedFlag = true
|
|
38
|
+
changedFlag = true;
|
|
43
39
|
|
|
44
40
|
if (bulkPublish) {
|
|
45
41
|
if (bulkPublishSet.length < 10 && items[index].type === 'entry_published') {
|
|
@@ -48,7 +44,7 @@ async function bulkAction(stack, items, bulkPublish, filter, destEnv) {
|
|
|
48
44
|
content_type: items[index].content_type_uid,
|
|
49
45
|
locale: items[index].data.locale || 'en-us',
|
|
50
46
|
publish_details: [items[index].data.publish_details] || [],
|
|
51
|
-
})
|
|
47
|
+
});
|
|
52
48
|
}
|
|
53
49
|
|
|
54
50
|
if (bulkPublishAssetSet.length < 10 && items[index].type === 'asset_published') {
|
|
@@ -56,148 +52,230 @@ async function bulkAction(stack, items, bulkPublish, filter, destEnv) {
|
|
|
56
52
|
uid: items[index].data.uid,
|
|
57
53
|
version: items[index].data._version,
|
|
58
54
|
publish_details: [items[index].data.publish_details] || [],
|
|
59
|
-
})
|
|
55
|
+
});
|
|
60
56
|
}
|
|
61
57
|
|
|
62
58
|
if (bulkPublishAssetSet.length === 10) {
|
|
63
59
|
await queue.Enqueue({
|
|
64
|
-
assets: bulkPublishAssetSet,
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
assets: bulkPublishAssetSet,
|
|
61
|
+
Type: 'asset',
|
|
62
|
+
locale: filter.locale,
|
|
63
|
+
environments: destEnv,
|
|
64
|
+
stack: stack,
|
|
65
|
+
});
|
|
66
|
+
bulkPublishAssetSet = [];
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
if (bulkPublishSet.length === 10) {
|
|
70
70
|
await queue.Enqueue({
|
|
71
|
-
entries: bulkPublishSet,
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
entries: bulkPublishSet,
|
|
72
|
+
locale: filter.locale,
|
|
73
|
+
Type: 'entry',
|
|
74
|
+
environments: destEnv,
|
|
75
|
+
stack: stack,
|
|
76
|
+
});
|
|
77
|
+
bulkPublishSet = [];
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
if (index === items.length - 1 && bulkPublishAssetSet.length <= 10 && bulkPublishAssetSet.length > 0) {
|
|
77
81
|
await queue.Enqueue({
|
|
78
|
-
assets: bulkPublishAssetSet,
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
assets: bulkPublishAssetSet,
|
|
83
|
+
Type: 'asset',
|
|
84
|
+
locale: filter.locale,
|
|
85
|
+
environments: destEnv,
|
|
86
|
+
stack: stack,
|
|
87
|
+
});
|
|
88
|
+
bulkPublishAssetSet = [];
|
|
81
89
|
}
|
|
82
90
|
|
|
83
91
|
if (index === items.length - 1 && bulkPublishSet.length <= 10 && bulkPublishSet.length > 0) {
|
|
84
92
|
await queue.Enqueue({
|
|
85
|
-
entries: bulkPublishSet,
|
|
86
|
-
|
|
87
|
-
|
|
93
|
+
entries: bulkPublishSet,
|
|
94
|
+
locale: filter.locale,
|
|
95
|
+
Type: 'entry',
|
|
96
|
+
environments: destEnv,
|
|
97
|
+
stack: stack,
|
|
98
|
+
});
|
|
99
|
+
bulkPublishSet = [];
|
|
88
100
|
}
|
|
89
101
|
} else {
|
|
90
102
|
if (items[index].type === 'entry_published') {
|
|
91
103
|
await entryQueue.Enqueue({
|
|
92
|
-
content_type: items[index].content_type_uid,
|
|
93
|
-
|
|
104
|
+
content_type: items[index].content_type_uid,
|
|
105
|
+
publish_details: [items[index].data.publish_details],
|
|
106
|
+
environments: destEnv,
|
|
107
|
+
entryUid: items[index].data.uid,
|
|
108
|
+
locale: items[index].data.locale || 'en-us',
|
|
109
|
+
Type: 'entry',
|
|
110
|
+
stack: stack,
|
|
111
|
+
});
|
|
94
112
|
}
|
|
95
113
|
if (items[index].type === 'asset_published') {
|
|
96
114
|
await assetQueue.Enqueue({
|
|
97
|
-
assetUid: items[index].data.uid,
|
|
98
|
-
|
|
115
|
+
assetUid: items[index].data.uid,
|
|
116
|
+
publish_details: [items[index].data.publish_details],
|
|
117
|
+
locale: filter.locale,
|
|
118
|
+
environments: destEnv,
|
|
119
|
+
Type: 'asset',
|
|
120
|
+
stack: stack,
|
|
121
|
+
});
|
|
99
122
|
}
|
|
100
123
|
}
|
|
101
124
|
}
|
|
102
|
-
return resolve()
|
|
103
|
-
})
|
|
125
|
+
return resolve();
|
|
126
|
+
});
|
|
104
127
|
}
|
|
105
128
|
|
|
106
|
-
async function getSyncEntries(
|
|
129
|
+
async function getSyncEntries(
|
|
130
|
+
stack,
|
|
131
|
+
config,
|
|
132
|
+
queryParams,
|
|
133
|
+
bulkPublish,
|
|
134
|
+
filter,
|
|
135
|
+
deliveryToken,
|
|
136
|
+
destEnv,
|
|
137
|
+
paginationToken = null,
|
|
138
|
+
) {
|
|
107
139
|
return new Promise(async (resolve, reject) => {
|
|
108
140
|
try {
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
141
|
+
const tokenDetails = command.getToken(config.alias);
|
|
142
|
+
const queryParamsObj = {};
|
|
143
|
+
const pairs = queryParams.split('&').filter((e) => e !== null && e !== '' && e !== undefined);
|
|
144
|
+
for (let i in pairs) {
|
|
145
|
+
const split = pairs[i].split('=');
|
|
146
|
+
queryParamsObj[decodeURIComponent(split[0])] = decodeURIComponent(split[1]);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const Stack = new command.deliveryAPIClient.Stack({
|
|
150
|
+
api_key: tokenDetails.apiKey,
|
|
151
|
+
delivery_token: deliveryToken,
|
|
152
|
+
environment: queryParamsObj.environment,
|
|
153
|
+
branch: config.branch,
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
const syncData = {};
|
|
157
|
+
|
|
158
|
+
if (paginationToken) {
|
|
159
|
+
syncData['pagination_token'] = paginationToken;
|
|
160
|
+
} else {
|
|
161
|
+
syncData['init'] = true;
|
|
162
|
+
}
|
|
163
|
+
if (queryParamsObj.locale) {
|
|
164
|
+
syncData['locale'] = queryParamsObj.locale;
|
|
116
165
|
}
|
|
117
|
-
|
|
166
|
+
if (queryParamsObj.type) {
|
|
167
|
+
syncData['type'] = queryParamsObj.type;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const entriesResponse = await Stack.sync(syncData);
|
|
171
|
+
|
|
118
172
|
if (entriesResponse.items.length > 0) {
|
|
119
|
-
await bulkAction(stack, entriesResponse.items, bulkPublish, filter, destEnv)
|
|
173
|
+
await bulkAction(stack, entriesResponse.items, bulkPublish, filter, destEnv);
|
|
120
174
|
}
|
|
121
175
|
if (!entriesResponse.pagination_token) {
|
|
122
|
-
if (!changedFlag) console.log('No Entries/Assets Found published on specified environment')
|
|
123
|
-
return resolve()
|
|
176
|
+
if (!changedFlag) console.log('No Entries/Assets Found published on specified environment');
|
|
177
|
+
return resolve();
|
|
124
178
|
}
|
|
125
179
|
setTimeout(async () => {
|
|
126
|
-
await getSyncEntries(
|
|
127
|
-
|
|
180
|
+
await getSyncEntries(
|
|
181
|
+
stack,
|
|
182
|
+
config,
|
|
183
|
+
queryParams,
|
|
184
|
+
bulkPublish,
|
|
185
|
+
filter,
|
|
186
|
+
deliveryToken,
|
|
187
|
+
destEnv,
|
|
188
|
+
entriesResponse.pagination_token,
|
|
189
|
+
);
|
|
190
|
+
}, 3000);
|
|
191
|
+
return resolve();
|
|
128
192
|
} catch (error) {
|
|
129
|
-
reject(error)
|
|
193
|
+
reject(error);
|
|
130
194
|
}
|
|
131
|
-
|
|
132
|
-
})
|
|
195
|
+
});
|
|
133
196
|
}
|
|
134
197
|
|
|
135
198
|
function setConfig(conf, bp) {
|
|
136
199
|
if (bp) {
|
|
137
|
-
logFileName = 'bulk-cross-publish'
|
|
138
|
-
queue.consumer = performBulkPublish
|
|
200
|
+
logFileName = 'bulk-cross-publish';
|
|
201
|
+
queue.consumer = performBulkPublish;
|
|
139
202
|
} else {
|
|
140
|
-
logFileName = 'cross-publish'
|
|
141
|
-
entryQueue.consumer = publishEntry
|
|
142
|
-
assetQueue.consumer = publishAsset
|
|
203
|
+
logFileName = 'cross-publish';
|
|
204
|
+
entryQueue.consumer = publishEntry;
|
|
205
|
+
assetQueue.consumer = publishAsset;
|
|
143
206
|
}
|
|
144
207
|
|
|
145
|
-
queue.config = conf
|
|
146
|
-
entryQueue.config = conf
|
|
147
|
-
assetQueue.config = conf
|
|
148
|
-
filePath = initializeLogger(logFileName)
|
|
208
|
+
queue.config = conf;
|
|
209
|
+
entryQueue.config = conf;
|
|
210
|
+
assetQueue.config = conf;
|
|
211
|
+
filePath = initializeLogger(logFileName);
|
|
149
212
|
}
|
|
150
213
|
|
|
151
|
-
async function start(
|
|
214
|
+
async function start(
|
|
215
|
+
{
|
|
216
|
+
retryFailed,
|
|
217
|
+
bulkPublish,
|
|
218
|
+
_filter,
|
|
219
|
+
deliveryToken,
|
|
220
|
+
contentType,
|
|
221
|
+
environment,
|
|
222
|
+
locale,
|
|
223
|
+
onlyAssets,
|
|
224
|
+
onlyEntries,
|
|
225
|
+
destEnv,
|
|
226
|
+
f_types,
|
|
227
|
+
},
|
|
228
|
+
stack,
|
|
229
|
+
config,
|
|
230
|
+
) {
|
|
152
231
|
process.on('beforeExit', async () => {
|
|
153
|
-
const isErrorLogEmpty = await isEmpty(`${filePath}.error`)
|
|
154
|
-
const isSuccessLogEmpty = await isEmpty(`${filePath}.success`)
|
|
232
|
+
const isErrorLogEmpty = await isEmpty(`${filePath}.error`);
|
|
233
|
+
const isSuccessLogEmpty = await isEmpty(`${filePath}.success`);
|
|
155
234
|
if (!isErrorLogEmpty) {
|
|
156
|
-
console.log(`The error log for this session is stored at ${filePath}.error`)
|
|
235
|
+
console.log(`The error log for this session is stored at ${filePath}.error`);
|
|
157
236
|
} else if (!isSuccessLogEmpty) {
|
|
158
|
-
console.log(`The success log for this session is stored at ${filePath}.success`)
|
|
237
|
+
console.log(`The success log for this session is stored at ${filePath}.success`);
|
|
159
238
|
}
|
|
160
|
-
process.exit(0)
|
|
161
|
-
})
|
|
239
|
+
process.exit(0);
|
|
240
|
+
});
|
|
162
241
|
|
|
163
242
|
if (retryFailed) {
|
|
164
243
|
if (typeof retryFailed === 'string' && retryFailed.length > 0) {
|
|
165
244
|
if (!validateFile(retryFailed, ['cross-publish', 'bulk-cross-publish'])) {
|
|
166
|
-
return false
|
|
245
|
+
return false;
|
|
167
246
|
}
|
|
168
247
|
|
|
169
|
-
|
|
170
|
-
setConfig(config,
|
|
248
|
+
const bulkPublishFlag = retryFailed.match(/bulk/) ? true : false;
|
|
249
|
+
setConfig(config, bulkPublishFlag);
|
|
171
250
|
|
|
172
|
-
if (
|
|
173
|
-
await retryFailedLogs(retryFailed, queue, 'bulk')
|
|
251
|
+
if (bulkPublishFlag) {
|
|
252
|
+
await retryFailedLogs(retryFailed, queue, 'bulk');
|
|
174
253
|
} else {
|
|
175
|
-
await retryFailedLogs(retryFailed, {entryQueue, assetQueue}, 'publish')
|
|
254
|
+
await retryFailedLogs(retryFailed, { entryQueue, assetQueue }, 'publish');
|
|
176
255
|
}
|
|
177
256
|
}
|
|
178
257
|
} else {
|
|
179
258
|
let filter = {
|
|
180
259
|
environment,
|
|
181
260
|
locale,
|
|
182
|
-
}
|
|
183
|
-
if (f_types)
|
|
184
|
-
filter.type = f_types
|
|
261
|
+
};
|
|
262
|
+
if (f_types) filter.type = f_types;
|
|
185
263
|
// filter.type = (f_types) ? f_types : types // types mentioned in the config file (f_types) are given preference
|
|
186
264
|
if (contentType) {
|
|
187
|
-
filter.content_type_uid = contentType
|
|
188
|
-
filter.type = 'entry_published'
|
|
265
|
+
filter.content_type_uid = contentType;
|
|
266
|
+
filter.type = 'entry_published';
|
|
189
267
|
}
|
|
190
268
|
if (onlyAssets) {
|
|
191
|
-
filter.type = 'asset_published'
|
|
192
|
-
delete filter.content_type_uid
|
|
269
|
+
filter.type = 'asset_published';
|
|
270
|
+
delete filter.content_type_uid;
|
|
193
271
|
}
|
|
194
272
|
if (onlyEntries) {
|
|
195
|
-
filter.type = 'entry_published'
|
|
273
|
+
filter.type = 'entry_published';
|
|
196
274
|
}
|
|
197
|
-
setConfig(config, bulkPublish)
|
|
275
|
+
setConfig(config, bulkPublish);
|
|
198
276
|
// filter.type = (f_types) ? f_types : types // types mentioned in the config file (f_types) are given preference
|
|
199
|
-
const queryParams = getQueryParams(filter)
|
|
200
|
-
await getSyncEntries(stack, config, queryParams, bulkPublish, filter, deliveryToken, destEnv)
|
|
277
|
+
const queryParams = getQueryParams(filter);
|
|
278
|
+
await getSyncEntries(stack, config, queryParams, bulkPublish, filter, deliveryToken, destEnv);
|
|
201
279
|
}
|
|
202
280
|
}
|
|
203
281
|
|
|
@@ -206,4 +284,4 @@ module.exports = {
|
|
|
206
284
|
setConfig,
|
|
207
285
|
getQueryParams,
|
|
208
286
|
start,
|
|
209
|
-
}
|
|
287
|
+
};
|