Home

Awesome

Changelog Generator

Buy me a coffee Build & Test Repo Dependents

This Action returns a markdown formatted changelog between two git references. There are other projects that use milestones, labeled PRs, etc. Those are just to much work for simple projects.

<a target="__blank" href="https://github.com/jaywcjlove/changelog-generator/releases"> <img src="https://user-images.githubusercontent.com/1680273/103605228-53636b80-4f4e-11eb-9fa3-c53e7358f645.png" height="320" alt="Changelog Generator" /> </a>

I just wanted a simple way to populate the body of a GitHub Release.

- run: echo "previous_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo '')" >> $GITHUB_ENV
- name: Generate changelog
  id: changelog
  uses: jaywcjlove/changelog-generator@main
  if: env.previous_tag
  with:
    token: ${{ secrets.GITHUB_TOKEN }}
    filter-author: (jaywcjlove|小弟调调™|dependabot|renovate\\[bot\\]|dependabot\\[bot\\]|Renovate Bot)
    filter: '[R|r]elease[d]\s+[v|V]\d(\.\d+){0,2}'

Then you can to use the resulting changelog.

- name: Get the changelog
  run: echo "${{ steps.changelog.outputs.changelog }}"

- name: Create Release
  uses: ncipollo/release-action@v1
  if: steps.create_tag.outputs.successful == 'true'
  with:
    token: ${{ secrets.GITHUB_TOKEN }}
    name: ${{ steps.create_tag.outputs.version }}
    tag: ${{ steps.create_tag.outputs.version }}
    body: |
      ${{ steps.changelog.outputs.compareurl }}

      ${{ steps.changelog.outputs.changelog }}
      
      Document Website: https://raw.githack.com/jaywcjlove/changelog-generator/${{ steps.changelog.outputs.gh-pages-short-hash }}/index.html

Define the log display template (#111).

- name: Generate changelog
  uses: jaywcjlove/changelog-generator@main
  with:
    token: ${{ secrets.GITHUB_TOKEN }}
    filter-author: (jaywcjlove|小弟调调™|dependabot|renovate\\[bot\\]|dependabot\\[bot\\]|Renovate Bot)
    filter: '[R|r]elease[d]\s+[v|V]\d(\.\d+){0,2}'
    template: |
      ## Bugs
      {{fix}}
      ## Feature
      {{feat}}
      ## Improve
      {{refactor,perf,clean}}
      ## Misc 
      {{chore,style,ci||🔶 Nothing change}}
      ## Unknown
      {{__unknown__}}

Customize type and emoji icons

- name: Generate Changelog(custom-emoji test)
  uses: jaywcjlove/changelog-generator@main
  with:
    token: ${{ secrets.GITHUB_TOKEN }}
    filter-author: (小弟调调™|Renovate Bot)
    filter: '[R|r]elease[d]\s+[v|V]\d(\.\d+){0,2}'
    custom-emoji: 'type🐝,feat💄,fix🆎'

GETTING STARTED

Only use the following Git Commit Messages. A simple and small footprint is critical here.

  1. 🌟 feat Use when you add something entirely new. E.g: feat(Button): add type props.
  2. 🐞 fix Use when you fix a bug — need I say more? E.g. fix: Case conversion.
  3. 📖 doc/docs Use when you add documentation like README.md, or even inline docs. E.g. doc(Color): API Interface.
  4. 💄 chore Changes to the build process or auxiliary tools. E.g. chore(Color): API Interface.
  5. 🎨 style Format (changes that do not affect code execution). E.g. style(Alert): API Interface.
  6. 🆎 type Typescript type bug fixes. E.g. type(Alert): fix type error.
  7. test Add and modify test cases. E.g. test(Alert): Add test case.
  8. 🐝 refactor Refactoring (i.e. code changes that are not new additions or bug fixes). E.g. refactor(Alert): API Interface.
  9. 🌍 website Documentation website changes. E.g. website(Alert): Add example.
  10. 🔙 revert Revert last commit. E.g. revert: Add test case.
  11. 💊 clean clean up. E.g. clean: remove comment code.
  12. 📈 perf Change the code to improve performance. E.g. perf(pencil): remove graphiteWidth option
  13. 💢 ci Continuous integration related file modification. E.g. ci: Update workflows config.
  14. 🧯 build Changes that affect the build system or external dependencies (example scopes: gulp, webpack, vite, npm)
<type>(<scope>): <short summary>
  │       │             │
  │       │             └─⫸ Summary in present tense. Not capitalized. No period at the end.
  │       │
  │       └─⫸ Commit Scope: animations|bazel|benchpress|common|compiler|compiler-cli|core|
  │                          elements|forms|http|language-service|localize|platform-browser|
  │                          platform-browser-dynamic|platform-server|router|service-worker|
  │                          upgrade|zone.js|packaging|changelog|docs-infra|migrations|ngcc|ve|
  │                          devtools....
  │
  └─⫸ Commit Type: build|ci|doc|docs|feat|fix|perf|refactor|test
                    website|chore|style|type|revert

Inputs

Outputs

Troubleshooting

Error not found

Error: Not Found

If you are seeing this error its likely that you do not yet have a GitHub release. You might have a git tag and that shows up in the release tab. The API this Action uses only works with GitHub Releases. Convert one of your tags to a release and you'll be on your way. You can check out how this repository uses this action and GitHub releases for an example.

You can also set env.previous_tag to "" or the previous tag if it exists, and run the step conditionally. If there is no previous tag, the step will not run:

+- run: echo "previous_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo '')" >> $GITHUB_ENV
 - name: Generate changelog
   id: changelog
   uses: jaywcjlove/changelog-generator@main
+  if: env.previous_tag
   with:
    token: ${{ secrets.GITHUB_TOKEN }}

See also

Acknowledgements

Example

Contributors

As always, thanks to our amazing contributors!

<a href="https://github.com/jaywcjlove/changelog-generator/graphs/contributors"> <img src="https://jaywcjlove.github.io/changelog-generator/CONTRIBUTORS.svg" /> </a>

Made with action-contributors.

License

The scripts and documentation in this project are released under the MIT License