standard-version
standard-version copied to clipboard
Add switch to include commit body
Currently standard-version only includes the commit header. Is there a way to optionally include the commit body in the CHANGELOG.md? Is there a sister tool I should be using to generate release notes to end users that provide all the details?
@derekgreer Interesting no one noticed this, it's a great idea. When we squash our PRs on GitHub, it puts the squashed commits into the body, e.g.:
commit c18e83e1c45644ef7c81adae7fa7ed4581292b25
Author: Person
Date: Wed Mar 20 16:46:13 2019 -0500
feat(Downloads): Download modal improvements (#87)
* fix: Some fix
* fix: Updated things
* fix: Did another thing
It would be cool if that body could be put into the changelog as an indented list underneath the main commit message.
@bcoe @stevemao Thoughts on this?
Even just having extra detail beyond the first line, other than only breaking changes would be useful. Whether that's a list of commits in a PR being merged in, or descriptive text added manually as part of the commit message.
Some new features, or involved fixes may warrant additional description above and beyond the one line. Suggesting "you can manually edit the changelog" as has been mentioned in other issues, to my mind, kind of largely defeats the purpose of using an automated tool... if the info is already in the commit, it should be able to be pulled out of the commit log and injected into the change log. Especially if changelogs aren't being generated immediately every time there's a PR merge, or whatever.. having to then go back and manually add some description to the generated file, sometime in the future, is not very reasonable.
see motivation for a more flexible preset: https://github.com/conventional-changelog/conventional-changelog/pull/421
Maybe, we can use <details>
tag for commit body?
@stevemao this seems clever 😄 (in the good sense of the word). I might still be inclined to make it a config option that gets turned on.
Was any progress made on this? This tool is fab but I require the full commit message in the Changelog, rather than just the header.
@stevemao Can you elaborate on what you meant re the <details>
tag please?
@joshtoper see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details I was just throwing random idea.
I'm really in favour of this idea. I've done away with the develop branch in my projects as I tend to work myself from feature/issue to feature/issue and publish asap. Having the commit body included in the changelog would be very helpful in providing some context to the changelog.
Any progress or plan on supporting this? I'm also very interested in being able to customize changelog generation, as I may want to only include a section of the commit body in the changelog.
This would be extremely helpful for many of my projects. I'd love to be able to outline a majority of the changes in my CHANGELOG by using a commit body without ejecting:
https://github.com/crutchcorn/react-native-button-toggle-group/commit/9b79bc6bbf5a2055af890336faec6defab1b58b0
@crutchcorn Perfect use case scenario.
I'm going to be looking into adding this functionality. Linking related issues:
https://github.com/conventional-changelog/conventional-changelog/issues/338
https://github.com/conventional-changelog/conventional-changelog/issues/423
@crutchcorn I've been slammed with various other projects recently, but would appreciate the patch 👍
this chat can potentially be a good place to coordinate.
@crutchcorn do you intend to make a simple option to enable this feature instead of needing to create a customized template?
@patrickmichalina I plan on making it a simple toggle.
I've been reading through the source code of the dependencies and have an idea of how to add to this, but it's kinda down my priority list. I'll try taking a stab throughout the week or two, but it might take me a bit to get through
Looking forward to this feature as well
Any updates?
I've some changes: https://github.com/conventional-changelog/standard-version/pull/675 In my implementation, you can define own templates to show a body per commit message.
Any news?
Would love to see this feature get merged. The body text describes rich information that's absolutely worthy of going in the release notes.
Just a heads up if anyone needs to implement this now to their project, it's possible with a little configuration and a custom commit template. It's a bit tricky with whitespace handling in Handlebars + Markdown formatting, mine is definitely a little rough around the edges and YMMV based on how you format commit messages, but it works for us :) Suggestions welcome.
First, you need your semantic-release config in a release.config.js
file, so you can use Node to inject the template into the config:
const { readFileSync } = require('fs')
const { join } = require('path')
module.exports = {
plugins: [
...
[
'@semantic-release/release-notes-generator',
{
writerOpts: {
commitPartial: readFileSync(join(__dirname, 'path/to/commit.hbs'), 'utf-8')
}
}
],
...
]
}
And here's my modified commit.hbs
:
✅{{#if scope}} **{{scope}}:**
{{~/if}} {{#if subject}}
{{~subject}}
{{~else}}
{{~header}}
{{~/if}}
{{~!-- commit link --}} {{#if @root.linkReferences~}}
([{{shortHash}}](
{{~#if @root.repository}}
{{~#if @root.host}}
{{[email protected]}}/
{{~/if}}
{{~#if @root.owner}}
{{[email protected]}}/
{{~/if}}
{{[email protected]}}
{{~else}}
{{[email protected]}}
{{~/if}}/
{{[email protected]}}/{{hash}}))
{{~else}}
{{~shortHash}}
{{~/if}}
{{~!-- commit references --}}
{{~#if references~}}
, closes
{{~#each references}} {{#if @root.linkReferences~}}
[
{{~#if this.owner}}
{{~this.owner}}/
{{~/if}}
{{~this.repository}}#{{this.issue}}](
{{~#if @root.repository}}
{{~#if @root.host}}
{{[email protected]}}/
{{~/if}}
{{~#if this.repository}}
{{~#if this.owner}}
{{~this.owner}}/
{{~/if}}
{{~this.repository}}
{{~else}}
{{~#if @root.owner}}
{{[email protected]}}/
{{~/if}}
{{[email protected]}}
{{~/if}}
{{~else}}
{{[email protected]}}
{{~/if}}/
{{[email protected]}}/{{this.issue}})
{{~else}}
{{~#if this.owner}}
{{~this.owner}}/
{{~/if}}
{{~this.repository}}#{{this.issue}}
{{~/if}}{{/each}}
{{~/if}}
{{~#if body}}
{{{{raw}}}}
{{{{/raw}}}}
{{body}}
{{~/if}}
{{{{raw}}}}
{{{{/raw}}}}
Thank you very much, @ddx32 !! Your solution works fine for me!
My team uses semantic-release for a large number of projects and this feature would be awesome to provide more detail in Changelogs. Any plans to deliver this feature?
I'm using lerna, which relies on conventional-changelog for automated changelogs.
Being able to include commit body in changelog would be an amazing improvement.
Is there any plans to add this feature, super-easy research (among devs in my company) reveals that this is a VERY popular improvement 💪🏻
Thanks for all your good work!
Also looking to how to add body to lerna's changelog.
I would like to add that having a way to specify a section of the commit message body that goes into the changelog would be extra valuable to me.
This way, you can add both a message directed at other developers of the same project (which doesn't show up in the changelog), and a message directed at the readers of the changelog (be they end users or developers of some code consuming your project).
In the meanwhile, big thanks to @ddx32! Your suggestion seems to solve most of what I need 🙏 ❤️
EDIT: here's the commit where I implemented ddx32's suggestion in our project, in case anyone finds it helpful to see it used in a real world situation.
Just a heads up if anyone needs to implement this now to their project, it's possible with a little configuration and a custom commit template. It's a bit tricky with whitespace handling in Handlebars + Markdown formatting, mine is definitely a little rough around the edges and YMMV based on how you format commit messages, but it works for us :) Suggestions welcome.
First, you need your semantic-release config in a
release.config.js
file, so you can use Node to inject the template into the config:const { readFileSync } = require('fs') const { join } = require('path') module.exports = { plugins: [ ... [ '@semantic-release/release-notes-generator', { writerOpts: { commitPartial: readFileSync(join(__dirname, 'path/to/commit.hbs'), 'utf-8') } } ], ... ] }
And here's my modified
commit.hbs
:✅{{#if scope}} **{{scope}}:** {{~/if}} {{#if subject}} {{~subject}} {{~else}} {{~header}} {{~/if}} {{~!-- commit link --}} {{#if @root.linkReferences~}} ([{{shortHash}}]( {{~#if @root.repository}} {{~#if @root.host}} {{[email protected]}}/ {{~/if}} {{~#if @root.owner}} {{[email protected]}}/ {{~/if}} {{[email protected]}} {{~else}} {{[email protected]}} {{~/if}}/ {{[email protected]}}/{{hash}})) {{~else}} {{~shortHash}} {{~/if}} {{~!-- commit references --}} {{~#if references~}} , closes {{~#each references}} {{#if @root.linkReferences~}} [ {{~#if this.owner}} {{~this.owner}}/ {{~/if}} {{~this.repository}}#{{this.issue}}]( {{~#if @root.repository}} {{~#if @root.host}} {{[email protected]}}/ {{~/if}} {{~#if this.repository}} {{~#if this.owner}} {{~this.owner}}/ {{~/if}} {{~this.repository}} {{~else}} {{~#if @root.owner}} {{[email protected]}}/ {{~/if}} {{[email protected]}} {{~/if}} {{~else}} {{[email protected]}} {{~/if}}/ {{[email protected]}}/{{this.issue}}) {{~else}} {{~#if this.owner}} {{~this.owner}}/ {{~/if}} {{~this.repository}}#{{this.issue}} {{~/if}}{{/each}} {{~/if}} {{~#if body}} {{{{raw}}}} {{{{/raw}}}} {{body}} {{~/if}} {{{{raw}}}} {{{{/raw}}}}
Works pretty well! Thank you soo much @ddx32 for sharing your solution! Saved me days of googling and trial and error... 🙏🏻🙌🏻