keycloak_theme/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts

66 lines
2.0 KiB
TypeScript
Raw Normal View History

2022-04-09 20:17:20 +02:00
import * as fs from "fs";
import { join as pathJoin } from "path";
2022-08-16 14:41:06 +07:00
import { assert } from "tsafe/assert";
import { Reflect } from "tsafe/Reflect";
import type { BuildOptions } from "./BuildOptions";
export type BuildOptionsLike = {
themeName: string;
};
{
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";
/** Files for being able to run a hot reload keycloak container */
2022-08-16 14:41:06 +07:00
export function generateStartKeycloakTestingContainer(params: {
keycloakVersion: string;
keycloakThemeBuildingDirPath: string;
buildOptions: BuildOptionsLike;
}) {
const {
keycloakThemeBuildingDirPath,
keycloakVersion,
buildOptions: { themeName }
2022-08-16 14:41:06 +07:00
} = params;
2022-04-09 20:17:20 +02:00
fs.writeFileSync(
pathJoin(keycloakThemeBuildingDirPath, generateStartKeycloakTestingContainer.basename),
Buffer.from(
[
"#!/bin/bash",
"",
`docker rm ${containerName} || true`,
"",
`cd ${keycloakThemeBuildingDirPath}`,
"",
"docker run \\",
" -p 8080:8080 \\",
` --name ${containerName} \\`,
" -e KEYCLOAK_ADMIN=admin \\",
" -e KEYCLOAK_ADMIN_PASSWORD=admin \\",
" -e JAVA_OPTS=-Dkeycloak.profile=preview \\",
` -v ${pathJoin(
keycloakThemeBuildingDirPath,
"src",
"main",
"resources",
"theme",
themeName
2022-04-09 20:17:20 +02:00
)}:/opt/keycloak/themes/${themeName}:rw \\`,
` -it quay.io/keycloak/keycloak:${keycloakVersion} \\`,
` start-dev`,
""
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
);
}