@kazupon/lerna-changelog
Version:
Generate a changelog for a lerna monorepo
53 lines (52 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.listCommits = exports.parseLogMessage = exports.lastTag = exports.listTagNames = exports.changedPaths = void 0;
const execa = require('execa');
async function changedPaths(sha) {
const result = await execa('git', [
'show',
'-m',
'--name-only',
'--pretty=format:',
'--first-parent',
sha
]);
return result.stdout.split('\n');
}
exports.changedPaths = changedPaths;
function listTagNames() {
return execa.sync('git', ['tag']).stdout.split('\n').filter(Boolean);
}
exports.listTagNames = listTagNames;
function lastTag() {
return execa.sync('git', ['describe', '--abbrev=0', '--tags']).stdout;
}
exports.lastTag = lastTag;
function parseLogMessage(commit) {
const parts = commit.match(/hash<(.+)> ref<(.*)> message<(.*)> date<(.*)>/) || [];
if (!parts || parts.length === 0) {
return null;
}
return {
sha: parts[1],
refName: parts[2],
summary: parts[3],
date: parts[4]
};
}
exports.parseLogMessage = parseLogMessage;
function listCommits(from, to = '') {
return execa
.sync('git', [
'log',
'--oneline',
'--pretty=hash<%h> ref<%D> message<%s> date<%cd>',
'--date=short',
`${from}..${to}`
])
.stdout.split('\n')
.filter(Boolean)
.map(parseLogMessage)
.filter(Boolean);
}
exports.listCommits = listCommits;