Implement caching for promptKeycloakVersion
This commit is contained in:
@ -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:");
|
console.log("Select the Keycloak version from which you want to download the builtins theme:");
|
||||||
|
|
||||||
const { keycloakVersion } = await promptKeycloakVersion({
|
const { keycloakVersion } = await promptKeycloakVersion({
|
||||||
"startingFromMajor": undefined
|
"startingFromMajor": undefined,
|
||||||
|
"cacheDirPath": buildOptions.cacheDirPath
|
||||||
});
|
});
|
||||||
|
|
||||||
const destDirPath = pathJoin(buildOptions.keycloakifyBuildDirPath, "src", "main", "resources", "theme");
|
const destDirPath = pathJoin(buildOptions.keycloakifyBuildDirPath, "src", "main", "resources", "theme");
|
||||||
|
@ -32,7 +32,8 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|||||||
|
|
||||||
const { keycloakVersion } = await promptKeycloakVersion({
|
const { keycloakVersion } = await promptKeycloakVersion({
|
||||||
// NOTE: This is arbitrary
|
// NOTE: This is arbitrary
|
||||||
"startingFromMajor": 17
|
"startingFromMajor": 17,
|
||||||
|
"cacheDirPath": buildOptions.cacheDirPath
|
||||||
});
|
});
|
||||||
|
|
||||||
const builtinKeycloakThemeTmpDirPath = pathJoin(buildOptions.cacheDirPath, "initialize-email-theme_tmp");
|
const builtinKeycloakThemeTmpDirPath = pathJoin(buildOptions.cacheDirPath, "initialize-email-theme_tmp");
|
||||||
|
@ -2,9 +2,13 @@ import { getLatestsSemVersionedTagFactory } from "../tools/octokit-addons/getLat
|
|||||||
import { Octokit } from "@octokit/rest";
|
import { Octokit } from "@octokit/rest";
|
||||||
import cliSelect from "cli-select";
|
import cliSelect from "cli-select";
|
||||||
import { SemVer } from "../tools/SemVer";
|
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 }) {
|
export async function promptKeycloakVersion(params: { startingFromMajor: number | undefined; cacheDirPath: string }) {
|
||||||
const { startingFromMajor } = params;
|
const { startingFromMajor, cacheDirPath } = params;
|
||||||
|
|
||||||
const { getLatestsSemVersionedTag } = (() => {
|
const { getLatestsSemVersionedTag } = (() => {
|
||||||
const { octokit } = (() => {
|
const { octokit } = (() => {
|
||||||
@ -22,13 +26,51 @@ export async function promptKeycloakVersion(params: { startingFromMajor: number
|
|||||||
|
|
||||||
const semVersionedTagByMajor = new Map<number, { tag: string; version: SemVer }>();
|
const semVersionedTagByMajor = new Map<number, { tag: string; version: SemVer }>();
|
||||||
|
|
||||||
(
|
const semVersionedTags = await (async () => {
|
||||||
await getLatestsSemVersionedTag({
|
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,
|
"count": 50,
|
||||||
"owner": "keycloak",
|
"owner": "keycloak",
|
||||||
"repo": "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) {
|
if (startingFromMajor !== undefined && semVersionedTag.version.major < startingFromMajor) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,8 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|||||||
keycloakMajorNumber: number;
|
keycloakMajorNumber: number;
|
||||||
}> {
|
}> {
|
||||||
const { keycloakVersion } = await promptKeycloakVersion({
|
const { keycloakVersion } = await promptKeycloakVersion({
|
||||||
"startingFromMajor": 17
|
"startingFromMajor": 17,
|
||||||
|
"cacheDirPath": buildOptions.cacheDirPath
|
||||||
});
|
});
|
||||||
|
|
||||||
const keycloakMajorNumber = SemVer.parse(keycloakVersion).major;
|
const keycloakMajorNumber = SemVer.parse(keycloakVersion).major;
|
||||||
|
Reference in New Issue
Block a user