2024-08-13 00:10:34 +02:00
|
|
|
import {
|
|
|
|
getLatestsSemVersionedTag,
|
|
|
|
type BuildContextLike as BuildContextLike_getLatestsSemVersionedTag
|
|
|
|
} from "./getLatestsSemVersionedTag";
|
2022-04-20 00:39:40 +02:00
|
|
|
import cliSelect from "cli-select";
|
2024-08-13 00:10:34 +02:00
|
|
|
import { assert } from "tsafe/assert";
|
2024-05-16 06:50:33 +02:00
|
|
|
import { SemVer } from "../tools/SemVer";
|
2024-08-13 00:10:34 +02:00
|
|
|
import type { BuildContext } from "./buildContext";
|
|
|
|
|
|
|
|
export type BuildContextLike = BuildContextLike_getLatestsSemVersionedTag & {};
|
|
|
|
|
|
|
|
assert<BuildContext extends BuildContextLike ? true : false>();
|
2022-04-20 00:39:40 +02:00
|
|
|
|
2024-05-20 15:48:51 +02:00
|
|
|
export async function promptKeycloakVersion(params: {
|
|
|
|
startingFromMajor: number | undefined;
|
2024-06-11 17:12:12 +02:00
|
|
|
excludeMajorVersions: number[];
|
2024-08-27 17:40:48 +02:00
|
|
|
doOmitPatch: boolean;
|
2024-08-13 00:10:34 +02:00
|
|
|
buildContext: BuildContextLike;
|
2024-05-20 15:48:51 +02:00
|
|
|
}) {
|
2024-08-27 17:40:48 +02:00
|
|
|
const { startingFromMajor, excludeMajorVersions, doOmitPatch, buildContext } = params;
|
2024-05-17 05:13:41 +02:00
|
|
|
|
2024-05-16 06:50:33 +02:00
|
|
|
const semVersionedTagByMajor = new Map<number, { tag: string; version: SemVer }>();
|
|
|
|
|
2024-07-25 18:16:43 +02:00
|
|
|
const semVersionedTags = await getLatestsSemVersionedTag({
|
|
|
|
count: 50,
|
|
|
|
owner: "keycloak",
|
|
|
|
repo: "keycloak",
|
2024-08-13 00:10:34 +02:00
|
|
|
doIgnoreReleaseCandidates: true,
|
|
|
|
buildContext
|
2024-07-25 18:16:43 +02:00
|
|
|
});
|
2024-05-18 08:11:20 +02:00
|
|
|
|
|
|
|
semVersionedTags.forEach(semVersionedTag => {
|
2024-05-20 15:48:51 +02:00
|
|
|
if (
|
|
|
|
startingFromMajor !== undefined &&
|
|
|
|
semVersionedTag.version.major < startingFromMajor
|
|
|
|
) {
|
2024-05-17 05:13:41 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2024-06-11 17:12:12 +02:00
|
|
|
if (excludeMajorVersions.includes(semVersionedTag.version.major)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2024-05-20 15:48:51 +02:00
|
|
|
const currentSemVersionedTag = semVersionedTagByMajor.get(
|
|
|
|
semVersionedTag.version.major
|
|
|
|
);
|
2024-05-16 06:50:33 +02:00
|
|
|
|
2024-05-20 15:48:51 +02:00
|
|
|
if (
|
|
|
|
currentSemVersionedTag !== undefined &&
|
|
|
|
SemVer.compare(semVersionedTag.version, currentSemVersionedTag.version) === -1
|
|
|
|
) {
|
2024-05-16 06:50:33 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
semVersionedTagByMajor.set(semVersionedTag.version.major, semVersionedTag);
|
|
|
|
});
|
|
|
|
|
2024-05-20 15:48:51 +02:00
|
|
|
const lastMajorVersions = Array.from(semVersionedTagByMajor.values()).map(
|
2024-08-27 17:40:48 +02:00
|
|
|
({ version }) =>
|
|
|
|
`${version.major}.${version.minor}${doOmitPatch ? "" : `.${version.patch}`}`
|
2024-05-20 15:48:51 +02:00
|
|
|
);
|
2024-05-16 06:50:33 +02:00
|
|
|
|
|
|
|
const { value } = await cliSelect<string>({
|
2024-05-20 15:48:51 +02:00
|
|
|
values: lastMajorVersions
|
2022-04-20 00:39:40 +02:00
|
|
|
}).catch(() => {
|
|
|
|
process.exit(-1);
|
|
|
|
});
|
|
|
|
|
2024-05-16 06:50:33 +02:00
|
|
|
const keycloakVersion = value.split(" ")[0];
|
2022-04-20 00:39:40 +02:00
|
|
|
|
|
|
|
return { keycloakVersion };
|
|
|
|
}
|