@ridiormf/version-control 1.1.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/LICENSE +21 -0
- package/README.md +708 -0
- package/bin/smart-commit.js +201 -0
- package/bin/version-control.js +4 -0
- package/dist/analyzer.d.ts +7 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +109 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/changelog.d.ts +49 -0
- package/dist/changelog.d.ts.map +1 -0
- package/dist/changelog.js +219 -0
- package/dist/changelog.js.map +1 -0
- package/dist/colors.d.ts +6 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +16 -0
- package/dist/colors.js.map +1 -0
- package/dist/commitGenerator.d.ts +27 -0
- package/dist/commitGenerator.d.ts.map +1 -0
- package/dist/commitGenerator.js +272 -0
- package/dist/commitGenerator.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +116 -0
- package/dist/config.js.map +1 -0
- package/dist/git.d.ts +7 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +18 -0
- package/dist/git.js.map +1 -0
- package/dist/gitCommands.d.ts +6 -0
- package/dist/gitCommands.d.ts.map +1 -0
- package/dist/gitCommands.js +55 -0
- package/dist/gitCommands.js.map +1 -0
- package/dist/i18n.d.ts +15 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +452 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +221 -0
- package/dist/index.js.map +1 -0
- package/dist/readline.d.ts +19 -0
- package/dist/readline.d.ts.map +1 -0
- package/dist/readline.js +129 -0
- package/dist/readline.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/updateChecker.d.ts +5 -0
- package/dist/updateChecker.d.ts.map +1 -0
- package/dist/updateChecker.js +117 -0
- package/dist/updateChecker.js.map +1 -0
- package/dist/updater.d.ts +22 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +170 -0
- package/dist/updater.js.map +1 -0
- package/dist/version.d.ts +14 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +69 -0
- package/dist/version.js.map +1 -0
- package/package.json +61 -0
package/README.md
ADDED
|
@@ -0,0 +1,708 @@
|
|
|
1
|
+
# Version Control
|
|
2
|
+
|
|
3
|
+
> Sistema inteligente de controle de versão que analisa commits do Git e automatiza o versionamento semântico (SemVer).
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@ridio/version-control)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## 📋 Índice
|
|
9
|
+
|
|
10
|
+
- [Sobre](#sobre)
|
|
11
|
+
- [Instalação](#instalação)
|
|
12
|
+
- [Uso](#uso)
|
|
13
|
+
- [Como Funciona](#como-funciona)
|
|
14
|
+
- [Exemplos](#exemplos)
|
|
15
|
+
- [API](#api)
|
|
16
|
+
- [Contribuindo](#contribuindo)
|
|
17
|
+
- [Licença](#licença)
|
|
18
|
+
|
|
19
|
+
## 🎯 Sobre
|
|
20
|
+
|
|
21
|
+
O **Version Control** é uma ferramenta CLI que automatiza o processo de versionamento semântico do seu projeto. Ele analisa as mensagens de commit do Git, identifica os tipos de mudanças (breaking changes, novas funcionalidades, correções de bugs) e sugere automaticamente a versão apropriada segundo as especificações do [Semantic Versioning](https://semver.org/).
|
|
22
|
+
|
|
23
|
+
### ✨ Funcionalidades
|
|
24
|
+
|
|
25
|
+
- 🔍 **Análise Inteligente de Commits**: Analisa mensagens de commit e arquivos modificados
|
|
26
|
+
- 🎯 **Sugestão Automática de Versão**: Sugere MAJOR, MINOR ou PATCH baseado nas mudanças
|
|
27
|
+
- 📝 **Atualização Automática**: Atualiza `package.json`, `CHANGELOG.md` e arquivos de código
|
|
28
|
+
- 🏷️ **Git Tags**: Cria tags automaticamente e faz push para o repositório
|
|
29
|
+
- 🎨 **Interface Colorida**: Output colorido e intuitivo no terminal
|
|
30
|
+
- 🔄 **Interativo**: Permite confirmar ou modificar a versão sugerida
|
|
31
|
+
- 🤖 **Smart Commit**: Gera mensagens de commit automaticamente em inglês (Conventional Commits)
|
|
32
|
+
- 📋 **CHANGELOG Inteligente**: Agrupa commits por tipo e remove duplicatas
|
|
33
|
+
- 🧪 **Modo de Teste**: Teste mudanças com rollback automático
|
|
34
|
+
- 🌍 **Internacionalização**: Suporte automático para 4 idiomas (EN, PT, ES, FR)
|
|
35
|
+
|
|
36
|
+
## 📦 Instalação
|
|
37
|
+
|
|
38
|
+
### Global (Recomendado)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
yarn global add @ridio/version-control
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Como dependência de desenvolvimento
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
yarn add -D @ridio/version-control
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Uso com npx (sem instalação)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
yarn dlx @ridio/version-control
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 🚀 Uso
|
|
57
|
+
|
|
58
|
+
### CLI - Version Control
|
|
59
|
+
|
|
60
|
+
Após fazer suas alterações e commitar:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
version-control
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Ou com yarn dlx:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
yarn dlx @ridio/version-control
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### CLI - Smart Commit
|
|
73
|
+
|
|
74
|
+
Commit inteligente com mensagem automática em inglês:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# 1. Faça suas alterações
|
|
78
|
+
vim src/index.ts
|
|
79
|
+
|
|
80
|
+
# 2. Adicione os arquivos
|
|
81
|
+
git add .
|
|
82
|
+
|
|
83
|
+
# 3. Execute o smart commit
|
|
84
|
+
smart-commit
|
|
85
|
+
# ou
|
|
86
|
+
yarn commit
|
|
87
|
+
|
|
88
|
+
# 4. Pressione Enter para aceitar a mensagem gerada
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Exemplo de saída:**
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
═══════════════════════════════════════════════════════════
|
|
95
|
+
Smart Commit - Auto Message
|
|
96
|
+
═══════════════════════════════════════════════════════════
|
|
97
|
+
|
|
98
|
+
Staged files: 2
|
|
99
|
+
✨ src/newFeature.ts (+45/-0)
|
|
100
|
+
📝 src/index.ts (+5/-2)
|
|
101
|
+
|
|
102
|
+
Analyzing changes...
|
|
103
|
+
|
|
104
|
+
Generated commit message:
|
|
105
|
+
feat(src): add newFeature
|
|
106
|
+
|
|
107
|
+
Details:
|
|
108
|
+
Type: feat
|
|
109
|
+
Scope: src
|
|
110
|
+
Description: add newFeature
|
|
111
|
+
|
|
112
|
+
Options: [1] Commit [2] Edit [3] Cancel (default: 1)
|
|
113
|
+
Choice:
|
|
114
|
+
|
|
115
|
+
✓ Commit created successfully!
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Adicionando ao package.json
|
|
119
|
+
|
|
120
|
+
Adicione um script no seu `package.json`:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"scripts": {
|
|
125
|
+
"version": "version-control",
|
|
126
|
+
"version:test": "version-control --test",
|
|
127
|
+
"commit": "smart-commit"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
E execute:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Commit inteligente
|
|
136
|
+
yarn commit
|
|
137
|
+
|
|
138
|
+
# Versionamento normal
|
|
139
|
+
yarn version
|
|
140
|
+
|
|
141
|
+
# Versionamento com teste (permite desfazer)
|
|
142
|
+
yarn version:test
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Uso Programático
|
|
146
|
+
|
|
147
|
+
Você também pode usar a biblioteca programaticamente:
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
import {
|
|
151
|
+
analyzeChanges,
|
|
152
|
+
bumpVersion,
|
|
153
|
+
getCurrentVersion,
|
|
154
|
+
} from "@ridio/version-control";
|
|
155
|
+
|
|
156
|
+
// Obter versão atual
|
|
157
|
+
const currentVersion = getCurrentVersion();
|
|
158
|
+
console.log("Versão atual:", currentVersion);
|
|
159
|
+
|
|
160
|
+
// Analisar mudanças do último commit
|
|
161
|
+
const analysis = analyzeChanges();
|
|
162
|
+
console.log("Tipo sugerido:", analysis.type);
|
|
163
|
+
console.log("Razões:", analysis.reason);
|
|
164
|
+
|
|
165
|
+
// Calcular nova versão
|
|
166
|
+
const newVersion = bumpVersion(currentVersion, analysis.type);
|
|
167
|
+
console.log("Nova versão:", newVersion);
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 🔧 Como Funciona
|
|
171
|
+
|
|
172
|
+
O sistema analisa as mudanças do último commit do Git e sugere a versão apropriada baseado em:
|
|
173
|
+
|
|
174
|
+
### � Conventional Commits
|
|
175
|
+
|
|
176
|
+
A ferramenta suporta o formato [Conventional Commits](https://www.conventionalcommits.org/), que estrutura as mensagens de commit de forma padronizada:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
<tipo>(<escopo>): <descrição>
|
|
180
|
+
|
|
181
|
+
[corpo opcional]
|
|
182
|
+
|
|
183
|
+
[rodapé(s) opcional(is)]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Exemplos:**
|
|
187
|
+
|
|
188
|
+
- `feat(auth): add login functionality`
|
|
189
|
+
- `fix: resolve memory leak in cache`
|
|
190
|
+
- `feat!: remove support for Node 12` (breaking change)
|
|
191
|
+
|
|
192
|
+
### 📋 CHANGELOG Inteligente
|
|
193
|
+
|
|
194
|
+
Todos os commits desde a última versão são **automaticamente incluídos** no CHANGELOG, agrupados por tipo:
|
|
195
|
+
|
|
196
|
+
- **✨ Added** - Novas funcionalidades (`feat:`, `add`, `new`)
|
|
197
|
+
- **🐛 Fixed** - Correções de bugs (`fix:`, `bug`)
|
|
198
|
+
- **🔄 Changed** - Mudanças em funcionalidades (`refactor:`, `perf:`)
|
|
199
|
+
- **⚠️ Breaking Changes** - Mudanças incompatíveis (`BREAKING CHANGE`, `!`)
|
|
200
|
+
- **🗑️ Removed** - Remoções (`remove`, `delete`)
|
|
201
|
+
- **🔒 Security** - Correções de segurança (`security`)
|
|
202
|
+
- **⚠️ Deprecated** - Funcionalidades obsoletas (`deprecat`)
|
|
203
|
+
|
|
204
|
+
A ferramenta **remove automaticamente** duplicatas e commits similares, mantendo apenas as entradas mais relevantes.
|
|
205
|
+
|
|
206
|
+
### 🤖 Smart Commit - Mensagens Automáticas
|
|
207
|
+
|
|
208
|
+
O **Smart Commit** analisa os arquivos staged e gera mensagens de commit automaticamente em inglês, seguindo o padrão Conventional Commits:
|
|
209
|
+
|
|
210
|
+
#### Como funciona:
|
|
211
|
+
|
|
212
|
+
1. **Analisa os arquivos**: Detecta arquivos adicionados, modificados ou deletados
|
|
213
|
+
2. **Identifica o tipo**: feat, fix, docs, test, refactor, style, chore
|
|
214
|
+
3. **Detecta o escopo**: Identifica automaticamente (src, api, ui, etc.)
|
|
215
|
+
4. **Gera a descrição**: Baseado nos nomes dos arquivos e padrões de mudança
|
|
216
|
+
|
|
217
|
+
#### Tipos detectados automaticamente:
|
|
218
|
+
|
|
219
|
+
- **feat**: Novos arquivos ou funcionalidades
|
|
220
|
+
- **fix**: Mais deleções que adições (correções)
|
|
221
|
+
- **docs**: Apenas arquivos de documentação (.md, .txt)
|
|
222
|
+
- **test**: Apenas arquivos de teste
|
|
223
|
+
- **style**: Mudanças pequenas em CSS/SCSS
|
|
224
|
+
- **refactor**: Modificações em código existente
|
|
225
|
+
- **chore**: Configurações e arquivos auxiliares
|
|
226
|
+
|
|
227
|
+
#### Exemplo:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# Adicionar novo arquivo
|
|
231
|
+
git add src/authentication.ts
|
|
232
|
+
yarn commit
|
|
233
|
+
# Gera: feat(src): add authentication
|
|
234
|
+
|
|
235
|
+
# Corrigir bug
|
|
236
|
+
git add src/bugFix.ts
|
|
237
|
+
yarn commit
|
|
238
|
+
# Gera: fix(src): resolve issue in bugFix
|
|
239
|
+
|
|
240
|
+
# Atualizar documentação
|
|
241
|
+
git add README.md
|
|
242
|
+
yarn commit
|
|
243
|
+
# Gera: docs: update README
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
#### 🎉 Versão Inicial (1.0.0)
|
|
247
|
+
|
|
248
|
+
Quando a ferramenta detecta que está gerando a versão **1.0.0** (primeira release), ela adiciona uma mensagem especial no CHANGELOG:
|
|
249
|
+
|
|
250
|
+
```markdown
|
|
251
|
+
## [1.0.0] - 2025-12-24
|
|
252
|
+
|
|
253
|
+
### 🎉 Initial Release
|
|
254
|
+
|
|
255
|
+
Primeira versão pública do projeto.
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Esta é uma regra automática aplicada a **qualquer projeto** que usar a ferramenta pela primeira vez.
|
|
259
|
+
|
|
260
|
+
### �🔴 MAJOR (X.0.0) - Breaking Changes
|
|
261
|
+
|
|
262
|
+
Detectado quando a mensagem de commit contém palavras-chave como:
|
|
263
|
+
|
|
264
|
+
- `breaking`, `break`
|
|
265
|
+
- `incompatível`, `incompatible`
|
|
266
|
+
- `remove`, `delete`
|
|
267
|
+
- `refactor completo`, `rewrite`
|
|
268
|
+
|
|
269
|
+
**Exemplo:**
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
git commit -m "breaking: remove deprecated API methods"
|
|
273
|
+
# Sugere: 1.5.3 → 2.0.0
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 🟡 MINOR (x.Y.0) - Novas Funcionalidades
|
|
277
|
+
|
|
278
|
+
Detectado quando:
|
|
279
|
+
|
|
280
|
+
- Mensagem contém: `add`, `new`, `feature`, `implement`, `create`
|
|
281
|
+
- Novos arquivos são adicionados ao projeto
|
|
282
|
+
- Arquivos de configuração são modificados
|
|
283
|
+
|
|
284
|
+
**Exemplo:**
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
git commit -m "feat: add user authentication module"
|
|
288
|
+
# Sugere: 1.5.3 → 1.6.0
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### 🟢 PATCH (x.y.Z) - Correções
|
|
292
|
+
|
|
293
|
+
Detectado quando a mensagem contém:
|
|
294
|
+
|
|
295
|
+
- `fix`, `bug`, `error`
|
|
296
|
+
- `correção`, `ajuste`
|
|
297
|
+
- Pequenas mudanças sem novos arquivos
|
|
298
|
+
|
|
299
|
+
**Exemplo:**
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
git commit -m "fix: resolve memory leak in cache"
|
|
303
|
+
# Sugere: 1.5.3 → 1.5.4
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 📊 Entendendo o Impacto de Cada Tipo de Versão
|
|
307
|
+
|
|
308
|
+
Seguindo o [Semantic Versioning (SemVer)](https://semver.org/), cada tipo de versão tem um significado específico e impacta diferentes aspectos do seu projeto:
|
|
309
|
+
|
|
310
|
+
#### 🔴 MAJOR (X.0.0) - Quando usar?
|
|
311
|
+
|
|
312
|
+
**Use MAJOR quando você fizer mudanças incompatíveis na API/interface pública.**
|
|
313
|
+
|
|
314
|
+
**Impactos:**
|
|
315
|
+
|
|
316
|
+
- ⚠️ **Quebra compatibilidade**: Usuários precisarão atualizar o código deles
|
|
317
|
+
- 🔧 **Requer migração**: Pode necessitar guia de migração
|
|
318
|
+
- 📢 **Comunicação crítica**: Deve ser amplamente comunicado
|
|
319
|
+
- 🚨 **Risco alto**: Pode causar falhas em projetos dependentes
|
|
320
|
+
|
|
321
|
+
**Exemplos de mudanças MAJOR:**
|
|
322
|
+
|
|
323
|
+
```javascript
|
|
324
|
+
// ❌ Remover funções/métodos públicos
|
|
325
|
+
- export function oldMethod() { } // Removido
|
|
326
|
+
|
|
327
|
+
// ❌ Mudar assinatura de funções
|
|
328
|
+
- function process(data: string): void
|
|
329
|
+
+ function process(data: object, options: Options): Promise<void>
|
|
330
|
+
|
|
331
|
+
// ❌ Alterar comportamento esperado
|
|
332
|
+
- return { success: true } // Antes retornava objeto
|
|
333
|
+
+ return true // Agora retorna boolean
|
|
334
|
+
|
|
335
|
+
// ❌ Remover ou renomear propriedades públicas
|
|
336
|
+
- interface User { username: string }
|
|
337
|
+
+ interface User { name: string } // Quebra código existente
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**Quando evitar:** Se possível, adicione a nova funcionalidade sem remover a antiga (deprecated) e só remova na próxima MAJOR.
|
|
341
|
+
|
|
342
|
+
#### 🟡 MINOR (x.Y.0) - Quando usar?
|
|
343
|
+
|
|
344
|
+
**Use MINOR quando você adicionar funcionalidades novas, mantendo compatibilidade com versões anteriores.**
|
|
345
|
+
|
|
346
|
+
**Impactos:**
|
|
347
|
+
|
|
348
|
+
- ✅ **Mantém compatibilidade**: Código existente continua funcionando
|
|
349
|
+
- 🎁 **Adiciona valor**: Novas features disponíveis
|
|
350
|
+
- 📈 **Evolução natural**: Crescimento do projeto
|
|
351
|
+
- 🔄 **Upgrade seguro**: Usuários podem atualizar sem medo
|
|
352
|
+
|
|
353
|
+
**Exemplos de mudanças MINOR:**
|
|
354
|
+
|
|
355
|
+
```javascript
|
|
356
|
+
// ✅ Adicionar novas funções/métodos
|
|
357
|
+
+ export function newFeature() { } // Nova função
|
|
358
|
+
|
|
359
|
+
// ✅ Adicionar novos parâmetros opcionais
|
|
360
|
+
- function process(data: string): void
|
|
361
|
+
+ function process(data: string, options?: Options): void
|
|
362
|
+
|
|
363
|
+
// ✅ Adicionar novas propriedades opcionais
|
|
364
|
+
interface User {
|
|
365
|
+
username: string;
|
|
366
|
+
+ email?: string; // Novo campo opcional
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// ✅ Adicionar novas classes/módulos
|
|
370
|
+
+ export class NewService { } // Nova funcionalidade
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Quando usar:** Sempre que adicionar algo novo que não quebra código existente.
|
|
374
|
+
|
|
375
|
+
#### 🟢 PATCH (x.y.Z) - Quando usar?
|
|
376
|
+
|
|
377
|
+
**Use PATCH quando você corrigir bugs, sem adicionar funcionalidades ou quebrar compatibilidade.**
|
|
378
|
+
|
|
379
|
+
**Impactos:**
|
|
380
|
+
|
|
381
|
+
- 🐛 **Corrige problemas**: Bugs são resolvidos
|
|
382
|
+
- 🔒 **Totalmente seguro**: Zero risco de quebrar código
|
|
383
|
+
- ⚡ **Deve ser automático**: Usuários devem poder atualizar sem pensar
|
|
384
|
+
- 🎯 **Foco em estabilidade**: Melhora qualidade sem mudanças
|
|
385
|
+
|
|
386
|
+
**Exemplos de mudanças PATCH:**
|
|
387
|
+
|
|
388
|
+
```javascript
|
|
389
|
+
// ✅ Corrigir bugs
|
|
390
|
+
- if (value > 10) // Bug: deveria ser >=
|
|
391
|
+
+ if (value >= 10)
|
|
392
|
+
|
|
393
|
+
// ✅ Corrigir tipos/documentação
|
|
394
|
+
- * @param value - Must be string // Documentação errada
|
|
395
|
+
+ * @param value - Must be number
|
|
396
|
+
|
|
397
|
+
// ✅ Melhorar performance sem mudar comportamento
|
|
398
|
+
- return items.map(x => x).filter(x => x > 0) // Ineficiente
|
|
399
|
+
+ return items.filter(x => x > 0) // Otimizado
|
|
400
|
+
|
|
401
|
+
// ✅ Corrigir edge cases
|
|
402
|
+
- if (array.length) return array[0] // Falha se length = 0
|
|
403
|
+
+ if (array.length > 0) return array[0]
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**Quando usar:** Sempre que consertar algo que não estava funcionando corretamente.
|
|
407
|
+
|
|
408
|
+
#### 🎯 Decisão Rápida: Qual versão usar?
|
|
409
|
+
|
|
410
|
+
```
|
|
411
|
+
Quebra código existente?
|
|
412
|
+
├─ SIM → 🔴 MAJOR (X.0.0)
|
|
413
|
+
└─ NÃO → Adiciona nova funcionalidade?
|
|
414
|
+
├─ SIM → 🟡 MINOR (x.Y.0)
|
|
415
|
+
└─ NÃO → 🟢 PATCH (x.y.Z)
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
#### 💡 Dicas Práticas
|
|
419
|
+
|
|
420
|
+
1. **Na dúvida entre MINOR e PATCH:**
|
|
421
|
+
|
|
422
|
+
- Se adiciona qualquer coisa nova (função, parâmetro, propriedade) → MINOR
|
|
423
|
+
- Se apenas corrige comportamento → PATCH
|
|
424
|
+
|
|
425
|
+
2. **Evite MAJOR sempre que possível:**
|
|
426
|
+
|
|
427
|
+
- Use `@deprecated` para marcar código antigo
|
|
428
|
+
- Mantenha compatibilidade por 1-2 versões MINOR antes de remover
|
|
429
|
+
|
|
430
|
+
3. **Pre-releases (0.x.x):**
|
|
431
|
+
|
|
432
|
+
- Versões 0.x.x podem fazer breaking changes em MINOR
|
|
433
|
+
- Use antes do 1.0.0 para desenvolvimento inicial
|
|
434
|
+
|
|
435
|
+
4. **Versão 1.0.0:**
|
|
436
|
+
- Representa a primeira versão estável
|
|
437
|
+
- A partir dela, siga SemVer rigorosamente
|
|
438
|
+
|
|
439
|
+
## 📖 Exemplos
|
|
440
|
+
|
|
441
|
+
### Fluxo Típico
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# 1. Faça suas alterações
|
|
445
|
+
vim src/index.ts
|
|
446
|
+
|
|
447
|
+
# 2. Commit suas mudanças
|
|
448
|
+
git commit -m "feat: add new export functionality"
|
|
449
|
+
|
|
450
|
+
# 3. Execute o version control
|
|
451
|
+
version-control
|
|
452
|
+
|
|
453
|
+
# Output:
|
|
454
|
+
# ═══════════════════════════════════════════════════════════
|
|
455
|
+
# Sistema de Controle de Versão
|
|
456
|
+
# ═══════════════════════════════════════════════════════════
|
|
457
|
+
#
|
|
458
|
+
# Versão atual: 1.2.3
|
|
459
|
+
#
|
|
460
|
+
# Analisando último commit...
|
|
461
|
+
#
|
|
462
|
+
# Mensagem do commit:
|
|
463
|
+
# "feat: add new export functionality"
|
|
464
|
+
#
|
|
465
|
+
# Arquivos modificados: 2
|
|
466
|
+
# - src/index.ts
|
|
467
|
+
# - src/exporter.ts
|
|
468
|
+
#
|
|
469
|
+
# Análise da mudança:
|
|
470
|
+
# 🟡 Commit indica nova funcionalidade
|
|
471
|
+
#
|
|
472
|
+
# Tipo sugerido: 🟡 MINOR
|
|
473
|
+
# Nova versão: 1.2.3 → 1.3.0
|
|
474
|
+
#
|
|
475
|
+
# Deseja atualizar a versão? (s/n): s
|
|
476
|
+
#
|
|
477
|
+
# Confirme o tipo de versão:
|
|
478
|
+
# 1 - MAJOR (2.0.0) - Breaking changes
|
|
479
|
+
# 2 - MINOR (1.3.0) - Nova funcionalidade
|
|
480
|
+
# 3 - PATCH (1.2.4) - Correção de bug
|
|
481
|
+
#
|
|
482
|
+
# Escolha (1/2/3) [padrão: 2]:
|
|
483
|
+
#
|
|
484
|
+
# Atualizando arquivos...
|
|
485
|
+
# ✓ package.json atualizado
|
|
486
|
+
# ✓ CHANGELOG.md atualizado
|
|
487
|
+
#
|
|
488
|
+
# ✓ Versão atualizada para 1.3.0!
|
|
489
|
+
#
|
|
490
|
+
# Executando comandos git...
|
|
491
|
+
# → git add -A
|
|
492
|
+
# ✓ Arquivos adicionados
|
|
493
|
+
# → git commit -m "chore: bump version to 1.3.0"
|
|
494
|
+
# ✓ Commit criado
|
|
495
|
+
# → git tag v1.3.0
|
|
496
|
+
# ✓ Tag criada
|
|
497
|
+
# → git push
|
|
498
|
+
# ✓ Push realizado
|
|
499
|
+
# → git push --tags
|
|
500
|
+
# ✓ Tags enviadas
|
|
501
|
+
#
|
|
502
|
+
# ✓ Versão 1.3.0 publicada com sucesso!
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
### Personalizando a Escolha
|
|
506
|
+
|
|
507
|
+
Você pode escolher um tipo diferente do sugerido:
|
|
508
|
+
|
|
509
|
+
```bash
|
|
510
|
+
version-control
|
|
511
|
+
|
|
512
|
+
# O sistema sugere PATCH, mas você quer MINOR
|
|
513
|
+
# Escolha (1/2/3) [padrão: 3]: 2
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
## 📚 API
|
|
517
|
+
|
|
518
|
+
### `analyzeChanges(): ChangeAnalysis`
|
|
519
|
+
|
|
520
|
+
Analisa o último commit e retorna uma análise das mudanças.
|
|
521
|
+
|
|
522
|
+
**Retorno:**
|
|
523
|
+
|
|
524
|
+
```typescript
|
|
525
|
+
interface ChangeAnalysis {
|
|
526
|
+
type: "major" | "minor" | "patch";
|
|
527
|
+
reason: string[];
|
|
528
|
+
filesChanged: string[];
|
|
529
|
+
commitMsg: string;
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
### `getCurrentVersion(projectRoot?: string): string`
|
|
534
|
+
|
|
535
|
+
Retorna a versão atual do `package.json`.
|
|
536
|
+
|
|
537
|
+
**Parâmetros:**
|
|
538
|
+
|
|
539
|
+
- `projectRoot` (opcional): Caminho raiz do projeto (padrão: `process.cwd()`)
|
|
540
|
+
|
|
541
|
+
### `bumpVersion(currentVersion: string, type: VersionType): string`
|
|
542
|
+
|
|
543
|
+
Calcula a nova versão baseado no tipo de bump.
|
|
544
|
+
|
|
545
|
+
**Parâmetros:**
|
|
546
|
+
|
|
547
|
+
- `currentVersion`: Versão atual (ex: "1.2.3")
|
|
548
|
+
- `type`: Tipo de bump (`'major'`, `'minor'`, ou `'patch'`)
|
|
549
|
+
|
|
550
|
+
**Exemplo:**
|
|
551
|
+
|
|
552
|
+
```typescript
|
|
553
|
+
bumpVersion("1.2.3", "major"); // "2.0.0"
|
|
554
|
+
bumpVersion("1.2.3", "minor"); // "1.3.0"
|
|
555
|
+
bumpVersion("1.2.3", "patch"); // "1.2.4"
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
## � Internacionalização
|
|
559
|
+
|
|
560
|
+
A ferramenta detecta automaticamente o idioma do sistema e ajusta todas as mensagens de acordo.
|
|
561
|
+
|
|
562
|
+
### Idiomas Suportados
|
|
563
|
+
|
|
564
|
+
- 🇬🇧 **Inglês (EN)** - Default
|
|
565
|
+
- 🇧🇷 **Português (PT)** - pt_BR, pt_PT
|
|
566
|
+
- 🇪🇸 **Espanhol (ES)** - es_ES, es_MX, etc.
|
|
567
|
+
- 🇫🇷 **Francês (FR)** - fr_FR, fr_CA, etc.
|
|
568
|
+
|
|
569
|
+
### Configurar Idioma Manualmente
|
|
570
|
+
|
|
571
|
+
```bash
|
|
572
|
+
# Configurar para português
|
|
573
|
+
version-control config --lang pt
|
|
574
|
+
|
|
575
|
+
# Configurar para inglês
|
|
576
|
+
version-control config --lang en
|
|
577
|
+
|
|
578
|
+
# Configurar para espanhol
|
|
579
|
+
version-control config --lang es
|
|
580
|
+
|
|
581
|
+
# Configurar para francês
|
|
582
|
+
version-control config --lang fr
|
|
583
|
+
|
|
584
|
+
# Limpar configuração (volta a usar detecção automática)
|
|
585
|
+
version-control config --clear
|
|
586
|
+
|
|
587
|
+
# Ver configuração atual
|
|
588
|
+
version-control config
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
A configuração é salva globalmente em `~/.version-control-config.json` e será usada em todos os projetos.
|
|
592
|
+
|
|
593
|
+
### Como Funciona
|
|
594
|
+
|
|
595
|
+
1. **Configuração Manual**: Se você configurou um idioma com `version-control config --lang`, ele será usado
|
|
596
|
+
2. **Detecção Automática**: Se não houver configuração, detecta do sistema via `LANG`, `LANGUAGE`, `LC_ALL`
|
|
597
|
+
3. **Fallback**: Se o idioma não for suportado, usa inglês automaticamente
|
|
598
|
+
|
|
599
|
+
**Indicador de Idioma:**
|
|
600
|
+
|
|
601
|
+
Toda vez que você executar `version-control` ou `smart-commit`, verá uma linha informando:
|
|
602
|
+
|
|
603
|
+
```bash
|
|
604
|
+
ℹ Current language: PT (manually configured)
|
|
605
|
+
To change language: version-control config --lang <code>
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
ou
|
|
609
|
+
|
|
610
|
+
```bash
|
|
611
|
+
ℹ Idioma atual: PT (detectado do sistema)
|
|
612
|
+
Para mudar o idioma: version-control config --lang <code>
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
### Detecção Automática do Sistema
|
|
616
|
+
|
|
617
|
+
A detecção é automática baseada nas variáveis de ambiente do sistema:
|
|
618
|
+
|
|
619
|
+
- `LANG`
|
|
620
|
+
- `LANGUAGE`
|
|
621
|
+
- `LC_ALL`
|
|
622
|
+
|
|
623
|
+
**Exemplo:**
|
|
624
|
+
|
|
625
|
+
```bash
|
|
626
|
+
# Sistema em português
|
|
627
|
+
LANG=pt_BR.UTF-8 version-control
|
|
628
|
+
# Output: "Versão atual: 1.0.0"
|
|
629
|
+
# Output: "Deseja atualizar a versão? (s/n):"
|
|
630
|
+
|
|
631
|
+
# Sistema em inglês
|
|
632
|
+
LANG=en_US.UTF-8 version-control
|
|
633
|
+
# Output: "Current version: 1.0.0"
|
|
634
|
+
# Output: "Update version? (y/n):"
|
|
635
|
+
|
|
636
|
+
# Sistema em espanhol
|
|
637
|
+
LANG=es_ES.UTF-8 version-control
|
|
638
|
+
# Output: "Versión actual: 1.0.0"
|
|
639
|
+
# Output: "¿Actualizar versión? (s/n):"
|
|
640
|
+
|
|
641
|
+
# Sistema em francês
|
|
642
|
+
LANG=fr_FR.UTF-8 version-control
|
|
643
|
+
# Output: "Version actuelle: 1.0.0"
|
|
644
|
+
# Output: "Mettre à jour la version? (o/n):"
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
### Idiomas Não Suportados
|
|
648
|
+
|
|
649
|
+
Se o idioma do sistema não for um dos 4 suportados, a ferramenta **automaticamente usa inglês** como fallback.
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
# Sistema em alemão (não suportado)
|
|
653
|
+
LANG=de_DE.UTF-8 version-control
|
|
654
|
+
# Output em inglês: "Current version: 1.0.0"
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
## �🎨 Palavras-chave Reconhecidas
|
|
658
|
+
|
|
659
|
+
### Breaking Changes (MAJOR)
|
|
660
|
+
|
|
661
|
+
- `breaking`, `break`
|
|
662
|
+
- `incompatível`, `incompatible`
|
|
663
|
+
- `remove`, `remov`, `delete`, `delet`
|
|
664
|
+
- `refactor completo`, `reescrita`, `rewrite`
|
|
665
|
+
|
|
666
|
+
### Novas Funcionalidades (MINOR)
|
|
667
|
+
|
|
668
|
+
- `add`, `adicion`
|
|
669
|
+
- `nova`, `novo`, `new`
|
|
670
|
+
- `feature`, `implement`
|
|
671
|
+
- `criar`, `create`, `funcionalidade`
|
|
672
|
+
|
|
673
|
+
### Correções (PATCH)
|
|
674
|
+
|
|
675
|
+
- `fix`, `corrig`
|
|
676
|
+
- `bug`, `erro`, `error`
|
|
677
|
+
- `ajust`, `ajeit`, `pequen`
|
|
678
|
+
- `minor change`
|
|
679
|
+
|
|
680
|
+
## 🤝 Contribuindo
|
|
681
|
+
|
|
682
|
+
Contribuições são bem-vindas! Sinta-se à vontade para:
|
|
683
|
+
|
|
684
|
+
1. Fazer fork do projeto
|
|
685
|
+
2. Criar uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
|
|
686
|
+
3. Commit suas mudanças (`git commit -m 'feat: add some AmazingFeature'`)
|
|
687
|
+
4. Push para a branch (`git push origin feature/AmazingFeature`)
|
|
688
|
+
5. Abrir um Pull Request
|
|
689
|
+
|
|
690
|
+
## 📄 Licença
|
|
691
|
+
|
|
692
|
+
Este projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.
|
|
693
|
+
|
|
694
|
+
## 👤 Autor
|
|
695
|
+
|
|
696
|
+
**Ridio Ricardo**
|
|
697
|
+
|
|
698
|
+
- GitHub: [@ridioricardo](https://github.com/ridioricardo)
|
|
699
|
+
|
|
700
|
+
## 🙏 Agradecimentos
|
|
701
|
+
|
|
702
|
+
- Inspirado nas melhores práticas de versionamento semântico
|
|
703
|
+
- Construído com TypeScript para melhor experiência de desenvolvimento
|
|
704
|
+
- Baseado nas especificações do [Semantic Versioning 2.0.0](https://semver.org/)
|
|
705
|
+
|
|
706
|
+
---
|
|
707
|
+
|
|
708
|
+
⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!
|