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:
parent
671fc3052a
commit
f8d7917f56
@ -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);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user