generateReleaseNotes method
void
generateReleaseNotes(})
Implementation
void generateReleaseNotes(Version? newVersion, Version? currentVersion,
{required bool autoAnswer, required bool dryrun}) {
// see https://blogs.sap.com/2018/06/22/generating-release-notes-from-git-commit-messages-using-basic-shell-commands-gitgrep/
// for better ideas.
if (!exists(changeLogPath)) {
touch(changeLogPath, create: true);
}
/// we use a .md as then user can preview the mark down.
final tmpReleaseNotes = join(pathToPackageRoot, 'release.notes.tmp.md');
// ignore: cascade_invocations
tmpReleaseNotes.write('# ${newVersion.toString()}');
final git = Git(pathToPackageRoot);
final usingGit = git.usingGit;
/// add commit messages to release notes.
if (usingGit) {
final lastTag = git.getLatestTag();
// just the messages from each commit
final messages = git.getCommitMessages(lastTag);
for (final message in messages) {
tmpReleaseNotes.append('- $message');
}
tmpReleaseNotes.append('');
}
/// append the changelog to the new release notes
read(changeLogPath).toList().forEach(tmpReleaseNotes.append);
// give the user a chance to clean up the change log.
if (!autoAnswer &&
!dryrun &&
confirm('Would you like to edit the $changeLogPath notes')) {
showEditor(tmpReleaseNotes);
}
// write the edited commit messages to the change log.
final backup = '$changeLogPath.bak';
/// move the change log out of the way.
move(changeLogPath, backup);
/// replace the newly updated change log over the old one.
move(tmpReleaseNotes, changeLogPath);
delete(backup);
}