Generate debug files to be able to test the container

This commit is contained in:
Joseph Garrone
2021-02-21 22:28:35 +01:00
parent 4c21446390
commit 6ef4348c99
4 changed files with 757 additions and 8 deletions

View File

@ -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)),
)
);
}

View File

@ -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),

View File

@ -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
});