import * as fs from "fs"; import { join as pathJoin, dirname as pathDirname } from "path"; export const containerLaunchScriptBasename = "start_keycloak_testing_container.sh"; /** Files for being able to run a hot reload keycloak container */ export function generateDebugFiles(params: { keycloakVersion: "11.0.3" | "15.0.2"; themeName: string; keycloakThemeBuildingDirPath: string; }) { const { themeName, keycloakThemeBuildingDirPath, keycloakVersion } = params; fs.writeFileSync( pathJoin(keycloakThemeBuildingDirPath, "Dockerfile"), Buffer.from( [ `FROM jboss/keycloak:${keycloakVersion}`, "", "USER root", "", "WORKDIR /", "", "ADD configuration /opt/jboss/keycloak/standalone/configuration/", "", 'ENTRYPOINT [ "/opt/jboss/tools/docker-entrypoint.sh" ]', ].join("\n"), "utf8", ), ); const dockerImage = `${themeName}/keycloak-hot-reload`; const containerName = "keycloak-testing-container"; fs.writeFileSync( pathJoin(keycloakThemeBuildingDirPath, containerLaunchScriptBasename), Buffer.from( [ "#!/bin/bash", "", `cd ${keycloakThemeBuildingDirPath}`, "", `docker rm ${containerName} || true`, "", `docker build . -t ${dockerImage}`, "", "docker run \\", " -p 8080:8080 \\", ` --name ${containerName} \\`, " -e KEYCLOAK_USER=admin \\", " -e KEYCLOAK_PASSWORD=admin \\", " -e JAVA_OPTS=-Dkeycloak.profile=preview \\", ` -v ${pathJoin( keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", themeName, )}:/opt/jboss/keycloak/themes/${themeName}:rw \\`, ` -it ${dockerImage}:latest`, "", ].join("\n"), "utf8", ), { "mode": 0o755 }, ); const standaloneHaFilePath = pathJoin( keycloakThemeBuildingDirPath, "configuration", `standalone-ha.xml`, ); try { fs.mkdirSync(pathDirname(standaloneHaFilePath)); } catch {} fs.writeFileSync( standaloneHaFilePath, fs .readFileSync( pathJoin(__dirname, `standalone-ha_${keycloakVersion}.xml`), ) .toString("utf8") .replace( new RegExp( [ "2592000", "true", "true", ].join("\\s*"), "g", ), [ "-1", "false", "false", ].join("\n"), ), ); }