@brunoluizdesiqueira/bbuilder-cli 1.0.17 → 1.0.19

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 (2) hide show
  1. package/README.md +93 -311
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,206 +1,40 @@
1
1
  # bbuilder-cli
2
2
 
3
- CLI em Node.js/TypeScript que substitui o `build_local.bat` com interface interativa e suporte a flags diretas.
3
+ CLI para build local de projetos Delphi.
4
4
 
5
- ---
5
+ - seleção interativa de projeto, modo e versão
6
+ - suporte a `FAST`, `DEBUG` e `RELEASE`
7
+ - configuração por arquivo `bbuilder.config.json`
8
+ - diagnóstico de ambiente com `doctor`
6
9
 
7
- ## Instalação
8
-
9
- ```bash
10
- # Desenvolvimento local
11
- npm install
12
- npm run build
13
- npm link # disponibiliza o comando 'bbuilder' globalmente
14
- ```
15
-
16
- ```bash
17
- # Instalação via npm
18
- npm install -g @brunoluizdesiqueira/bbuilder-cli
19
- ```
20
-
21
- ```bash
22
- # Publicação
23
- npm publish --access public
24
- ```
25
-
26
- ## Publicação
27
-
28
- ### Publicação manual inicial
29
-
30
- Use esse fluxo para a primeira publicação ou para publicar manualmente uma versão:
31
-
32
- 1. Faça login no npm:
33
-
34
- ```bash
35
- npm login
36
- ```
37
-
38
- 2. Valide o pacote localmente:
39
-
40
- ```bash
41
- npm run build
42
- npm pack --dry-run
43
- ```
44
-
45
- 3. Publique:
46
-
47
- ```bash
48
- npm publish --access public
49
- ```
50
-
51
- Se a versão atual do `package.json` já tiver sido publicada, gere uma nova versão antes:
52
-
53
- ```bash
54
- npm version patch --no-git-tag-version
55
- npm publish --access public
56
- ```
57
-
58
- ### Configurar publicação automática
59
-
60
- Depois da primeira publicação manual, configure o npm para confiar no workflow do GitHub Actions.
61
-
62
- No npm:
63
-
64
- 1. abra a página do pacote `@brunoluizdesiqueira/bbuilder-cli`
65
- 2. vá em `Settings`
66
- 3. abra `Trusted publishing`
67
- 4. adicione um publisher do tipo `GitHub Actions`
68
- 5. configure:
69
- - repositório: `brunoluizdesiqueira/b-cli`
70
- - workflow: `release.yml`
71
-
72
- Na opção **Publishing access**, use:
73
-
74
- - `Require two-factor authentication or a granular access token with bypass 2fa enabled`
75
-
76
- Evite para esse fluxo:
77
-
78
- - `Require two-factor authentication and disallow tokens`
79
-
80
- ### Publicação automática com Changesets
81
-
82
- Depois do Trusted Publisher configurado, o fluxo recomendado fica assim:
83
-
84
- 1. criar uma changeset para cada mudança publicada:
85
-
86
- ```bash
87
- npm run changeset
88
- ```
89
-
90
- 2. fazer commit da changeset junto com o código
91
- 3. abrir PR e fazer merge na `main`
92
- 4. o workflow `Release` abre ou atualiza uma PR de release
93
- 5. ao mergear a PR de release, o npm é publicado automaticamente
94
-
95
- Comandos locais úteis:
96
-
97
- ```bash
98
- npm run changeset
99
- npm run version-packages
100
- npm run release
101
- ```
102
-
103
- ### Troubleshooting do publish automático
104
-
105
- Se a PR de release for mergeada, a versão subir para o `package.json`, mas o publish no npm falhar com erro parecido com:
106
-
107
- ```text
108
- E404 Not Found - PUT https://registry.npmjs.org/@brunoluizdesiqueira%2fbbuilder-cli - Not found
109
- ```
110
-
111
- verifique estes pontos:
112
-
113
- 1. o Trusted Publisher do pacote está configurado para:
114
- - owner/user: `brunoluizdesiqueira`
115
- - repository: `b-cli`
116
- - workflow: `release.yml`
117
- 2. o repositório GitHub é público
118
- 3. o workflow `Release` tem `permissions.id-token: write`
119
- 4. o workflow roda com Node e npm atuais
120
-
121
- O ajuste que resolveu esse cenário neste projeto foi:
122
-
123
- - usar `actions/setup-node@v5`
124
- - executar o workflow com Node `24`
125
- - atualizar o npm antes do publish
126
- - definir no `package.json`:
127
-
128
- ```json
129
- "publishConfig": {
130
- "access": "public",
131
- "provenance": true
132
- }
133
- ```
10
+ ## Requisitos
134
11
 
