@xemahq/xema 0.1.5 → 0.2.1
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.
- package/README.md +85 -15
- package/dist/assets/boot-graph.json +72 -0
- package/dist/assets/core/distribution.lock.json +1244 -0
- package/dist/assets/core/images.lock.json +428 -0
- package/dist/assets/oss/distribution.lock.json +1978 -0
- package/dist/assets/oss/images.lock.json +594 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +82 -14
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/down.d.ts +3 -0
- package/dist/commands/down.d.ts.map +1 -0
- package/dist/commands/down.js +54 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +61 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +38 -8
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +41 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/up.d.ts +3 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +50 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/dev/infra-preflight.js +1 -1
- package/dist/dev/infra-preflight.js.map +1 -1
- package/dist/lib/command-registry.d.ts +1 -1
- package/dist/lib/command-registry.d.ts.map +1 -1
- package/dist/lib/command-registry.js +4 -0
- package/dist/lib/command-registry.js.map +1 -1
- package/dist/runtime/boot-graph-loader.d.ts +17 -0
- package/dist/runtime/boot-graph-loader.d.ts.map +1 -0
- package/dist/runtime/boot-graph-loader.js +40 -0
- package/dist/runtime/boot-graph-loader.js.map +1 -0
- package/dist/runtime/config/loader.d.ts +11 -0
- package/dist/runtime/config/loader.d.ts.map +1 -0
- package/dist/runtime/config/loader.js +38 -0
- package/dist/runtime/config/loader.js.map +1 -0
- package/dist/runtime/config/schema.d.ts +208 -0
- package/dist/runtime/config/schema.d.ts.map +1 -0
- package/dist/runtime/config/schema.js +132 -0
- package/dist/runtime/config/schema.js.map +1 -0
- package/dist/runtime/env-seeder.d.ts +17 -0
- package/dist/runtime/env-seeder.d.ts.map +1 -0
- package/dist/runtime/env-seeder.js +89 -0
- package/dist/runtime/env-seeder.js.map +1 -0
- package/dist/runtime/foreground.d.ts +8 -0
- package/dist/runtime/foreground.d.ts.map +1 -0
- package/dist/runtime/foreground.js +71 -0
- package/dist/runtime/foreground.js.map +1 -0
- package/dist/runtime/infra/infra-catalog.d.ts +19 -0
- package/dist/runtime/infra/infra-catalog.d.ts.map +1 -0
- package/dist/runtime/infra/infra-catalog.js +128 -0
- package/dist/runtime/infra/infra-catalog.js.map +1 -0
- package/dist/runtime/infra/infra-plan.d.ts +16 -0
- package/dist/runtime/infra/infra-plan.d.ts.map +1 -0
- package/dist/runtime/infra/infra-plan.js +44 -0
- package/dist/runtime/infra/infra-plan.js.map +1 -0
- package/dist/runtime/infra/infra-runner.d.ts +26 -0
- package/dist/runtime/infra/infra-runner.d.ts.map +1 -0
- package/dist/runtime/infra/infra-runner.js +135 -0
- package/dist/runtime/infra/infra-runner.js.map +1 -0
- package/dist/runtime/launch.d.ts +24 -0
- package/dist/runtime/launch.d.ts.map +1 -0
- package/dist/runtime/launch.js +124 -0
- package/dist/runtime/launch.js.map +1 -0
- package/dist/runtime/lock-loader.d.ts +26 -0
- package/dist/runtime/lock-loader.d.ts.map +1 -0
- package/dist/runtime/lock-loader.js +61 -0
- package/dist/runtime/lock-loader.js.map +1 -0
- package/dist/runtime/paths.d.ts +14 -0
- package/dist/runtime/paths.d.ts.map +1 -0
- package/dist/runtime/paths.js +109 -0
- package/dist/runtime/paths.js.map +1 -0
- package/dist/runtime/platform-services.d.ts +2 -0
- package/dist/runtime/platform-services.d.ts.map +1 -0
- package/dist/runtime/platform-services.js +8 -0
- package/dist/runtime/platform-services.js.map +1 -0
- package/dist/runtime/port-map.d.ts +3 -0
- package/dist/runtime/port-map.d.ts.map +1 -0
- package/dist/runtime/port-map.js +25 -0
- package/dist/runtime/port-map.js.map +1 -0
- package/dist/runtime/roster.d.ts +32 -0
- package/dist/runtime/roster.d.ts.map +1 -0
- package/dist/runtime/roster.js +106 -0
- package/dist/runtime/roster.js.map +1 -0
- package/dist/runtime/runner/container-runner.d.ts +14 -0
- package/dist/runtime/runner/container-runner.d.ts.map +1 -0
- package/dist/runtime/runner/container-runner.js +61 -0
- package/dist/runtime/runner/container-runner.js.map +1 -0
- package/dist/runtime/runner/docker-cli.d.ts +11 -0
- package/dist/runtime/runner/docker-cli.d.ts.map +1 -0
- package/dist/runtime/runner/docker-cli.js +53 -0
- package/dist/runtime/runner/docker-cli.js.map +1 -0
- package/dist/runtime/runner/health-probe.d.ts +2 -0
- package/dist/runtime/runner/health-probe.d.ts.map +1 -0
- package/dist/runtime/runner/health-probe.js +38 -0
- package/dist/runtime/runner/health-probe.js.map +1 -0
- package/dist/runtime/runner/helm-runner.d.ts +19 -0
- package/dist/runtime/runner/helm-runner.d.ts.map +1 -0
- package/dist/runtime/runner/helm-runner.js +70 -0
- package/dist/runtime/runner/helm-runner.js.map +1 -0
- package/dist/runtime/runner/native-runner.d.ts +14 -0
- package/dist/runtime/runner/native-runner.d.ts.map +1 -0
- package/dist/runtime/runner/native-runner.js +92 -0
- package/dist/runtime/runner/native-runner.js.map +1 -0
- package/dist/runtime/runner/service-runner.d.ts +23 -0
- package/dist/runtime/runner/service-runner.d.ts.map +1 -0
- package/dist/runtime/runner/service-runner.js +10 -0
- package/dist/runtime/runner/service-runner.js.map +1 -0
- package/dist/runtime/supervisor.d.ts +46 -0
- package/dist/runtime/supervisor.d.ts.map +1 -0
- package/dist/runtime/supervisor.js +77 -0
- package/dist/runtime/supervisor.js.map +1 -0
- package/dist/runtime/unit-type.d.ts +9 -0
- package/dist/runtime/unit-type.d.ts.map +1 -0
- package/dist/runtime/unit-type.js +19 -0
- package/dist/runtime/unit-type.js.map +1 -0
- package/dist/runtime/waves.d.ts +15 -0
- package/dist/runtime/waves.d.ts.map +1 -0
- package/dist/runtime/waves.js +77 -0
- package/dist/runtime/waves.js.map +1 -0
- package/package.json +7 -8
- package/xema.config.example.yaml +46 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bringUpForeground = bringUpForeground;
|
|
4
|
+
const schema_1 = require("./config/schema");
|
|
5
|
+
const launch_1 = require("./launch");
|
|
6
|
+
async function bringUpForeground(opts) {
|
|
7
|
+
const onEvent = (event) => {
|
|
8
|
+
if (event.kind === 'wave-start') {
|
|
9
|
+
console.log(`wave ${String(event.wave)} (${event.tier ?? ''})`);
|
|
10
|
+
}
|
|
11
|
+
else if (event.kind === 'service-ready') {
|
|
12
|
+
console.log(` ✓ ${event.service ?? ''} ${event.detail ?? ''}`);
|
|
13
|
+
}
|
|
14
|
+
else if (event.kind === 'service-skipped') {
|
|
15
|
+
console.log(` ⚠ skipped ${event.service ?? ''}: ${event.detail ?? ''}`);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const handle = await (0, launch_1.launch)({
|
|
19
|
+
config: opts.config,
|
|
20
|
+
includeWeb: opts.includeWeb,
|
|
21
|
+
onEvent,
|
|
22
|
+
log: (line) => console.log(line),
|
|
23
|
+
});
|
|
24
|
+
printSummary(handle);
|
|
25
|
+
if (opts.detach) {
|
|
26
|
+
if (opts.config.app.substrate !== schema_1.Substrate.Container) {
|
|
27
|
+
console.log('');
|
|
28
|
+
console.log('⚠ --detach is only meaningful for the container substrate; native services ' +
|
|
29
|
+
'are owned by this process and stop when it exits.');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log('');
|
|
33
|
+
console.log('Detached. Container workloads keep running (managed by the container runtime).');
|
|
34
|
+
console.log('Use `xema status` / `xema logs` / `xema down` to manage them.');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log('Press Ctrl+C to shut down.');
|
|
40
|
+
await waitForSignal(handle);
|
|
41
|
+
}
|
|
42
|
+
function printSummary(handle) {
|
|
43
|
+
const { running, skipped } = handle.result;
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log('-'.repeat(60));
|
|
46
|
+
console.log(`Booted ${String(running.length)}/${String(handle.roster.length)} services` +
|
|
47
|
+
(skipped.length > 0 ? `, skipped ${String(skipped.length)}` : ''));
|
|
48
|
+
for (const svc of running) {
|
|
49
|
+
console.log(` ${svc.name.padEnd(30, ' ')} ${svc.url} (${svc.handle})`);
|
|
50
|
+
}
|
|
51
|
+
for (const s of skipped) {
|
|
52
|
+
console.log(` ⚠ ${s.name}: ${s.reason}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function waitForSignal(handle) {
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
const shutdown = (signal) => {
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log(`received ${signal}; shutting down...`);
|
|
60
|
+
handle
|
|
61
|
+
.shutdown()
|
|
62
|
+
.catch(() => undefined)
|
|
63
|
+
.finally(() => {
|
|
64
|
+
resolve();
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
process.on('SIGINT', shutdown);
|
|
68
|
+
process.on('SIGTERM', shutdown);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=foreground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foreground.js","sourceRoot":"","sources":["../../src/runtime/foreground.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { InfraComponent } from '../config/schema';
|
|
2
|
+
export interface ManagedInfraSpec {
|
|
3
|
+
readonly image: string;
|
|
4
|
+
readonly containerName: string;
|
|
5
|
+
readonly ports: ReadonlyArray<readonly [number, number]>;
|
|
6
|
+
readonly dataPath?: string;
|
|
7
|
+
readonly healthCmd?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface InfraCatalogEntry {
|
|
10
|
+
readonly component: InfraComponent;
|
|
11
|
+
readonly mandatory: boolean;
|
|
12
|
+
readonly managed: ManagedInfraSpec;
|
|
13
|
+
readonly defaultLocalUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const INFRA_CATALOG: Readonly<Record<InfraComponent, InfraCatalogEntry>>;
|
|
16
|
+
export declare const INFRA_COMPONENTS: readonly InfraComponent[];
|
|
17
|
+
export declare const OBJECT_STORE_BUCKETS: readonly string[];
|
|
18
|
+
export declare const SHARED_BIOMES_DATABASE = "xema_biomes";
|
|
19
|
+
//# sourceMappingURL=infra-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-catalog.d.ts","sourceRoot":"","sources":["../../../src/runtime/infra/infra-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAclD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAEnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAgH5E,CAAC;AAGH,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAErD,CAAC;AAOF,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAOhD,CAAC;AAGH,eAAO,MAAM,sBAAsB,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SHARED_BIOMES_DATABASE = exports.OBJECT_STORE_BUCKETS = exports.INFRA_COMPONENTS = exports.INFRA_CATALOG = void 0;
|
|
4
|
+
const schema_1 = require("../config/schema");
|
|
5
|
+
exports.INFRA_CATALOG = Object.freeze({
|
|
6
|
+
[schema_1.InfraComponent.Postgres]: {
|
|
7
|
+
component: schema_1.InfraComponent.Postgres,
|
|
8
|
+
mandatory: true,
|
|
9
|
+
managed: {
|
|
10
|
+
image: 'pgvector/pgvector:pg16',
|
|
11
|
+
containerName: 'xema-postgres',
|
|
12
|
+
ports: [[5432, 5432]],
|
|
13
|
+
dataPath: '/var/lib/postgresql/data',
|
|
14
|
+
healthCmd: 'pg_isready -U postgres',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
[schema_1.InfraComponent.Redis]: {
|
|
18
|
+
component: schema_1.InfraComponent.Redis,
|
|
19
|
+
mandatory: true,
|
|
20
|
+
managed: {
|
|
21
|
+
image: 'redis:7-alpine',
|
|
22
|
+
containerName: 'xema-redis',
|
|
23
|
+
ports: [[6379, 6379]],
|
|
24
|
+
dataPath: '/data',
|
|
25
|
+
healthCmd: 'redis-cli ping',
|
|
26
|
+
},
|
|
27
|
+
defaultLocalUrl: 'redis://127.0.0.1:6379',
|
|
28
|
+
},
|
|
29
|
+
[schema_1.InfraComponent.Etcd]: {
|
|
30
|
+
component: schema_1.InfraComponent.Etcd,
|
|
31
|
+
mandatory: true,
|
|
32
|
+
managed: {
|
|
33
|
+
image: 'quay.io/coreos/etcd:v3.6.4',
|
|
34
|
+
containerName: 'xema-etcd',
|
|
35
|
+
ports: [[2379, 2379]],
|
|
36
|
+
dataPath: '/etcd-data',
|
|
37
|
+
healthCmd: 'etcdctl endpoint health',
|
|
38
|
+
},
|
|
39
|
+
defaultLocalUrl: '127.0.0.1:2379',
|
|
40
|
+
},
|
|
41
|
+
[schema_1.InfraComponent.Keycloak]: {
|
|
42
|
+
component: schema_1.InfraComponent.Keycloak,
|
|
43
|
+
mandatory: true,
|
|
44
|
+
managed: {
|
|
45
|
+
image: 'quay.io/keycloak/keycloak:26.0',
|
|
46
|
+
containerName: 'xema-keycloak',
|
|
47
|
+
ports: [[8180, 8080]],
|
|
48
|
+
healthCmd: '/opt/healthcheck.sh',
|
|
49
|
+
},
|
|
50
|
+
defaultLocalUrl: 'http://127.0.0.1:8180',
|
|
51
|
+
},
|
|
52
|
+
[schema_1.InfraComponent.ObjectStore]: {
|
|
53
|
+
component: schema_1.InfraComponent.ObjectStore,
|
|
54
|
+
mandatory: true,
|
|
55
|
+
managed: {
|
|
56
|
+
image: 'minio/minio:RELEASE.2025-01-20T14-49-07Z',
|
|
57
|
+
containerName: 'xema-minio',
|
|
58
|
+
ports: [
|
|
59
|
+
[9000, 9000],
|
|
60
|
+
[9001, 9001],
|
|
61
|
+
],
|
|
62
|
+
dataPath: '/data',
|
|
63
|
+
healthCmd: 'mc ready local',
|
|
64
|
+
},
|
|
65
|
+
defaultLocalUrl: 'http://127.0.0.1:9000',
|
|
66
|
+
},
|
|
67
|
+
[schema_1.InfraComponent.Search]: {
|
|
68
|
+
component: schema_1.InfraComponent.Search,
|
|
69
|
+
mandatory: false,
|
|
70
|
+
managed: {
|
|
71
|
+
image: 'opensearchproject/opensearch:2.18.0',
|
|
72
|
+
containerName: 'xema-opensearch',
|
|
73
|
+
ports: [[9200, 9200]],
|
|
74
|
+
dataPath: '/usr/share/opensearch/data',
|
|
75
|
+
healthCmd: 'curl -fsS http://localhost:9200/_cluster/health',
|
|
76
|
+
},
|
|
77
|
+
defaultLocalUrl: 'http://127.0.0.1:9200',
|
|
78
|
+
},
|
|
79
|
+
[schema_1.InfraComponent.Fga]: {
|
|
80
|
+
component: schema_1.InfraComponent.Fga,
|
|
81
|
+
mandatory: false,
|
|
82
|
+
managed: {
|
|
83
|
+
image: 'openfga/openfga:v1.16.1',
|
|
84
|
+
containerName: 'xema-openfga',
|
|
85
|
+
ports: [
|
|
86
|
+
[8088, 8080],
|
|
87
|
+
[8081, 8081],
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
defaultLocalUrl: 'http://127.0.0.1:8088',
|
|
91
|
+
},
|
|
92
|
+
[schema_1.InfraComponent.Git]: {
|
|
93
|
+
component: schema_1.InfraComponent.Git,
|
|
94
|
+
mandatory: false,
|
|
95
|
+
managed: {
|
|
96
|
+
image: 'gitea/gitea:1.25-rootless',
|
|
97
|
+
containerName: 'xema-gitea',
|
|
98
|
+
ports: [
|
|
99
|
+
[3000, 3000],
|
|
100
|
+
[2222, 2222],
|
|
101
|
+
],
|
|
102
|
+
dataPath: '/var/lib/gitea',
|
|
103
|
+
healthCmd: 'wget -qO- http://localhost:3000/api/v1/version',
|
|
104
|
+
},
|
|
105
|
+
defaultLocalUrl: 'http://127.0.0.1:3000',
|
|
106
|
+
},
|
|
107
|
+
[schema_1.InfraComponent.Temporal]: {
|
|
108
|
+
component: schema_1.InfraComponent.Temporal,
|
|
109
|
+
mandatory: false,
|
|
110
|
+
managed: {
|
|
111
|
+
image: 'temporalio/auto-setup:1.28.2',
|
|
112
|
+
containerName: 'xema-temporal',
|
|
113
|
+
ports: [[7233, 7233]],
|
|
114
|
+
},
|
|
115
|
+
defaultLocalUrl: '127.0.0.1:7233',
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
exports.INFRA_COMPONENTS = Object.freeze(Object.values(schema_1.InfraComponent));
|
|
119
|
+
exports.OBJECT_STORE_BUCKETS = Object.freeze([
|
|
120
|
+
'session-session-attachments',
|
|
121
|
+
'session-opencode-sessions',
|
|
122
|
+
'kb-knowledge-base-pages',
|
|
123
|
+
'plugin-bundles',
|
|
124
|
+
'artifact-store',
|
|
125
|
+
'artifact-store-web-biome-remotes',
|
|
126
|
+
]);
|
|
127
|
+
exports.SHARED_BIOMES_DATABASE = 'xema_biomes';
|
|
128
|
+
//# sourceMappingURL=infra-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-catalog.js","sourceRoot":"","sources":["../../../src/runtime/infra/infra-catalog.ts"],"names":[],"mappings":";;;AAAA,6CAAkD;AAiCrC,QAAA,aAAa,GAAwD,MAAM,CAAC,MAAM,CAAC;IAC9F,CAAC,uBAAc,CAAC,QAAQ,CAAC,EAAE;QACzB,SAAS,EAAE,uBAAc,CAAC,QAAQ;QAClC,SAAS,EAAE,IAAI;QACf,OAAO,EAAE;YACP,KAAK,EAAE,wBAAwB;YAC/B,aAAa,EAAE,eAAe;YAC9B,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrB,QAAQ,EAAE,0BAA0B;YACpC,SAAS,EAAE,wBAAwB;SACpC;KACF;IACD,CAAC,uBAAc,CAAC,KAAK,CAAC,EAAE;QACtB,SAAS,EAAE,uBAAc,CAAC,KAAK;QAC/B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE;YACP,KAAK,EAAE,gBAAgB;YACvB,aAAa,EAAE,YAAY;YAC3B,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrB,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,gBAAgB;SAC5B;QACD,eAAe,EAAE,wBAAwB;KAC1C;IACD,CAAC,uBAAc,CAAC,IAAI,CAAC,EAAE;QACrB,SAAS,EAAE,uBAAc,CAAC,IAAI;QAC9B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE;YACP,KAAK,EAAE,4BAA4B;YACnC,aAAa,EAAE,WAAW;YAC1B,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrB,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,yBAAyB;SACrC;QACD,eAAe,EAAE,gBAAgB;KAClC;IACD,CAAC,uBAAc,CAAC,QAAQ,CAAC,EAAE;QACzB,SAAS,EAAE,uBAAc,CAAC,QAAQ;QAClC,SAAS,EAAE,IAAI;QACf,OAAO,EAAE;YACP,KAAK,EAAE,gCAAgC;YACvC,aAAa,EAAE,eAAe;YAC9B,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrB,SAAS,EAAE,qBAAqB;SACjC;QACD,eAAe,EAAE,uBAAuB;KACzC;IACD,CAAC,uBAAc,CAAC,WAAW,CAAC,EAAE;QAC5B,SAAS,EAAE,uBAAc,CAAC,WAAW;QACrC,SAAS,EAAE,IAAI;QACf,OAAO,EAAE;YACP,KAAK,EAAE,0CAA0C;YACjD,aAAa,EAAE,YAAY;YAC3B,KAAK,EAAE;gBACL,CAAC,IAAI,EAAE,IAAI,CAAC;gBACZ,CAAC,IAAI,EAAE,IAAI,CAAC;aACb;YACD,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,gBAAgB;SAC5B;QACD,eAAe,EAAE,uBAAuB;KACzC;IACD,CAAC,uBAAc,CAAC,MAAM,CAAC,EAAE;QACvB,SAAS,EAAE,uBAAc,CAAC,MAAM;QAChC,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE;YACP,KAAK,EAAE,qCAAqC;YAC5C,aAAa,EAAE,iBAAiB;YAChC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrB,QAAQ,EAAE,4BAA4B;YACtC,SAAS,EAAE,iDAAiD;SAC7D;QACD,eAAe,EAAE,uBAAuB;KACzC;IACD,CAAC,uBAAc,CAAC,GAAG,CAAC,EAAE;QACpB,SAAS,EAAE,uBAAc,CAAC,GAAG;QAC7B,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE;YACP,KAAK,EAAE,yBAAyB;YAChC,aAAa,EAAE,cAAc;YAC7B,KAAK,EAAE;gBACL,CAAC,IAAI,EAAE,IAAI,CAAC;gBACZ,CAAC,IAAI,EAAE,IAAI,CAAC;aACb;SACF;QACD,eAAe,EAAE,uBAAuB;KACzC;IACD,CAAC,uBAAc,CAAC,GAAG,CAAC,EAAE;QACpB,SAAS,EAAE,uBAAc,CAAC,GAAG;QAC7B,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE;YACP,KAAK,EAAE,2BAA2B;YAClC,aAAa,EAAE,YAAY;YAC3B,KAAK,EAAE;gBACL,CAAC,IAAI,EAAE,IAAI,CAAC;gBACZ,CAAC,IAAI,EAAE,IAAI,CAAC;aACb;YACD,QAAQ,EAAE,gBAAgB;YAC1B,SAAS,EAAE,gDAAgD;SAC5D;QACD,eAAe,EAAE,uBAAuB;KACzC;IACD,CAAC,uBAAc,CAAC,QAAQ,CAAC,EAAE;QACzB,SAAS,EAAE,uBAAc,CAAC,QAAQ;QAClC,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE;YACP,KAAK,EAAE,8BAA8B;YACrC,aAAa,EAAE,eAAe;YAC9B,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACtB;QACD,eAAe,EAAE,gBAAgB;KAClC;CACF,CAAC,CAAC;AAGU,QAAA,gBAAgB,GAA8B,MAAM,CAAC,MAAM,CACtE,MAAM,CAAC,MAAM,CAAC,uBAAc,CAAC,CAC9B,CAAC;AAOW,QAAA,oBAAoB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACnE,6BAA6B;IAC7B,2BAA2B;IAC3B,yBAAyB;IACzB,gBAAgB;IAChB,gBAAgB;IAChB,kCAAkC;CACnC,CAAC,CAAC;AAGU,QAAA,sBAAsB,GAAG,aAAa,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { InfraMode, type InfraComponent, type InfraComponentConfig, type XemaConfig } from '../config/schema';
|
|
2
|
+
export interface ResolvedInfraComponent {
|
|
3
|
+
readonly component: InfraComponent;
|
|
4
|
+
readonly mode: InfraMode;
|
|
5
|
+
readonly url?: string;
|
|
6
|
+
readonly config: InfraComponentConfig;
|
|
7
|
+
}
|
|
8
|
+
export interface InfraPlan {
|
|
9
|
+
readonly managed: readonly ResolvedInfraComponent[];
|
|
10
|
+
readonly external: readonly ResolvedInfraComponent[];
|
|
11
|
+
readonly disabled: readonly ResolvedInfraComponent[];
|
|
12
|
+
readonly byComponent: ReadonlyMap<InfraComponent, ResolvedInfraComponent>;
|
|
13
|
+
readonly warnings: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveInfraPlan(config: XemaConfig): InfraPlan;
|
|
16
|
+
//# sourceMappingURL=infra-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-plan.d.ts","sourceRoot":"","sources":["../../../src/runtime/infra/infra-plan.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAgB1B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAEzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;IAC1E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAgD9D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveInfraPlan = resolveInfraPlan;
|
|
4
|
+
const infra_catalog_1 = require("./infra-catalog");
|
|
5
|
+
const schema_1 = require("../config/schema");
|
|
6
|
+
const DEFAULT_MODE = schema_1.InfraMode.Managed;
|
|
7
|
+
function resolveInfraPlan(config) {
|
|
8
|
+
const managed = [];
|
|
9
|
+
const external = [];
|
|
10
|
+
const disabled = [];
|
|
11
|
+
const byComponent = new Map();
|
|
12
|
+
const warnings = [];
|
|
13
|
+
for (const component of infra_catalog_1.INFRA_COMPONENTS) {
|
|
14
|
+
const raw = config.infra[component] ?? { mode: DEFAULT_MODE };
|
|
15
|
+
const catalog = infra_catalog_1.INFRA_CATALOG[component];
|
|
16
|
+
if (raw.mode === schema_1.InfraMode.Disabled) {
|
|
17
|
+
if (catalog.mandatory) {
|
|
18
|
+
throw new Error(`Infra component "${component}" is mandatory and cannot be disabled — ` +
|
|
19
|
+
`every Xema service depends on it. Set it to "managed" or "external".`);
|
|
20
|
+
}
|
|
21
|
+
const resolved = { component, mode: raw.mode, config: raw };
|
|
22
|
+
disabled.push(resolved);
|
|
23
|
+
byComponent.set(component, resolved);
|
|
24
|
+
warnings.push(`infra.${component} is disabled — capabilities that require it will be unavailable; ` +
|
|
25
|
+
`services that hard-depend on it will fail-fast at boot.`);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (raw.mode === schema_1.InfraMode.External) {
|
|
29
|
+
if (!raw.url) {
|
|
30
|
+
throw new Error(`Infra component "${component}" is "external" but has no "url". Provide the ` +
|
|
31
|
+
`pre-provisioned endpoint so the launcher can inject it into consumers.`);
|
|
32
|
+
}
|
|
33
|
+
const resolved = { component, mode: raw.mode, url: raw.url, config: raw };
|
|
34
|
+
external.push(resolved);
|
|
35
|
+
byComponent.set(component, resolved);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const resolved = { component, mode: schema_1.InfraMode.Managed, config: raw };
|
|
39
|
+
managed.push(resolved);
|
|
40
|
+
byComponent.set(component, resolved);
|
|
41
|
+
}
|
|
42
|
+
return { managed, external, disabled, byComponent, warnings };
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=infra-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-plan.js","sourceRoot":"","sources":["../../../src/runtime/infra/infra-plan.ts"],"names":[],"mappings":";;AAwCA,4CAgDC;AAxFD,mDAAkE;AAClE,6CAK0B;AAgC1B,MAAM,YAAY,GAAG,kBAAS,CAAC,OAAO,CAAC;AAEvC,SAAgB,gBAAgB,CAAC,MAAkB;IACjD,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAA0C,CAAC;IACtE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,SAAS,IAAI,gCAAgB,EAAE,CAAC;QACzC,MAAM,GAAG,GAAyB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG,6BAAa,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAS,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,oBAAoB,SAAS,0CAA0C;oBACrE,sEAAsE,CACzE,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAA2B,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,CACX,SAAS,SAAS,mEAAmE;gBACnF,yDAAyD,CAC5D,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAS,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,oBAAoB,SAAS,gDAAgD;oBAC3E,wEAAwE,CAC3E,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAA2B,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAClG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QAGD,MAAM,QAAQ,GAA2B,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { InfraComponent } from '../config/schema';
|
|
2
|
+
import type { InfraPlan } from './infra-plan';
|
|
3
|
+
import type { RosterEntry } from '../roster';
|
|
4
|
+
export interface ManagedInfraHandle {
|
|
5
|
+
readonly component: InfraComponent;
|
|
6
|
+
readonly containerName: string;
|
|
7
|
+
}
|
|
8
|
+
export interface InfraRunnerOptions {
|
|
9
|
+
readonly network: string;
|
|
10
|
+
readonly bin?: string;
|
|
11
|
+
readonly volumePrefix?: string;
|
|
12
|
+
readonly healthTimeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class InfraRunner {
|
|
15
|
+
private readonly opts;
|
|
16
|
+
private readonly docker;
|
|
17
|
+
private readonly volumePrefix;
|
|
18
|
+
constructor(opts: InfraRunnerOptions);
|
|
19
|
+
bringUp(plan: InfraPlan): Promise<ManagedInfraHandle[]>;
|
|
20
|
+
waitHealthy(plan: InfraPlan): Promise<void>;
|
|
21
|
+
bootstrap(plan: InfraPlan, roster: readonly RosterEntry[]): Promise<void>;
|
|
22
|
+
private bootstrapPostgres;
|
|
23
|
+
private bootstrapObjectStore;
|
|
24
|
+
private execOk;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=infra-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-runner.d.ts","sourceRoot":"","sources":["../../../src/runtime/infra/infra-runner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAgB7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAKD,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAET,IAAI,EAAE,kBAAkB;IAK/C,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkCvD,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B3C,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAcjE,iBAAiB;YAyBjB,oBAAoB;YAkBpB,MAAM;CAQrB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InfraRunner = void 0;
|
|
4
|
+
const infra_catalog_1 = require("./infra-catalog");
|
|
5
|
+
const schema_1 = require("../config/schema");
|
|
6
|
+
const docker_cli_1 = require("../runner/docker-cli");
|
|
7
|
+
const DEFAULT_HEALTH_TIMEOUT_MS = 60_000;
|
|
8
|
+
const HEALTH_INTERVAL_MS = 1_000;
|
|
9
|
+
class InfraRunner {
|
|
10
|
+
opts;
|
|
11
|
+
docker;
|
|
12
|
+
volumePrefix;
|
|
13
|
+
constructor(opts) {
|
|
14
|
+
this.opts = opts;
|
|
15
|
+
this.docker = new docker_cli_1.DockerCli(opts.bin ?? 'docker');
|
|
16
|
+
this.volumePrefix = opts.volumePrefix ?? 'xema';
|
|
17
|
+
}
|
|
18
|
+
async bringUp(plan) {
|
|
19
|
+
await this.docker.ensureNetwork(this.opts.network);
|
|
20
|
+
const handles = [];
|
|
21
|
+
for (const resolved of plan.managed) {
|
|
22
|
+
const spec = infra_catalog_1.INFRA_CATALOG[resolved.component].managed;
|
|
23
|
+
await this.docker.runQuiet(['rm', '-f', spec.containerName]);
|
|
24
|
+
const args = [
|
|
25
|
+
'run',
|
|
26
|
+
'-d',
|
|
27
|
+
'--name',
|
|
28
|
+
spec.containerName,
|
|
29
|
+
'--label',
|
|
30
|
+
`${docker_cli_1.LAUNCHER_LABEL}=infra`,
|
|
31
|
+
'--network',
|
|
32
|
+
this.opts.network,
|
|
33
|
+
'--restart',
|
|
34
|
+
'unless-stopped',
|
|
35
|
+
];
|
|
36
|
+
for (const [hostPort, containerPort] of spec.ports) {
|
|
37
|
+
args.push('-p', `${String(hostPort)}:${String(containerPort)}`);
|
|
38
|
+
}
|
|
39
|
+
if (spec.dataPath) {
|
|
40
|
+
args.push('-v', `${this.volumePrefix}-${resolved.component}-data:${spec.dataPath}`);
|
|
41
|
+
}
|
|
42
|
+
args.push(spec.image);
|
|
43
|
+
await this.docker.run(args);
|
|
44
|
+
handles.push({ component: resolved.component, containerName: spec.containerName });
|
|
45
|
+
}
|
|
46
|
+
return handles;
|
|
47
|
+
}
|
|
48
|
+
async waitHealthy(plan) {
|
|
49
|
+
const timeout = this.opts.healthTimeoutMs ?? DEFAULT_HEALTH_TIMEOUT_MS;
|
|
50
|
+
for (const resolved of plan.managed) {
|
|
51
|
+
const spec = infra_catalog_1.INFRA_CATALOG[resolved.component].managed;
|
|
52
|
+
if (!spec.healthCmd) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const deadline = Date.now() + timeout;
|
|
56
|
+
for (;;) {
|
|
57
|
+
if (await this.execOk(spec.containerName, spec.healthCmd)) {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
if (Date.now() >= deadline) {
|
|
61
|
+
throw new Error(`infra component ${resolved.component} did not become healthy within ${String(timeout)}ms`);
|
|
62
|
+
}
|
|
63
|
+
await delay(HEALTH_INTERVAL_MS);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async bootstrap(plan, roster) {
|
|
68
|
+
if (plan.byComponent.get(schema_1.InfraComponent.Postgres)?.mode === undefined) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const pgManaged = plan.managed.some((m) => m.component === schema_1.InfraComponent.Postgres);
|
|
72
|
+
if (pgManaged) {
|
|
73
|
+
await this.bootstrapPostgres(roster);
|
|
74
|
+
}
|
|
75
|
+
const minioManaged = plan.managed.some((m) => m.component === schema_1.InfraComponent.ObjectStore);
|
|
76
|
+
if (minioManaged) {
|
|
77
|
+
await this.bootstrapObjectStore();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async bootstrapPostgres(roster) {
|
|
81
|
+
const pg = infra_catalog_1.INFRA_CATALOG[schema_1.InfraComponent.Postgres].managed.containerName;
|
|
82
|
+
const databases = new Set([infra_catalog_1.SHARED_BIOMES_DATABASE]);
|
|
83
|
+
for (const entry of roster) {
|
|
84
|
+
databases.add(`${entry.name.replace(/-/g, '_')}_db`);
|
|
85
|
+
}
|
|
86
|
+
for (const db of databases) {
|
|
87
|
+
const out = await this.docker.runQuiet([
|
|
88
|
+
'exec',
|
|
89
|
+
pg,
|
|
90
|
+
'psql',
|
|
91
|
+
'-U',
|
|
92
|
+
'postgres',
|
|
93
|
+
'-tc',
|
|
94
|
+
`SELECT 1 FROM pg_database WHERE datname='${db}'`,
|
|
95
|
+
]);
|
|
96
|
+
if (out.trim() === '1') {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
await this.docker.runQuiet(['exec', pg, 'createdb', '-U', 'postgres', db]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async bootstrapObjectStore() {
|
|
103
|
+
const minio = infra_catalog_1.INFRA_CATALOG[schema_1.InfraComponent.ObjectStore].managed.containerName;
|
|
104
|
+
await this.docker.runQuiet([
|
|
105
|
+
'exec',
|
|
106
|
+
minio,
|
|
107
|
+
'mc',
|
|
108
|
+
'alias',
|
|
109
|
+
'set',
|
|
110
|
+
'local',
|
|
111
|
+
'http://localhost:9000',
|
|
112
|
+
'minioadmin',
|
|
113
|
+
'minioadmin',
|
|
114
|
+
]);
|
|
115
|
+
for (const bucket of infra_catalog_1.OBJECT_STORE_BUCKETS) {
|
|
116
|
+
await this.docker.runQuiet(['exec', minio, 'mc', 'mb', '-p', `local/${bucket}`]);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async execOk(container, cmd) {
|
|
120
|
+
try {
|
|
121
|
+
await this.docker.run(['exec', container, 'sh', '-c', cmd]);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.InfraRunner = InfraRunner;
|
|
130
|
+
function delay(ms) {
|
|
131
|
+
return new Promise((resolve) => {
|
|
132
|
+
setTimeout(resolve, ms);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=infra-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-runner.js","sourceRoot":"","sources":["../../../src/runtime/infra/infra-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type XemaConfig } from './config/schema';
|
|
2
|
+
import { type RosterEntry, type RosterInclude, type RosterSelection } from './roster';
|
|
3
|
+
import { type BringUpResult, type LifecycleEvent } from './supervisor';
|
|
4
|
+
export interface LaunchOptions {
|
|
5
|
+
readonly config: XemaConfig;
|
|
6
|
+
readonly includeWeb: boolean;
|
|
7
|
+
readonly lockPathOverride?: string | undefined;
|
|
8
|
+
readonly bootGraphPathOverride?: string | undefined;
|
|
9
|
+
readonly onEvent?: (event: LifecycleEvent) => void;
|
|
10
|
+
readonly log?: (line: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export interface LaunchHandle {
|
|
13
|
+
readonly result: BringUpResult;
|
|
14
|
+
readonly roster: readonly RosterEntry[];
|
|
15
|
+
shutdown(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare function launch(opts: LaunchOptions): Promise<LaunchHandle>;
|
|
18
|
+
export declare function buildSelection(config: XemaConfig, includeWeb: boolean): RosterSelection;
|
|
19
|
+
export declare function normalizeInclude(include: 'all' | readonly string[], features: readonly string[]): RosterInclude;
|
|
20
|
+
export declare function splitIncludeTokens(tokens: readonly string[]): {
|
|
21
|
+
tiers: string[];
|
|
22
|
+
services: string[];
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=launch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/runtime/launch.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK3E,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAc,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAYnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAOD,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAsFvE;AAaD,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAG,eAAe,CAQvF;AAYD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,KAAK,GAAG,SAAS,MAAM,EAAE,EAClC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,aAAa,CAMf;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG;IAC7D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAWA"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.launch = launch;
|
|
4
|
+
exports.buildSelection = buildSelection;
|
|
5
|
+
exports.normalizeInclude = normalizeInclude;
|
|
6
|
+
exports.splitIncludeTokens = splitIncludeTokens;
|
|
7
|
+
const boot_graph_loader_1 = require("./boot-graph-loader");
|
|
8
|
+
const schema_1 = require("./config/schema");
|
|
9
|
+
const infra_plan_1 = require("./infra/infra-plan");
|
|
10
|
+
const infra_runner_1 = require("./infra/infra-runner");
|
|
11
|
+
const lock_loader_1 = require("./lock-loader");
|
|
12
|
+
const port_map_1 = require("./port-map");
|
|
13
|
+
const roster_1 = require("./roster");
|
|
14
|
+
const container_runner_1 = require("./runner/container-runner");
|
|
15
|
+
const helm_runner_1 = require("./runner/helm-runner");
|
|
16
|
+
const native_runner_1 = require("./runner/native-runner");
|
|
17
|
+
const supervisor_1 = require("./supervisor");
|
|
18
|
+
const unit_type_1 = require("./unit-type");
|
|
19
|
+
const waves_1 = require("./waves");
|
|
20
|
+
const KNOWN_TIERS = new Set(['kernel', 'system', 'base', 'platform', 'edge']);
|
|
21
|
+
const NETWORK = 'xema';
|
|
22
|
+
const CONTAINER_PORT = 3000;
|
|
23
|
+
async function launch(opts) {
|
|
24
|
+
const { config } = opts;
|
|
25
|
+
const log = opts.log ?? (() => undefined);
|
|
26
|
+
const substrate = config.app.substrate;
|
|
27
|
+
const monolith = config.app.processModel === schema_1.ProcessModel.Monolith;
|
|
28
|
+
if (monolith && substrate !== schema_1.Substrate.Native) {
|
|
29
|
+
throw new Error(`processModel "monolith" requires substrate "native" (got "${substrate}"). ` +
|
|
30
|
+
`Monolith collapses services into one host process; containers/helm are inherently multi-process.`);
|
|
31
|
+
}
|
|
32
|
+
if (monolith) {
|
|
33
|
+
log('mode : monolith (single process, in-process registry + SQLite, no etcd)');
|
|
34
|
+
}
|
|
35
|
+
const infra = (0, infra_plan_1.resolveInfraPlan)(config);
|
|
36
|
+
for (const warning of infra.warnings) {
|
|
37
|
+
log(`WARN ${warning}`);
|
|
38
|
+
}
|
|
39
|
+
const { lock, resolution: lockRes } = (0, lock_loader_1.loadDistributionLock)({
|
|
40
|
+
edition: config.edition,
|
|
41
|
+
explicit: opts.lockPathOverride,
|
|
42
|
+
envVar: process.env.XEMA_DISTRIBUTION_LOCK_PATH,
|
|
43
|
+
});
|
|
44
|
+
log(`lock : ${lockRes.path} (${lockRes.source})`);
|
|
45
|
+
const usesImages = substrate === schema_1.Substrate.Container || substrate === schema_1.Substrate.Helm;
|
|
46
|
+
let imagesByBiome;
|
|
47
|
+
if (usesImages) {
|
|
48
|
+
imagesByBiome = (0, lock_loader_1.loadImageLock)({ edition: config.edition }).imagesByBiome;
|
|
49
|
+
}
|
|
50
|
+
const bootGraph = (0, boot_graph_loader_1.loadBootGraph)({ explicit: opts.bootGraphPathOverride, envVar: process.env.XEMA_BOOT_GRAPH_PATH });
|
|
51
|
+
const selection = buildSelection(config, opts.includeWeb);
|
|
52
|
+
const roster = (0, roster_1.resolveRoster)(lock, selection, imagesByBiome);
|
|
53
|
+
const waves = (0, waves_1.deriveWaves)(roster, bootGraph);
|
|
54
|
+
const violations = (0, waves_1.findWaveOrderViolations)(waves, bootGraph);
|
|
55
|
+
if (violations.length > 0) {
|
|
56
|
+
throw new Error(`Boot-graph invariant violated (a service hard-requires a same/later-wave peer):\n` +
|
|
57
|
+
violations.map((v) => ` ${v.service} (${v.serviceTier}) → ${v.requires} (${v.requiresTier})`).join('\n'));
|
|
58
|
+
}
|
|
59
|
+
if (substrate === schema_1.Substrate.Container && infra.managed.length > 0) {
|
|
60
|
+
log(`infra : bringing up ${infra.managed.map((m) => m.component).join(', ')}`);
|
|
61
|
+
const infraRunner = new infra_runner_1.InfraRunner({ network: NETWORK });
|
|
62
|
+
await infraRunner.bringUp(infra);
|
|
63
|
+
await infraRunner.waitHealthy(infra);
|
|
64
|
+
await infraRunner.bootstrap(infra, roster);
|
|
65
|
+
log('infra : healthy + bootstrapped (per-service databases, object-store buckets)');
|
|
66
|
+
}
|
|
67
|
+
const ports = (0, port_map_1.assignPorts)(roster);
|
|
68
|
+
const runner = selectRunner(substrate, monolith);
|
|
69
|
+
const supervisor = new supervisor_1.Supervisor({
|
|
70
|
+
roster,
|
|
71
|
+
waves,
|
|
72
|
+
runner,
|
|
73
|
+
config,
|
|
74
|
+
infra,
|
|
75
|
+
substrate,
|
|
76
|
+
ports,
|
|
77
|
+
containerPort: CONTAINER_PORT,
|
|
78
|
+
...(opts.onEvent ? { onEvent: opts.onEvent } : {}),
|
|
79
|
+
});
|
|
80
|
+
const result = await supervisor.bringUp();
|
|
81
|
+
return {
|
|
82
|
+
result,
|
|
83
|
+
roster,
|
|
84
|
+
shutdown: () => supervisor.shutdown(),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function selectRunner(substrate, monolith) {
|
|
88
|
+
if (substrate === schema_1.Substrate.Container) {
|
|
89
|
+
return new container_runner_1.ContainerRunner({ network: NETWORK, containerPort: CONTAINER_PORT });
|
|
90
|
+
}
|
|
91
|
+
if (substrate === schema_1.Substrate.Helm) {
|
|
92
|
+
return new helm_runner_1.HelmRunner();
|
|
93
|
+
}
|
|
94
|
+
return new native_runner_1.NativeRunner({ noFork: monolith });
|
|
95
|
+
}
|
|
96
|
+
function buildSelection(config, includeWeb) {
|
|
97
|
+
const include = normalizeInclude(config.app.include, config.app.features);
|
|
98
|
+
const exclude = [...config.app.exclude];
|
|
99
|
+
if (!includeWeb && !exclude.includes(unit_type_1.WEB_SERVICE_NAME)) {
|
|
100
|
+
exclude.push(unit_type_1.WEB_SERVICE_NAME);
|
|
101
|
+
}
|
|
102
|
+
return { include, exclude };
|
|
103
|
+
}
|
|
104
|
+
function normalizeInclude(include, features) {
|
|
105
|
+
if (include === 'all') {
|
|
106
|
+
return 'all';
|
|
107
|
+
}
|
|
108
|
+
const tokens = Array.from(new Set([...include, ...features]));
|
|
109
|
+
return splitIncludeTokens(tokens);
|
|
110
|
+
}
|
|
111
|
+
function splitIncludeTokens(tokens) {
|
|
112
|
+
const tiers = [];
|
|
113
|
+
const services = [];
|
|
114
|
+
for (const token of tokens) {
|
|
115
|
+
if (KNOWN_TIERS.has(token)) {
|
|
116
|
+
tiers.push(token);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
services.push(token);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { tiers, services };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/runtime/launch.ts"],"names":[],"mappings":"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"}
|