@oktis-works/cms 0.1.14 → 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.
Files changed (81) hide show
  1. package/dist/assets.d.ts +94 -0
  2. package/dist/assets.d.ts.map +1 -0
  3. package/dist/assets.js +671 -0
  4. package/dist/assets.js.map +1 -0
  5. package/dist/bluegreen.d.ts +121 -0
  6. package/dist/bluegreen.d.ts.map +1 -0
  7. package/dist/bluegreen.js +393 -0
  8. package/dist/bluegreen.js.map +1 -0
  9. package/dist/commands.d.ts +6 -0
  10. package/dist/commands.d.ts.map +1 -1
  11. package/dist/commands.js +158 -61
  12. package/dist/commands.js.map +1 -1
  13. package/dist/config-wizard.d.ts +39 -0
  14. package/dist/config-wizard.d.ts.map +1 -0
  15. package/dist/config-wizard.js +308 -0
  16. package/dist/config-wizard.js.map +1 -0
  17. package/dist/deploy.d.ts +20 -0
  18. package/dist/deploy.d.ts.map +1 -0
  19. package/dist/deploy.js +304 -0
  20. package/dist/deploy.js.map +1 -0
  21. package/dist/docker.d.ts +148 -0
  22. package/dist/docker.d.ts.map +1 -0
  23. package/dist/docker.js +324 -0
  24. package/dist/docker.js.map +1 -0
  25. package/dist/docs-updater.d.ts +10 -0
  26. package/dist/docs-updater.d.ts.map +1 -0
  27. package/dist/docs-updater.js +45 -0
  28. package/dist/docs-updater.js.map +1 -0
  29. package/dist/doctor.d.ts +2 -0
  30. package/dist/doctor.d.ts.map +1 -1
  31. package/dist/doctor.js +51 -0
  32. package/dist/doctor.js.map +1 -1
  33. package/dist/env-file.d.ts +45 -0
  34. package/dist/env-file.d.ts.map +1 -0
  35. package/dist/env-file.js +200 -0
  36. package/dist/env-file.js.map +1 -0
  37. package/dist/env-schema.d.ts +28 -0
  38. package/dist/env-schema.d.ts.map +1 -0
  39. package/dist/env-schema.js +497 -0
  40. package/dist/env-schema.js.map +1 -0
  41. package/dist/guards.d.ts +40 -0
  42. package/dist/guards.d.ts.map +1 -0
  43. package/dist/guards.js +159 -0
  44. package/dist/guards.js.map +1 -0
  45. package/dist/history.d.ts +48 -0
  46. package/dist/history.d.ts.map +1 -0
  47. package/dist/history.js +104 -0
  48. package/dist/history.js.map +1 -0
  49. package/dist/parser.d.ts.map +1 -1
  50. package/dist/parser.js +12 -3
  51. package/dist/parser.js.map +1 -1
  52. package/dist/project-config.js +2 -2
  53. package/dist/prompt.d.ts +81 -0
  54. package/dist/prompt.d.ts.map +1 -0
  55. package/dist/prompt.js +379 -0
  56. package/dist/prompt.js.map +1 -0
  57. package/dist/redeploy.d.ts +109 -0
  58. package/dist/redeploy.d.ts.map +1 -0
  59. package/dist/redeploy.js +363 -0
  60. package/dist/redeploy.js.map +1 -0
  61. package/dist/rollback.d.ts +15 -0
  62. package/dist/rollback.d.ts.map +1 -0
  63. package/dist/rollback.js +170 -0
  64. package/dist/rollback.js.map +1 -0
  65. package/dist/scaffold-docs.d.ts +30 -6
  66. package/dist/scaffold-docs.d.ts.map +1 -1
  67. package/dist/scaffold-docs.js +728 -33
  68. package/dist/scaffold-docs.js.map +1 -1
  69. package/dist/scaffold.d.ts +17 -1
  70. package/dist/scaffold.d.ts.map +1 -1
  71. package/dist/scaffold.js +77 -14
  72. package/dist/scaffold.js.map +1 -1
  73. package/dist/theme-build.d.ts +35 -0
  74. package/dist/theme-build.d.ts.map +1 -0
  75. package/dist/theme-build.js +86 -0
  76. package/dist/theme-build.js.map +1 -0
  77. package/dist/update.d.ts +52 -0
  78. package/dist/update.d.ts.map +1 -0
  79. package/dist/update.js +273 -0
  80. package/dist/update.js.map +1 -0
  81. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { type Lane } from './assets.js';
