{"id":15387298,"url":"https://github.com/rhysd/changelog-from-release","last_synced_at":"2025-04-06T01:10:55.950Z","repository":{"id":46776899,"uuid":"156955467","full_name":"rhysd/changelog-from-release","owner":"rhysd","description":"Simple changelog generator from GitHub releases","archived":false,"fork":false,"pushed_at":"2025-02-28T15:43:05.000Z","size":231,"stargazers_count":95,"open_issues_count":4,"forks_count":15,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-30T00:09:57.670Z","etag":null,"topics":["changelog","generator","github","releases"],"latest_commit_sha":null,"homepage":"https://github.com/rhysd/changelog-from-release/blob/master/CHANGELOG.md","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rhysd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","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,"publiccode":null,"codemeta":null}},"created_at":"2018-11-10T06:45:25.000Z","updated_at":"2025-03-05T00:22:24.000Z","dependencies_parsed_at":"2024-10-18T19:01:16.577Z","dependency_job_id":"b36a6c73-243a-4f96-9903-46a3a55306d4","html_url":"https://github.com/rhysd/changelog-from-release","commit_stats":{"total_commits":313,"total_committers":7,"mean_commits":"44.714285714285715","dds":0.09584664536741216,"last_synced_commit":"7d855b1d9ff66840e95aeb737786ef3a6b46ed5c"},"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fchangelog-from-release","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fchangelog-from-release/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fchangelog-from-release/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fchangelog-from-release/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rhysd","download_url":"https://codeload.github.com/rhysd/changelog-from-release/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247419861,"owners_count":20936012,"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":["changelog","generator","github","releases"],"created_at":"2024-10-01T14:53:33.625Z","updated_at":"2025-04-06T01:10:55.927Z","avatar_url":"https://github.com/rhysd.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Generate Changelog from GitHub Releases\n=======================================\n[![CI][ci-badge]][ci]\n\n`changelog-from-release` is a (too) small command line tool to generate changelog from\n[GitHub Releases][gh-releases]. It fetches releases of the repository via GitHub API and generates\nchangelog in Markdown format. [References][gh-autolinks] like `#123` or `@rhysd` are automatically\nlinked.\n\nFor example, [CHANGELOG.md](./CHANGELOG.md) was generated from [the releases page][releases].\n\nOther real-world examples:\n\n- https://github.com/rhysd/actionlint/blob/main/CHANGELOG.md\n- https://github.com/rhysd/hgrep/blob/main/CHANGELOG.md\n- https://github.com/rhysd/git-brws/blob/master/CHANGELOG.md\n\n\n## Installation\n\nDownload binary from [the releases page](https://github.com/rhysd/changelog-from-release/releases) or\nbuild from sources with Go toolchain (1.22 or later).\n\n```\n$ go install github.com/rhysd/changelog-from-release/v3@latest\n```\n\n\n## Usage\n\nRunning `changelog-from-release` with no argument outputs a changelog text in Markdown format to\nstdout. Please redirect the output to your changelog file.\n\n```\n$ cd /path/to/repo\n$ changelog-from-release \u003e CHANGELOG.md\n$ cat CHANGELOG.md\n```\n\nFor more command line usage, see the `-help` output.\n\nAutomation with [GitHub Actions][gh-actions] is also offered. Please read\n[action's README](./action/README.md) for more details.\n\n```yaml\n- uses: rhysd/changelog-from-release/action@v3\n  with:\n    file: CHANGELOG.md\n    github_token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n\n## FAQ\n\n### How can I update changelog before adding the release tag?\n\nFor example, how to include changes for v1.2.3 in `CHANGELOG.md` before creating a Git tag `v1.2.3`?\n\nPlease use [a release draft][gh-draft].\n\n1. Click 'Draft a new release' button in releases page and write up release note for the next release\n2. Click 'Choose a tag' drop down and enter a tag name for the release which is not created yet. Then\n   click '+ Create new tag: ... on publish' item in the drop down.\n3. Save the draft by clicking 'Save draft'\n4. Run `changelog-from-release` with setting [a personal access token][pat] to `$GITHUB_TOKEN`\n   environment variable\n5. Commit the generated changelog\n6. Create and push the new Git tag. Ensure the tag name is the same as one entered at 2.\n7. Go to the draft release page created at 1. and publish the release by clicking 'Publish release'\n   button\n\nSetting a personal access token at 2. is mandatory since release drafts are private information.\nAPI token associated with your account is necessary to fetch it. If you use [the action](./action/README.md),\nan API token is automatically generated by GitHub Actions so you don't need to create a token by\nyourself.\n\n### How can I insert some templates at top/bottom of generated changelog?\n\nSince `changelog-from-release` command just generates changelog history, you can insert your\nfavorite templates before/after redirecting the generated output to `CHANGELOG.md` file.\n\n```sh\n# Insert header\ncat \u003c\u003c-EOS \u003e CHANGELOG.md\nChangelog\n=========\n\nThis is a header.\n\nEOS\n\nchangelog-from-release -l 2 \u003e\u003e CHANGELOG.md\n\n# Insert footer\ncat \u003c\u003c-EOS \u003e\u003e CHANGELOG.md\n\nThis is a footer.\nEOS\n```\n\nIf your shell supports `$()`, header and footer can be inserted once.\n\n```sh\ncat \u003c\u003c-EOS \u003e CHANGELOG.md\nChangelog\n=========\n\nThis is a header.\n\n$(changelog-from-release -l 2)\n\nThis is a footer.\nEOS\n```\n\n`-l 2` means using `##` instead of `#` for each release section. Please adjust it for your use case.\n\nIf you're using [the action](./action/README.md), use `header` and `footer` inputs to insert texts\nbefore/after the generated changelog.\n\n```yaml\n- uses: rhysd/changelog-from-release/action@v3\n  with:\n    file: CHANGELOG.md\n    github_token: ${{ secrets.GITHUB_TOKEN }}\n    args: -l 2\n    header: |\n      Changelog\n      =========\n\n      This is header.\n    footer: |-\n\n      This is footer.\n```\n\n### How can I ignore some release tags?\n\nFor example, if your project has `nightly` tag release for nightly builds, it should be excluded from\nchangelog.\n\nIn this case, use `-i` command line option to ignore some release tags by regular expression:\n\n```sh\nchangelog-from-release -i '^nightly$' \u003e CHANGELOG.md\n```\n\n### How can I extract some release tags?\n\nFor example, if your project uses `v{major}.{minor}.{patch}` format for release tags, a changelog\nshould be created with extracting them.\n\nIn this case, use `-e` command line option to extract some release tags by regular expression:\n\n```sh\nchangelog-from-release -e '^v\\d+\\.\\d+\\.\\d+$' \u003e CHANGELOG.md\n```\n\n### How can I ignore draft releases?\n\nIf you're using the GitHub Action and don't want draft releases to be included in the changelog, you\ncan use the `-d` flag to omit them:\n\n```sh\nchangelog-from-release -d=false \u003e CHANGELOG.md\n```\n\n### How can I get a changelog in a format other than Markdown?\n\n`changelog-from-release` only supports Markdown. However you can convert the Markdown document into\nother formats such as plain text or HTML.\n\nMost famous tool for this is [Pandoc][pandoc]. For example, the following command converts the\nchangelog file from Markdown into plain text.\n\n```sh\npandoc CHANGELOG.md -t plain -o CHANGELOG.txt --wrap=none\n```\n\n### Can I generate 'Contributors' section?\n\n`c` option supports it. There are two notes on this feature:\n\n- To avoid false positives, this feature check the users actually exist by sending an HTTP request. If you're using it\n  with GHES and user profile pages are not accessible without authentication, this option does not work.\n- To make user icons circle, the option generates links to https://wsrv.nl instead of the direct profile images.\n\n## Reference auto linking\n\nGitHub [automatically links][gh-autolinks] to references to resources.\n\n`changelog-from-release` provides the same auto-linking feature. It automatically links the following\nreferences and URLs in release notes.\n\n### Issue reference\n\n`#123` → `[#123](https://github.com/owner/repo/issues/123)`\n\nExternal reference with `GH-` prefix is also supported.\n\n`GH-123` → `[#123](https://github.com/owner/repo/issues/123)`\n\n### User reference\n\n`@rhysd` → `[@rhysd](https://github.com/rhysd)`\n\n### Commit reference\n\n`93e1af6ec49d23397baba466fba1e89cc8b6de39` → ``[`93e1af6ec4`](https://github.com/owner/repo/commit/93e1af6ec49d23397baba466fba1e89cc8b6de39)``\n\n\u003e [!Note]\n\u003e To avoid false-positives, only full-length (40 characters) commit hashes are converted.\n\n### Custom autolink\n\n`JIRA-123` → `[JIRA-123](https://jira.my-company.com/browse/PROJ-123)`\n\n\u003e [!Note]\n\u003e Custom autolinks are [configured][gh-config-autolink] on your repository. [The API to fetch the custom autolinks configuration][gh-api-autolink]\n\u003e requires \"Administration\" repository permissions (read). When the permission lacks, `changelog-from-release`\n\u003e ignores the custom autolinks. You need to set your personal access token to the `GITHUB_TOKEN` environment\n\u003e variable.\n\n### Issue URL\n\n`https://github.com/owner/repo/issues/123` → `[#123](https://github.com/owner/repo/issues/123)`\n\nFor outside repositories,\n\n`https://github.com/other/repo/issues/123` → `[other/repo#123](https://github.com/owner/repo/issues/123)`\n\nAnd URL to an issue comment is supported.\n\n`https://github.com/owner/repo/issues/123#issue-1212591132` → `[#123 (comment)](https://github.com/owner/repo/issues/123#issue-1212591132)`\n\n### Pull request URL\n\n`https://github.com/owner/repo/pull/123` → `[#123](https://github.com/owner/repo/pull/123)`\n\nFor outside repositories,\n\n`https://github.com/other/repo/pull/123` → `[other/repo#123](https://github.com/owner/repo/pull/123)`\n\nAnd URL to a review comment is supported.\n\n`https://github.com/owner/repo/pull/123#pullrequestreview-1212591132` → `[#123 (review)](https://github.com/owner/repo/pull/123#pullrequestreview-1212591132)`\n\n### Commit URL\n\n`https://github.com/owner/repo/commit/93e1af6ec4` → ``[`93e1af6ec4`](https://github.com/owner/repo/commit/93e1af6ec4)``\n\nFor outside repositories,\n\n`https://github.com/other/repo/commit/93e1af6ec4` →  ``[other/repo`93e1af6ec4`](https://github.com/owner/repo/commit/93e1af6ec4)``\n\n\n## Environment variables\n\n### `GITHUB_API_BASE_URL`\n\nFor [GitHub Enterprise][ghe], please set `GITHUB_API_BASE_URL` environment variable to configure API\nbase URL.\n\n```sh\nexport GITHUB_API_BASE_URL=https://github.your-company.com/api/v3/\n```\n\n### `GITHUB_TOKEN`\n\nIf `changelog-from-release` reported API rate limit exceeded or no permission to access the repository,\nconsider to specify [a personal access token][pat].\n\n```sh\nexport GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n```\n\n\n## Bug report or feature request\n\nPlease [create an issue on GitHub][create-issue]. If something went wrong, it is helpful to include the debug log in the description. Debug log can be captured with the following command.\n\n```sh\nchangelog-from-release -debug 2\u003elog.txt\n```\n\n\n## License\n\n[the MIT License](LICENSE.txt)\n\n[gh-releases]: https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases\n[releases]: https://github.com/rhysd/changelog-from-release/releases\n[ci]: https://github.com/rhysd/changelog-from-release/actions/workflows/ci.yml\n[ci-badge]: https://github.com/rhysd/changelog-from-release/actions/workflows/ci.yml/badge.svg\n[gh-actions]: https://github.com/features/actions\n[ghe]: https://github.com/enterprise\n[pat]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token\n[gh-draft]: https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository\n[gh-autolinks]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls\n[gh-config-autolink]: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/configuring-autolinks-to-reference-external-resources\n[gh-api-autolink]: https://docs.github.com/en/rest/repos/autolinks\n[create-issue]: https://github.com/rhysd/changelog-from-release/issues/new\n[pandoc]: https://pandoc.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhysd%2Fchangelog-from-release","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frhysd%2Fchangelog-from-release","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhysd%2Fchangelog-from-release/lists"}