This repository has been archived by the owner on Aug 11, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
scripts: Add @iarna's changelog generator tool
- Loading branch information
Showing
2 changed files
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
'use strict' | ||
/* | ||
Usage: | ||
node scripts/changelog.js [comittish] | ||
Generates changelog entries in our format as best as its able based on | ||
commits starting at comittish, or if that's not passed, master. | ||
Ordinarily this is run via the gen-changelog shell script, which appends | ||
the result to the changelog. | ||
*/ | ||
const execSync = require('child_process').execSync | ||
const branch = process.argv[2] || 'master' | ||
const log = execSync(`git log --pretty='format:%h %H%d %s (%aN)%n%b%n---%n' ${branch}...`).toString().split(/\n/) | ||
const authormap = { | ||
'Rebecca Turner': 'iarna', | ||
'Forrest L Norvell': 'othiym23', | ||
'Kyle Mitchell': 'kemitchell', | ||
'Chris Rebert': 'cvrebert', | ||
'Kat Marchán': 'zkat' | ||
} | ||
|
||
main() | ||
|
||
function print_commit (c) { | ||
let m | ||
console.log(`* [\`${c.shortid}\`](https://github.com/npm/npm/commit/${c.fullid})`) | ||
if (c.fixes) { | ||
console.log(` [#${c.fixes}](https://github.com/npm/npm/issues/${c.fixes})`) | ||
} else if (c.prurl && (m = c.prurl.match(/https:\/\/github.com\/([^/]+\/[^/]+)\/pull\/(\d+)/))) { | ||
let repo = m[1] | ||
let prid = m[2] | ||
if (repo !== 'npm/npm') { | ||
console.log(` [${repo}#${prid}](${c.prurl})`) | ||
} else { | ||
console.log(` [#${prid}](${c.prurl})`) | ||
} | ||
} else if (c.prurl) { | ||
console.log(` [#](${c.prurl})`) | ||
} | ||
let msg = c.message | ||
.replace(/^\s+/mg, '') | ||
.replace(/^[-a-z]+: /, '') | ||
.replace(/^/mg, ' ') | ||
.replace(/\n$/, '') | ||
// backtickify package@version | ||
.replace(/^(\s*[^@\s]+@\d+[.]\d+[.]\d+)(\s*\S)/g, '$1:$2') | ||
.replace(/\b([^@\s]+@\d+[.]\d+[.]\d+)\b/g, '`$1`') | ||
// linkify commitids | ||
.replace(/\b([a-f0-9]{7,8})\b/g, '[`$1`](https://github.com/npm/npm/commit/$1)') | ||
.replace(/\b#(\d+)\b/g, '[#$1](https://github.com/npm/npm/issues/$1)') | ||
console.log(msg) | ||
if (c.credit) { | ||
console.log(` ([@${c.credit}](https://github.com/${c.credit}))`) | ||
} else { | ||
console.log(` ([@${c.author}](https://github.com/${c.author}))`) | ||
} | ||
} | ||
|
||
function main () { | ||
let commit | ||
log.forEach(function (line) { | ||
let m | ||
if (/^---$/.test(line)) { | ||
print_commit(commit) | ||
} else if (m = line.match(/^([a-f0-9]{7}) ([a-f0-9]+) (?:[(]([^)]+)[)] )?(.*?) [(](.*?)[)]/)) { | ||
commit = { | ||
shortid: m[1], | ||
fullid : m[2], | ||
branch: m[3], | ||
message: m[4], | ||
author: authormap[m[5]] || m[5], | ||
prurl: null, | ||
fixes: null, | ||
credit: null | ||
} | ||
} else if (m = line.match(/^PR-URL: (.*)/)) { | ||
commit.prurl = m[1] | ||
} else if (m = line.match(/^Credit: @(.*)/)) { | ||
commit.credit = m[1] | ||
} else if (m = line.match(/^Fixes: #(.*)/)) { | ||
commit.fixes = m[1]; | ||
} else if (m = line.match(/^Reviewed-By: @(.*)/)) { | ||
commit.reviewed = m[1]; | ||
} else if (/\S/.test(line)) { | ||
commit.message += `\n${line}` | ||
} | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/bin/sh | ||
# Usage: gen-changelog [comittish] | ||
# Reads all the commits since comittish and produces changelog entries in | ||
# our style as best as it can, appendning them to CHANGELOG.md. If it | ||
# encounters a git error it won't modify CHANGELOG.md | ||
# @iarna uses this as the first step in producing changelogs for a release. | ||
(node $(npm prefix)/scripts/changelog.js "$@"; cat CHANGELOG.md) > new.md && mv new.md CHANGELOG.md |