{"id":45283536,"url":"https://github.com/harrymoore/cloudcms-util","last_synced_at":"2026-02-21T02:42:00.980Z","repository":{"id":41677496,"uuid":"129986135","full_name":"harrymoore/cloudcms-util","owner":"harrymoore","description":null,"archived":false,"fork":false,"pushed_at":"2024-03-04T13:55:13.000Z","size":8777,"stargazers_count":1,"open_issues_count":8,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-06T15:27:13.588Z","etag":null,"topics":["cloud-cms","cloudcms","nodejs"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/harrymoore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-04-18T01:33:47.000Z","updated_at":"2021-11-03T17:18:07.000Z","dependencies_parsed_at":"2024-03-04T15:08:37.237Z","dependency_job_id":"6cecbcb5-33da-4f00-8080-77913e66bf98","html_url":"https://github.com/harrymoore/cloudcms-util","commit_stats":{"total_commits":84,"total_committers":2,"mean_commits":42.0,"dds":"0.36904761904761907","last_synced_commit":"4d49e5980cc24cc6b035acedaeec5e609fb3b92a"},"previous_names":["harrymoore/cloudcms-import-export"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/harrymoore/cloudcms-util","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harrymoore%2Fcloudcms-util","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harrymoore%2Fcloudcms-util/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harrymoore%2Fcloudcms-util/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harrymoore%2Fcloudcms-util/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harrymoore","download_url":"https://codeload.github.com/harrymoore/cloudcms-util/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harrymoore%2Fcloudcms-util/sbom","scorecard":{"id":456248,"data":{"date":"2025-08-11","repo":{"name":"github.com/harrymoore/cloudcms-util","commit":"97f8438117daef45888a992fb2985489328eec3c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":0,"reason":"32 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-2j2x-2gpw-g8fm","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-4rq4-32rv-6wp6","Warn: Project is vulnerable to: GHSA-64g7-mvw6-v9qj","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-3x9f-74h4-2fqr","Warn: Project is vulnerable to: GHSA-8vcr-vxm8-293m","Warn: Project is vulnerable to: GHSA-g973-978j-2c3p","Warn: Project is vulnerable to: GHSA-4r6h-8v6p-xvw6","Warn: Project is vulnerable to: GHSA-5pgg-2g8v-p4x9","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T09:45:28.836Z","repository_id":41677496,"created_at":"2025-08-19T09:45:28.836Z","updated_at":"2025-08-19T09:45:28.836Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29671825,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T00:11:43.526Z","status":"online","status_checked_at":"2026-02-21T02:00:07.432Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-cms","cloudcms","nodejs"],"created_at":"2026-02-21T02:42:00.396Z","updated_at":"2026-02-21T02:42:00.951Z","avatar_url":"https://github.com/harrymoore.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloud CMS Command Line Utility\n[![NPM Version](https://img.shields.io/npm/v/cloudcms-util.svg)](https://www.npmjs.com/package/cloudcms-util)\n[![NPM Download](https://img.shields.io/npm/dm/cloudcms-util.svg)](https://www.npmjs.com/package/cloudcms-util)\n[![Travis Build](https://img.shields.io/travis/harrymoore/cloudcms-util)](https://img.shields.io/travis/harrymoore/cloudcms-util)\n\nCommand line scripts to perform various Cloud CMS related tasks such as import and export json nodes and binary attachments to and from Cloud CMS repositories.\n\nNot to be confused with the official Cloud CMS CLI (https://www.npmjs.com/package/cloudcms-cli)\n\nIt is not necessary to install cloudcms-util. It runs as an npx script. But it will run faster if it installed first (otherwise npx will install it on demand and remove it when it finishes executing each command).\n\n## Install:\nIt is not necessary to install this utility as it will run as an npx script. But you can install it to so it runs withouth first downloading:\n    npm install -g cloudcms-util\n\n## Help:\n    npx cloudcms-util -h\n\n## List Local Definitions\n    Connect to Cloud CMS and list available definition qnames',\n    (requires gitana.json in the folder where the script is executed)\n\n    npx cloudcms-util --list-types'\n\n## Export specified defintions and content instance records\n    npx cloudcms-util export --definition-qname \"my:type1\" \"my:type2\" --include-instances\n\n    requires gitana.json in the folder where the script is executed\n\n## Export all defintions\n    npx cloudcms-util export -a\n    \n## Export a list of nodes based on a user defined query:\n    create a mongodb query in the file ./myquery.json\n    {\n        \"_type\": \"my:type1\",\n        \"foo\": \"bar\"\n    }\n\n    npx cloudcms-util export -g ./cloudcms-files/source-repo-gitana.json -y ./myquery.json\n\n    requires the equivalent of your project's gitana.json in this file path: ./cloudcms-files/source-repo-gitana.json\n\n## Export nodes with translations\n\n### First export some nodes that are already multilingual:\n    create a mongodb query in the file ./myquery.json\n\n    {\n        \"_type\": \"catalog:person\",\n        \"_features.f:multilingual\": {\"$exists\": true}\n    }\n\n    When working with translations you work primarily with the master nodes and use options to instruct how to deal with the translation nodes.\n\n    The above query will select catalog:person nodes which are master nodes. Translation nodes will not be selected since they do not have the f:multilingual feature on them. Instead, use the --include-translations option to export the translations.\n    \n    Run the export:\n\n    npx cloudcms-util export -g ./my-gitana.json -y ./myquery.json --folder-path ./data --include-translations\n\n    If the nodes matching the query have any existing translations they will be exported to a 'translations' folder below the node's folder.\n\n### A folder structure similar to the following will be created:\n    ./data/\n    └── nodes\n        └── catalog__person\n            ├── 8bb475e8cbe57d55c412\n            │   ├── attachments\n            │   │   └── default.jpg\n            │   ├── node.json\n            │   └── translations\n            │       └── sv_SE\n            │           ├── attachments\n            │           │   └── default.jpg\n            │           └── node.json\n            └── 9f6c175a41df35544404\n                ├── attachments\n                │   └── default.jpg\n                ├── node.json\n                └── translations\n                    └── sv_SE\n                        └── node.json    \n\n## Import new translations\nYou can create new translations on exisiting master nodes by create the expected folder structure with JSON and optional attachment files.\n\nGiven the previous folder structure with 2 master nodes each containing a single translation (locale sv_SE), create new translations by creating a new folder for the translation. The folder name should be the locale of the translation.\n\nInside this folder create node.json with the translation node's content in the new language. Do not include _doc or _qname properties in the new JSON as the script will do that.\n\nFor example here is the new folder structure after adding German translations to the existing nodes:\n\n    ./data/\n    └── nodes\n        └── catalog__person\n            ├── 8bb475e8cbe57d55c412\n            │   ├── attachments\n            │   │   └── default.jpg\n            │   ├── node.json\n            │   └── translations\n            │       ├── de_DE\n            │       │   ├── attachments\n            │       │   │   └── default.jpg\n            │       │   └── node.json\n            │       └── sv_SE\n            │           ├── attachments\n            │           │   └── default.jpg\n            │           └── node.json\n            └── 9f6c175a41df35544404\n                ├── attachments\n                │   └── default.jpg\n                ├── node.json\n                └── translations\n                    ├── de_DE\n                    │   └── node.json\n                    └── sv_SE\n                        └── node.json\n\nIt is not necessary to include attachments in translations unless you are overriding the default from the master node.\n\n    There are a few extra options when importing nodes with translations:\n\n    --include-translations\n    By default no 'translation' folders will be processed. You must include this option to import any translations.\n\n    --only-translations\n    Don't process master nodes. Only their translations. Use for periodically adding new translations.\n\n    --overwrite-existing-translations\n    By default, when using --include-translations, existing translations will not be overwritten. This will overwrite any existing translation nodes.\n\n    Import only new translations:\n\n    npx cloudcms-util import -g ./my-gitana.json --folder-path ./data --include-translations --only-translations\n\n## Import users from a CSV file to the primary platform domain. Optionally add the users to a project.\n\n    npx cloudcms-util import-users -g ./gitana/gitana-local.json --csv-source ./data/users-test1.csv --default-password \"This13ThePassword\" --project-id 5751b6235492fef8614d --team-key project-managers-team --username admin --password admin\n\nAdding users is a platform operation and requires admin privileges. Use either --prompt or --username and --password to enter credentials of a user with sufficient platform privileged.\n\nIf the user already exists in the platform it will not be modified. Therefor you can run this import process over and over again to ensure missing users are created or to add the users to a different project and/or project team.\n\nUsers require a password. If the PASSWORD column is empty for any user then the user will be skipped. Unless you use the --default-password option. If both are present then the PASSWORD column value takes precedence.\n\nThe CSV file is required to have a header as the first row. The headers should be: NAME,EMAIL,FIRST,LAST,COMPANY,PASSWORD. The header text does not actually matter. The first column is expeced to me NAME, the second column EMAIL, etc.\nExample: \nNAME,EMAIL,FIRST,LAST,COMPANY,PASSWORD\nmary,mary.user1@email.com,Mary,User1,this company,\nedith,edith.m.user2@anotheremail.com,Edith,User2,,Hello$World.1\n\n## Apply bulk property updates\n```\nnpx cloudcms-util patch-nodes -g ./gitana/gitana-local-docker-test-proxy.json --csv-source ./data/patch-test1.csv --overwrite -v\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharrymoore%2Fcloudcms-util","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharrymoore%2Fcloudcms-util","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharrymoore%2Fcloudcms-util/lists"}