Implement caching for promptKeycloakVersion

This commit is contained in:
Joseph Garrone 2024-05-18 08:11:20 +02:00
parent a3d9016cfe
commit 2f8d89012b
4 changed files with 54 additions and 9 deletions

View File

@ -17,7 +17,8 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
console.log("Select the Keycloak version from which you want to download the builtins theme:");
const { keycloakVersion } = await promptKeycloakVersion({
"startingFromMajor": undefined
"startingFromMajor": undefined,
"cacheDirPath": buildOptions.cacheDirPath
});
const destDirPath = pathJoin(buildOptions.keycloakifyBuildDirPath, "src", "main", "resources", "theme");

View File

@ -32,7 +32,8 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
const { keycloakVersion } = await promptKeycloakVersion({
// NOTE: This is arbitrary
"startingFromMajor": 17
"startingFromMajor": 17,
"cacheDirPath": buildOptions.cacheDirPath
});
const builtinKeycloakThemeTmpDirPath = pathJoin(buildOptions.cacheDirPath, "initialize-email-theme_tmp");

View File

@ -2,9 +2,13 @@ import { getLatestsSemVersionedTagFactory } from "../tools/octokit-addons/getLat
import { Octokit } from "@octokit/rest";
import cliSelect from "cli-select";
import { SemVer } from "../tools/SemVer";
import { join as pathJoin } from "path";
import * as fs from "fs";
import type { ReturnType } from "tsafe";
import { id } from "tsafe/id";
export async function promptKeycloakVersion(params: { startingFromMajor: number | undefined }) {
const { startingFromMajor } = params;
export async function promptKeycloakVersion(params: { startingFromMajor: number | undefined; cacheDirPath: string }) {
const { startingFromMajor, cacheDirPath } = params;
const { getLatestsSemVersionedTag } = (() => {
const { octokit } = (() => {
@ -22,13 +26,51 @@ export async function promptKeycloakVersion(params: { startingFromMajor: number
const semVersionedTagByMajor = new Map<number, { tag: string; version: SemVer }>();
(
await getLatestsSemVersionedTag({
const semVersionedTags = await (async () => {
const cacheFilePath = pathJoin(cacheDirPath, "keycloak-versions.json");
type Cache = {
time: number;
semVersionedTags: ReturnType<typeof getLatestsSemVersionedTag>;
};
use_cache: {
if (!fs.existsSync(cacheFilePath)) {
break use_cache;
}
const cache: Cache = JSON.parse(fs.readFileSync(cacheFilePath).toString("utf8"));
if (Date.now() - cache.time > 3_600_000) {
fs.unlinkSync(cacheFilePath);
break use_cache;
}
return cache.semVersionedTags;
}
const semVersionedTags = await getLatestsSemVersionedTag({
"count": 50,
"owner": "keycloak",
"repo": "keycloak"
})
).forEach(semVersionedTag => {
});
fs.writeFileSync(
cacheFilePath,
JSON.stringify(
id<Cache>({
"time": Date.now(),
semVersionedTags
}),
null,
2
)
);
return semVersionedTags;
})();
semVersionedTags.forEach(semVersionedTag => {
if (startingFromMajor !== undefined && semVersionedTag.version.major < startingFromMajor) {
return;
}

View File

@ -29,7 +29,8 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
keycloakMajorNumber: number;
}> {
const { keycloakVersion } = await promptKeycloakVersion({
"startingFromMajor": 17
"startingFromMajor": 17,
"cacheDirPath": buildOptions.cacheDirPath
});
const keycloakMajorNumber = SemVer.parse(keycloakVersion).major;