olivierlacan / keep-a-changelog

If you build software, keep a changelog.
http://keepachangelog.com
MIT License
6.14k stars 3.62k forks source link

keepachangelog tools #67

Closed ungoldman closed 1 year ago

ungoldman commented 9 years ago

This is not strictly an issue, but FYI a few folks have been making tools based around the conventions established so far by this project. Here are a few I have participated in or found:

Might be helpful/beneficial to link to these in the README. :smile:

olivierlacan commented 9 years ago

Thanks for gathering those. Will do. :-)

On Apr 4, 2015, at 07:05, Nate Goldman notifications@github.com wrote:

This is not strictly an issue, but FYI a few folks have been making tools based around the conventions established so far by this project. Here are a few I have participated in or found:

https://github.com/bcomnes/changelog-init https://github.com/ngoldman/changelog-parser https://github.com/ngoldman/gh-release https://github.com/bigwhoop/trellog https://github.com/contentful-labs/keepachangelog Might be helpful/beneficial to link to these in the README.

— Reply to this email directly or view it on GitHub.

markchalloner commented 9 years ago

I have also just pushed a github plugin for semantic versioning that looks for a changelog:

https://github.com/markchalloner/git-semver

Anahkiasen commented 9 years ago

Also Changehub

cookpete commented 8 years ago

I’d like to add auto-changelog to the mix, which is something I’ve been working on recently with this schema in mind. It parses your git log and attempts to build a somewhat sensible changelog from what it finds.

r1ddl3m37h15 commented 8 years ago

this is a tutorial w an interesting technique for solving the problem. https://github.com/coders-kitchen/tut-releaseNotesFromTags

svetlyak40wt commented 8 years ago

I'm working on a service for parsing and subscribing on release notes. This is my pet-project.

http://allmychanges.com

It is more generic than changehub.io and is not tied to github's releases, though is able to parse not only plain-text files, but also github's releases, html pages, ios and google stores and even group commit messages around version numbers.

stackold commented 8 years ago

Since changehub was never fully launched, not in proper function at least, we created a Stackrecord. It's a GitHub based web hosting service for changelogs that sticks to keepachangelog guidelines. Registration is free and open, the project is currently in beta phase. The Stackrecord also offers an API and a CLI application.

svetlyak40wt commented 8 years ago

@stackrecord it whould be nice to have https://raw.githubusercontent.com/stackrecord/stack-cli/master/CHANGELOG.md in the format suggested by keep a changelog. Right now it is not markdown et all.

And it will be cool to have http://stackrecord.com/CHANGELOG.md as I do at https://allmychanges.com/CHANGELOG.md :)

stackold commented 8 years ago

@svetlyak40wt you are absolutely right! We are working on it. Cheers!

sam3d commented 8 years ago

Hey guys! Been working on changelogapp. It functions as both a command line application to parse, manipulate and stringify keepachangelog changelogs, and as an npm module. This is a hobby project that I believe is mildly similar to @stackrecord, would love for you to check it out and hear your thoughts! 😊

svetlyak40wt commented 8 years ago

@samholmes1337 changelogapp looks interesting. Does it store data in the intermediate json file, or parses a markdown each time when it need to add a section or a new version?

svetlyak40wt commented 8 years ago

@samholmes1337 I'll add the changelogapp to the https://allmychanges.com/help/changelog-generators/ if you don't mind. I think it very useful tool which will help people to keep a right formatting which is good for my project too :)

sam3d commented 8 years ago

@svetlyak40wt it just parses the markdown every time a new addition or change is made, trying to make the implementation as clean as possible. And yeah that'd be awesome please do!

mbrand12 commented 8 years ago

@samholmes1337

Just checked it out, it is a awesome idea.

It might also help guide a person how to keep a changelog. For example the generator might contain examples or suggestion where to place the changes (weather to place them to changed or removed etc, or what changed or added means etc.), so that users might be informed of a convention but not forced to comply to it.

Adding the option to generate github compare links as well would be a good addition.

tinchoz49 commented 8 years ago

Hi everyone!

we are working on a tool to work with the keepachangelog format. All comments and feedback are welcome :bowtie: !

https://github.com/geut/chan

colindean commented 7 years ago

I've written a rudimentary Java library for parsing keepachangelog format:

https://github.com/colindean/keepachangelog-parser-java

I'm still intending to hone it and working on the edge cases (e.g. unreleased and yanked) and making it a little more configurable. I intend to write a Gradle plugin which uses this library to transform CHANGELOG.md into a changelog.json or somesuch as a build artifact.

Edit 2017-06-06: Added support for unreleased and yanked, released library on Jcenter.

duraki commented 7 years ago

Hello, I wrote a git for changelog.

It's called devist ; a ruby git-like app that helps you keep proper changelog files.

Although this tool does not follow all rules of keepachangelog it's still inspired from it. The format has been specifically crafted to be visible in raw and md format, and the tool offer export to HTML as well as various other options and features.

Head out to website to get started.

Also, it's open source so catch up with a star. - https://github.com/duraki/devist

Lucas-C commented 6 years ago

Is there a tool that can convert a CHANGELOG to an Atom/RSS feed ?

cookpete commented 6 years ago

@Lucas-C auto-changelog is pretty flexible and supports custom handlebars templates. I'm sure it would be possible to generate a changelog in RSS format. If not I'd be interested in adding it as a feature.

Lucas-C commented 6 years ago

Thanks @CookPete, but auto-changelog seems to generate a changelog, not to be able to eat a standard CHANGELOG.md

colindean commented 6 years ago

@Lucas-C keepachangelog-parser-java provides a decent interface on top of keepachange-formatted markdown. You could combine that with an RSS library like Rome to generate a feed. Rome has a quick tutorial on how to use it.

