1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Fix bugs related to picking PRs

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-02-24 10:42:23 -05:00
parent 671fc3052a
commit f8d7917f56

View File

@ -13,14 +13,10 @@ import { promisify } from "util";
type SemVer = semver.SemVer; type SemVer = semver.SemVer;
const { const { SemVer } = semver;
SemVer,
valid: semverValid,
rcompare: semverRcompare,
lte: semverLte,
} = semver;
const exec = promisify(child_process.exec); const exec = promisify(child_process.exec);
const spawn = promisify(child_process.spawn); const spawn = promisify(child_process.spawn);
const execFile = promisify(child_process.execFile);
interface GithubPrData { interface GithubPrData {
author: { author: {
@ -59,12 +55,11 @@ async function getAbsolutePathToRepoRoot(): Promise<string> {
} }
async function fetchAllGitTags(): Promise<string[]> { async function fetchAllGitTags(): Promise<string[]> {
await spawn("git", ["fetch", "--tags", "--force"], { await execFile("git", ["fetch", "--tags", "--force"]);
stdio: "inherit",
});
return (await exec("git tag --list", { encoding: "utf-8" })) const { stdout } = await exec("git tag --list", { encoding: "utf-8" });
.stdout
return stdout
.split(/\r?\n/) .split(/\r?\n/)
.map(line => line.trim()); .map(line => line.trim());
} }
@ -75,16 +70,21 @@ async function bumpPackageVersions(): Promise<void> {
}); });
} }
function isDefined<T>(value: T | null | undefined): value is T {
return value != null;
}
function findClosestVersionTagLessThanVersion(tags: string[], version: SemVer): string { function findClosestVersionTagLessThanVersion(tags: string[], version: SemVer): string {
const lessThanTags = tags const lessThanTags = tags
.map((value) => semverValid(value)) .map((value) => semver.parse(value))
.filter((v): v is string => typeof v === "string") .filter(isDefined)
.sort(semverRcompare) .filter(version => !version.prerelease.includes("cron"))
.filter(version => semverLte(version, version)); .sort(semver.rcompare)
.filter(version => semver.lte(version, version));
assert(lessThanTags.length > 0, `Cannot find version tag less than ${version.format()}`); assert(lessThanTags.length > 0, `Cannot find version tag less than ${version.format()}`);
return lessThanTags[0]; return lessThanTags[0].format();
} }
async function getCurrentVersionOfSubPackage(packageName: string): Promise<SemVer> { async function getCurrentVersionOfSubPackage(packageName: string): Promise<SemVer> {
@ -200,15 +200,21 @@ const cherrypickCommitWith = (rl: ReadLine) => async (commit: string) => {
}; };
async function pickWhichCommitsToUse(prs: ExtendedGithubPrData[]): Promise<ExtendedGithubPrData[]> { async function pickWhichCommitsToUse(prs: ExtendedGithubPrData[]): Promise<ExtendedGithubPrData[]> {
console.log("Pick which commits to use..."); const answers = await inquirer.prompt<{ commits: number[] }>({
const answers = await inquirer.prompt<Partial<Record<number, boolean>>>(prs.map(pr => ({
message: `#${pr.number}: ${pr.title}`,
type: "checkbox", type: "checkbox",
default: true, name: `commits`,
name: pr.number, message: "Pick which commits to use...",
}))); default: [],
choices: prs.map(pr => ({
checked: true,
key: pr.number,
name: `#${pr.number}: ${pr.title} (https://github.com/lensapp/lens/pull/${pr.number})`,
value: pr.number,
})),
loop: false,
});
return prs.filter(pr => answers[pr.number]); return prs.filter(pr => answers.commits.includes(pr.number));
} }
function formatChangelog(previousReleasedVersion: string, prs: ExtendedGithubPrData[]): string { function formatChangelog(previousReleasedVersion: string, prs: ExtendedGithubPrData[]): string {
@ -266,7 +272,11 @@ async function pickRelaventPrs(prs: ExtendedGithubPrData[], isMasterBranch: bool
return prs; return prs;
} }
const selectedPrs = await pickWhichCommitsToUse(prs); let selectedPrs: ExtendedGithubPrData[];
do {
selectedPrs = await pickWhichCommitsToUse(prs);
} while (selectedPrs.length === 0 && (console.warn("[WARNING]: must pick at least once commit"), true));
await cherrypickCommits(selectedPrs); await cherrypickCommits(selectedPrs);