{"id":21376510,"url":"https://github.com/fluidgroup/chglog","last_synced_at":"2025-07-13T10:31:04.915Z","repository":{"id":40729797,"uuid":"234212631","full_name":"FluidGroup/chglog","owner":"FluidGroup","description":"🪵 A changelog generator that regarding pulls and specified commits.","archived":false,"fork":false,"pushed_at":"2023-01-07T05:20:11.000Z","size":1237,"stargazers_count":10,"open_issues_count":11,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-27T15:55:42.462Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/FluidGroup.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}},"created_at":"2020-01-16T01:57:26.000Z","updated_at":"2022-06-29T08:10:07.000Z","dependencies_parsed_at":"2023-02-06T12:45:32.063Z","dependency_job_id":null,"html_url":"https://github.com/FluidGroup/chglog","commit_stats":null,"previous_names":["muukii/chglog"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/FluidGroup/chglog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2Fchglog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2Fchglog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2Fchglog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2Fchglog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FluidGroup","download_url":"https://codeload.github.com/FluidGroup/chglog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2Fchglog/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265128198,"owners_count":23715621,"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","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":[],"created_at":"2024-11-22T09:15:59.970Z","updated_at":"2025-07-13T10:31:04.641Z","avatar_url":"https://github.com/FluidGroup.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A changelog generator that regarding pulls and specified commits in THE SPECIFIC RANGE.\n\n## First look you can create\n\n\u003cimg width=\"600px\" src=\"https://user-images.githubusercontent.com/1888355/107057716-17564b80-6817-11eb-9788-e285d4e2a0a3.png\"/\u003e\n\n## Motivation\n\nWe can find a lot of tools that generate summarized changelogs from git and GitHub.  \nHowever I could not find something more simple tool which generates from any range.\n\nSo this library separated several modules as followings:  \n* Fetching module - It fetches the all of pull-reqests in the range as possible.  \n* Generator module - It generates text from the gathered pull-requests from fetching module with visitor pattern.\n* CLI module - It calls fetching module and passing data to generator module and then output in console.\n\n## Installation\n\n```\nnpm install -g @muukii/chglog\n```\n\n## Usage \n\n\u003cdetails\u003e\u003csummary\u003eClick to see an example output\u003c/summary\u003e\n\u003cp\u003e\n\n\nNumber of PRs : 31\n\n|tag|number of PRs|\n|--|--:|\n|Breaking Changes | 11|\n|Performance | 3|\n|Rename | 3|\n|New Feature | 4|\n|Docs | 1|\n|Remove Symobl | 1|\n\n\n\n### Group: Fix issues (3)\n- Make EventEmitter delivering event by commit order. [#222](https://github.com/VergeGroup/Verge/pull/222) by @muukii\n  - `Breaking Changes`\n- Add runtime sanitizer - Debug only [#220](https://github.com/VergeGroup/Verge/pull/220) by @muukii\n- Fix InoutRef's wrapped property [#189](https://github.com/VergeGroup/Verge/pull/189) by @muukii        \n\n\n\n### Group: Enhancement (26)\n- Reduce reflecting to get performance [#226](https://github.com/VergeGroup/Verge/pull/226) by @muukii\n  - `Breaking Changes` `Performance`\n- Improve EntityType performance [#224](https://github.com/VergeGroup/Verge/pull/224) by @muukii\n  - `Performance`\n- Update default queue in sinkPrimitiveValue [#214](https://github.com/VergeGroup/Verge/pull/214) by @muukii\n  - `Breaking Changes`\n- Reduce the number of Emitters [#216](https://github.com/VergeGroup/Verge/pull/216) by @muukii\n- Add runtime sanitizer - Debug only [#220](https://github.com/VergeGroup/Verge/pull/220) by @muukii\n- Add documentation [#219](https://github.com/VergeGroup/Verge/pull/219) by @muukii\n- Rename MemoizeMap to Pipeline [#211](https://github.com/VergeGroup/Verge/pull/211) by @muukii\n  - `Rename`\n- Add Sink method to DispatcherType [#208](https://github.com/VergeGroup/Verge/pull/208) by @muukii\n  - `New Feature`\n- [Experimental] Add creation method of SwiftUI.Binding [#210](https://github.com/VergeGroup/Verge/pull/210) by @muukii\n- Support RxSwift 6 [#209](https://github.com/VergeGroup/Verge/pull/209) by @muukii\n  - `Breaking Changes` `New Feature` `Performance`\n- Update methods of Changes that become to use Comparer instead of closure [#207](https://github.com/VergeGroup/Verge/pull/207) by @muukii\n  - `Breaking Changes`\n- Add isEmpty to EntityTable [#206](https://github.com/VergeGroup/Verge/pull/206) by @muukii\n  - `New Feature`\n- Update Rx extension [#202](https://github.com/VergeGroup/Verge/pull/202) by @muukii\n- Add method that maps Edge [#201](https://github.com/VergeGroup/Verge/pull/201) by @muukii\n  - `Rename`\n- Remove Verge/Core [#200](https://github.com/VergeGroup/Verge/pull/200) by @muukii\n  - `Breaking Changes`\n- Update CachedMapStorage [#199](https://github.com/VergeGroup/Verge/pull/199) by @muukii\n  - `New Feature`\n- Update how Derived retain itself to publish the value [#198](https://github.com/VergeGroup/Verge/pull/198) by @muukii\n- Update cancelling in EventEmitter [#197](https://github.com/VergeGroup/Verge/pull/197) by @muukii\n  - `Breaking Changes`\n- Fix race-condition in VergeAnyCancellable [#196](https://github.com/VergeGroup/Verge/pull/196) by @muukii\n- Drop receive changes itself in Store, Dispatcher [#195](https://github.com/VergeGroup/Verge/pull/195) by @muukii\n  - `Breaking Changes`\n- [Trivial] Update docs and few renames. [#194](https://github.com/VergeGroup/Verge/pull/194) by @muukii\n  - `Docs` `Rename`\n- [ORM] context.entities [#192](https://github.com/VergeGroup/Verge/pull/192) by @muukii\n- Add precondition [#191](https://github.com/VergeGroup/Verge/pull/191) by @muukii\n- Changes get a modification that indicates how the state changed [#190](https://github.com/VergeGroup/Verge/pull/190) by @muukii\n- Support assign-assignee from Store [#187](https://github.com/VergeGroup/Verge/pull/187) by @muukii\n  - `Breaking Changes` `Remove Symobl`\n- Deprecation combined derived method [#184](https://github.com/VergeGroup/Verge/pull/184) by @muukii\n  - `Breaking Changes`        \n\n\n## Other (3)\n\n- Bump ini from 1.3.5 to 1.3.8 in /Docs [#205](https://github.com/VergeGroup/Verge/pull/205) by @dependabot\n- Changes default parameter which is queue in sink -\u003e .mainIsolated() [#193](https://github.com/VergeGroup/Verge/pull/193) by @muukii\n  - `Breaking Changes`\n- Support rx.commitBinder [#188](https://github.com/VergeGroup/Verge/pull/188) by @muukii        \n\n\n---\n\u003csub\u003e\n  Generated by \u003ca href=\"https://github.com/muukii/chglog\"\u003echglog\u003c/a\u003e\n\u003c/sub\u003e;\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n## Usage\n\n```\n$ cd /path/to/your-repo\n```\n\n\u003e ⚠️ \nCurrently this cli must run in the directory where has .git.  \nBecause, Over GitHub API can't get well the all of commits between the specified ref range.  \nSo take care cloning git repo, chglog can get only commits which .git has.\n\n```\n$ chglog changelog --github_token \u003cYOUR_TOKEN\u003e -l 8.5.0 -r 8.6.0\n```\n\n\u003e `--github_token` reads also enviroment variable `GITHUB_ACCESS_TOKEN`.\n\u003e Or if you use [`gh`](https://github.com/cli/cli) and authenticated, that auth infomation would be used.\n\n## Setting your repository up for creating a effective changelog\n\n`chglog` provides a built-in generator as a module.  \nIt would be used when we set no custom generator.\n\nThat default generator has following features:\n\n- Grouping pull-request\n- Displaying the tags each pull-requests\n- Displaying summary of the tags of pull-request\n\nSetting up steps:\n\n**Define a label that has `Grooup: ` prefix.**\n\n\u003cimg width=\"172\" alt=\"CleanShot 2021-02-06 at 01 06 12@2x\" src=\"https://user-images.githubusercontent.com/1888355/107058096-8469e100-6817-11eb-9217-9f776658e674.png\"\u003e\n\n\n**Define a label that has `Tag: ` prefix**  \n\n\u003cimg width=\"134\" alt=\"CleanShot 2021-02-06 at 01 06 57@2x\" src=\"https://user-images.githubusercontent.com/1888355/107058169-9ea3bf00-6817-11eb-9646-4171a57e7381.png\"\u003e\n\nYou can add groups and tags as you need.  \nRegarding those, the built-in generator parses and prints.\n\n## Customization - Inject JS\n\nIn addition using built-in generator, we can inject javascript code that generates a changelog with our own rules.\n\nCreate javascript file and use following template code.\n\n```js\nmodule.exports = () =\u003e {\n\n    const state = {\n        titles: []\n    }\n\n    return {\n\n        visit(pullRequest) {\n            state.titles.push(pullRequest.title)\n        },\n\n        visitLabel(label, pullRequest) {\n\n        },\n\n        visitAuthor(author, pullRequest) {\n\n        },\n\n        render() {\n            \n            return JSON.stringify(state, null, 2)\n        }\n    }\n}\n```\n\nPssing this from argument\n\n```sh\n$ chglog changelog -g /path/to/your_generator.js\n```\n\n## Customization - From JS\n\nDefine a visitor\n\n```ts\nexport interface Visitor {\n  visitLabel(label: Label, source: PullRequest): void;\n  visitAuthor(author: User, source: PullRequest): void;\n}\n```\n\n```ts\nconst createSampleVistor = () =\u003e {\n  return {\n    visitLabel(label: Label, source: PullRequest) {\n      ...\n    },\n    visitAuthor(author: User, source: PullRequest) {\n      ...\n    },\n};\n```\n\nFetch and parse\n\n```ts\nconst visitor = createSampleVistor();\n\nawait fetchData(\n  {\n    rightRef: \"\",\n    leftRef: \"\",\n    githubToken: \"\",\n    repoOwner: \"\",\n    repoName: \"\",\n    workingDirectory: \"\",\n  },\n  visitor\n);\n```\n\n## Development\n\nModule resolutions:\n\n- core\n- extensions\n- cli\n\n\nInstall dependencies\n\n```\n$ lerna bootstrap\n```\n\nBuild all packages\n\n```\n$ lerna exec yarn run build\n```\n\nRun CLI\n\n```\n$ cd ./packages/cli\n$ yarn run dev\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluidgroup%2Fchglog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffluidgroup%2Fchglog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluidgroup%2Fchglog/lists"}