135
- ## CI/CD
12
+ - Node.js 18+
13
+ - Windows
14
+ - Delphi instalado
15
+ - bibliotecas do projeto disponíveis na máquina
136
16
 
137
- O repositório agora está preparado com GitHub Actions:
138
-
139
- - `CI`: roda em `push` e `pull_request`, executando `npm ci`, `tsc`, `build` e `npm pack --dry-run`
140
- - `Release`: usa `changesets` para abrir uma PR de release com bump de versão e changelog; quando essa PR entra na `main`, o pacote é publicado no npm
17
+ ## Instalação
141
18
 
142
- Ou use direto sem instalar globalmente:
143
19
  ```bash
144
- npx ts-node src/index.ts build
20
+ npm install -g @brunoluizdesiqueira/bbuilder-cli
145
21
  ```
146
22
 
147
- ---
148
-
149
- ## Uso
150
-
151
- ### Modo interativo (sem argumentos)
152
- ```bash
153
- bbuilder
154
- ```
155
- Exibe menus para escolher: modo de build → projeto → versão.
23
+ Depois confirme:
156
24
 
157
- ### Comando `build` com flags opcionais
158
25
  ```bash
159
- bbuilder build # interativo completo
160
- bbuilder build --type DEBUG # escolhe projeto e versão interativamente
161
- bbuilder build --type FAST --project faturamento\BimerFaturamento
162
- bbuilder build --type RELEASE --project Bimer --version 11.3.1
26
+ bbuilder --version
163
27
  ```
164
28
 
165
- Durante o build, o CLI exibe feedback visual por etapas com spinner, barra indeterminada e tempo decorrido. Essa barra representa atividade do pipeline, não percentual real do `dcc64`.
166
-
167
- ### Atalhos diretos por modo
168
- ```bash
169
- bbuilder fast # interativo para projeto/versão
170
- bbuilder debug --project Bimer
171
- bbuilder release --project Bimer --version 11.3.1
172
- ```
29
+ ## Configuração
173
30
 
174
- ### Gerenciamento de projetos
175
- ```bash
176
- bbuilder project list # lista projetos configurados
177
- bbuilder project add # adiciona novo projeto (interativo)
178
- bbuilder project remove # remove projeto (interativo ou por --name)
179
- ```
31
+ Crie a configuração inicial:
180
32
 
181
- ### Configuração do ambiente
182
33
  ```bash
183
- bbuilder config init # assistente para criar bbuilder.config.json
184
- bbuilder config show # exibe configuração atual
185
- bbuilder config validate # valida a estrutura do arquivo de configuração
186
- bbuilder doctor # diagnostica ambiente, config e paths
34
+ bbuilder config init
187
35
  ```
188
36
 
189
- ---
190
-
191
- ## Configuração (`bbuilder.config.json`)
192
-
193
- Prioridade de resolução da configuração:
194
-
195
- 1. `bbuilder --config <caminho>`
196
- 2. Variável de ambiente `BBUILDER_CONFIG`
197
- 3. `bbuilder.config.json` no diretório atual
198
- 4. `bimer.config.json` no diretório atual, por compatibilidade
199
- 5. Arquivo global do usuário
200
-
201
- No Windows, o arquivo global fica em `%APPDATA%\bbuilder-cli\bbuilder.config.json`.
202
-
203
- Crie com `bbuilder config init`, ou manualmente:
37
+ Ou use um arquivo manual como este:
204
38
 
205
39
  ```json
206
40
  {
@@ -218,181 +52,129 @@ Crie com `bbuilder config init`, ou manualmente:
218
52
  ],
219
53
  "projects": {
220
54
  "BimerFaturamento": "faturamento\\BimerFaturamento",
221
- "Bimer": "Bimer",
222
- "LiberadorEstoque": "geral\\gerenteeletronico.jobs.liberadorestoque\\LiberadorEstoque",
223
- "BimerEstoque": "estoque\\BimerEstoque"
55
+ "Bimer": "Bimer"
224
56
  }
225
57
  }
226
58
  ```
227
59
 
228
- `dependencyPaths` deve ser ajustado no `bbuilder.config.json`, porque esses caminhos podem variar entre usuários e máquinas.
229
-
230
- `projects` agora usa o formato `nome amigável: caminho real do projeto`, para a CLI exibir nomes humanizados sem perder a referência correta de compilação.
60
+ `dependencyPaths` varia por máquina e deve ser ajustado por usuário.
231
61
 