2
+ export interface RunOptions {
3
+ cwd?: string;
4
+ env?: NodeJS.ProcessEnv;
5
+ timeoutMs?: number;
6
+ /** Ecoa stdout/stderr no terminal — para passos longos (build/up). */
7
+ inherit?: boolean;
8
+ }
9
+ export interface RunResult {
10
+ ok: boolean;
11
+ code: number | null;
12
+ stdout: string;
13
+ stderr: string;
14
+ /** Comando montado, para asserções de teste e para o log do wizard. */
15
+ command: string;
16
+ }
17
+ export type Runner = (command: string, args: string[], opts?: RunOptions) => RunResult;
18
+ export declare const defaultRunner: Runner;
19
+ /** Comando que falhou por timeout (o spawnSync devolve error, não mensagem legível). */
20
+ export declare function failure(command: string, args: string[], reason: string): RunResult;
21
+ export declare function dockerAvailable(runner?: Runner): boolean;
22
+ export interface ComposeProbe {
23
+ ok: boolean;
24
+ /** Versão curta (ex.: `5.6.0`), vazia quando não há compose. */
25
+ version: string;
26
+ }
27
+ /**
28
+ * `docker compose` (v2, plugin) — o `docker-compose` legado (v1, Python) não
29
+ * é suportado: os arquivos usam `x-` extensions, `name:` e healthcheck
30
+ * `condition`, que só o v2 entende.
31
+ */
32
+ export declare function composeAvailable(runner?: Runner): ComposeProbe;
33
+ export type ServiceRole = 'edge' | 'worker' | 'data' | 'proxy' | 'unknown';
34
+ export interface ComposeServiceInfo {
35
+ /** Nome da chave em `services:`. */
36
+ name: string;
37
+ containerName: string;
38
+ role: ServiceRole;
39
+ lane: Lane | null;
40
+ }
41
+ /**
42
+ * Parser por indentação — não um YAML completo.
43
+ *
44
+ * O compose que a CLI lê é gerada por ela mesma; um parser de verdade
45
+ * (js-yaml) seria uma dependência nova num pacote que hoje não tem nenhuma,
46
+ * para extrair três campos. A restrição (chave em `services:` com indent 2,
47
+ * campos com indent maior) é verificada pelos testes contra o arquivo real.
48
+ */
49
+ export declare function parseComposeServices(yaml: string): ComposeServiceInfo[];
50
+ export declare function classifyServices(services: ComposeServiceInfo[], lane: Lane): {
51
+ edge: ComposeServiceInfo[];
52
+ worker: ComposeServiceInfo[];
53
+ untouched: ComposeServiceInfo[];
54
+ };
55
+ export declare const INFRA_PROJECT = "okcms";
56
+ export declare const infraProject: () => string;
57
+ export declare const laneProject: (lane: Lane) => string;
58
+ export declare const otherLane: (lane: Lane) => Lane;
59
+ export declare const COMPOSE_INFRA_FILE = "docker-compose.infra.yml";
60
+ export declare const COMPOSE_DEPLOY_FILE = "docker-compose.deploy.yml";
61
+ export interface ComposeCall {
62
+ project?: string;
63
+ file?: string;
64
+ args: string[];
65
+ inherit?: boolean;
66
+ timeoutMs?: number;
67
+ }
68
+ /** `docker compose -p <projeto> -f <arquivo> ...` — a única forma montada aqui. */
69
+ export declare function composeArgs(call: ComposeCall): string[];
70
+ export declare function runCompose(cwd: string, call: ComposeCall, runner?: Runner): RunResult;
71
+ export declare const infraCompose: (cwd: string, args: string[], runner?: Runner, inherit?: boolean) => RunResult;
72
+ export declare const laneCompose: (cwd: string, lane: Lane, args: string[], runner?: Runner, inherit?: boolean) => RunResult;
73
+ /**
74
+ * `okcms-net` é declarada como `external: true` no compose das lanes — se ela
75
+ * não existir, o `up` falha com um erro obscuro. Criar antes torna o fluxo
76
+ * independente da ordem em que o operador rodou a infra.
77
+ */
78
+ export declare function ensureNetwork(cwd: string, runner?: Runner): RunResult;
79
+ export declare const LANE_STATE_PATH = ".deploy/state.json";
80
+ export interface LaneEntry {
81
+ lane: Lane;
82
+ version: string;
83
+ at: string;
84
+ }
85
+ export interface LaneState {
86
+ /** Lane que está no ar agora (donadora do tráfego). */
87
+ lane: Lane;
88
+ /** Lane anterior — é para cá que um rollback volta. */
89
+ previousLane: Lane | null;
90
+ version: string;
91
+ at: string;
92
+ history: LaneEntry[];
93
+ }
94
+ export declare function readLaneState(cwd: string): LaneState | null;
95
+ export declare function writeLaneState(cwd: string, state: LaneState): void;
96
+ export declare function pushLaneState(previous: LaneState | null, lane: Lane, version: string): LaneState;
97
+ /**
98
+ * Containers de uma lane com `okcms.role=edge` em execução.
99
+ * Usado quando não há `.deploy/state.json` (primeira execução / clone limpo).
100
+ */
101
+ export declare function edgeContainers(runner: Runner, lane: Lane): string[];
102
+ /** Estado do file é a fonte de verdade; o docker é o fallback. */
103
+ export declare function detectActiveLane(cwd: string, runner?: Runner): Lane | null;
104
+ export interface ContainerState {
105
+ exists: boolean;
106
+ running: boolean;
107
+ health: 'healthy' | 'unhealthy' | 'starting' | 'none' | null;
108
+ }
109
+ export declare const STOPPED: ContainerState;
110
+ export declare function inspectContainer(runner: Runner, name: string): ContainerState;
111
+ export interface WaitOptions {
112
+ timeoutMs?: number;
113
+ intervalMs?: number;
114
+ /** Chamado a cada rodada — é onde o wizard imprime a contagem. */
115
+ onTick?: (elapsedMs: number) => void;
116
+ }
117
+ /** Aguarda um predicado sobre o estado do container; false = timeout. */
118
+ export declare function waitForContainer(runner: Runner, name: string, predicate: (state: ContainerState) => boolean, opts?: WaitOptions): Promise<boolean>;
119
+ /** Container destruído ou sem healthcheck = "não está servindo". */
120
+ export declare const isServing: (state: ContainerState) => boolean;
121
+ /**
122
+ * Pronto para receber tráfego: rodando e (quando tem healthcheck) healthy.
123
+ * `none` = serviço sem healthcheck definido — não dá para esperar mais nada.
124
+ */
125
+ export declare const isHealthy: (state: ContainerState) => boolean;
126
+ export declare const isStopped: (state: ContainerState) => boolean;
127
+ /**
128
+ * Espera ativa: o processo saiu da lista (`docker ps` não o mostra mais).
129
+ * `docker stop` já bloqueia até o `stop_grace_period`, então isto é um
130
+ * cinto e suspensório para o caso de o dreno estourar o tempo.
131
+ */
132
+ export declare const waitStopped: (runner: Runner, name: string, opts?: WaitOptions) => Promise<boolean>;
133
+ export declare function upstreamsPath(cwd: string): string;
134
+ /** Grava os upstreams apontando para `lane` e devolve o texto. */
135
+ export declare function writeUpstreams(cwd: string, lane: Lane, record?: Record<string, string>): string;
136
+ /** Lane que os upstreams atuais apontam — usada em doctor/rollback. */
137
+ export declare function readUpstreamsLane(cwd: string): Lane | null;
138
+ export declare const PROXY_CONTAINER = "okcms-proxy";
139
+ export declare function proxyRunning(runner?: Runner): boolean;
140
+ /**
141
+ * `nginx -s reload` é o coração do swap: re-lê a configuração nova com as
142
+ * conexões existentes vivas. Nunca `restart` — isso derrubaria o proxy (e o
143
+ * TLS/rotas junto) no meio do deploy.
144
+ */
145
+ export declare function reloadProxy(cwd: string, runner?: Runner): RunResult;
146
+ /** Sobrescrita total da config do proxy (só quando `reload` falha). */
147
+ export declare function restartProxy(cwd: string, runner?: Runner): RunResult;
148
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"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"}
package/dist/docker.js ADDED
@@ -0,0 +1,324 @@
1
+ // @oktis-works/cms - Camada Docker/Compose da CLI
2
+ //
3
+ // Toda a execução passa por um `Runner` injetável. Isso não é "teste por
4
+ // teste": blue/green tem passos que NÃO podem ser re-executados às cegas
5
+ // (migrar duas vezes, derrubar a lane certa), então os testes precisam
6
+ // inspecionar exatamente qual comando foi montado — e um runner falso é a
7
+ // única forma de fazer isso sem subir containers.
8
+ //
9
+ // Superfície de rede desta camada: `docker` e `docker compose` no socket
10
+ // local. Nenhuma URL é aberta aqui (o `bun add` do update fica isolado em
11
+ // `guards.ts` + allowlist do registry).
12
+ import { spawnSync } from 'node:child_process';
13
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
14
+ import { dirname, join } from 'node:path';
15
+ import { DEPLOY_PATHS, renderUpstreams, portsFromEnv } from './assets.js';
16
+ function format(command, args) {
17
+ return [command, ...args].join(' ');
18
+ }
19
+ export const defaultRunner = (command, args, opts = {}) => {
20
+ const result = spawnSync(command, args, {
21
+ cwd: opts.cwd,
22
+ env: opts.env ?? process.env,
23
+ encoding: 'utf-8',
24
+ timeout: opts.timeoutMs,
25
+ stdio: opts.inherit ? 'inherit' : 'pipe',
26
+ maxBuffer: 32 * 1024 * 1024,
27
+ });
28
+ return {
29
+ ok: result.status === 0 && !result.error,
30
+ code: result.status,
31
+ stdout: result.stdout ?? '',
32
+ stderr: result.error ? `${result.stderr ?? ''}\n${result.error.message}` : (result.stderr ?? ''),
33
+ command: format(command, args),
34
+ };
35
+ };
36
+ /** Comando que falhou por timeout (o spawnSync devolve error, não mensagem legível). */
37
+ export function failure(command, args, reason) {
38
+ return { ok: false, code: null, stdout: '', stderr: reason, command: format(command, args) };
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // Disponibilidade
42
+ // ---------------------------------------------------------------------------
43
+ export function dockerAvailable(runner = defaultRunner) {
44
+ return runner('docker', ['version', '--format', '{{.Server.Version}}'], { timeoutMs: 15_000 }).ok;
45
+ }
46
+ /**
47
+ * `docker compose` (v2, plugin) — o `docker-compose` legado (v1, Python) não
48
+ * é suportado: os arquivos usam `x-` extensions, `name:` e healthcheck
49
+ * `condition`, que só o v2 entende.
50
+ */
51
+ export function composeAvailable(runner = defaultRunner) {
52
+ const result = runner('docker', ['compose', 'version', '--short'], { timeoutMs: 15_000 });
53
+ if (!result.ok)
54
+ return { ok: false, version: '' };
55
+ return { ok: true, version: result.stdout.trim() };
56
+ }
57
+ const SERVICE_KEYS = ['container_name', 'okcms.role', 'okcms.lane'];
58
+ /**
59
+ * Parser por indentação — não um YAML completo.
60
+ *
61
+ * O compose que a CLI lê é gerada por ela mesma; um parser de verdade
62
+ * (js-yaml) seria uma dependência nova num pacote que hoje não tem nenhuma,
63
+ * para extrair três campos. A restrição (chave em `services:` com indent 2,
64
+ * campos com indent maior) é verificada pelos testes contra o arquivo real.
65
+ */
66
+ export function parseComposeServices(yaml) {
67
+ const services = [];
68
+ const lines = yaml.split(/\r?\n/);
69
+ let inServices = false;
70
+ let current = null;
71
+ for (const line of lines) {
72
+ if (/^services:\s*$/.test(line)) {
73
+ inServices = true;
74
+ continue;
75
+ }
76
+ // fim do bloco services: chave de nível 0 (networks:, volumes:, x-*)
77
+ if (inServices && /^[A-Za-z_-][\w-]*:\s*$/.test(line)) {
78
+ if (current)
79
+ services.push(current);
80
+ current = null;
81
+ inServices = false;
82
+ continue;
83
+ }
84
+ if (!inServices)
85
+ continue;
86
+ const serviceMatch = /^ {2}([A-Za-z0-9][\w.-]*):\s*$/.exec(line);
87
+ if (serviceMatch) {
88
+ if (current)
89
+ services.push(current);
90
+ current = {
91
+ name: serviceMatch[1],
92
+ containerName: '',
93
+ role: 'unknown',
94
+ lane: null,
95
+ };
96
+ continue;
97
+ }
98
+ if (!current)
99
+ continue;
100
+ for (const key of SERVICE_KEYS) {
101
+ const match = new RegExp(`^\\s+${key.replace('.', '\\.')}:\\s*(\\S+)\\s*$`).exec(line);
102
+ if (!match)
103
+ continue;
104
+ const value = match[1].replace(/^["']|["']$/g, '');
105
+ if (key === 'container_name')
106
+ current.containerName = value;
107
+ else if (key === 'okcms.role')
108
+ current.role = value;
109
+ else
110
+ current.lane = value;
111
+ }
112
+ }
113
+ if (current)
114
+ services.push(current);
115
+ return services;
116
+ }
117
+ export function classifyServices(services, lane) {
118
+ return {
119
+ edge: services.filter((service) => service.role === 'edge' && service.lane === lane),
120
+ worker: services.filter((service) => service.role === 'worker' && service.lane === lane),
121
+ untouched: services.filter((service) => service.role === 'data' || service.role === 'proxy'),
122
+ };
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // Compose
126
+ // ---------------------------------------------------------------------------
127
+ export const INFRA_PROJECT = 'okcms';
128
+ export const infraProject = () => INFRA_PROJECT;
129
+ export const laneProject = (lane) => `okcms-${lane}`;
130
+ export const otherLane = (lane) => (lane === 'blue' ? 'green' : 'blue');
131
+ export const COMPOSE_INFRA_FILE = 'docker-compose.infra.yml';
132
+ export const COMPOSE_DEPLOY_FILE = 'docker-compose.deploy.yml';
133
+ /** `docker compose -p <projeto> -f <arquivo> ...` — a única forma montada aqui. */
134
+ export function composeArgs(call) {
135
+ const args = ['compose'];
136
+ if (call.project)
137
+ args.push('-p', call.project);
138
+ if (call.file)
139
+ args.push('-f', call.file);
140
+ args.push(...call.args);
141
+ return args;
142
+ }
143
+ export function runCompose(cwd, call, runner = defaultRunner) {
144
+ return runner('docker', composeArgs(call), {
145
+ cwd,
146
+ inherit: call.inherit ?? false,
147
+ timeoutMs: call.timeoutMs,
148
+ });
149
+ }
150
+ export const infraCompose = (cwd, args, runner, inherit) => runCompose(cwd, { project: INFRA_PROJECT, file: COMPOSE_INFRA_FILE, args, inherit }, runner);
151
+ export const laneCompose = (cwd, lane, args, runner, inherit) => runCompose(cwd, { project: laneProject(lane), file: COMPOSE_DEPLOY_FILE, args, inherit }, runner);
152
+ /**
153
+ * `okcms-net` é declarada como `external: true` no compose das lanes — se ela
154
+ * não existir, o `up` falha com um erro obscuro. Criar antes torna o fluxo
155
+ * independente da ordem em que o operador rodou a infra.
156
+ */
157
+ export function ensureNetwork(cwd, runner = defaultRunner) {
158
+ const inspect = runner('docker', ['network', 'inspect', 'okcms-net'], { timeoutMs: 15_000 });
159
+ if (inspect.ok)
160
+ return inspect;
161
+ return runner('docker', ['network', 'create', '--driver', 'bridge', 'okcms-net'], {
162
+ cwd,
163
+ timeoutMs: 30_000,
164
+ });
165
+ }
166
+ // ---------------------------------------------------------------------------
167
+ // Estado da lane
168
+ // ---------------------------------------------------------------------------
169
+ export const LANE_STATE_PATH = '.deploy/state.json';
170
+ export function readLaneState(cwd) {
171
+ const path = join(cwd, LANE_STATE_PATH);
172
+ if (!existsSync(path))
173
+ return null;
174
+ try {
175
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
176
+ if (parsed.lane !== 'blue' && parsed.lane !== 'green')
177
+ return null;
178
+ return parsed;
179
+ }
180
+ catch {
181
+ // arquivo corrompido não pode derrubar o deploy: o fallback é o docker
182
+ return null;
183
+ }
184
+ }
185
+ export function writeLaneState(cwd, state) {
186
+ const path = join(cwd, LANE_STATE_PATH);
187
+ mkdirSync(dirname(path), { recursive: true });
188
+ writeFileSync(path, `${JSON.stringify(state, null, 2)}\n`, 'utf-8');
189
+ }
190
+ export function pushLaneState(previous, lane, version) {
191
+ const now = new Date().toISOString();
192
+ const history = [...(previous?.history ?? [])];
193
+ if (previous)
194
+ history.push({ lane: previous.lane, version: previous.version, at: previous.at });
195
+ return {
196
+ lane,
197
+ previousLane: previous?.lane ?? null,
198
+ version,
199
+ at: now,
200
+ // histórico é diagnóstico, não log infinito
201
+ history: history.slice(-20),
202
+ };
203
+ }
204
+ /**
205
+ * Containers de uma lane com `okcms.role=edge` em execução.
206
+ * Usado quando não há `.deploy/state.json` (primeira execução / clone limpo).
207
+ */
208
+ export function edgeContainers(runner, lane) {
209
+ const result = runner('docker', [
210
+ 'ps',
211
+ '--filter', `label=okcms.lane=${lane}`,
212
+ '--filter', 'label=okcms.role=edge',
213
+ '--format', '{{.Names}}',
214
+ ], { timeoutMs: 15_000 });
215
+ if (!result.ok)
216
+ return [];
217
+ return result.stdout.split('\n').map((line) => line.trim()).filter(Boolean);
218
+ }
219
+ /** Estado do file é a fonte de verdade; o docker é o fallback. */
220
+ export function detectActiveLane(cwd, runner = defaultRunner) {
221
+ const state = readLaneState(cwd);
222
+ if (state)
223
+ return state.lane;
224
+ if (edgeContainers(runner, 'blue').length > 0)
225
+ return 'blue';
226
+ if (edgeContainers(runner, 'green').length > 0)
227
+ return 'green';
228
+ return null;
229
+ }
230
+ export const STOPPED = { exists: false, running: false, health: null };
231
+ export function inspectContainer(runner, name) {
232
+ const result = runner('docker', [
233
+ 'inspect',
234
+ '--format',
235
+ '{{.State.Status}}|{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}',
236
+ name,
237
+ ], { timeoutMs: 15_000 });
238
+ if (!result.ok)
239
+ return STOPPED;
240
+ const [status, health] = result.stdout.trim().split('|');
241
+ return {
242
+ exists: true,
243
+ running: status === 'running',
244
+ health: health ?? 'none',
245
+ };
246
+ }
247
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
248
+ /** Aguarda um predicado sobre o estado do container; false = timeout. */
249
+ export async function waitForContainer(runner, name, predicate, opts = {}) {
250
+ const timeoutMs = opts.timeoutMs ?? 120_000;
251
+ const intervalMs = opts.intervalMs ?? 2_000;
252
+ const started = Date.now();
253
+ for (;;) {
254
+ const state = inspectContainer(runner, name);
255
+ if (predicate(state))
256
+ return true;
257
+ const elapsed = Date.now() - started;
258
+ if (elapsed >= timeoutMs)
259
+ return false;
260
+ opts.onTick?.(elapsed);
261
+ await sleep(Math.min(intervalMs, timeoutMs - elapsed));
262
+ }
263
+ }
264
+ /** Container destruído ou sem healthcheck = "não está servindo". */
265
+ export const isServing = (state) => state.running && state.health !== 'unhealthy';
266
+ /**
267
+ * Pronto para receber tráfego: rodando e (quando tem healthcheck) healthy.
268
+ * `none` = serviço sem healthcheck definido — não dá para esperar mais nada.
269
+ */
270
+ export const isHealthy = (state) => state.running && (state.health === 'healthy' || state.health === 'none');
271
+ export const isStopped = (state) => !state.running;
272
+ /**
273
+ * Espera ativa: o processo saiu da lista (`docker ps` não o mostra mais).
274
+ * `docker stop` já bloqueia até o `stop_grace_period`, então isto é um
275
+ * cinto e suspensório para o caso de o dreno estourar o tempo.
276
+ */
277
+ export const waitStopped = (runner, name, opts = {}) => waitForContainer(runner, name, isStopped, { timeoutMs: 60_000, ...opts });
278
+ // ---------------------------------------------------------------------------
279
+ // Upstreams do proxy
280
+ // ---------------------------------------------------------------------------
281
+ export function upstreamsPath(cwd) {
282
+ return join(cwd, DEPLOY_PATHS.nginxUpstreams);
283
+ }
284
+ /** Grava os upstreams apontando para `lane` e devolve o texto. */
285
+ export function writeUpstreams(cwd, lane, record = {}) {
286
+ const ports = portsFromEnv(record);
287
+ const content = renderUpstreams(lane, ports);
288
+ const path = upstreamsPath(cwd);
289
+ mkdirSync(dirname(path), { recursive: true });
290
+ writeFileSync(path, content, 'utf-8');
291
+ return content;
292
+ }
293
+ /** Lane que os upstreams atuais apontam — usada em doctor/rollback. */
294
+ export function readUpstreamsLane(cwd) {
295
+ const path = upstreamsPath(cwd);
296
+ if (!existsSync(path))
297
+ return null;
298
+ const text = readFileSync(path, 'utf-8');
299
+ if (/okcms-(?:api|web|admin)-blue\b/.test(text))
300
+ return 'blue';
301
+ if (/okcms-(?:api|web|admin)-green\b/.test(text))
302
+ return 'green';
303
+ return null;
304
+ }
305
+ export const PROXY_CONTAINER = 'okcms-proxy';
306
+ export function proxyRunning(runner = defaultRunner) {
307
+ return inspectContainer(runner, PROXY_CONTAINER).running;
308
+ }
309
+ /**
310
+ * `nginx -s reload` é o coração do swap: re-lê a configuração nova com as
311
+ * conexões existentes vivas. Nunca `restart` — isso derrubaria o proxy (e o
312
+ * TLS/rotas junto) no meio do deploy.
313
+ */
314
+ export function reloadProxy(cwd, runner = defaultRunner) {
315
+ return runner('docker', ['exec', PROXY_CONTAINER, 'nginx', '-s', 'reload'], {
316
+ cwd,
317
+ timeoutMs: 30_000,
318
+ });
319
+ }
320
+ /** Sobrescrita total da config do proxy (só quando `reload` falha). */
321
+ export function restartProxy(cwd, runner = defaultRunner) {
322
+ return runner('docker', ['restart', PROXY_CONTAINER], { cwd, timeoutMs: 60_000 });
323
+ }
324
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const PROJECT_DOCS: readonly ["README.md", "PLUGIN.md", "THEME.md"];
2
+ export type ProjectDocName = typeof PROJECT_DOCS[number];
3
+ /**
4
+ * Atualiza README.md, PLUGIN.md e THEME.md do projeto para a versão atual
5
+ * da CLI, preservando a língua do projeto.
6
+ *
7
+ * @returns lista de arquivos que foram reescritos (vazia se nenhum mudou)
8
+ */
9
+ export declare function updateProjectDocs(cwd: string): string[];
10
+ //# sourceMappingURL=docs-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-updater.d.ts","sourceRoot":"","sources":["../src/docs-updater.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,iDAAkD,CAAC;AAC5E,MAAM,MAAM,cAAc,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AA4BzD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CASvD"}
@@ -0,0 +1,45 @@
1
+ // @oktis-works/cms - Atualização de documentação do projeto no `okcms update`
2
+ //
3
+ // Detecta a língua do projeto (pelos arquivos existentes) e atualiza
4
+ // README.md, PLUGIN.md, THEME.md apenas se o conteúdo mudou.
5
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { createHash } from 'node:crypto';
8
+ import { projectReadme, pluginDoc, themeDoc, detectProjectDocsLang } from './scaffold-docs.js';
9
+ export const PROJECT_DOCS = ['README.md', 'PLUGIN.md', 'THEME.md'];
10
+ /** Gera o hash do conteúdo (para comparação sem reescrita). */
11
+ function hash(content) {
12
+ return createHash('sha256').update(content).digest('hex');
13
+ }
14
+ /** Atualiza um único arquivo de documentação se mudou. Retorna true se escreveu. */
15
+ function updateDocFile(cwd, name, generator, lang) {
16
+ const path = join(cwd, name);
17
+ const newContent = generator(lang);
18
+ const newHash = hash(newContent);
19
+ if (existsSync(path)) {
20
+ const oldContent = readFileSync(path, 'utf-8');
21
+ const oldHash = hash(oldContent);
22
+ if (oldHash === newHash)
23
+ return false; // idêntico — não reescreve
24
+ }
25
+ writeFileSync(path, newContent, 'utf-8');
26
+ return true;
27
+ }
28
+ /**
29
+ * Atualiza README.md, PLUGIN.md e THEME.md do projeto para a versão atual
30
+ * da CLI, preservando a língua do projeto.
31
+ *
32
+ * @returns lista de arquivos que foram reescritos (vazia se nenhum mudou)
33
+ */
34
+ export function updateProjectDocs(cwd) {
35
+ const lang = detectProjectDocsLang(cwd);
36
+ const updated = [];
37
+ if (updateDocFile(cwd, 'README.md', projectReadme, lang))
38
+ updated.push('README.md');
39
+ if (updateDocFile(cwd, 'PLUGIN.md', pluginDoc, lang))
40
+ updated.push('PLUGIN.md');
41
+ if (updateDocFile(cwd, 'THEME.md', themeDoc, lang))
42
+ updated.push('THEME.md');
43
+ return updated;
44
+ }
45
+ //# sourceMappingURL=docs-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-updater.js","sourceRoot":"","sources":["../src/docs-updater.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,6DAA6D;AAE7D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE/F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAG5E,+DAA+D;AAC/D,SAAS,IAAI,CAAC,OAAe;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CACpB,GAAW,EACX,IAAoB,EACpB,SAAwC,EACxC,IAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC,CAAC,2BAA2B;IACpE,CAAC;IAED,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpF,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChF,IAAI,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/doctor.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { Runner } from './docker.js';
1
2
  export interface CheckResult {
2
3
  name: string;
3
4
  ok: boolean;
@@ -18,5 +19,6 @@ export interface DoctorEnv {
18
19
  export declare function runDoctorChecks(opts?: {
19
20
  tcpProbe?: typeof checkTcp;
20
21
  env?: DoctorEnv;
22
+ runner?: Runner;
21
23
  }): Promise<CheckResult[]>;
22
24
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcrG;AAeD,8CAA8C;AAC9C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvF;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,eAAe,CACnC,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAO,GACzD,OAAO,CAAC,WAAW,EAAE,CAAC,CA0ExB"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcrG;AAeD,8CAA8C;AAC9C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvF;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,eAAe,CACnC,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1E,OAAO,CAAC,WAAW,EAAE,CAAC,CAkIxB"}