keycloak_theme/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts

67 lines
2.6 KiB
TypeScript
Raw Normal View History

2022-04-09 20:17:20 +02:00
import * as fs from "fs";
import { join as pathJoin, relative as pathRelative, basename as pathBasename } from "path";
2022-08-16 14:41:06 +07:00
import { assert } from "tsafe/assert";
import { Reflect } from "tsafe/Reflect";
2024-01-30 06:38:26 +01:00
import type { BuildOptions } from "./buildOptions";
2022-08-16 14:41:06 +07:00
export type BuildOptionsLike = {
2023-09-04 00:25:36 +02:00
keycloakifyBuildDirPath: string;
2022-08-16 14:41:06 +07:00
};
{
const buildOptions = Reflect<BuildOptions>();
assert<typeof buildOptions extends BuildOptionsLike ? true : false>();
}
2022-04-09 20:17:20 +02:00
generateStartKeycloakTestingContainer.basename = "start_keycloak_testing_container.sh";
const containerName = "keycloak-testing-container";
const keycloakVersion = "24.0.4";
2022-04-09 20:17:20 +02:00
/** Files for being able to run a hot reload keycloak container */
export function generateStartKeycloakTestingContainer(params: { jarFilePath: string; buildOptions: BuildOptionsLike }) {
const { jarFilePath, buildOptions } = params;
2023-09-04 00:25:36 +02:00
const themeRelativeDirPath = pathJoin("src", "main", "resources", "theme");
const themeDirPath = pathJoin(buildOptions.keycloakifyBuildDirPath, themeRelativeDirPath);
2022-04-09 20:17:20 +02:00
fs.writeFileSync(
2023-09-04 00:25:36 +02:00
pathJoin(buildOptions.keycloakifyBuildDirPath, generateStartKeycloakTestingContainer.basename),
2022-04-09 20:17:20 +02:00
Buffer.from(
[
"#!/usr/bin/env bash",
2022-04-09 20:17:20 +02:00
"",
`docker rm ${containerName} || true`,
"",
2023-09-04 00:25:36 +02:00
`cd "${buildOptions.keycloakifyBuildDirPath}"`,
2022-04-09 20:17:20 +02:00
"",
"docker run \\",
" -p 8080:8080 \\",
` --name ${containerName} \\`,
" -e KEYCLOAK_ADMIN=admin \\",
" -e KEYCLOAK_ADMIN_PASSWORD=admin \\",
` -v "${pathJoin(
"$(pwd)",
pathRelative(buildOptions.keycloakifyBuildDirPath, jarFilePath)
)}":"/opt/keycloak/providers/${pathBasename(jarFilePath)}" \\`,
2023-09-04 00:25:36 +02:00
...fs
.readdirSync(themeDirPath)
.filter(name => fs.lstatSync(pathJoin(themeDirPath, name)).isDirectory())
.map(
themeName =>
` -v "${pathJoin("$(pwd)", themeRelativeDirPath, themeName).replace(
/\\/g,
"/"
)}":"/opt/keycloak/themes/${themeName}":rw \\`
2023-09-04 00:25:36 +02:00
),
2022-04-09 20:17:20 +02:00
` -it quay.io/keycloak/keycloak:${keycloakVersion} \\`,
` start-dev --features=declarative-user-profile`,
""
2022-04-09 20:17:20 +02:00
].join("\n"),
"utf8"
2022-04-09 20:17:20 +02:00
),
{ "mode": 0o755 }
2022-04-09 20:17:20 +02:00
);
}