2024-05-15 05:14:01 +02:00
|
|
|
import { getLatestsSemVersionedTagFactory } from "../tools/octokit-addons/getLatestsSemVersionedTag";
|
2022-04-20 00:39:40 +02:00
|
|
|
import { Octokit } from "@octokit/rest";
|
|
|
|
import cliSelect from "cli-select";
|
2024-05-16 06:50:33 +02:00
|
|
|
import { SemVer } from "../tools/SemVer";
|
2022-04-20 00:39:40 +02:00
|
|
|
|
2024-05-17 05:13:41 +02:00
|
|
|
export async function promptKeycloakVersion(params: { startingFromMajor: number | undefined }) {
|
|
|
|
const { startingFromMajor } = params;
|
|
|
|
|
2022-04-20 00:39:40 +02:00
|
|
|
const { getLatestsSemVersionedTag } = (() => {
|
|
|
|
const { octokit } = (() => {
|
|
|
|
const githubToken = process.env.GITHUB_TOKEN;
|
|
|
|
|
|
|
|
const octokit = new Octokit(githubToken === undefined ? undefined : { "auth": githubToken });
|
|
|
|
|
|
|
|
return { octokit };
|
|
|
|
})();
|
|
|
|
|
|
|
|
const { getLatestsSemVersionedTag } = getLatestsSemVersionedTagFactory({ octokit });
|
|
|
|
|
|
|
|
return { getLatestsSemVersionedTag };
|
|
|
|
})();
|
|
|
|
|
2024-05-16 06:50:33 +02:00
|
|
|
const semVersionedTagByMajor = new Map<number, { tag: string; version: SemVer }>();
|
|
|
|
|
|
|
|
(
|
|
|
|
await getLatestsSemVersionedTag({
|
|
|
|
"count": 50,
|
2022-04-22 18:22:28 +02:00
|
|
|
"owner": "keycloak",
|
2022-08-20 11:44:48 +07:00
|
|
|
"repo": "keycloak"
|
2024-05-16 06:50:33 +02:00
|
|
|
})
|
|
|
|
).forEach(semVersionedTag => {
|
2024-05-17 05:13:41 +02:00
|
|
|
if (startingFromMajor !== undefined && semVersionedTag.version.major < startingFromMajor) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2024-05-16 06:50:33 +02:00
|
|
|
const currentSemVersionedTag = semVersionedTagByMajor.get(semVersionedTag.version.major);
|
|
|
|
|
|
|
|
if (currentSemVersionedTag !== undefined && SemVer.compare(semVersionedTag.version, currentSemVersionedTag.version) === -1) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
semVersionedTagByMajor.set(semVersionedTag.version.major, semVersionedTag);
|
|
|
|
});
|
|
|
|
|
2024-05-18 04:33:31 +02:00
|
|
|
const lastMajorVersions = Array.from(semVersionedTagByMajor.values()).map(({ tag }) => tag);
|
2024-05-16 06:50:33 +02:00
|
|
|
|
|
|
|
const { value } = await cliSelect<string>({
|
|
|
|
"values": lastMajorVersions
|
2022-04-20 00:39:40 +02:00
|
|
|
}).catch(() => {
|
|
|
|
console.log("Aborting");
|
|
|
|
|
|
|
|
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 };
|
|
|
|
}
|