@contentstack/cli-bulk-operations
v1.0.0
Published
Contentstack CLI plugin for bulk operations
Readme
cli-bulk-operations
Contentstack CLI plugin for performing bulk operations on your content.
Features
- Perform bulk operations on Contentstack content
- Built with TypeScript for type safety
- Comprehensive test coverage
- Code quality enforced with ESLint and Prettier
- Automated CI/CD workflows
Usage
# For CLI 1.x:**
# Install Contentstack CLI
$ npm install -g @contentstack/cli
$ csdx
running command...
$ csdx (--version|-v)
$ csdx --help [COMMAND]
# Install bulk operations plugin
csdx plugins:install @contentstack/cli-bulk-operations
# Verify installation
csdx cm:stacks:bulk-entries --help# For CLI 2.x:**
# Install Contentstack CLI
$ npm install -g @contentstack/cli
$ csdx
running command...
$ csdx (--version|-v)
$ csdx --help [COMMAND]
# Verify installation
csdx cm:stacks:bulk-entries --helpCommands
csdx cm:stacks:bulk-assets
Bulk operations for assets (publish/unpublish/cross-publish)
USAGE
$ csdx cm:stacks:bulk-assets [-a <value>] [-k <value>] [--operation publish|unpublish] [--environments <value>...]
[--locales <value>...] [--source-env <value>] [--source-alias <value>] [--publish-mode bulk|single] [--branch
<value>] [-c <value>] [-y] [--retry-failed <value>] [--revert <value>] [--bulk-operation-file <value>] [--folder-uid
<value>]
FLAGS
-a, --alias=<value> Alias (name) of the management token. You must use either the --alias flag or the
--stack-api-key flag.
-c, --config=<value> (optional) The path of the optional configuration JSON file containing all the
options for a single run. Refer to the configure command to create a configuration
file.
-k, --stack-api-key=<value> API key of the source stack. You must use either the --stack-api-key flag or the
--alias flag.
-y, --yes Set it to true to process the command with the current configuration.
--branch=<value> [default: main] The name of the branch where you want to perform the bulk publish
operation. If you don't mention the branch name, then by default the content from
main branch will be published.
--bulk-operation-file=<value> [default: bulk-operation] (optional) Folder path to store operation logs. Creates
separate files for success and failed operations. Default: bulk-operation
--environments=<value>... The name of the environment(s) on which entries/assets will be published. In case
of multiple environments, specify their names separated by spaces.
--folder-uid=<value> (optional) The UID of the Assets' folder from which the assets need to be
published. The default value is cs_root.
--locales=<value>... Locales in which entries/assets will be published, e.g., en-us. In the case of
multiple locales, specify the codes separated by spaces.
--operation=<option> Operation to perform (publish/unpublish)
<options: publish|unpublish>
--publish-mode=<option> [default: bulk] Publish mode: bulk (uses Bulk Publish API) or single (individual
API calls)
<options: bulk|single>
--retry-failed=<value> (optional) Use this option to retry publishing the failed entries/assets from the
logfile. Specify the name of the logfile that lists failed publish calls. If this
option is used, it will override all other flags.
--revert=<value> (optional) Revert publish operations from a log folder. Specify the folder path
containing success logs. Works similar to retry-failed.
--source-alias=<value> Alias name for source environment delivery token (required for cross-publish). Add
delivery token using: csdx auth:tokens:add
--source-env=<value> Source environment for cross-publish
DESCRIPTION
Bulk operations for assets (publish/unpublish/cross-publish)
EXAMPLES
$ csdx cm:stacks:bulk-assets --operation publish --environments dev,staging --locales en-us -k blt123
$ csdx cm:stacks:bulk-assets --operation unpublish --environments prod --locales en-us -a myAlias
$ csdx cm:stacks:bulk-assets --operation publish --folder-uid cs_root --environments prod --locales en-us -k blt123
$ csdx cm:stacks:bulk-assets --operation publish --environments prod --locales en-us --publish-mode bulk -k blt123
$ csdx cm:stacks:bulk-assets --operation publish --source-env production --source-alias prod-delivery --environments staging,dev --locales en-us -a myAlias
$ csdx cm:stacks:bulk-assets --retry-failed ./bulk-operation -a myAlias
$ csdx cm:stacks:bulk-assets --revert ./bulk-operation -a myAliasSee code: src/commands/cm/stacks/bulk-assets.ts
csdx cm:stacks:bulk-entries
Bulk operations for entries (publish/unpublish/cross-publish)
USAGE
$ csdx cm:stacks:bulk-entries [-a <value>] [-k <value>] [--operation publish|unpublish] [--environments <value>...]
[--locales <value>...] [--source-env <value>] [--source-alias <value>] [--publish-mode bulk|single] [--branch
<value>] [-c <value>] [-y] [--retry-failed <value>] [--revert <value>] [--bulk-operation-file <value>]
[--content-types <value>...] [--filter draft|modified|non-localized|unpublished] [--include-variants] [--api-version
<value>]
FLAGS
-a, --alias=<value> Alias (name) of the management token. You must use either the --alias flag or the
--stack-api-key flag.
-c, --config=<value> (optional) The path of the optional configuration JSON file containing all the
options for a single run. Refer to the configure command to create a configuration
file.
-k, --stack-api-key=<value> API key of the source stack. You must use either the --stack-api-key flag or the
--alias flag.
-y, --yes Set it to true to process the command with the current configuration.
--api-version=<value> [default: 3.2] API version to be used. Values [Default: 3, Nested Reference
Publishing: 3.2].
--branch=<value> [default: main] The name of the branch where you want to perform the bulk publish
operation. If you don't mention the branch name, then by default the content from
main branch will be published.
--bulk-operation-file=<value> [default: bulk-operation] (optional) Folder path to store operation logs. Creates
separate files for success and failed operations. Default: bulk-operation
--content-types=<value>... Content type UIDs to perform operation on. If not provided, operates on all content
types.
--environments=<value>... The name of the environment(s) on which entries/assets will be published. In case
of multiple environments, specify their names separated by spaces.
--filter=<option> Filter entries by status
<options: draft|modified|non-localized|unpublished>
--include-variants Include variant entries in operation
--locales=<value>... Locales in which entries/assets will be published, e.g., en-us. In the case of
multiple locales, specify the codes separated by spaces.
--operation=<option> Operation to perform (publish/unpublish)
<options: publish|unpublish>
--publish-mode=<option> [default: bulk] Publish mode: bulk (uses Bulk Publish API) or single (individual
API calls)
<options: bulk|single>
--retry-failed=<value> (optional) Use this option to retry publishing the failed entries/assets from the
logfile. Specify the name of the logfile that lists failed publish calls. If this
option is used, it will override all other flags.
--revert=<value> (optional) Revert publish operations from a log folder. Specify the folder path
containing success logs. Works similar to retry-failed.
--source-alias=<value> Alias name for source environment delivery token (required for cross-publish). Add
delivery token using: csdx auth:tokens:add
--source-env=<value> Source environment for cross-publish
DESCRIPTION
Bulk operations for entries (publish/unpublish/cross-publish)
EXAMPLES
$ csdx cm:stacks:bulk-entries --operation publish --environments dev --locales en-us -k blt123
$ csdx cm:stacks:bulk-entries --operation publish --content-types blog,article --environments dev --locales en-us -k blt123
$ csdx cm:stacks:bulk-entries --operation unpublish --content-types blog --environments prod --locales en-us -a myAlias
$ csdx cm:stacks:bulk-entries --operation publish --content-types blog --source-env production --source-alias prod-delivery --environments staging --locales en-us -a myAlias
$ csdx cm:stacks:bulk-entries --operation publish --content-types blog --environments prod --locales en-us --publish-mode bulk -k blt123
$ csdx cm:stacks:bulk-entries --operation publish --content-types blog --environments prod --locales en-us --filter modified -k blt123
$ csdx cm:stacks:bulk-entries --operation publish --content-types blog --environments prod --locales en-us --include-variants -k blt123
$ csdx cm:stacks:bulk-entries --retry-failed ./bulk-operation
$ csdx cm:stacks:bulk-entries --revert ./bulk-operationSee code: src/commands/cm/stacks/bulk-entries.ts
Requirements
- Node.js >= 22
- Contentstack account with API credentials
Development
Setup
# Clone the repository
git clone https://github.com/contentstack/cli-bulk-operations.git
cd cli-bulk-operations
# Install dependencies
npm install
# Build the project
npm run buildAvailable Scripts
npm run build- Build the TypeScript projectnpm run lint- Run ESLint checksnpm run lint:fix- Fix ESLint issues automaticallynpm run format- Format code with Prettiernpm run format:check- Check code formattingnpm test- Run testsnpm run test:coverage- Run tests with coveragenpm run clean- Clean build artifacts
Testing
This project uses Mocha for testing with comprehensive coverage reporting.
# Run all tests
npm test
# Run tests with coverage
npm run test:coverage
# Run tests with detailed coverage report
npm run test:coverage:reportCode Quality
Linting
The project uses ESLint with TypeScript-specific rules:
npm run lintFormatting
Code formatting is handled by Prettier:
npm run formatGit Hooks
Husky is configured to run checks before commits and pushes:
- Pre-commit: Runs lint-staged to check and format staged files
- Pre-push: Runs linting and tests to ensure code quality
CI/CD
GitHub Actions Workflows
PR Checks (
pr-checks.yml): Runs on pull requests- Lint checks
- Test execution with coverage
- Build verification
Test (
test.yml): Runs on pushes and PRs- Tests across multiple Node.js versions (18, 20, 22)
- Coverage reporting to Codecov
Release (
release.yml): Runs on main branch- Automated npm publishing
- GitHub release creation
- Semantic versioning
Changelog
See CHANGELOG.md for release history.
