@getmonoceros/workbench 1.38.10 → 1.38.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -52,5 +52,13 @@ usageNotes:
|
|
|
52
52
|
briefing:
|
|
53
53
|
- text: 'Identity & access management, reached in-container as host `keycloak`. Admin console + API at `$KEYCLOAK_URL` (admin `$KEYCLOAK_USER` / `$KEYCLOAK_PASSWORD`).'
|
|
54
54
|
- text: 'Keycloak auto-imports realms at startup (`--import-realm`) from `/opt/keycloak/data/import`, and its database is ephemeral - it re-seeds from those files on every apply. So keep the realm as a file in the repo at `projects/<app>/keycloak/realm.json`; do NOT configure it by hand in the admin UI, that is lost on the next apply.'
|
|
55
|
-
- text:
|
|
55
|
+
- text: |-
|
|
56
|
+
You can create/edit that realm.json, but the bind-mount that feeds it to Keycloak lives in the container yml on the host, which you cannot edit from inside. Give the user this exact block to add under the `keycloak` service in the container yml, with `<app>` replaced by the real project name in BOTH places (the source path and the import target filename):
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
volumes:
|
|
60
|
+
- projects/<app>/keycloak/realm.json:/opt/keycloak/data/import/<app>.json:ro
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Mount the single realm.json to a distinctly-named `*.json` target under the import dir. Do NOT mount the whole `keycloak/` directory onto `/opt/keycloak/data/import`, and do NOT prefix the source with `./`. Then have the user run `monoceros apply <name>` on the host.
|
|
56
64
|
- text: "In the realm, define a public client (e.g. `<app>-web`) with your app's redirect URIs, and have the frontend reach Keycloak same-origin under `/realms/<realm>` so the issuer follows the request host (works on `.localhost` and over `monoceros share`)."
|
package/dist/bin.js
CHANGED
|
@@ -1537,10 +1537,14 @@ var init_locate_running = __esm({
|
|
|
1537
1537
|
};
|
|
1538
1538
|
realContainerExec = (containerId, argv) => {
|
|
1539
1539
|
return new Promise((resolve, reject) => {
|
|
1540
|
-
const child = spawn(
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1540
|
+
const child = spawn(
|
|
1541
|
+
"docker",
|
|
1542
|
+
["exec", "-u", "node", containerId, ...argv],
|
|
1543
|
+
{
|
|
1544
|
+
// Inherit stdio so live git output reaches the user.
|
|
1545
|
+
stdio: ["ignore", "inherit", "inherit"]
|
|
1546
|
+
}
|
|
1547
|
+
);
|
|
1544
1548
|
child.on("error", reject);
|
|
1545
1549
|
child.on("exit", (code) => resolve({ exitCode: code ?? 0 }));
|
|
1546
1550
|
});
|
|
@@ -7290,7 +7294,8 @@ async function runContainerCycle(root, opts) {
|
|
|
7290
7294
|
);
|
|
7291
7295
|
const filters = [
|
|
7292
7296
|
`label=com.docker.compose.project=${projectName}`,
|
|
7293
|
-
`name=^${projectName}
|
|
7297
|
+
`name=^${projectName}-`,
|
|
7298
|
+
`name=^monoceros-${path18.basename(root)}$`
|
|
7294
7299
|
];
|
|
7295
7300
|
const { exitCode: rmExit } = await cleanupDockerObjects({
|
|
7296
7301
|
projectName,
|
|
@@ -9005,7 +9010,7 @@ var CLI_VERSION;
|
|
|
9005
9010
|
var init_version = __esm({
|
|
9006
9011
|
"src/version.ts"() {
|
|
9007
9012
|
"use strict";
|
|
9008
|
-
CLI_VERSION = true ? "1.38.
|
|
9013
|
+
CLI_VERSION = true ? "1.38.13" : "dev";
|
|
9009
9014
|
}
|
|
9010
9015
|
});
|
|
9011
9016
|
|
|
@@ -13927,6 +13932,7 @@ var init_main = __esm({
|
|
|
13927
13932
|
|
|
13928
13933
|
// src/bin.ts
|
|
13929
13934
|
import { runMain } from "citty";
|
|
13935
|
+
import { consola as consola42 } from "consola";
|
|
13930
13936
|
|
|
13931
13937
|
// src/devcontainer/docker-group-bootstrap.ts
|
|
13932
13938
|
import { spawnSync } from "child_process";
|
|
@@ -14212,6 +14218,7 @@ init_main();
|
|
|
14212
14218
|
init_notifier();
|
|
14213
14219
|
init_version();
|
|
14214
14220
|
bootstrapDockerGroup();
|
|
14221
|
+
consola42.options.formatOptions.date = false;
|
|
14215
14222
|
consumeInnerArgsFromProcessArgv();
|
|
14216
14223
|
async function entry() {
|
|
14217
14224
|
scheduleUpdateNotice({
|