@neetru/cli 1.0.1 → 2.0.0
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/CHANGELOG.md +136 -0
- package/README.md +109 -152
- package/dist/commands/add.d.ts +8 -3
- package/dist/commands/add.js +70 -143
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/ai.d.ts +4 -0
- package/dist/commands/ai.js +88 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/autocomplete.d.ts +7 -0
- package/dist/commands/autocomplete.js +107 -0
- package/dist/commands/autocomplete.js.map +1 -0
- package/dist/commands/build.d.ts +18 -0
- package/dist/commands/build.js +288 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.js +70 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/db.d.ts +14 -0
- package/dist/commands/db.js +187 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/deploy.d.ts +16 -3
- package/dist/commands/deploy.js +400 -180
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/doctor.d.ts +27 -0
- package/dist/commands/doctor.js +211 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/env.d.ts +15 -0
- package/dist/commands/env.js +56 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/fn.d.ts +6 -0
- package/dist/commands/fn.js +87 -0
- package/dist/commands/fn.js.map +1 -0
- package/dist/commands/init.d.ts +10 -3
- package/dist/commands/init.js +212 -143
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +6 -3
- package/dist/commands/login.js +222 -92
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +1 -0
- package/dist/commands/logout.js +28 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/logs.d.ts +14 -3
- package/dist/commands/logs.js +132 -106
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/mocks.d.ts +5 -0
- package/dist/commands/mocks.js +23 -0
- package/dist/commands/mocks.js.map +1 -0
- package/dist/commands/open.d.ts +4 -3
- package/dist/commands/open.js +53 -85
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/promote.d.ts +9 -0
- package/dist/commands/promote.js +114 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/publish.d.ts +14 -0
- package/dist/commands/publish.js +180 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/status.d.ts +5 -3
- package/dist/commands/status.js +91 -93
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/upgrade.d.ts +12 -0
- package/dist/commands/upgrade.js +77 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/validate.d.ts +1 -3
- package/dist/commands/validate.js +83 -91
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/whoami.d.ts +5 -3
- package/dist/commands/whoami.js +76 -28
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +337 -36
- package/dist/index.js.map +1 -1
- package/dist/lib/ai/context.d.ts +11 -0
- package/dist/lib/ai/context.js +112 -0
- package/dist/lib/ai/context.js.map +1 -0
- package/dist/lib/ai/orchestrator.d.ts +10 -0
- package/dist/lib/ai/orchestrator.js +92 -0
- package/dist/lib/ai/orchestrator.js.map +1 -0
- package/dist/lib/api-client.d.ts +21 -0
- package/dist/lib/api-client.js +65 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +15 -0
- package/dist/lib/auth.js +98 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config-schema.d.ts +165 -0
- package/dist/lib/config-schema.js +57 -0
- package/dist/lib/config-schema.js.map +1 -0
- package/dist/lib/config.d.ts +15 -0
- package/dist/lib/config.js +33 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.js +27 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +35 -33
- package/templates/auth/callback.ts +22 -0
- package/templates/auth/sign-in.tsx +41 -0
- package/templates/billing/checkout.ts +22 -0
- package/templates/billing/page.tsx +43 -0
- package/templates/support/ticket-form.tsx +68 -0
- package/templates/usage/track.ts +30 -0
- package/templates/users/profile.tsx +43 -0
- package/LICENSE +0 -21
- package/dist/commands/add.d.ts.map +0 -1
- package/dist/commands/deploy.d.ts.map +0 -1
- package/dist/commands/generate-types.d.ts +0 -3
- package/dist/commands/generate-types.d.ts.map +0 -1
- package/dist/commands/generate-types.js +0 -150
- package/dist/commands/generate-types.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/open.d.ts.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/config.d.ts +0 -14
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -83
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/scaffold/auth.d.ts +0 -3
- package/dist/scaffold/auth.d.ts.map +0 -1
- package/dist/scaffold/auth.js +0 -228
- package/dist/scaffold/auth.js.map +0 -1
- package/dist/scaffold/billing.d.ts +0 -3
- package/dist/scaffold/billing.d.ts.map +0 -1
- package/dist/scaffold/billing.js +0 -184
- package/dist/scaffold/billing.js.map +0 -1
- package/dist/scaffold/usage.d.ts +0 -3
- package/dist/scaffold/usage.d.ts.map +0 -1
- package/dist/scaffold/usage.js +0 -173
- package/dist/scaffold/usage.js.map +0 -1
- package/dist/scaffold/users.d.ts +0 -3
- package/dist/scaffold/users.d.ts.map +0 -1
- package/dist/scaffold/users.js +0 -135
- package/dist/scaffold/users.js.map +0 -1
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `neetru build` — empacota o produto no diretório atual num tarball pronto
|
|
3
|
+
* pra `neetru deploy`.
|
|
4
|
+
*
|
|
5
|
+
* Detecção de stack:
|
|
6
|
+
* 1. `--stack` flag explícita
|
|
7
|
+
* 2. `product_config/{slug}.stack` (via `/api/v1/cli/catalog`/Firestore — só se
|
|
8
|
+
* neetru.config.json tem slug; opcional)
|
|
9
|
+
* 3. `Dockerfile` → `docker`
|
|
10
|
+
* 4. `package.json` com next/react/etc → `node`
|
|
11
|
+
* 5. `composer.json` → `php-apache`
|
|
12
|
+
* 6. `index.html` sem deps → `static`
|
|
13
|
+
*
|
|
14
|
+
* Saída:
|
|
15
|
+
* `.neetru-build/{slug}-{version}.tar.gz`
|
|
16
|
+
* `.neetru-build/manifest.json`
|
|
17
|
+
*
|
|
18
|
+
* NÃO faz upload — apenas empacota. `neetru deploy` chama isso e depois
|
|
19
|
+
* envia pra GCS.
|
|
20
|
+
*/
|
|
21
|
+
import * as fs from 'node:fs';
|
|
22
|
+
import { promises as fsp } from 'node:fs';
|
|
23
|
+
import * as path from 'node:path';
|
|
24
|
+
import { spawn } from 'node:child_process';
|
|
25
|
+
import { createHash } from 'node:crypto';
|
|
26
|
+
import chalk from 'chalk';
|
|
27
|
+
import ora from 'ora';
|
|
28
|
+
import { log } from '../utils/logger.js';
|
|
29
|
+
const CONFIG_FILENAMES = ['neetru.config.json', '.neetru.json'];
|
|
30
|
+
function fileExists(p) {
|
|
31
|
+
try {
|
|
32
|
+
fs.statSync(p);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function loadLocalConfig(cwd) {
|
|
40
|
+
for (const filename of CONFIG_FILENAMES) {
|
|
41
|
+
const full = path.join(cwd, filename);
|
|
42
|
+
if (!fileExists(full))
|
|
43
|
+
continue;
|
|
44
|
+
try {
|
|
45
|
+
const raw = await fsp.readFile(full, 'utf8');
|
|
46
|
+
const parsed = JSON.parse(raw);
|
|
47
|
+
return parsed;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
function detectStack(cwd) {
|
|
56
|
+
if (fileExists(path.join(cwd, 'Dockerfile')))
|
|
57
|
+
return 'docker';
|
|
58
|
+
if (fileExists(path.join(cwd, 'package.json'))) {
|
|
59
|
+
try {
|
|
60
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
|
|
61
|
+
const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
|
|
62
|
+
if (deps.next || deps.react || deps.express || deps.fastify || deps.koa)
|
|
63
|
+
return 'node';
|
|
64
|
+
// package.json sem deps web → assume node mesmo assim
|
|
65
|
+
return 'node';
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return 'node';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (fileExists(path.join(cwd, 'composer.json')))
|
|
72
|
+
return 'php-apache';
|
|
73
|
+
if (fileExists(path.join(cwd, 'index.html')))
|
|
74
|
+
return 'static';
|
|
75
|
+
// Fallback: static (raiz como www).
|
|
76
|
+
return 'static';
|
|
77
|
+
}
|
|
78
|
+
function detectVersion(cwd, override) {
|
|
79
|
+
if (override)
|
|
80
|
+
return override;
|
|
81
|
+
const pkgPath = path.join(cwd, 'package.json');
|
|
82
|
+
if (fileExists(pkgPath)) {
|
|
83
|
+
try {
|
|
84
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
85
|
+
if (pkg.version)
|
|
86
|
+
return pkg.version;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* fall through */
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Default: timestamp ISO compactado.
|
|
93
|
+
return new Date().toISOString().replace(/[-:.]/g, '').slice(0, 14);
|
|
94
|
+
}
|
|
95
|
+
function runCmd(cmd, args, cwd) {
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
const child = spawn(cmd, args, {
|
|
98
|
+
cwd,
|
|
99
|
+
stdio: 'inherit',
|
|
100
|
+
shell: process.platform === 'win32',
|
|
101
|
+
});
|
|
102
|
+
child.on('error', reject);
|
|
103
|
+
child.on('close', (code) => {
|
|
104
|
+
if (code === 0)
|
|
105
|
+
resolve();
|
|
106
|
+
else
|
|
107
|
+
reject(new Error(`${cmd} ${args.join(' ')} exit code ${code}`));
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async function ensureDir(p) {
|
|
112
|
+
await fsp.mkdir(p, { recursive: true });
|
|
113
|
+
}
|
|
114
|
+
async function sha256File(p) {
|
|
115
|
+
const hash = createHash('sha256');
|
|
116
|
+
const stream = fs.createReadStream(p);
|
|
117
|
+
for await (const chunk of stream)
|
|
118
|
+
hash.update(chunk);
|
|
119
|
+
return hash.digest('hex');
|
|
120
|
+
}
|
|
121
|
+
async function tarDirectory(srcDir, dest, exclude = []) {
|
|
122
|
+
// Usa `tar` nativo. Em Windows 11 já vem `bsdtar`. Fallback: erro claro.
|
|
123
|
+
const args = ['-czf', dest];
|
|
124
|
+
for (const ex of exclude) {
|
|
125
|
+
args.push('--exclude', ex);
|
|
126
|
+
}
|
|
127
|
+
args.push('-C', srcDir, '.');
|
|
128
|
+
try {
|
|
129
|
+
await runCmd('tar', args, process.cwd());
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
throw new Error(`Falha ao empacotar com tar: ${err.message}\n` +
|
|
133
|
+
' Em Windows, use o tar embarcado (já presente no Windows 10+).');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function buildNode(cwd, noCache) {
|
|
137
|
+
const pkgPath = path.join(cwd, 'package.json');
|
|
138
|
+
if (!fileExists(pkgPath))
|
|
139
|
+
throw new Error('Stack node sem package.json.');
|
|
140
|
+
const pkg = JSON.parse(await fsp.readFile(pkgPath, 'utf8'));
|
|
141
|
+
// npm ci + (npm run build se existir).
|
|
142
|
+
if (noCache) {
|
|
143
|
+
const lock = path.join(cwd, 'package-lock.json');
|
|
144
|
+
if (fileExists(lock))
|
|
145
|
+
await fsp.rm(lock, { force: true });
|
|
146
|
+
}
|
|
147
|
+
log.info('npm ci…');
|
|
148
|
+
await runCmd('npm', ['ci'], cwd);
|
|
149
|
+
if (pkg.scripts?.build) {
|
|
150
|
+
log.info('npm run build…');
|
|
151
|
+
await runCmd('npm', ['run', 'build'], cwd);
|
|
152
|
+
}
|
|
153
|
+
return { entrypoint: pkg.main ?? 'index.js' };
|
|
154
|
+
}
|
|
155
|
+
async function buildDocker(cwd, slug, version, outputDir, noCache) {
|
|
156
|
+
const image = `neetru/${slug}:${version}`;
|
|
157
|
+
const buildArgs = ['build', '-t', image];
|
|
158
|
+
if (noCache)
|
|
159
|
+
buildArgs.push('--no-cache');
|
|
160
|
+
buildArgs.push('.');
|
|
161
|
+
log.info(`docker ${buildArgs.join(' ')}…`);
|
|
162
|
+
await runCmd('docker', buildArgs, cwd);
|
|
163
|
+
// docker save → tarball
|
|
164
|
+
const imgTar = path.join(outputDir, `${slug}-${version}-image.tar`);
|
|
165
|
+
log.info(`docker save → ${imgTar}…`);
|
|
166
|
+
await runCmd('docker', ['save', '-o', imgTar, image], cwd);
|
|
167
|
+
// Empacota a image.tar em tar.gz uniforme com o resto do pipeline.
|
|
168
|
+
const finalTar = path.join(outputDir, `${slug}-${version}.tar.gz`);
|
|
169
|
+
// tar -czf finalTar -C outputDir <image basename>
|
|
170
|
+
await runCmd('tar', ['-czf', finalTar, '-C', outputDir, path.basename(imgTar)], cwd);
|
|
171
|
+
await fsp.rm(imgTar, { force: true });
|
|
172
|
+
return { tarballPath: finalTar, entrypoint: image };
|
|
173
|
+
}
|
|
174
|
+
async function buildPhp(cwd) {
|
|
175
|
+
const composer = path.join(cwd, 'composer.json');
|
|
176
|
+
if (fileExists(composer)) {
|
|
177
|
+
log.info('composer install --no-dev --optimize-autoloader…');
|
|
178
|
+
try {
|
|
179
|
+
await runCmd('composer', ['install', '--no-dev', '--optimize-autoloader'], cwd);
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
log.warn(`composer falhou: ${err.message}. Empacotando mesmo assim.`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { entrypoint: 'index.php' };
|
|
186
|
+
}
|
|
187
|
+
async function buildStatic(cwd) {
|
|
188
|
+
const pkgPath = path.join(cwd, 'package.json');
|
|
189
|
+
if (fileExists(pkgPath)) {
|
|
190
|
+
try {
|
|
191
|
+
const pkg = JSON.parse(await fsp.readFile(pkgPath, 'utf8'));
|
|
192
|
+
if (pkg.scripts?.build) {
|
|
193
|
+
log.info('npm ci…');
|
|
194
|
+
await runCmd('npm', ['ci'], cwd);
|
|
195
|
+
log.info('npm run build…');
|
|
196
|
+
await runCmd('npm', ['run', 'build'], cwd);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// ignore — se falhar, empacota o que tem.
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
for (const candidate of ['dist', 'build', 'out', 'public']) {
|
|
204
|
+
if (fileExists(path.join(cwd, candidate))) {
|
|
205
|
+
return { root: path.join(cwd, candidate), entrypoint: 'index.html' };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return { root: cwd, entrypoint: 'index.html' };
|
|
209
|
+
}
|
|
210
|
+
export async function runBuild(opts = {}) {
|
|
211
|
+
log.banner();
|
|
212
|
+
const cwd = process.cwd();
|
|
213
|
+
const localCfg = await loadLocalConfig(cwd);
|
|
214
|
+
const slug = opts.product ?? localCfg?.slug;
|
|
215
|
+
if (!slug) {
|
|
216
|
+
log.error('--product <slug> é obrigatório (ou rode em diretório com neetru.config.json).');
|
|
217
|
+
process.exit(1);
|
|
218
|
+
}
|
|
219
|
+
const version = detectVersion(cwd, opts.version);
|
|
220
|
+
const stack = opts.stack ?? detectStack(cwd);
|
|
221
|
+
log.heading(`neetru build`);
|
|
222
|
+
log.dim(` slug=${slug} version=${version} stack=${stack}`);
|
|
223
|
+
const outputDir = path.resolve(cwd, opts.output ?? '.neetru-build');
|
|
224
|
+
await ensureDir(outputDir);
|
|
225
|
+
const tarballName = `${slug}-${version}.tar.gz`;
|
|
226
|
+
let tarballPath = path.join(outputDir, tarballName);
|
|
227
|
+
let entrypoint;
|
|
228
|
+
const spinner = ora({ text: `Construindo ${stack}…`, color: 'blue' }).start();
|
|
229
|
+
try {
|
|
230
|
+
if (stack === 'node') {
|
|
231
|
+
const r = await buildNode(cwd, !!opts.noCache);
|
|
232
|
+
entrypoint = r.entrypoint;
|
|
233
|
+
// Empacota o cwd inteiro excluindo dirs grandes.
|
|
234
|
+
await tarDirectory(cwd, tarballPath, [
|
|
235
|
+
'.git',
|
|
236
|
+
'.neetru-build',
|
|
237
|
+
'.next/cache',
|
|
238
|
+
'node_modules/.cache',
|
|
239
|
+
'tmp',
|
|
240
|
+
'*.log',
|
|
241
|
+
]);
|
|
242
|
+
}
|
|
243
|
+
else if (stack === 'docker') {
|
|
244
|
+
const r = await buildDocker(cwd, slug, version, outputDir, !!opts.noCache);
|
|
245
|
+
tarballPath = r.tarballPath;
|
|
246
|
+
entrypoint = r.entrypoint;
|
|
247
|
+
}
|
|
248
|
+
else if (stack === 'php-apache') {
|
|
249
|
+
const r = await buildPhp(cwd);
|
|
250
|
+
entrypoint = r.entrypoint;
|
|
251
|
+
await tarDirectory(cwd, tarballPath, ['.git', '.neetru-build', 'node_modules', 'tmp', '*.log']);
|
|
252
|
+
}
|
|
253
|
+
else if (stack === 'static') {
|
|
254
|
+
const r = await buildStatic(cwd);
|
|
255
|
+
entrypoint = r.entrypoint;
|
|
256
|
+
await tarDirectory(r.root, tarballPath, ['.git', '.neetru-build']);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
throw new Error(`Stack desconhecida: ${stack}`);
|
|
260
|
+
}
|
|
261
|
+
spinner.succeed(`Empacotado: ${chalk.bold(path.relative(cwd, tarballPath))}`);
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
spinner.fail(`Falha no build: ${err.message}`);
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
// Manifest
|
|
268
|
+
const sizeBytes = (await fsp.stat(tarballPath)).size;
|
|
269
|
+
const sha256 = await sha256File(tarballPath);
|
|
270
|
+
const manifest = {
|
|
271
|
+
slug,
|
|
272
|
+
version,
|
|
273
|
+
stack,
|
|
274
|
+
tarball: path.relative(cwd, tarballPath),
|
|
275
|
+
sha256,
|
|
276
|
+
sizeBytes,
|
|
277
|
+
entrypoint,
|
|
278
|
+
builtAt: new Date().toISOString(),
|
|
279
|
+
};
|
|
280
|
+
const manifestPath = path.join(outputDir, 'manifest.json');
|
|
281
|
+
await fsp.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf8');
|
|
282
|
+
log.dim(` sha256=${sha256.slice(0, 16)}…`);
|
|
283
|
+
log.dim(` size=${(sizeBytes / 1024 / 1024).toFixed(2)} MB`);
|
|
284
|
+
log.dim(` manifest=${path.relative(cwd, manifestPath)}`);
|
|
285
|
+
log.success(`Build pronto. Use: ${chalk.bold('neetru deploy --product=' + slug)}`);
|
|
286
|
+
return manifest;
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { config } from '../lib/config.js';
|
|
2
|
+
import { log } from '../utils/logger.js';
|
|
3
|
+
const SETTABLE_KEYS = [
|
|
4
|
+
'anthropicApiKey',
|
|
5
|
+
'openaiApiKey',
|
|
6
|
+
'geminiApiKey',
|
|
7
|
+
'neetruApiKey',
|
|
8
|
+
'neetruApiUrl',
|
|
9
|
+
'defaultModel',
|
|
10
|
+
// v2.0 — telemetry opt-in (boolean).
|
|
11
|
+
'telemetry.enabled',
|
|
12
|
+
];
|
|
13
|
+
export function configSet(key, value) {
|
|
14
|
+
if (!SETTABLE_KEYS.includes(key)) {
|
|
15
|
+
log.error(`Chave inválida: "${key}". Chaves disponíveis: ${SETTABLE_KEYS.join(', ')}`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
// Booleans (telemetry.enabled) são guardados como boolean real.
|
|
19
|
+
let coerced = value;
|
|
20
|
+
if (key === 'telemetry.enabled') {
|
|
21
|
+
if (value === 'true' || value === '1' || value === 'on' || value === 'yes') {
|
|
22
|
+
coerced = true;
|
|
23
|
+
}
|
|
24
|
+
else if (value === 'false' || value === '0' || value === 'off' || value === 'no') {
|
|
25
|
+
coerced = false;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
log.error(`Valor inválido para ${key}: use true|false`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
config.set(key, coerced);
|
|
33
|
+
// Ofusca chaves de API no log
|
|
34
|
+
const display = key.toLowerCase().includes('key') && typeof coerced === 'string'
|
|
35
|
+
? coerced.slice(0, 8) + '...' + coerced.slice(-4)
|
|
36
|
+
: String(coerced);
|
|
37
|
+
log.success(`${key} = ${display}`);
|
|
38
|
+
}
|
|
39
|
+
export function configGet(key) {
|
|
40
|
+
if (key) {
|
|
41
|
+
const val = config.get(key);
|
|
42
|
+
if (val === undefined) {
|
|
43
|
+
log.warn(`"${key}" não configurada.`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const display = key.toLowerCase().includes('key') && typeof val === 'string'
|
|
47
|
+
? val.slice(0, 8) + '...' + val.slice(-4)
|
|
48
|
+
: val;
|
|
49
|
+
console.log(` ${key}: ${display}`);
|
|
50
|
+
}
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
log.heading('Configuração atual:');
|
|
54
|
+
for (const k of SETTABLE_KEYS) {
|
|
55
|
+
const val = config.get(k);
|
|
56
|
+
if (val === undefined) {
|
|
57
|
+
log.dim(` ${k}: não configurado`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const display = k.toLowerCase().includes('key') && typeof val === 'string'
|
|
61
|
+
? val.slice(0, 8) + '...' + val.slice(-4)
|
|
62
|
+
: val;
|
|
63
|
+
log.info(`${k}: ${display}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function configPath() {
|
|
68
|
+
console.log(` ${config.path}`);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,MAAM,aAAa,GAAG;IACpB,iBAAiB;IACjB,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,qCAAqC;IACrC,mBAAmB;CACX,CAAC;AAIX,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa;IAClD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAkB,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,0BAA0B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,gEAAgE;IAChE,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;QAChC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YAC3E,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnF,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAkB,EAAE,OAAc,CAAC,CAAC;IAC/C,8BAA8B;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC9E,CAAC,CAAE,OAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAI,OAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpB,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAkB,CAAC,CAAC;QAC3C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GACX,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAC1D,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzC,CAAC,CAAC,GAAG,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO;IACT,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GACX,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ;gBACxD,CAAC,CAAE,GAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAI,GAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjE,CAAC,CAAC,GAAG,CAAC;YACV,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface DbInitOptions {
|
|
2
|
+
out?: string;
|
|
3
|
+
force?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function runDbInit(opts?: DbInitOptions): Promise<void>;
|
|
6
|
+
export interface DbMigrateOptions {
|
|
7
|
+
toVersion: string;
|
|
8
|
+
fromVersion?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function runDbMigrate(opts: DbMigrateOptions): Promise<void>;
|
|
11
|
+
export interface DbSeedOptions {
|
|
12
|
+
script?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function runDbSeed(opts?: DbSeedOptions): Promise<void>;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `neetru db` — gerência de schema/migrations/seed do produto.
|
|
3
|
+
*
|
|
4
|
+
* Sprint 10 (CLI 1.4). Subcomandos:
|
|
5
|
+
* - `neetru db init` Lê neetru.config.json + cria manifest local stub.
|
|
6
|
+
* - `neetru db migrate <v>` Chama API Core (`/cli/v1/db/migrate`) que internamente
|
|
7
|
+
* dispara `runMigrations` (Sprint 8 build-hook).
|
|
8
|
+
* - `neetru db seed` Roda `db/seed.ts` no projeto (NEETRU_ENV=dev).
|
|
9
|
+
*
|
|
10
|
+
* O CLI não toca Firestore direto — toda operação passa pelo Core (audit + RBAC).
|
|
11
|
+
* Para `seed` o CLI apenas executa o script local.
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'node:fs/promises';
|
|
14
|
+
import * as fsSync from 'node:fs';
|
|
15
|
+
import * as path from 'node:path';
|
|
16
|
+
import { spawn } from 'node:child_process';
|
|
17
|
+
import chalk from 'chalk';
|
|
18
|
+
import { log } from '../utils/logger.js';
|
|
19
|
+
import { apiRequest, CliApiError, CliNetworkError } from '../lib/api-client.js';
|
|
20
|
+
const CONFIG_FILENAMES = ['neetru.config.json', '.neetru.json'];
|
|
21
|
+
async function loadProductConfig() {
|
|
22
|
+
for (const name of CONFIG_FILENAMES) {
|
|
23
|
+
const filePath = path.resolve(process.cwd(), name);
|
|
24
|
+
if (fsSync.existsSync(filePath)) {
|
|
25
|
+
try {
|
|
26
|
+
const raw = await fs.readFile(filePath, 'utf8');
|
|
27
|
+
const parsed = JSON.parse(raw);
|
|
28
|
+
if (typeof parsed.slug !== 'string' || !parsed.slug)
|
|
29
|
+
return null;
|
|
30
|
+
return parsed;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const DEFAULT_MANIFEST_PATH = 'db/schema.manifest.json';
|
|
40
|
+
const STARTER_MANIFEST = (slug) => ({
|
|
41
|
+
productId: slug,
|
|
42
|
+
schemaVersion: 1,
|
|
43
|
+
collections: [
|
|
44
|
+
{
|
|
45
|
+
name: 'profiles',
|
|
46
|
+
fields: { email: 'string', createdAt: 'timestamp' },
|
|
47
|
+
indexes: [],
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
export async function runDbInit(opts = {}) {
|
|
52
|
+
log.banner();
|
|
53
|
+
log.heading('neetru db init');
|
|
54
|
+
const cfg = await loadProductConfig();
|
|
55
|
+
if (!cfg) {
|
|
56
|
+
log.error('neetru.config.json não encontrado ou inválido. Rode `neetru init` primeiro.');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const outRel = opts.out ?? DEFAULT_MANIFEST_PATH;
|
|
61
|
+
const outAbs = path.resolve(process.cwd(), outRel);
|
|
62
|
+
if (fsSync.existsSync(outAbs) && !opts.force) {
|
|
63
|
+
log.warn(`Manifest já existe em ${chalk.bold(outRel)}. Use --force para sobrescrever.`);
|
|
64
|
+
process.exit(2);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
await fs.mkdir(path.dirname(outAbs), { recursive: true });
|
|
68
|
+
const manifest = STARTER_MANIFEST(cfg.slug);
|
|
69
|
+
await fs.writeFile(outAbs, JSON.stringify(manifest, null, 2) + '\n', 'utf8');
|
|
70
|
+
log.success(`Manifest criado em ${chalk.bold(outRel)}`);
|
|
71
|
+
log.dim(' Edite os campos e adicione collections conforme necessário.');
|
|
72
|
+
log.dim(' Após editar, rode: neetru db migrate <toVersion>');
|
|
73
|
+
}
|
|
74
|
+
export async function runDbMigrate(opts) {
|
|
75
|
+
log.banner();
|
|
76
|
+
log.heading('neetru db migrate');
|
|
77
|
+
const cfg = await loadProductConfig();
|
|
78
|
+
if (!cfg) {
|
|
79
|
+
log.error('neetru.config.json não encontrado.');
|
|
80
|
+
process.exit(1);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const toVersion = Number(opts.toVersion);
|
|
84
|
+
if (!Number.isFinite(toVersion) || toVersion < 1) {
|
|
85
|
+
log.error('toVersion inválido. Use um inteiro positivo.');
|
|
86
|
+
process.exit(2);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const fromVersion = opts.fromVersion !== undefined
|
|
90
|
+
? Number(opts.fromVersion)
|
|
91
|
+
: (cfg.schemaVersion ?? 1);
|
|
92
|
+
if (!Number.isFinite(fromVersion) || fromVersion < 0) {
|
|
93
|
+
log.error('fromVersion inválido.');
|
|
94
|
+
process.exit(2);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (toVersion <= fromVersion) {
|
|
98
|
+
log.error(`toVersion (${toVersion}) deve ser maior que fromVersion (${fromVersion}).`);
|
|
99
|
+
process.exit(2);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
log.info(`Migrating ${chalk.bold(cfg.slug)} v${fromVersion} → v${toVersion} ...`);
|
|
103
|
+
try {
|
|
104
|
+
const r = await apiRequest('/cli/v1/db/migrate', {
|
|
105
|
+
method: 'POST',
|
|
106
|
+
body: { productId: cfg.slug, fromVersion, toVersion },
|
|
107
|
+
});
|
|
108
|
+
log.success(`Migration aplicada: ${r.migrationsApplied} step(s).`);
|
|
109
|
+
log.dim(` v${r.fromVersion} → v${r.toVersion}`);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (err instanceof CliApiError) {
|
|
113
|
+
log.error(`API ${err.status}: ${err.message}`);
|
|
114
|
+
process.exit(3);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (err instanceof CliNetworkError) {
|
|
118
|
+
log.error(`Conexão falhou: ${err.message}`);
|
|
119
|
+
process.exit(4);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
123
|
+
process.exit(5);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const DEFAULT_SEED_PATHS = ['db/seed.ts', 'db/seed.js', 'scripts/seed.ts', 'scripts/seed.js'];
|
|
127
|
+
export async function runDbSeed(opts = {}) {
|
|
128
|
+
log.banner();
|
|
129
|
+
log.heading('neetru db seed');
|
|
130
|
+
const cfg = await loadProductConfig();
|
|
131
|
+
if (!cfg) {
|
|
132
|
+
log.error('neetru.config.json não encontrado.');
|
|
133
|
+
process.exit(1);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Resolve path do seed script.
|
|
137
|
+
let scriptPath = null;
|
|
138
|
+
if (opts.script) {
|
|
139
|
+
const abs = path.resolve(process.cwd(), opts.script);
|
|
140
|
+
if (!fsSync.existsSync(abs)) {
|
|
141
|
+
log.error(`Script não encontrado: ${opts.script}`);
|
|
142
|
+
process.exit(2);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
scriptPath = abs;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
for (const candidate of DEFAULT_SEED_PATHS) {
|
|
149
|
+
const abs = path.resolve(process.cwd(), candidate);
|
|
150
|
+
if (fsSync.existsSync(abs)) {
|
|
151
|
+
scriptPath = abs;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (!scriptPath) {
|
|
157
|
+
log.error('Nenhum seed script encontrado. Tente: db/seed.ts ou passe --script <path>.');
|
|
158
|
+
process.exit(2);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
log.info(`Executando ${chalk.bold(path.relative(process.cwd(), scriptPath))} (NEETRU_ENV=dev)`);
|
|
162
|
+
const isTs = scriptPath.endsWith('.ts');
|
|
163
|
+
const cmd = isTs ? 'npx' : 'node';
|
|
164
|
+
const args = isTs ? ['tsx', scriptPath] : [scriptPath];
|
|
165
|
+
await new Promise((resolve) => {
|
|
166
|
+
const child = spawn(cmd, args, {
|
|
167
|
+
stdio: 'inherit',
|
|
168
|
+
env: { ...process.env, NEETRU_ENV: 'dev' },
|
|
169
|
+
shell: process.platform === 'win32',
|
|
170
|
+
});
|
|
171
|
+
child.on('exit', (code) => {
|
|
172
|
+
if (code === 0) {
|
|
173
|
+
log.success('Seed completo.');
|
|
174
|
+
resolve();
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
log.error(`Seed falhou (exit ${code ?? '?'}).`);
|
|
178
|
+
process.exit(6);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
child.on('error', (err) => {
|
|
182
|
+
log.error(`Falha ao executar: ${err.message}`);
|
|
183
|
+
process.exit(7);
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/commands/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export interface DeployOptions {
|
|
2
|
+
product?: string;
|
|
3
|
+
version?: string;
|
|
4
|
+
stack?: 'node' | 'docker' | 'php-apache' | 'static';
|
|
5
|
+
target?: 'cloud-run' | 'vm' | 'workspace';
|
|
6
|
+
server?: string;
|
|
7
|
+
domain?: string;
|
|
8
|
+
port?: number;
|
|
9
|
+
artifact?: string;
|
|
10
|
+
artifactUrl?: string;
|
|
11
|
+
artifactSha256?: string;
|
|
12
|
+
nonInteractive?: boolean;
|
|
13
|
+
envFile?: string;
|
|
14
|
+
env?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function runDeploy(opts: DeployOptions): Promise<void>;
|