Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ npm i changelog-maker -g
`github-user` and `github-project` should point to the GitHub repository that can be used to find the `PR-URL` data if just an issue number is provided and will also impact how the PR-URL issue numbers are displayed

* `--format`: dictates what formatting the output will have. Possible options are: `simple`, `markdown`, `plaintext`, `messageonly` and `sha`. The default is to print a `simple` output suitable for stdout.
- `sequence`: hybrid format that can be pasted directly in the sequence editor of a `git rebase --interactive` session, without retaining info such as commit title, author, labels, PR URL.
- `simple`: don't print full markdown output, good for console printing without the additional fluff.
- `sha`: print only the 10-character truncated commit hashes.
- `plaintext`: a very simple form, without commit details, implies `--group`.
Expand All @@ -60,6 +61,7 @@ npm i changelog-maker -g
* `--start-ref=<ref>`: use the given git `<ref>` as a starting point rather than the _last tag_. The `<ref>` can be anything commit-ish including a commit sha, tag, branch name. If you specify a `--start-ref` argument the commit log will not be pruned so that version commits and `working on <version>` commits are left in the list.
* `--end-ref=<ref>`: use the given git `<ref>` as a end-point rather than the _now_. The `<ref>` can be anything commit-ish including a commit sha, tag, branch name.
* `--filter-release`: exclude Node-style release commits from the list. e.g. "Working on v1.0.0" or "2015-10-21 Version 2.0.0" and also "npm version X" style commits containing _only_ an `x.y.z` semver designator.
* `--sequence-drop=<label1>[,<label2>[,…]]`: when `--format=sequence`, will output the commits belonging to a PR with a label listed here as `drop` instead of `pick`. This can be useful for human backporter to understand why a specific commit does not apply cleanly, to spot which commit might be creating conflicts.
* `--find-matching-prs`: use the GitHub API to find the pull requests that match commits that don't have the `PR-URL` metadata in their message text. Without metadata, it may be necessary to also pass the org/user and repo name on the commandline (as the `github-user` and `github-project` arguments as demonstrated above).
* `--quiet` or `-q`: do not print to `process.stdout`
* `--all` or `-a`: process all commits since beginning, instead of last tag.
Expand Down
1 change: 1 addition & 0 deletions changelog-maker.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const { values, positionals } = parseArgs({
'commit-url': { type: 'string' },
'end-ref': { type: 'string' },
'filter-release': { type: 'boolean' },
'sequence-drop': { type: 'string' },
'find-matching-prs': { type: 'boolean' },
format: { type: 'string' },
group: { type: 'boolean', short: 'g' },
Expand Down
15 changes: 11 additions & 4 deletions commit-to-output.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export const formatType = {
SHA: 'sha',
PLAINTEXT: 'plaintext',
MARKDOWN: 'markdown',
SEQUENCE: 'sequence',
SIMPLE: 'simple',
MESSAGEONLY: 'messageonly'
}
Expand All @@ -58,18 +59,21 @@ function toStringPlaintext (data) {
return ` * ${s.trim()}`
}

function toStringSimple (data) {
function toStringSimple (data, withLabels = false) {
let s = ''
s += `* [${data.sha.substr(0, 10)}] - `
s += (data.semver || []).length ? `(${data.semver.join(', ').toUpperCase()}) ` : ''
s += data.revert ? 'Revert "' : ''
s += data.group ? `${data.group}: ` : ''
s += data.summary
s += data.revert ? '" ' : ' '
s += data.author ? `(${data.author}) ` : ''
s += data.pr ? data.prUrl : ''
s = s.trim()
if (withLabels && data.labels?.length) s += ' (' + data.labels.join(', ') + ')'
return s.trim()
}

function toStringSimpleWithListMarker (data) {
const s = `* [${data.sha.substr(0, 10)}] - ${toStringSimple(data)}`
return (data.semver && data.semver.length)
? chalk.green.bold(s)
: (data.group === 'doc'
Expand Down Expand Up @@ -110,6 +114,7 @@ export function commitToOutput (commit, format, ghId, commitUrl) {
data.sha = commit.sha
data.shaUrl = commitUrl.replace(/\{ghUser\}/g, ghId.user).replace(/\{ghRepo\}/g, ghId.repo).replace(/\{ref\}/g, ref)
data.semver = commit.labels && commit.labels.filter((l) => l.includes('semver'))
data.labels = commit.labels
data.revert = isRevert(commit.summary)
data.group = toGroups(commit.summary)
data.summary = cleanGroupSummary(cleanRevertSummary(commit.summary))
Expand All @@ -119,7 +124,9 @@ export function commitToOutput (commit, format, ghId, commitUrl) {
data.cveId = commit.cveId

if (format === formatType.SIMPLE) {
return toStringSimple(data)
return toStringSimpleWithListMarker(data)
} else if (format === formatType.SEQUENCE) {
return toStringSimple(data, true)
} else if (format === formatType.PLAINTEXT) {
return toStringPlaintext(data)
} else if (format === formatType.MESSAGEONLY) {
Expand Down
3 changes: 3 additions & 0 deletions process-commits.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ export async function processCommits (argv, ghId, list) {

if (format === formatType.SHA) {
list = list.map((commit) => `${commit.sha.substr(0, 10)}`)
} else if (format === formatType.SEQUENCE) {
const droppableLabels = argv['sequence-drop']?.split(',') ?? []
list = list.map((commit) => `${commit.labels?.some(l => droppableLabels.includes(l)) ? 'drop' : 'pick'} ${commit.sha} # ${commitToOutput(commit, format, ghId, commitUrl)}`)
} else if (
format === formatType.PLAINTEXT ||
format === formatType.MESSAGEONLY
Expand Down
26 changes: 26 additions & 0 deletions test.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,32 @@ test('test simple', (t) => {
t.end()
})

test('test sequence', (t) => {
t.equal(exec('--start-ref=v2.2.7 --end-ref=9c700d29 --group --filter-release --format=sequence'),
`pick cc442b65343cd1bb7cb4ecc3c6e729b4e4625f97 # (SEMVER-MINOR) minor nit (Rod Vagg) https://github.com/nodejs/node/pull/23715 (semver-minor, build, i18n-api)
pick 4f2b7f8136358bc3ecd720e33457fdeff9581733 # deps: use strip-ansi instead of chalk.stripColor (Rod Vagg)
pick 6898501e18f231db40a84b511d2a6a4b8f5f17f3 # deps: update deps, introduce test & lint deps (Rod Vagg)
pick 9c700d29104b5a22fcf79ba21f5f009d7f1cdfc5 # feature: refactor and improve --commit-url (Rod Vagg)
pick 50945246557b4a25133435b106d0e5dd5d88a9be # feature: make the commit url configurable via an additional argument (Jim Nielsen) https://github.com/nodejs/changelog-maker/pull/55
pick 42f248cf8904224a585e9f3834cc1283713c56cf # src: use \`standard\` for linting (Rod Vagg)
pick 64a8fdef3c35627ca50c48e9acb80c57a3f6d2a2 # test: basic test infrastructure (Rod Vagg)
`)
t.end()
})

test('test sequence-drop', (t) => {
t.equal(exec('--start-ref=v2.2.7 --end-ref=9c700d29 --group --filter-release --format=sequence --reverse --sequence-drop=semver-minor'),
`pick 64a8fdef3c35627ca50c48e9acb80c57a3f6d2a2 # test: basic test infrastructure (Rod Vagg)
pick 42f248cf8904224a585e9f3834cc1283713c56cf # src: use \`standard\` for linting (Rod Vagg)
pick 50945246557b4a25133435b106d0e5dd5d88a9be # feature: make the commit url configurable via an additional argument (Jim Nielsen) https://github.com/nodejs/changelog-maker/pull/55
pick 9c700d29104b5a22fcf79ba21f5f009d7f1cdfc5 # feature: refactor and improve --commit-url (Rod Vagg)
pick 6898501e18f231db40a84b511d2a6a4b8f5f17f3 # deps: update deps, introduce test & lint deps (Rod Vagg)
pick 4f2b7f8136358bc3ecd720e33457fdeff9581733 # deps: use strip-ansi instead of chalk.stripColor (Rod Vagg)
drop cc442b65343cd1bb7cb4ecc3c6e729b4e4625f97 # (SEMVER-MINOR) minor nit (Rod Vagg) https://github.com/nodejs/node/pull/23715 (semver-minor, build, i18n-api)
`)
t.end()
})

test('test plaintext', (t) => {
t.equal(exec('--start-ref=9c700d2 --end-ref=dd937e9 --group --filter-release --format=plaintext'),
`feature:
Expand Down