Skip to content

jaywcjlove/changelog-generator

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

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.

Changelog Generator

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

  • token A GITHUB_TOKEN with the ability to pull from the repo in question. This is required. Why do we need token? Read more here: About the GITHUB_TOKEN secret. Default: ${{ github.token }}
  • filter-author Regular expression filtering author. Example: filter-author: (jaywcjlove|小弟调调™|dependabot\[bot\]|Renovate Bot)
  • filter Regular expression filtering changelog. Example: filter: '[R|r]elease[d]\s+[v|V]\d(\.\d+){0,2}'
  • head-ref The name of the head reference. Default ${{github.sha}}.
  • base-ref The name of the second branch. Defaults to the tag_name of the latest GitHub release. This must be a GitHub release. Git tags or branches will not work.
  • original-markdown Default true, Output clean markdown content.
  • gh-pages Default gh-pages, Specify the branch name to get the hash from
  • order Default asc, Should the log results be displayed in descending (desc) or ascending (asc) order
  • path Only commits containing this file path will be returned.
  • template Define the log display template (#111).
  • show-emoji Show emoji icons. Default true.
  • custom-emoji Customize type and emoji icons. Example type🆎,chore💄,fix🐞.

Outputs

  • changelog Markdown formatted changelog.
  • compareurl Comparing two branches to see what’s changed or to start a new pull request.
  • tag Tag name v1.0.0.
  • version The version number of the tag created. example: 1.0.0
  • branch Branch name.
  • gh-pages-hash Output to the latest hash of the specified branch. example: cc088c571f86fe222ff68f565
  • gh-pages-short-hash Specify the branch name to get the short-hash from. example: cc088c5

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!

Made with action-contributors.

License

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