It'd probably look something like this pseudo-Java typed by hand and not checked and my Java 8 is rusty:

import cx.cad.keepachangelog.ChangelogParser;
import com.rometools.rome.feed.synd.*;

ChangelogData data = ChangelogParser.parse(markdownTextAsStringOrFile);
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(feedType);

feed.setTitle("Changelog feed for " + data.getProjectName());
feed.setLink("http://example.com/somewhere/"+data.getProjectName()+".rss");
feed.setDescription(data.getDescription());

SortedSet<ChangelogEntry> changelogEntries = data.getEntries();

SortedSet<SyndEntry> entries = changelogEntries.map( (changelogEntry) -> {
  SyndEntry entry = new SyndEntryImpl();
  entry.setTitle(changelogEntry.getVersion() + (changelogEntry.isYanked() ? "[YANKED]" : "");
  //entry.setLink(""); // may not make sense in this context?
  entry.setPublishedDate(changelogEntry.getDate());
  entry.setDescription(changelogEntry.getDescription());
  SyndContent description = new SyndContentImpl();
  String sectionText = formatChangelogEntrySectionText(changelogEntry.getSections());
  description.setType("text/plain");
  description.setValue(sectionText);
  return entry;
});

feed.setEntries(entries);

Writer writer = new FileWriter(fileName);
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed,writer);
writer.close();

System.out.println("The feed has been written to the file ["+fileName+"]");

function String formatChangelogEntrySectionText(SortedSet<ChangelogSection> sections) {
   //implementation left as an exercise for the reader
}

Honestly, I've wanted to do something like this for a long time. I don't know when I'll have time to do it, though!

Lucas-C commented 6 years ago

TYVM @colindean, that sounds promising and would fit very well in my current stack !

svetlyak40wt commented 6 years ago

Is there a tool that can convert a CHANGELOG to an Atom/RSS feed ?

Allmychange.com is able to parse almost any changelog format and produce a single RSS feed for all projects you are tracking.

However, I've abandoned the project last year. Wan't to rewrite it from Python to Common Lisp some day. That will be fun!

Lucas-C commented 6 years ago

Thanks @svetlyak40wt ! I had seen it in this thread above, and it looks awesome. Plus it is open-source, so it could be use internally in a company. However it looks a bit heavyweight as it requires Redis & MySQL whereas I just want to generate a RSS feed XML file from a changelog Markdown file : https://github.com/AllMyChanges/allmychanges.com#how-to-setup

svetlyak40wt commented 6 years ago

@Lucas-C actually, AllMyChanges is a service for end users who want to track software changed. It is for subscription. All you need it to add your library's changelog there. Just paste a github URL if it is opensource, or URL pointing to a changelog, if it is closed.

For example, here is a plain text changelog of AMCH: http://allmychanges.com/CHANGELOG.md and here is it's parsed version which you can subscribe on: https://allmychanges.com/p/web/allmychanges/

svetlyak40wt commented 6 years ago

You don't want to generate RSS youself, belive me :)

akshaybabloo commented 6 years ago

Pitching in one I just pushed to PyPi creates a CHANGELOG.md based on keep-a-changelog -> https://github.com/akshaybabloo/release-exporter

tjaneczko commented 6 years ago

Just released https://github.com/brightcove/kacl for automating changelog releases for node projects. It pairs really nicely with gh-release for fully automated releasing by just running npm version.

ianfixes commented 5 years ago

Just to add to the noise here, I wrote https://github.com/ianfixes/keepachangelog_manager_gem

As far as I can tell, it's the only one of these tools that's focused on automating the release process of these changelogs -- the point in time at which the Unreleased section is reset and all the stuff that was in there gets put under an official semver-format version.

In other words, the release process becomes scriptable:

#!/bin/bash

# assuming you've just merged a pull request on GitHub, this script 
# releases your code and updates the relevant files with the new version

# pull down the merged commit
git pull --rebase

# Update the changelog to a new patch version
NEW_VERSION=$(bundle exec keepachangelog_manager.rb --increment-patch)
# could also explicitly set one of the fields:
# NEW_VERSION=$(bundle exec keepachangelog_manager.rb --minor=3)

echo "Do any other steps related to releasing $NEW_VERSION"
git add CHANGELOG.md  # and any other files
git commit -m "v$NEW_VERSION" bump"
git tag -a v$NEW_VERSION -m "Released version $NEW_VERSION"
git push && git push --tags
nedtwigg commented 4 years ago

I recently shipped spotless-changelog. If you happen to have used the spotless code formatter, it's the same idea, but for the keepachangelog format. There's a gradle plugin, and also a separate library if you want to just grab the parser on its own.

The workflow for the gradle plugin is that as you update the [Unreleased] section, it calculates the appropriate next version by parsing the unreleased fixes / new features / breaking changes. When you run gradlew changelogPush, it sets the correct version, builds the jar, publishes to mavenCentral, bumps the changelog, commits the bumped changelog, tags, and pushes. I've been using it for about two weeks to work out the kinks and get to 1.0, and its made our releases so much easier. (release announcement on twitter if you'd like to signal boost)

I think it would be great if the keepachangelog site aggregated tools compatible with keepachangelog. It's the difference between "you should indent with two spaces and always use semicolons!" vs prettier, gofmt, rustfmt, google-java-format, etc.

tomodian commented 4 years ago

Yet another changelog parser which works nicely on monorepo. https://github.com/tomodian/release

We have nearly a hundred CHANGELOG.md files in our monorepo, so it was impossible to maintain the versions manually. The release cli saves my time, a lot.

It's written in Go, so please try it and love to hear your feedbacks!