top
Using my app is also a way to support me:
Deskmark Keyzer Vidwall Hub VidCrop Vidwall Mousio Hint Mousio Musicer Audioer FileSentinel FocusCursor Videoer KeyClicker DayBar Iconed Mousio Quick RSS Quick RSS Web Serve Copybook Generator DevTutor for SwiftUI RegexMate Time Passage Iconize Folder Textsound Saver Create Custom Symbols DevHub Resume Revise Palette Genius Symbol Scribe

Changelog Generator

Buy me a coffee Build & Test Repo Dependents Coverage Status

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\\])
    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
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

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!

Made with action-contributors.

License

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