{"id":18883903,"url":"https://github.com/owenmelbz/change-log-now","last_synced_at":"2026-05-09T06:12:42.776Z","repository":{"id":44187568,"uuid":"273870796","full_name":"OwenMelbz/change-log-now","owner":"OwenMelbz","description":"Automatically generate a CHANGELOG based off your commit messages.","archived":false,"fork":false,"pushed_at":"2023-01-09T22:59:39.000Z","size":158,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-04T03:37:04.843Z","etag":null,"topics":["changelog-generator","git","nodejs"],"latest_commit_sha":null,"homepage":"","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/OwenMelbz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-21T09:13:30.000Z","updated_at":"2024-02-23T21:05:32.000Z","dependencies_parsed_at":"2023-02-08T15:31:10.647Z","dependency_job_id":null,"html_url":"https://github.com/OwenMelbz/change-log-now","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OwenMelbz/change-log-now","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenMelbz%2Fchange-log-now","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenMelbz%2Fchange-log-now/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenMelbz%2Fchange-log-now/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenMelbz%2Fchange-log-now/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OwenMelbz","download_url":"https://codeload.github.com/OwenMelbz/change-log-now/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenMelbz%2Fchange-log-now/sbom","scorecard":{"id":106423,"data":{"date":"2025-08-11","repo":{"name":"github.com/OwenMelbz/change-log-now","commit":"2e3efaeecfd1713bb09aeee63ca03202b3e0b600"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"checks":[{"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":"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":"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":"Code-Review","score":0,"reason":"Found 0/27 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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-m744-2jj8-vpfv","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-3xq5-wjfh-ppjc"],"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-15T11:11:27.620Z","repository_id":44187568,"created_at":"2025-08-15T11:11:27.620Z","updated_at":"2025-08-15T11:11:27.620Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273892841,"owners_count":25186561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"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":["changelog-generator","git","nodejs"],"created_at":"2024-11-08T07:09:45.335Z","updated_at":"2026-05-09T06:12:42.742Z","avatar_url":"https://github.com/OwenMelbz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Change Log NOW!!! (automatic-changelog)\n\n\u003cimg style=\"width: 250px; height: auto;\" src=\"https://raw.githubusercontent.com/OwenMelbz/change-log-now/master/screenshot.jpg\" alt=\"screenshot\" /\u003e\n\nChange Log NOW!!! (CLN) is a simple CLI tool which will generate you a CHANGELOG file using pre-defined trigger words\nto extract specific commits based off defined conventions.\n\nYou can see a generated example [here](https://github.com/OwenMelbz/change-log-now/blob/master/CHANGELOG.md)!\n\nThis will convert a commit history which looks like...\n\n```\nFeature - You can now configure your triggers yourself!\nHouse-keeping - Tidied up all the files and removed anything not needed\nWIP\nBug - Fixed an issue where merged branches would show double commits\nBug - Fixed issue that prevented todays changelog from regenerating\nWIP\nWIP\n```\nInto this!\n \n```markdown\n# Our magnificent change log!\n\n## 28/03/2020\n\n## Features\n\n- You can now configure your triggers yourself! (570e69e9e)\n\n## Bugs\n\n- Fixed an issue where merged branches would show double commits (f437631b)\n- Fixed issue that prevented todays changelog from regenerating (388f1cc)\n```\n\n# Installation\n\nCLN can be installed globally, or within your project so you can set up a commit-hook, GitHub action etc etc...\n\n```bash\n# Globally\n\nnpm install -g automatic-changelog\nyarn add -g automatic-changelog\n\n# Locally\n\nnpm install automatic-changelog -D\nyarn add automatic-changelog -D\n```\n\n# Usage\n\nCLN comes with a default config which can be found at `node_modules/automatic-changelog/src/defaultConfig.js` however you should\npublish the config and configure it to your desired convention.\n\nYou can publish it by changing into your GIT repo directory and running:\n\n```bash\ncln --init\n```\n\nIt will generate a `changelog.config.js` in the root of your repo with something like the following in, you should commit this to your repo and share amongst your team.\n\n```javascript\nmodule.exports = {\n\n  fileName: \"CHANGELOG.md\",\n\n  dateFormat: \"dd/LL/yyyy\",\n\n  separator: \"-\",\n\n  triggers: [\n    \"🐛 Bug\",\n    \"🚀 Feature\",\n    \"💥 Change\",\n  ],\n\n  pluraliseTrigger: true,\n  \n  skipEmptyCommitMessages: false,\n \n  customMessageFormatter: null,\n  \n  customHeadingFormatter: null,\n\n};\n```\n\nYou're now free to modify the config as you desire!\n\nOnce configured you can generate your changelog by running\n\n### Globally with\n```bash\ncln\n```\n\n### Locally with\n```bash\n./node_modules/.bin/cln\n```\n\n### Within an NPM script\n```json\n\"scripts\" : {\n    \"changelog\": \"cln\"\n}\n```\n```bash\nnpm run changelog\nyarn changelog\n```\n\n### Amending the log manually\n\nYou might notice that some of your commit messages are less than ideal and that once you've generated them you want to tidy them up a bit.\n\nCLN uses line-numbers to decide where to update the changelog, and it will only affect now/future entries.\n\nThis means that you are free to modify any of the data generated within the changelog to fix typos, elaborate etc.\n\nWhen we update the change log we do not touch anything from previous entries\n\n\u003e NOTICE - If you're adjusting text content from \"today's\" commits, then each time you run `cln` it will overwrite today's to add in any new changes. If you're commiting this changelog as you go, you can simply discard any undesired changes if you've needed to amend it.\n\nAdditionally, if you do NOT want to preserve old messages or want to generate from scratch, you can do so by passing the `--refresh` flag e.g.\n\n```bash\ncln --refresh\n```\n\nThis will generate the changelog history from the beginning of time.\n\n## Configuration\n\n### File name and contents\n\nCLN works on a \"convention\" pattern, meaning it will only parse data that matches its conventions. This means you're able to add extra data into your changelog.\n\ne.g. You can add a whole header section into your file as long as you don't use a double `##` as this will denote a date range.\n\nCLN will ignore everything above the first date entry e.g. You can create something like this:\n\n```\n  /$$$$$$  /$$   /$$  /$$$$$$  /$$   /$$  /$$$$$$  /$$$$$$$$ /$$        /$$$$$$   /$$$$$$ \n /$$__  $$| $$  | $$ /$$__  $$| $$$ | $$ /$$__  $$| $$_____/| $$       /$$__  $$ /$$__  $$\n| $$  \\__/| $$  | $$| $$  \\ $$| $$$$| $$| $$  \\__/| $$      | $$      | $$  \\ $$| $$  \\__/\n| $$      | $$$$$$$$| $$$$$$$$| $$ $$ $$| $$ /$$$$| $$$$$   | $$      | $$  | $$| $$ /$$$$\n| $$      | $$__  $$| $$__  $$| $$  $$$$| $$|_  $$| $$__/   | $$      | $$  | $$| $$|_  $$\n| $$    $$| $$  | $$| $$  | $$| $$\\  $$$| $$  \\ $$| $$      | $$      | $$  | $$| $$  \\ $$\n|  $$$$$$/| $$  | $$| $$  | $$| $$ \\  $$|  $$$$$$/| $$$$$$$$| $$$$$$$$|  $$$$$$/|  $$$$$$/\n \\______/ |__/  |__/|__/  |__/|__/  \\__/ \\______/ |________/|________/ \\______/  \\______/\n\n## 28/03/2020\n\n## Features\n\n- You can now configure your triggers yoursself! (570e69e9e)\n```\n\n### Date formatting\n\nBy default, CLN ships with the British date format, because it looks good :D (and I'm British) but this can be\nconfigured using the `dateFormat` key within the `changelog.config.js`.\n\nWe use Luxon to handle dates, so you're able to use the \"Standalone Tokens\" to create your own date formatting which\ncan all be found: [https://moment.github.io/luxon/docs/manual/formatting.html#standalone-vs-format-tokens](https://moment.github.io/luxon/docs/manual/formatting.html#standalone-vs-format-tokens)\n\n### Commit message separator\n\nOften your trigger and commit message will have a separator/deliminator for readability e.g.\n\n```\nBug :: Fixed the...\n```\n\nHere the `separator` should be defined as `::` This will allow us to tidy up your commit messages more nicely!\n\nIf you don't need one, then you can simply provide an empty string e.g.\n\n```\n🐞 Fixed the...\n```\n\n```\nseparator: \"\"\n```\n\nDon't worry about any whitespace, we'll trim that for you!\n\n### Triggers\n\nTriggers are handled within `commitMsg.indexOf('TRIGGER') === 0` - So it **MUST** be the first in the commit message.\n\nBy default, we assume your trigger is the same as your changelog heading pluralised and is defined as a flat array e.g.\n\n```\ntriggers: [\n    \"🚀 Feature\",\n    \"🐛 Bug\",\n    \"💥 Change\",\n],\n```\n\nThis would generate the following:\n\n```\n## 28/03/2020\n\n🚀 Features\n\n- XXX\n- XXX\n\n🐛 Bugs\n\n- XXX\n- XXX\n```\n\nHowever, if you want to map a different trigger word to your heading you can use the object syntax e.g.\n\n```\ntriggers: {\n    \"🚀 Feature\": \"feature-trigger-word\",\n    \"🐛 Bug\": \"bug-trigger-word\",\n    \"💥 Change\": \"change-trigger-word\",\n},\n```\n\nThe key of the entry is the heading, and the value of the entry is the trigger word.\n\nThe order you define the triggers within your config, will be the order they appear as headings in your changelog.\n\n### Pluralisation\n\nBy default, we pluralise your trigger word before using it as a heading e.g. `Bug` becomes `Bugs` - you can \nturn this off by setting `pluraliseTrigger` to `false`.\n\n### Skipping empty commit messages\n\nYou can enable/disable this feature by setting `skipEmptyCommitMessages` to `true` or `false`\n\n### Custom Formatters\n\nBy default, we ship with some message and heading formatters, however you can supply your own from the config.\n\n#### Custom Message\n\n```javascript\ncustomMessageFormatter: ({ commit, group, allCommits, resolvedConfig, clnMessage }) =\u003e {\n    return clnMessage.toLowerCase();\n}\n```\n\n#### Custom Heading\n\n```javascript\ncustomHeadingFormatter: ({ group, commit, resolvedConfig, clnHeading }) =\u003e {\n    return clnHeading.toLowerCase();\n}\n```\n\n## To Do\n\n- Control trigger location.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowenmelbz%2Fchange-log-now","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fowenmelbz%2Fchange-log-now","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowenmelbz%2Fchange-log-now/lists"}