Skip to content
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
a4d908a
feat: add asset scanning support in import
Jun 5, 2026
25acf49
chore: removed whitespace
naman-contentstack Jun 9, 2026
cbffcfa
Merge pull request #210 from contentstack/feat/DX-8661
naman-contentstack Jun 9, 2026
1b6fb69
feat: add asset scanning support in bulk publish v1
Jun 10, 2026
420c32e
feat: enhance asset publishing with data-dir support for post-import …
Jun 11, 2026
f893ffe
Merge branch 'development' into feat/Asset-Scanning-v1
Jun 12, 2026
8aaeebe
Set maximum scan retries to zero
naman-contentstack Jun 16, 2026
b51e127
fix: minor fixes in bulk publish
Jun 28, 2026
0ca69b8
Merge branch 'development' into feat/Asset-Scanning-v1
naman-contentstack Jul 2, 2026
e5260b7
fix: Update flags in AssetsPublishCommand and add user reminder in Im…
Jul 10, 2026
32ba9c4
fix: Rename 'data-dir' to 'backup-dir' in asset publishing commands a…
Jul 14, 2026
2d575c1
merge development in feat/Asseet-scanning-v1
Jul 14, 2026
1a2732c
Merge branch 'feat/Asset-Scanning-v1' into fix/DX-9308
Jul 14, 2026
fc472c8
Merge pull request #282 from contentstack/fix/DX-9308
naman-contentstack Jul 16, 2026
402a4b2
merged latest changes from dev
Jul 22, 2026
53b9674
added support for orgplan check in export and import
Jul 23, 2026
78da02e
bumped dependencies version
Jul 28, 2026
19c2a36
handled assets in pending or quarantine states export failure
Jul 30, 2026
2188fc2
merged latest changes
Jul 30, 2026
601947f
added audit check and fix for assets in pending or quarantined state
Jul 30, 2026
a35b929
Merge branch 'development' into feat/Asset-Scanning-v1
Aug 3, 2026
5789088
Merge pull request #323 from contentstack/DX-10043
shafeeqd959 Aug 4, 2026
c92fd23
handled assets in not scanned status
Aug 4, 2026
56dd70b
Merge pull request #322 from contentstack/DX-9302
shafeeqd959 Aug 4, 2026
498c6aa
Merge branch 'development' into feat/Asset-Scanning-v1
Aug 4, 2026
b246328
merged latest dev changes
Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .talismanrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
fileignoreconfig:
- filename: pnpm-lock.yaml
checksum: 31e333d6769adbaae042c92ea0930fab168a0e06fc1bda406d49fd1042a7a9c7
checksum: 423213f918d2052ec37ad421d23057e159c8633d200bfa688d34bbcb73a19285
version: '1.0'
3 changes: 2 additions & 1 deletion packages/contentstack-bulk-publish/.mocharc.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"test/unit/commands/assets/unpublish.test.js",
"test/unit/commands/bulk-publish/cross-publish.test.js",
"test/unit/commands/entries/publish.test.js",
"test/unit/commands/entries/unpublish.test.js"
"test/unit/commands/entries/unpublish.test.js",
"test/unit/util/asset-scan.test.js"
],
"reporter": "dot",
"timeout": 60000,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ class AssetsPublishCommand extends Command {
assetsFlags.folderUid = assetsFlags['folder-uid'] || assetsFlags.folderUid;
assetsFlags.bulkPublish = assetsFlags['bulk-publish'] || assetsFlags.bulkPublish;
assetsFlags.apiVersion = assetsFlags['api-version'] || '3'; // setting default value for apiVersion
assetsFlags.backupDir = assetsFlags['backup-dir'] || assetsFlags.backupDir;
delete assetsFlags['api-version'];
delete assetsFlags['retry-failed'];
delete assetsFlags['folder-uid'];
delete assetsFlags['bulk-publish'];
delete assetsFlags['backup-dir'];

let updatedFlags;
try {
Expand Down Expand Up @@ -111,12 +113,18 @@ class AssetsPublishCommand extends Command {
}
}

validate({ environments, retryFailed, locales, 'source-env': sourceEnv, 'delivery-token': deliveryToken }) {
validate({ environments, retryFailed, locales, backupDir, 'source-env': sourceEnv, 'delivery-token': deliveryToken }) {
let missing = [];
if (retryFailed) {
return true;
}

// In backup-dir mode, environments and locales are derived per-asset from the
// backup publish_details, so they are not required on the command line.
if (backupDir) {
return true;
}

if (sourceEnv && !deliveryToken) {
this.error('Specify the source environment delivery token. Run --help for more details.', { exit: 2 });
}
Expand Down Expand Up @@ -181,6 +189,11 @@ AssetsPublishCommand.flags = {
'(optional) The UID of the Assets’ folder from which the assets need to be published. The default value is cs_root.',
exclusive: ['source-env'],
}),
'backup-dir': flags.string({
description:
'(optional) Path to the import backup directory. When set, each imported asset is published only to the environments and locales it was published to in the source stack (read from the backup’s publish details and asset UID mapping), with asset-scan gating applied. Intended for the post-import publish flow.',
exclusive: ['source-env', 'folder-uid', 'environments', 'locales'],
}),
'bulk-publish': flags.string({
description: 'Set this flag to use Contentstack’s Bulk Publish APIs. It is true, by default.',
default: 'true',
Expand Down Expand Up @@ -259,11 +272,14 @@ AssetsPublishCommand.examples = [
'',
'Using --stack-api-key flag',
'csdx cm:assets:publish --environments [ENVIRONMENT 1] [ENVIRONMENT 2] --locales [LOCALE] --stack-api-key [STACK API KEY]',
'',
'Using --backup-dir flag (publish imported assets to their original environments after asset scanning)',
'csdx cm:assets:publish --backup-dir [PATH TO IMPORT BACKUP DIR] --stack-api-key [STACK API KEY]',
];

AssetsPublishCommand.aliases = ['cm:bulk-publish:assets'];

AssetsPublishCommand.usage =
'cm:assets:publish [-a <value>] [--retry-failed <value>] [-e <value>] [--folder-uid <value>] [--bulk-publish <value>] [-c <value>] [-y] [--locales <value>] [--branch <value>] [--delivery-token <value>] [--source-env <value>]';
'cm:assets:publish [-a <value>] [--retry-failed <value>] [-e <value>] [--folder-uid <value>] [--backup-dir <value>] [--bulk-publish <value>] [-c <value>] [-y] [--locales <value>] [--branch <value>] [--delivery-token <value>] [--source-env <value>]';

module.exports = AssetsPublishCommand;
4 changes: 2 additions & 2 deletions packages/contentstack-bulk-publish/src/consumer/publish.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ function displayEntriesDetails(sanitizedData, action, mapping = []) {
function displayAssetsDetails(sanitizedData, action, mapping) {
if (action === 'bulk_publish') {
sanitizedData.forEach((asset) => {
asset?.publish_details.forEach((pd) => {
asset?.publish_details?.forEach((pd) => {
if (Object.keys(mapping).includes(pd.environment)) {
console.log(
chalk.green(
`Asset UID: '${asset.uid}'${pd.version ? `, Version: '${pd.version}'` : ''}${
asset.locale ? `, Locale: '${asset.locale}'` : ''
asset.locale ? `, Locale: '${asset.locale}'` : ''}
}, Environment: ${pd.environment}`,
),
);
Expand Down
Loading
Loading