Files
keycloak_theme/src/bin/shared/promptKeycloakVersion.ts

73 lines
2.2 KiB
TypeScript
Raw Normal View History

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";
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[];
doOmitPatch: boolean;
2024-08-13 00:10:34 +02:00
buildContext: BuildContextLike;
2024-05-20 15:48:51 +02:00
}) {
const { startingFromMajor, excludeMajorVersions, doOmitPatch, buildContext } = params;
2024-05-17 05:13:41 +02:00
const semVersionedTagByMajor = new Map<number, { tag: string; version: SemVer }>();
const semVersionedTags = await getLatestsSemVersionedTag({
count: 50,
owner: "keycloak",
repo: "keycloak",
2024-08-13 00:10:34 +02:00
doIgnoreReleaseCandidates: true,
buildContext
});
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-20 15:48:51 +02:00
if (
currentSemVersionedTag !== undefined &&
SemVer.compare(semVersionedTag.version, currentSemVersionedTag.version) === -1
) {
return;
}
semVersionedTagByMajor.set(semVersionedTag.version.major, semVersionedTag);
});
2024-05-20 15:48:51 +02:00
const lastMajorVersions = Array.from(semVersionedTagByMajor.values()).map(
({ version }) =>
`${version.major}.${version.minor}${doOmitPatch ? "" : `.${version.patch}`}`
2024-05-20 15:48:51 +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);
});
const keycloakVersion = value.split(" ")[0];
2022-04-20 00:39:40 +02:00
return { keycloakVersion };
}