232
- Se o arquivo não existir, os valores padrão acima são usados automaticamente. Ao rodar `bbuilder config init`, a CLI gera um `dependencyPaths` inicial com base nos diretórios informados.
62
+ ## Resolução da Configuração
233
63
 
234
- ### Como usar configs locais
64
+ Ordem de prioridade:
235
65
 
236
- O pacote é instalado normalmente, e a configuração é informada na execução, não na instalação.
66
+ 1. `--config <caminho>`
67
+ 2. variável de ambiente `BBUILDER_CONFIG`
68
+ 3. `bbuilder.config.json` no diretório atual
69
+ 4. `bimer.config.json` no diretório atual, por compatibilidade
70
+ 5. arquivo global do usuário
237
71
 
238
- Instalação global:
72
+ No Windows, o arquivo global padrão fica em:
239
73
 
240
- ```bash
241
- npm install -g @brunoluizdesiqueira/bbuilder-cli
74
+ ```text
75
+ %APPDATA%\bbuilder-cli\bbuilder.config.json
242
76
  ```
243
77
 
244
- Usando um arquivo de config local explícito:
78
+ Exemplos:
245
79
 
246
80
  ```bash
247
81
  bbuilder --config C:\configs\bbuilder.config.json build
248
82
  ```
249
83
 
250
- Usando variável de ambiente no Windows CMD:
251
-
252
84
  ```bat
253
85
  set BBUILDER_CONFIG=C:\configs\bbuilder.config.json
254
86
  bbuilder build
255
87
  ```
256
88
 
257
- Usando variável de ambiente no PowerShell:
258
-
259
89
  ```powershell
260
90
  $env:BBUILDER_CONFIG="C:\configs\bbuilder.config.json"
261
91
  bbuilder build
262
92
  ```
263
93
 
264
- Usando config local no diretório atual:
94
+ ## Uso
95
+
96
+ Modo interativo:
265
97
 
266
- Se existir um `bbuilder.config.json` na pasta onde o comando é executado, a CLI usa esse arquivo automaticamente.
98
+ ```bash
99
+ bbuilder
100
+ ```
267
101
 
268
- Para verificar qual arquivo está sendo usado:
102
+ Build direto:
269
103
 
270
104
  ```bash
271
- bbuilder config show
105
+ bbuilder build --type DEBUG --project BimerFaturamento --version 11.3.1
106
+ bbuilder build --type FAST --project Bimer
107
+ bbuilder build --type RELEASE --project Bimer
272
108
  ```
273
109
 
274
- Exemplos:
110
+ Atalhos:
275
111
 
276
112
  ```bash
277
- bbuilder --config C:\configs\bbuilder.config.json build
113
+ bbuilder fast
114
+ bbuilder debug --project Bimer
115
+ bbuilder release --project Bimer --version 11.3.1
278
116
  ```
279
117
 
118
+ Projetos:
119
+
280
120
  ```bash
281
- set BBUILDER_CONFIG=C:\configs\bbuilder.config.json
121
+ bbuilder project list
122
+ bbuilder project add
123
+ bbuilder project remove
124
+ bbuilder project remove --name Bimer
125
+ ```
126
+
127
+ Configuração:
128
+
129
+ ```bash
130
+ bbuilder config init
282
131
  bbuilder config show
