From 6ef4348c996f7e94911c4e3f37b7e4512afdd76c Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Sun, 21 Feb 2021 22:28:35 +0100 Subject: [PATCH] Generate debug files to be able to test the container --- res/standalone-ha.xml | 666 ++++++++++++++++++ .../generateDebugFiles.ts | 71 ++ .../generateJavaStackFiles.ts | 17 +- src/bin/build-keycloak-theme/index.ts | 11 +- 4 files changed, 757 insertions(+), 8 deletions(-) create mode 100644 res/standalone-ha.xml create mode 100644 src/bin/build-keycloak-theme/generateDebugFiles.ts diff --git a/res/standalone-ha.xml b/res/standalone-ha.xml new file mode 100644 index 00000000..19ca86ec --- /dev/null +++ b/res/standalone-ha.xml @@ -0,0 +1,666 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + h2 + + sa + sa + + + + jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE + h2 + + 100 + + + sa + sa + + + + + org.h2.jdbcx.JdbcDataSource + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auth + + + classpath:${jboss.home.dir}/providers/* + + + master + 900 + + -1 + false + false + ${env.KEYCLOAK_WELCOME_THEME:keycloak} + ${env.KEYCLOAK_DEFAULT_THEME:keycloak} + ${jboss.home.dir}/themes + + + + + + + + + + + + + jpa + + + basic + + + + + + + + + + + + + + + + + + + default + + + + + + + + ${keycloak.jta.lookup.provider:jboss} + + + + + + + + + + + ${keycloak.x509cert.lookup.provider:default} + + + + ${keycloak.hostname.provider:default} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/bin/build-keycloak-theme/generateDebugFiles.ts b/src/bin/build-keycloak-theme/generateDebugFiles.ts new file mode 100644 index 00000000..2a018f3f --- /dev/null +++ b/src/bin/build-keycloak-theme/generateDebugFiles.ts @@ -0,0 +1,71 @@ + +import * as fs from "fs"; +import { join as pathJoin, dirname as pathDirname, basename as pathBasename } from "path"; + +/** Files for being able to run a hot reload keycloak container */ +export function generateDebugFiles( + params: { + packageJsonName: string; + keycloakThemeBuildingDirPath: string; + } +) { + + const { packageJsonName, keycloakThemeBuildingDirPath } = params; + + fs.writeFileSync( + pathJoin(keycloakThemeBuildingDirPath, "Dockerfile"), + Buffer.from( + [ + "FROM jboss/keycloak:11.0.3", + "", + "USER root", + "", + "WORKDIR /", + "", + "ADD configuration /opt/jboss/keycloak/standalone/configuration/", + "", + 'ENTRYPOINT [ "/opt/jboss/tools/docker-entrypoint.sh" ]', + ].join("\n"), + "utf8" + ) + ); + + const dockerImage = `${packageJsonName}/keycloak-hot-reload`; + const containerName = "keycloak-testing-container"; + + fs.writeFileSync( + pathJoin(keycloakThemeBuildingDirPath, "start_keycloak_testing_container.sh"), + Buffer.from( + [ + "#!/bin/bash", + "", + `docker rm ${containerName} || true`, + "", + `docker build . -t ${dockerImage}`, + "", + "docker run \\", + " -p 8080:8080 \\", + ` --name ${containerName} \\`, + " -e KEYCLOAK_USER=admin \\", + " -e KEYCLOAK_PASSWORD=admin \\", + ` -v ${pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", "onyxia")}:/opt/jboss/keycloak/themes/onyxia: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, "..", "..", "..", "res", pathBasename(standaloneHaFilePath)), + ) + ); + +} \ No newline at end of file diff --git a/src/bin/build-keycloak-theme/generateJavaStackFiles.ts b/src/bin/build-keycloak-theme/generateJavaStackFiles.ts index 5153b45a..b67639cc 100644 --- a/src/bin/build-keycloak-theme/generateJavaStackFiles.ts +++ b/src/bin/build-keycloak-theme/generateJavaStackFiles.ts @@ -16,21 +16,24 @@ export function generateJavaStackFiles( } ): void { - const { parsedPackageJson, keycloakThemeBuildingDirPath } = params; + const { + parsedPackageJson: { name, version, homepage }, + keycloakThemeBuildingDirPath + } = params; { const { pomFileCode } = (function generatePomFileCode(): { pomFileCode: string; } { - const { name, version, homepage } = parsedPackageJson; const groupId = (() => { - const fallbackGroupId = `there.was.no.homepage.field.in.the.package.json.${name}.keycloak`; + const fallbackGroupId = `there.was.no.homepage.field.in.the.package.json.${name}`; - return !homepage ? + return (!homepage ? fallbackGroupId : - url.parse(homepage).host?.split(".").reverse().join(".") ?? fallbackGroupId; + url.parse(homepage).host?.split(".").reverse().join(".") ?? fallbackGroupId + ) + ".keycloak"; })(); @@ -80,8 +83,8 @@ export function generateJavaStackFiles( JSON.stringify({ "themes": [ { - "name": "onyxia", - "types": ["login", "email", "account", "welcome"] + "name": name, + "types": ["login"] } ] }, null, 2), diff --git a/src/bin/build-keycloak-theme/index.ts b/src/bin/build-keycloak-theme/index.ts index 7f01755f..3fa01005 100644 --- a/src/bin/build-keycloak-theme/index.ts +++ b/src/bin/build-keycloak-theme/index.ts @@ -3,6 +3,7 @@ import { generateJavaStackFiles } from "./generateJavaStackFiles"; import type { ParsedPackageJson } from "./generateJavaStackFiles"; import { join as pathJoin } from "path"; import * as child_process from "child_process"; +import { generateDebugFiles } from "./generateDebugFiles"; const reactProjectDirPath = process.cwd(); @@ -21,4 +22,12 @@ generateJavaStackFiles({ keycloakThemeBuildingDirPath }); -child_process.execSync("mvn package"); +child_process.execSync( + "mvn package", + { "cwd": keycloakThemeBuildingDirPath } +); + +generateDebugFiles({ + keycloakThemeBuildingDirPath, + "packageJsonName": parsedPackageJson.name +});