70 lines
1.8 KiB
Plaintext
70 lines
1.8 KiB
Plaintext
/* eslint-disable import/no-extraneous-dependencies */
|
|
import startCase from "lodash.startcase";
|
|
import { getCommitsThatAddFiles } from "@changesets/git";
|
|
import { ComprehensiveRelease, NewChangeset } from "@changesets/types";
|
|
|
|
import { RelevantChangesets } from "../types";
|
|
|
|
async function getReleaseLine(changeset: NewChangeset, cwd: string) {
|
|
const [firstLine, ...futureLines] = changeset.summary
|
|
.split("\n")
|
|
.map((l) => l.trimRight());
|
|
|
|
const [commitThatAddsFile] = await getCommitsThatAddFiles(
|
|
[`.changeset/${changeset.id}.md`],
|
|
{ cwd }
|
|
);
|
|
|
|
return `- [${commitThatAddsFile}] ${firstLine}\n${futureLines
|
|
.map((l) => ` ${l}`)
|
|
.join("\n")}`;
|
|
}
|
|
|
|
async function getReleaseLines(
|
|
obj: RelevantChangesets,
|
|
type: keyof RelevantChangesets,
|
|
cwd: string
|
|
) {
|
|
const releaseLines = obj[type].map((changeset) =>
|
|
getReleaseLine(changeset, cwd)
|
|
);
|
|
if (!releaseLines.length) return "";
|
|
const resolvedLines = await Promise.all(releaseLines);
|
|
|
|
return `### ${startCase(type)} Changes\n\n${resolvedLines.join("")}`;
|
|
}
|
|
|
|
export default async function defaultChangelogGetter(
|
|
release: ComprehensiveRelease,
|
|
relevantChangesets: RelevantChangesets,
|
|
options: { cwd: string }
|
|
) {
|
|
let { cwd } = options;
|
|
|
|
// First, we construct the release lines, summaries of changesets that caused us to be released
|
|
let majorReleaseLines = await getReleaseLines(
|
|
relevantChangesets,
|
|
"major",
|
|
cwd
|
|
);
|
|
let minorReleaseLines = await getReleaseLines(
|
|
relevantChangesets,
|
|
"minor",
|
|
cwd
|
|
);
|
|
let patchReleaseLines = await getReleaseLines(
|
|
relevantChangesets,
|
|
"patch",
|
|
cwd
|
|
);
|
|
|
|
return [
|
|
`## ${release.newVersion}`,
|
|
majorReleaseLines,
|
|
minorReleaseLines,
|
|
patchReleaseLines,
|
|
]
|
|
.filter((line) => line)
|
|
.join("\n");
|
|
}
|