132
+ bbuilder config validate
133
+ bbuilder doctor
283
134
  ```
284
135
 
285
- ---
136
+ ## Observações de Uso
286
137
 
287
- ## Integração com VSCode (`tasks.json`)
138
+ - o build mostra etapas com tempo decorrido
139
+ - `cgrc` e `dcc64` escrevem diretamente no terminal durante a compilação
140
+ - no PowerShell, a saída do compilador pode ser menos verbosa que no `cmd`, mesmo com o build funcionando corretamente
288
141
 
289
- Substitua o `tasks.json` atual por este (sem mais menus do VSCode, a CLI cuida de tudo):
142
+ Se o PowerShell bloquear `npm` ou `bbuilder`, ajuste a policy do usuário:
290
143
 
291
- ```json
292
- {
293
- "version": "2.0.0",
294
- "tasks": [
295
- {
296
- "label": "Bimer: FAST + Run",
297
- "type": "shell",
298
- "command": "bbuilder fast",
299
- "group": "build",
300
- "presentation": { "reveal": "always", "focus": true, "panel": "dedicated", "clear": true },
301
- "problemMatcher": {
302
- "owner": "delphi",
303
- "fileLocation": ["autoDetect", "${workspaceFolder}"],
304
- "pattern": {
305
- "regexp": "^(.*?)\\s*\\((\\d+)\\)(?:\\s+|:\\s*)(Fatal|Error|Warning|Hint|error|fatal):\\s+(.*)$",
306
- "file": 1, "line": 2, "severity": 3, "message": 4
307
- }
308
- }
309
- },
310
- {
311
- "label": "Bimer: DEBUG + Run",
312
- "type": "shell",
313
- "command": "bbuilder debug",
314
- "group": "build",
315
- "presentation": { "reveal": "always", "focus": true, "panel": "dedicated", "clear": true },
316
- "problemMatcher": {
317
- "owner": "delphi",
318
- "fileLocation": ["autoDetect", "${workspaceFolder}"],
319
- "pattern": {
320
- "regexp": "^(.*?)\\s*\\((\\d+)\\)(?:\\s+|:\\s*)(Fatal|Error|Warning|Hint|error|fatal):\\s+(.*)$",
321
- "file": 1, "line": 2, "severity": 3, "message": 4
322
- }
323
- }
324
- },
325
- {
326
- "label": "Bimer: RELEASE",
327
- "type": "shell",
328
- "command": "bbuilder release",
329
- "group": "build",
330
- "presentation": { "reveal": "always", "focus": true, "panel": "dedicated", "clear": true },
331
- "problemMatcher": {
332
- "owner": "delphi",
333
- "fileLocation": ["autoDetect", "${workspaceFolder}"],
334
- "pattern": {
335
- "regexp": "^(.*?)\\s*\\((\\d+)\\)(?:\\s+|:\\s*)(Fatal|Error|Warning|Hint|error|fatal):\\s+(.*)$",
336
- "file": 1, "line": 2, "severity": 3, "message": 4
337
- }
338
- }
339
- }
340
- ]
341
- }
144
+ ```powershell
145
+ Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
342
146
  ```
343
147
 
344
- E nos keybindings, nada muda — os atalhos continuam os mesmos.
345
-
346
- ---
148
+ ## Troubleshooting
347
149
 
348
- ## Estrutura do Projeto
150
+ Validar ambiente:
349
151
 
152
+ ```bash
153
+ bbuilder doctor
350
154
  ```
351
- bbuilder-cli/
352
- ├── .changeset/
353
- │ ├── config.json
354
- │ └── *.md
355
- ├── .github/
356
- │ └── workflows/
357
- │ ├── ci.yml
358
- │ └── release.yml
359
- ├── src/
360
- │ ├── build/
361
- │ │ ├── compiler.ts
362
- │ │ ├── execute.ts
363
- │ │ ├── project.ts
364
- │ │ └── resources.ts
365
- │ ├── cli/
366
- │ │ └── program.ts
367
- │ ├── config/
368
- │ │ ├── config.ts
369
- │ │ └── validate.ts
370
- │ ├── diagnostics/
371
- │ │ └── doctor.ts
372
- │ ├── ui/
373
- │ │ ├── output.ts
374
- │ │ └── prompts.ts
375
- │ ├── index.ts
376
- │ └── types.ts
377
- ├── files/
378
- │ ├── build_local.bat
379
- │ ├── tasks.json
380
- │ └── ...
381
- ├── bbuilder.config.json
382
- ├── package.json
383
- ├── package-lock.json
384
- ├── tsconfig.json
385
- ├── .gitignore
386
- ├── LICENSE
387
- └── README.md
155
+
156
+ Validar configuração:
157
+
158
+ ```bash
159
+ bbuilder config validate
388
160
  ```
389
161
 
390
- ## Stack
162
+ Erro `Unit not found: 'System'` normalmente indica problema em:
163
+ - `delphiDir`
164
+ - `dependencyPaths`
165
+ - path `...\lib\Win64\release` ausente na configuração
166
+
167
+ ## Publicação
168
+
169
+ Para usuários, nada além de instalar o pacote é necessário.
170
+
171
+ Para mantenedores, o fluxo é:
172
+ - criar changeset
173
+ - abrir PR
174
+ - mergear na `main`
175
+ - mergear a PR automática de release
176
+ - publicação no npm ocorre via GitHub Actions
177
+
178
+ ## Licença
391
179
 
392
- | Lib | Por quê |
393
- |---|---|
394
- | **commander** | Parsing de comandos e flags |
395
- | **inquirer** | Menus interativos com setas |
396
- | **chalk** | Cores ANSI no terminal |
397
- | **execa** | Spawn de processos externos (CGRC, DCC64) |
398
- | **typescript** | Tipagem, autocomplete, menos bugs |
180
+ ISC
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brunoluizdesiqueira/bbuilder-cli",
3
- "version": "1.0.17",
3
+ "version": "1.0.19",
4
4
  "description": "CLI de build local para projetos Delphi do Bimer",
5
5
  "license": "ISC",
6
6
  "repository": {