keycloak_theme/src/bin/shared/promptKeycloakVersion.ts

64 lines
2.0 KiB
TypeScript
Raw Normal View History

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";
import { lastKeycloakVersionWithAccountV1 } from "./constants";
import { SemVer } from "../tools/SemVer";
2022-04-20 00:39:40 +02:00
export async function promptKeycloakVersion() {
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 };
})();
console.log("Select Keycloak version");
2022-04-20 00:39:40 +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",
"repo": "keycloak"
})
).forEach(semVersionedTag => {
const currentSemVersionedTag = semVersionedTagByMajor.get(semVersionedTag.version.major);
if (currentSemVersionedTag !== undefined && SemVer.compare(semVersionedTag.version, currentSemVersionedTag.version) === -1) {
return;
}
semVersionedTagByMajor.set(semVersionedTag.version.major, semVersionedTag);
});
const lastMajorVersions = Array.from(semVersionedTagByMajor.values()).map(({ tag: version }) => {
let out = version;
if (version === lastKeycloakVersionWithAccountV1) {
out += " (last version with account v1 built in)";
}
return out;
});
const { value } = await cliSelect<string>({
"values": lastMajorVersions
2022-04-20 00:39:40 +02:00
}).catch(() => {
console.log("Aborting");
process.exit(-1);
});
const keycloakVersion = value.split(" ")[0];
2022-04-20 00:39:40 +02:00
return { keycloakVersion };
}