lerna-changelog
Version:
Generate a changelog for a lerna monorepo
62 lines (61 loc) • 2.39 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listCommits = exports.parseLogMessage = exports.lastTag = exports.listTagNames = exports.changedPaths = exports.getRootPath = void 0;
const execa = require("execa");
function getRootPath() {
const cwd = process.cwd();
return execa.sync("git", ["rev-parse", "--show-toplevel"], { cwd }).stdout;
}
exports.getRootPath = getRootPath;
function changedPaths(sha) {
return __awaiter(this, void 0, void 0, function* () {
const result = yield 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;
;