herdux-cli 0.5.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -247
- package/README.pt-BR.md +169 -221
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +3 -1
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/cloud.d.ts +3 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +322 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +3 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/docker.d.ts +3 -0
- package/dist/commands/docker.d.ts.map +1 -0
- package/dist/commands/docker.js +106 -0
- package/dist/commands/docker.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/drop.d.ts.map +1 -1
- package/dist/commands/drop.js +3 -1
- package/dist/commands/drop.js.map +1 -1
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +29 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +33 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/version.d.ts.map +1 -1
- package/dist/commands/version.js +26 -16
- package/dist/commands/version.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/cloud/cloud-credential.d.ts +4 -0
- package/dist/infra/cloud/cloud-credential.d.ts.map +1 -0
- package/dist/infra/cloud/cloud-credential.js +16 -0
- package/dist/infra/cloud/cloud-credential.js.map +1 -0
- package/dist/infra/cloud/s3.service.d.ts +23 -0
- package/dist/infra/cloud/s3.service.d.ts.map +1 -0
- package/dist/infra/cloud/s3.service.js +114 -0
- package/dist/infra/cloud/s3.service.js.map +1 -0
- package/dist/infra/config/config.service.d.ts +11 -0
- package/dist/infra/config/config.service.d.ts.map +1 -1
- package/dist/infra/config/config.service.js +16 -0
- package/dist/infra/config/config.service.js.map +1 -1
- package/dist/infra/docker/docker.service.d.ts +14 -0
- package/dist/infra/docker/docker.service.d.ts.map +1 -0
- package/dist/infra/docker/docker.service.js +83 -0
- package/dist/infra/docker/docker.service.js.map +1 -0
- package/dist/infra/engines/inspect-backup.d.ts +13 -0
- package/dist/infra/engines/inspect-backup.d.ts.map +1 -0
- package/dist/infra/engines/inspect-backup.js +97 -0
- package/dist/infra/engines/inspect-backup.js.map +1 -0
- package/dist/infra/engines/mysql/mysql.engine.d.ts +1 -1
- package/dist/infra/engines/mysql/mysql.engine.d.ts.map +1 -1
- package/dist/infra/engines/mysql/mysql.engine.js +4 -1
- package/dist/infra/engines/mysql/mysql.engine.js.map +1 -1
- package/dist/infra/engines/resolve-connection.d.ts +17 -0
- package/dist/infra/engines/resolve-connection.d.ts.map +1 -1
- package/dist/infra/engines/resolve-connection.js +4 -4
- package/dist/infra/engines/resolve-connection.js.map +1 -1
- package/package.json +3 -1
package/README.pt-BR.md
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
<img src=".github/assets/logo.svg" alt="Herdux banner" style="max-width: 100%; width: 600px;" />
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Herdux — Database Workflow CLI
|
|
12
12
|
|
|
13
13
|
Uma CLI rápida e interativa que remove a fricção dos workflows diários com bancos de dados locais, especialmente ao lidar com múltiplas instâncias e grandes datasets.
|
|
14
14
|
|
|
15
|
-

|
|
16
16
|

|
|
17
17
|

|
|
18
18
|

|
|
@@ -23,27 +23,21 @@ Uma CLI rápida e interativa que remove a fricção dos workflows diários com b
|
|
|
23
23
|
|
|
24
24
|
> Otimizado para ambientes locais e de desenvolvimento. O uso em produção é suportado com configuração explícita.
|
|
25
25
|
|
|
26
|
-
<!-- <p align="center">
|
|
27
|
-
<img src=".github/herdux.gif" alt="herdux terminal gif" width="1220" />
|
|
28
|
-
</p> -->
|
|
29
|
-
|
|
30
26
|
---
|
|
31
27
|
|
|
32
|
-
##
|
|
28
|
+
## Início Rápido
|
|
33
29
|
|
|
34
30
|
```bash
|
|
35
31
|
npm install -g herdux-cli
|
|
36
32
|
|
|
37
|
-
#
|
|
33
|
+
# Use 'herdux' ou o alias mais curto 'hdx'
|
|
38
34
|
hdx doctor
|
|
39
35
|
herdux list
|
|
40
36
|
```
|
|
41
37
|
|
|
42
|
-
É só isso. Você já está gerenciando bancos de dados.
|
|
43
|
-
|
|
44
38
|
---
|
|
45
39
|
|
|
46
|
-
##
|
|
40
|
+
## Engines Suportadas
|
|
47
41
|
|
|
48
42
|
| Engine | Status | Ferramentas Cliente Necessárias |
|
|
49
43
|
| ---------- | ------ | ------------------------------- |
|
|
@@ -51,33 +45,22 @@ herdux list
|
|
|
51
45
|
| MySQL | ✅ | `mysql`, `mysqldump` |
|
|
52
46
|
| SQLite | ✅ | `sqlite3` |
|
|
53
47
|
|
|
54
|
-
|
|
48
|
+
Use `--engine <nome>` ou configure a engine em um perfil salvo. PostgreSQL é o padrão.
|
|
55
49
|
|
|
56
50
|
```bash
|
|
57
|
-
# PostgreSQL (padrão)
|
|
58
|
-
herdux list
|
|
59
|
-
herdux
|
|
60
|
-
|
|
61
|
-
# MySQL
|
|
62
|
-
herdux --engine mysql list
|
|
63
|
-
herdux --engine mysql create mydb
|
|
64
|
-
|
|
65
|
-
# SQLite (baseado em arquivos, sem servidor)
|
|
66
|
-
herdux --engine sqlite list
|
|
67
|
-
herdux --engine sqlite create mydb
|
|
68
|
-
|
|
69
|
-
# Ou salve no perfil e esqueça
|
|
70
|
-
herdux config add mysql-local --port 3306 --user root --password secret --engine mysql
|
|
71
|
-
herdux list -s mysql-local
|
|
51
|
+
herdux list # PostgreSQL (padrão)
|
|
52
|
+
herdux --engine mysql list # MySQL
|
|
53
|
+
herdux --engine sqlite list # SQLite (baseado em arquivos, sem servidor)
|
|
54
|
+
herdux list -s meu-perfil # Usando um perfil de servidor salvo
|
|
72
55
|
```
|
|
73
56
|
|
|
74
57
|
---
|
|
75
58
|
|
|
76
59
|
## Por que Herdux?
|
|
77
60
|
|
|
78
|
-
Gerenciar bancos de dados locais
|
|
61
|
+
Gerenciar bancos de dados locais por meio de binários brutos é repetitivo, propenso a erros e diferente para cada engine.
|
|
79
62
|
|
|
80
|
-
|
|
63
|
+
**Antes:**
|
|
81
64
|
|
|
82
65
|
```bash
|
|
83
66
|
# Backup PostgreSQL
|
|
@@ -86,15 +69,14 @@ pg_dump -U postgres -h localhost -p 5416 -Fc -f ./backups/mydb.dump mydb
|
|
|
86
69
|
# Backup MySQL
|
|
87
70
|
mysqldump -u root -h localhost -P 3306 -p mydb > ./backups/mydb.sql
|
|
88
71
|
|
|
89
|
-
# Dropar manualmente, restaurar, verificar ferramentas...
|
|
90
72
|
# Flags diferentes, ferramentas diferentes, memória muscular diferente para cada engine.
|
|
91
73
|
```
|
|
92
74
|
|
|
93
|
-
|
|
75
|
+
**Depois:**
|
|
94
76
|
|
|
95
77
|
```bash
|
|
96
78
|
herdux backup mydb --drop --yes # Backup + drop em um comando
|
|
97
|
-
herdux restore ./backups/mydb.dump --db mydb #
|
|
79
|
+
herdux restore ./backups/mydb.dump --db mydb # Detecta formato, cria DB se necessário
|
|
98
80
|
herdux clean # Multi-seleção e batch-drop de bancos
|
|
99
81
|
herdux doctor # Verificação completa do sistema
|
|
100
82
|
```
|
|
@@ -103,80 +85,23 @@ Mesmos comandos. Qualquer engine. Menos flags. Menos erros. Zero fadiga de termi
|
|
|
103
85
|
|
|
104
86
|
---
|
|
105
87
|
|
|
106
|
-
##
|
|
107
|
-
|
|
108
|
-
O **Herdux** foi construído _por desenvolvedores, para desenvolvedores_.
|
|
109
|
-
|
|
110
|
-
Ele nasceu da frustração diária de ter que constantemente restaurar backups para testar um estado específico, dropar bancos corrompidos durante o desenvolvimento e lidar com binários crus de bancos de dados toda hora.
|
|
111
|
-
|
|
112
|
-
Ele é especificamente projetado para desenvolvedores que:
|
|
113
|
-
|
|
114
|
-
- Gerenciam infraestruturas locais e precisam verificar o tamanho dos discos antes de popular novos bancos.
|
|
115
|
-
- Querem clonar, popular (seed) e resetar bancos de dados rapidamente sem precisar ler documentações complexas.
|
|
116
|
-
- Precisam de fluxos seguros de backup & restore que não dependam de scripts bash frágeis.
|
|
117
|
-
- Preferem ferramentas focadas no terminal (terminal-first).
|
|
118
|
-
- Querem resolução previsível de conexões sem mágicas ocultas.
|
|
119
|
-
- Trabalham com **múltiplas engines de banco de dados** (PostgreSQL, MySQL, SQLite) e querem uma interface unificada.
|
|
120
|
-
|
|
121
|
-
Se você gerencia bancos de dados localmente e compartilha dessa dor, o Herdux foi criado para você.
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## 🚀 Funcionalidades Principais
|
|
126
|
-
|
|
127
|
-
- **🔌 Suporte Multi-Engine** — Suporte de primeira classe para PostgreSQL, MySQL e SQLite. Mesmos comandos, mesmo workflow, qualquer engine.
|
|
128
|
-
- **📋 Listagem Inteligente** — Estratégia otimizada para clusters massivos. Flag opcional `--size` para análise de uso de disco, ordenado do maior para o menor.
|
|
129
|
-
- **💾 Backup & Restore Inteligente** — Suporta formatos Custom (`.dump`) e Plain (`.sql`). Detecta automaticamente a ferramenta correta para restauração.
|
|
130
|
-
- **🧹 Limpeza em Massa** — Multi-seleção de bancos, backup opcional e batch-drop. Recupere espaço em disco instantaneamente.
|
|
131
|
-
- **🩺 Diagnóstico do Sistema** — Verificação completa de saúde com um único comando: binários, autenticação e conectividade.
|
|
132
|
-
- **⚙️ Perfis Persistentes** — Salve configurações de servidor nomeadas com tipo de engine. Alterne entre ambientes com `-s pg16`.
|
|
133
|
-
- **🎯 Resolução Inteligente de Conexão e Engine** — Flags CLI explícitas → perfis → padrões salvos → auto-descoberta. Sempre previsível.
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
## 💡 Filosofia
|
|
138
|
-
|
|
139
|
-
**Herdux** combina _herd_ (manada/rebanho) e _UX_ — entregando uma melhor Developer Experience ao gerenciar seus clusters de bancos de dados. O nome reflete nosso foco em melhorar a experiência de desenvolvimento ao gerenciar "manadas" de bancos.
|
|
140
|
-
|
|
141
|
-
O **Herdux** segue três princípios:
|
|
142
|
-
|
|
143
|
-
- **Segurança primeiro** — Nunca apaga dados sem confirmação explícita ou um backup verificado.
|
|
144
|
-
- **Explícito sobre implícito** — A resolução de conexão e engine segue uma prioridade estrita e documentada. Sem mágica.
|
|
145
|
-
- **Otimização de workflow** — Cada comando é projetado para te salvar de tarefas repetitivas no terminal.
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## 🔒 Segurança
|
|
150
|
-
|
|
151
|
-
O **Herdux** trata operações destrutivas com cuidado:
|
|
152
|
-
|
|
153
|
-
- **Nunca dropa um banco** sem confirmação explícita
|
|
154
|
-
- **Aborta toda a operação** se um backup de segurança falhar durante o `herdux clean`
|
|
155
|
-
- **Valida códigos de saída das ferramentas de backup** antes de considerar um backup bem-sucedido
|
|
156
|
-
- **Requer a flag `--drop`** intencionalmente — dropar nunca é o padrão
|
|
157
|
-
- **`--yes` deve ser combinado com `--drop`** — não é possível pular confirmação sozinho
|
|
158
|
-
|
|
159
|
-
> Se você solicitar um backup antes de dropar e esse backup falhar, o **Herdux** para imediatamente. Nenhum dado é perdido.
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## 🧩 Requisitos
|
|
88
|
+
## Requisitos
|
|
164
89
|
|
|
165
90
|
- **Node.js** 18 ou superior
|
|
166
|
-
- **Para PostgreSQL:** `psql`, `pg_dump`, `pg_restore` instalados e
|
|
167
|
-
- **Para MySQL:** `mysql`, `mysqldump` instalados e
|
|
168
|
-
- **Para SQLite:** `sqlite3` instalado e
|
|
91
|
+
- **Para PostgreSQL:** `psql`, `pg_dump`, `pg_restore` instalados e no `PATH`
|
|
92
|
+
- **Para MySQL:** `mysql`, `mysqldump` instalados e no `PATH`
|
|
93
|
+
- **Para SQLite:** `sqlite3` instalado e no `PATH`
|
|
169
94
|
|
|
170
95
|
> [!TIP]
|
|
171
|
-
> Execute `herdux doctor` após a instalação para verificar se tudo está configurado corretamente.
|
|
96
|
+
> Execute `herdux doctor` após a instalação para verificar se tudo está configurado corretamente.
|
|
172
97
|
|
|
173
98
|
---
|
|
174
99
|
|
|
175
|
-
##
|
|
100
|
+
## Instalação
|
|
176
101
|
|
|
177
102
|
**npm (recomendado):**
|
|
178
103
|
|
|
179
|
-
>
|
|
104
|
+
> **Importante:** Use a flag `-g` para que a CLI fique disponível em qualquer lugar no terminal.
|
|
180
105
|
|
|
181
106
|
```bash
|
|
182
107
|
npm install -g herdux-cli
|
|
@@ -194,9 +119,7 @@ npm link
|
|
|
194
119
|
|
|
195
120
|
---
|
|
196
121
|
|
|
197
|
-
##
|
|
198
|
-
|
|
199
|
-
Todos os comandos funcionam com PostgreSQL, MySQL e SQLite. Use `--engine mysql` ou `--engine sqlite`, ou configure a engine no seu perfil de servidor.
|
|
122
|
+
## Comandos
|
|
200
123
|
|
|
201
124
|
### `herdux version`
|
|
202
125
|
|
|
@@ -209,11 +132,7 @@ herdux --engine mysql version
|
|
|
209
132
|
|
|
210
133
|
### `herdux doctor`
|
|
211
134
|
|
|
212
|
-
Executa uma verificação completa
|
|
213
|
-
|
|
214
|
-
- Verifica se as ferramentas cliente necessárias estão instaladas e acessíveis (específicas por engine)
|
|
215
|
-
- Tenta uma conexão real usando a configuração resolvida
|
|
216
|
-
- Testa autenticação contra o servidor alvo
|
|
135
|
+
Executa uma verificação completa do sistema: verifica ferramentas cliente, testa conectividade e valida autenticação.
|
|
217
136
|
|
|
218
137
|
```bash
|
|
219
138
|
herdux doctor
|
|
@@ -222,17 +141,17 @@ herdux --engine mysql doctor
|
|
|
222
141
|
|
|
223
142
|
---
|
|
224
143
|
|
|
225
|
-
###
|
|
144
|
+
### `herdux list`
|
|
226
145
|
|
|
227
146
|
Lista todos os bancos de dados no servidor conectado.
|
|
228
147
|
|
|
229
148
|
```bash
|
|
230
|
-
herdux list #
|
|
231
|
-
herdux ls --size # Inclui tamanho em disco, ordenado do maior
|
|
149
|
+
herdux list # Nome, owner, encoding
|
|
150
|
+
herdux ls --size # Inclui tamanho em disco, ordenado do maior para o menor
|
|
232
151
|
```
|
|
233
152
|
|
|
234
153
|
> [!NOTE]
|
|
235
|
-
> A flag `--size` calcula o uso físico de disco. Em servidores com dezenas de bancos
|
|
154
|
+
> A flag `--size` calcula o uso físico de disco. Em servidores com dezenas de bancos de vários GBs, isso pode levar alguns minutos.
|
|
236
155
|
|
|
237
156
|
---
|
|
238
157
|
|
|
@@ -241,8 +160,8 @@ herdux ls --size # Inclui tamanho em disco, ordenado do maior → menor
|
|
|
241
160
|
Cria um novo banco de dados.
|
|
242
161
|
|
|
243
162
|
```bash
|
|
244
|
-
herdux create
|
|
245
|
-
herdux --engine mysql create
|
|
163
|
+
herdux create meu_novo_banco
|
|
164
|
+
herdux --engine mysql create meu_novo_banco
|
|
246
165
|
```
|
|
247
166
|
|
|
248
167
|
### `herdux drop <nome>`
|
|
@@ -250,209 +169,238 @@ herdux --engine mysql create meu_novo_db
|
|
|
250
169
|
Remove um banco de dados com confirmação interativa.
|
|
251
170
|
|
|
252
171
|
```bash
|
|
253
|
-
herdux drop
|
|
172
|
+
herdux drop banco_antigo
|
|
254
173
|
```
|
|
255
174
|
|
|
256
175
|
---
|
|
257
176
|
|
|
258
|
-
###
|
|
259
|
-
|
|
260
|
-
Trabalhando com bancos de desenvolvimento cheios de seeds? Precisa recuperar espaço em disco rápido?
|
|
177
|
+
### `herdux clean`
|
|
261
178
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
- **Multi-seleção** de bancos a partir de uma interface interativa com checkboxes
|
|
265
|
-
- **Gerar backups de segurança opcionais** antes de qualquer ação destrutiva
|
|
266
|
-
- **Batch-drop** de todos os bancos selecionados com segurança
|
|
267
|
-
- **Abortar imediatamente** se qualquer backup falhar, prevenindo perda de dados
|
|
179
|
+
Limpeza em massa interativa: selecione vários bancos, gere backups de segurança e remova-os em lote.
|
|
268
180
|
|
|
269
181
|
```bash
|
|
270
182
|
herdux clean
|
|
271
183
|
```
|
|
272
184
|
|
|
273
|
-
|
|
185
|
+
Aborta imediatamente se algum backup de segurança falhar. Nenhum dado é removido sem um backup confirmado.
|
|
274
186
|
|
|
275
187
|
---
|
|
276
188
|
|
|
277
|
-
###
|
|
189
|
+
### `herdux backup <database>`
|
|
278
190
|
|
|
279
|
-
|
|
191
|
+
Cria um backup com timestamp em `~/.herdux/backups/` por padrão.
|
|
280
192
|
|
|
281
193
|
```bash
|
|
282
|
-
herdux backup mydb
|
|
283
|
-
herdux backup mydb --format plain
|
|
284
|
-
herdux backup mydb --drop
|
|
285
|
-
herdux backup mydb --drop --yes
|
|
286
|
-
herdux backup mydb -o ./meus-backups
|
|
194
|
+
herdux backup mydb # Formato nativo da engine (.dump para PG, .db para SQLite, .sql para MySQL)
|
|
195
|
+
herdux backup mydb --format plain # SQL puro (.sql)
|
|
196
|
+
herdux backup mydb --drop # Backup e depois pergunta se quer dropar
|
|
197
|
+
herdux backup mydb --drop --yes # Backup + drop sem confirmacao
|
|
198
|
+
herdux backup mydb -o ./meus-backups # Diretorio de saida personalizado
|
|
199
|
+
herdux backup mydb --upload backups/ # Backup e upload para o prefixo backups/ no S3
|
|
200
|
+
herdux backup mydb --upload backups/ --no-keep # Backup, upload e deleta o arquivo local
|
|
287
201
|
```
|
|
288
202
|
|
|
289
|
-
|
|
|
290
|
-
| --------------------- |
|
|
291
|
-
| `-F, --format <tipo>` | `custom` (
|
|
292
|
-
| `-d, --drop` | Pergunta se
|
|
293
|
-
| `-y, --yes` | Pula
|
|
294
|
-
| `-o, --output <dir>` |
|
|
203
|
+
| Opcao | Descricao |
|
|
204
|
+
| --------------------- | ------------------------------------------------------------------- |
|
|
205
|
+
| `-F, --format <tipo>` | `custom` (padrao, nativo da engine) ou `plain` (SQL) |
|
|
206
|
+
| `-d, --drop` | Pergunta se quer dropar o banco apos o backup bem-sucedido |
|
|
207
|
+
| `-y, --yes` | Pula a confirmacao de drop (requer `--drop`) |
|
|
208
|
+
| `-o, --output <dir>` | Diretorio de saida (padrao: `~/.herdux/backups`) |
|
|
209
|
+
| `--upload [prefix]` | Faz upload do backup para o S3 apos a criacao (requer cloud config) |
|
|
210
|
+
| `--no-keep` | Deleta o arquivo local apos upload bem-sucedido (requer `--upload`) |
|
|
295
211
|
|
|
296
212
|
---
|
|
297
213
|
|
|
298
|
-
###
|
|
299
|
-
|
|
300
|
-
Restaura um banco de dados a partir de um arquivo de backup. Detecta automaticamente o formato:
|
|
214
|
+
### `herdux restore <arquivo>`
|
|
301
215
|
|
|
302
|
-
|
|
303
|
-
- `.dump` ou qualquer outra extensão → usa a ferramenta de restore apropriada
|
|
216
|
+
Restaura um banco de dados a partir de um arquivo de backup. Detecta automaticamente o formato pela extensão.
|
|
304
217
|
|
|
305
218
|
```bash
|
|
306
219
|
herdux restore ./backups/mydb_2026-02-23.dump --db mydb
|
|
307
220
|
herdux restore ./exports/data.sql --db mydb
|
|
221
|
+
herdux restore archive.bkp --db mydb --format custom # Forçar formato
|
|
308
222
|
```
|
|
309
223
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
```bash
|
|
313
|
-
herdux restore arquivo.bkp --db mydb --format custom
|
|
314
|
-
herdux restore script.txt --db mydb --format plain
|
|
315
|
-
```
|
|
224
|
+
O banco de dados é criado automaticamente se não existir.
|
|
316
225
|
|
|
317
226
|
> [!NOTE]
|
|
318
|
-
> Ao restaurar
|
|
227
|
+
> Ao restaurar dumps de ambientes gerenciados (ex: AWS RDS), o Herdux configura a ferramenta de restauração para ignorar ownership e ACLs, evitando erros por roles de produção ausentes localmente.
|
|
319
228
|
|
|
320
229
|
---
|
|
321
230
|
|
|
322
|
-
|
|
231
|
+
### `herdux inspect <arquivo>`
|
|
323
232
|
|
|
324
|
-
|
|
233
|
+
Inspeciona o conteúdo de um arquivo de backup sem se conectar ao banco de dados. Funciona completamente offline.
|
|
325
234
|
|
|
326
|
-
|
|
235
|
+
| Extensão | Output |
|
|
236
|
+
| ----------------- | ------------------------------------------------------------------------------ |
|
|
237
|
+
| `.dump` | Formato custom do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
|
|
238
|
+
| `.tar` | Formato tar do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
|
|
239
|
+
| `.sql` | SQL puro (qualquer engine): declarações CREATE TABLE, VIEW, INDEX, SEQUENCE |
|
|
240
|
+
| `.db` / `.sqlite` | Arquivo SQLite: schema (`sqlite3 .schema`) |
|
|
327
241
|
|
|
328
242
|
```bash
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
243
|
+
hdx inspect backup.dump # Table of Contents de um dump custom do PostgreSQL
|
|
244
|
+
hdx inspect backup.tar # Table of Contents de um dump tar do PostgreSQL
|
|
245
|
+
hdx inspect export.sql # CREATE statements extraídos de SQL puro
|
|
246
|
+
hdx inspect mydb.db # Schema do SQLite
|
|
333
247
|
```
|
|
334
248
|
|
|
335
|
-
|
|
249
|
+
---
|
|
336
250
|
|
|
337
|
-
|
|
251
|
+
### `herdux docker`
|
|
252
|
+
|
|
253
|
+
Gerencia containers de banco de dados rodando via Docker. Nao requer conexao ativa com o banco.
|
|
338
254
|
|
|
339
255
|
```bash
|
|
340
|
-
#
|
|
341
|
-
|
|
342
|
-
|
|
256
|
+
hdx docker list # Lista containers postgres/mysql em execucao
|
|
257
|
+
hdx docker list --all # Inclui containers parados
|
|
258
|
+
hdx docker start pg-dev # Inicia um container parado
|
|
259
|
+
hdx docker stop pg-dev # Para um container em execucao
|
|
260
|
+
hdx docker stop pg-dev --remove # Para e remove o container
|
|
261
|
+
```
|
|
343
262
|
|
|
344
|
-
|
|
345
|
-
herdux config add mysql-dev --port 3306 --user root --password secret --engine mysql
|
|
263
|
+
---
|
|
346
264
|
|
|
347
|
-
|
|
348
|
-
herdux config add staging --host 192.168.0.10 --port 5432
|
|
349
|
-
```
|
|
265
|
+
### `herdux cloud`
|
|
350
266
|
|
|
351
|
-
|
|
267
|
+
Gerencia arquivos de backup em cloud storage S3-compatible (AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces e outros).
|
|
352
268
|
|
|
353
269
|
```bash
|
|
354
|
-
|
|
355
|
-
|
|
270
|
+
# Configurar
|
|
271
|
+
hdx cloud config bucket meu-bucket
|
|
272
|
+
hdx cloud config region us-east-1
|
|
273
|
+
hdx cloud config access-key AKIAIO...
|
|
274
|
+
hdx cloud config secret-key wJalrX...
|
|
275
|
+
hdx cloud config endpoint https://account.r2.cloudflarestorage.com # opcional, para provedores nao-AWS
|
|
276
|
+
|
|
277
|
+
# Navegar e gerenciar backups no bucket
|
|
278
|
+
hdx cloud list # Modo diretorio: lista filhos imediatos na raiz
|
|
279
|
+
hdx cloud list backups/mydb/ # Lista filhos imediatos no caminho (posicional)
|
|
280
|
+
hdx cloud list --prefix backups/mydb/ # Mesmo que acima (forma de flag)
|
|
281
|
+
hdx cloud list --recursive # Lista todos os objetos no bucket
|
|
282
|
+
hdx cloud list backups/ --recursive # Lista todos os objetos sob um prefixo
|
|
283
|
+
hdx cloud download backups/mydb_2026-03-03.dump # Salva em ~/.herdux/backups/
|
|
284
|
+
hdx cloud download backups/mydb_2026-03-03.dump -o /tmp/ # Salva em diretorio personalizado
|
|
285
|
+
hdx cloud upload ./mydb_2026-03-03.dump # Envia arquivo local para a raiz do bucket
|
|
286
|
+
hdx cloud upload ./mydb_2026-03-03.dump --prefix backups/ # Envia sob um prefixo
|
|
287
|
+
hdx cloud delete backups/mydb_2026-03-03.dump # Verifica existencia e pede confirmacao
|
|
288
|
+
hdx cloud delete backups/mydb_2026-03-03.dump --yes
|
|
289
|
+
|
|
290
|
+
# Backup direto para o S3
|
|
291
|
+
hdx backup mydb --upload backups/ # Backup e upload para o prefixo backups/
|
|
292
|
+
hdx backup mydb --upload # Backup e upload para a raiz do bucket
|
|
293
|
+
hdx backup mydb --upload backups/ --no-keep # Backup, upload e deleta o arquivo local
|
|
294
|
+
|
|
295
|
+
# Restore direto do S3
|
|
296
|
+
hdx restore s3://meu-bucket/backups/mydb_2026-03-03.dump --db mydb
|
|
356
297
|
```
|
|
357
298
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
### Visualizar & Gerenciar Config
|
|
299
|
+
As credenciais tambem podem ser fornecidas via variaveis de ambiente (recomendado para CI/producao):
|
|
361
300
|
|
|
362
301
|
```bash
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
herdux config reset # Limpa toda a configuração
|
|
302
|
+
export AWS_ACCESS_KEY_ID=AKIAIO...
|
|
303
|
+
export AWS_SECRET_ACCESS_KEY=wJalrX...
|
|
304
|
+
export AWS_DEFAULT_REGION=us-east-1
|
|
367
305
|
```
|
|
368
306
|
|
|
369
307
|
---
|
|
370
308
|
|
|
371
|
-
##
|
|
372
|
-
|
|
373
|
-
Ao resolver como se conectar e qual engine usar, o **Herdux** segue uma ordem de prioridade estrita e previsível:
|
|
309
|
+
## Configuração e Perfis de Servidor
|
|
374
310
|
|
|
375
|
-
|
|
311
|
+
A configuração é armazenada em `~/.herdux/config.json`.
|
|
376
312
|
|
|
377
|
-
|
|
378
|
-
| ---------- | ---------------- | -------------------------------- |
|
|
379
|
-
| 1️⃣ | **Flag CLI** | `herdux --engine mysql list` |
|
|
380
|
-
| 2️⃣ | **Perfil** | Campo `engine` do perfil |
|
|
381
|
-
| 3️⃣ | **Padrão salvo** | `herdux config set engine mysql` |
|
|
382
|
-
| 4️⃣ | **Fallback** | `postgres` |
|
|
313
|
+
### Valores globais padrão
|
|
383
314
|
|
|
384
|
-
|
|
315
|
+
```bash
|
|
316
|
+
herdux config set engine postgres
|
|
317
|
+
herdux config set user postgres
|
|
318
|
+
herdux config set password minha_senha
|
|
319
|
+
herdux config set port 5432
|
|
320
|
+
```
|
|
385
321
|
|
|
386
|
-
|
|
387
|
-
| ---------- | ---------------------- | ------------------------------------------------------- |
|
|
388
|
-
| 1️⃣ | **Flags CLI** | `herdux list --port 5417` |
|
|
389
|
-
| 2️⃣ | **Perfil de servidor** | `herdux list -s pg16` |
|
|
390
|
-
| 3️⃣ | **Padrões salvos** | `herdux config set port 5432` |
|
|
391
|
-
| 4️⃣ | **Auto-descoberta** | Escaneia portas comuns; pergunta se encontrar múltiplas |
|
|
322
|
+
### Perfis de servidor nomeados
|
|
392
323
|
|
|
393
|
-
|
|
324
|
+
```bash
|
|
325
|
+
herdux config add pg16 --port 5416
|
|
326
|
+
herdux config add pg17 --port 5417 --user admin
|
|
327
|
+
herdux config add mysql-dev --port 3306 --user root --password secret --engine mysql
|
|
328
|
+
herdux config add staging --host 192.168.0.10 --port 5432
|
|
329
|
+
```
|
|
394
330
|
|
|
395
|
-
|
|
331
|
+
Use perfis com a flag `-s`:
|
|
396
332
|
|
|
397
|
-
|
|
333
|
+
```bash
|
|
334
|
+
herdux list -s pg16
|
|
335
|
+
herdux backup mydb -s mysql-dev
|
|
336
|
+
```
|
|
398
337
|
|
|
399
|
-
|
|
400
|
-
É um acelerador de workflow para desenvolvedores que vivem no terminal.
|
|
338
|
+
### Gerenciar configuração
|
|
401
339
|
|
|
402
|
-
|
|
340
|
+
```bash
|
|
341
|
+
herdux config list # Mostrar todas as configurações e perfis
|
|
342
|
+
herdux config get port # Obter um valor específico
|
|
343
|
+
herdux config rm pg16 # Remover um perfil
|
|
344
|
+
herdux config reset # Limpar toda a configuração
|
|
345
|
+
```
|
|
403
346
|
|
|
404
347
|
---
|
|
405
348
|
|
|
406
|
-
##
|
|
349
|
+
## Resolução de Conexão e Engine
|
|
407
350
|
|
|
408
|
-
|
|
409
|
-
- Sem mágicas destrutivas.
|
|
410
|
-
- Resolução determinística de conexão e engine.
|
|
411
|
-
- Comandos explícitos e combináveis.
|
|
412
|
-
- Engine-agnostic: mesma interface, qualquer banco de dados.
|
|
351
|
+
O Herdux segue uma prioridade estrita e previsível ao resolver como se conectar.
|
|
413
352
|
|
|
414
|
-
|
|
353
|
+
**Prioridade de engine:**
|
|
415
354
|
|
|
416
|
-
|
|
355
|
+
| Prioridade | Fonte | Exemplo |
|
|
356
|
+
| ---------- | ------------ | -------------------------------- |
|
|
357
|
+
| 1 | Flag CLI | `herdux --engine mysql list` |
|
|
358
|
+
| 2 | Perfil | Campo `engine` do perfil |
|
|
359
|
+
| 3 | Padrão salvo | `herdux config set engine mysql` |
|
|
360
|
+
| 4 | Fallback | `postgres` |
|
|
417
361
|
|
|
418
|
-
|
|
362
|
+
**Prioridade de conexão:**
|
|
419
363
|
|
|
420
|
-
|
|
364
|
+
| Prioridade | Fonte | Exemplo |
|
|
365
|
+
| ---------- | -------------- | ------------------------------------------ |
|
|
366
|
+
| 1 | Flags CLI | `herdux list --port 5417` |
|
|
367
|
+
| 2 | Perfil | `herdux list -s pg16` |
|
|
368
|
+
| 3 | Padrões salvos | `herdux config set port 5432` |
|
|
369
|
+
| 4 | Auto-discovery | Escaneia portas comuns; pergunta se vários |
|
|
421
370
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
Consulte o [ROADMAP.md](./ROADMAP.md) para ver nossos planos futuros detalhados, incluindo integração com Docker e backups criptografados.
|
|
371
|
+
Input explícito sempre vence. Sem surpresas.
|
|
425
372
|
|
|
426
373
|
---
|
|
427
374
|
|
|
428
|
-
##
|
|
429
|
-
|
|
430
|
-
PRs são bem-vindas! Por favor, abra uma issue primeiro para discutir mudanças significativas.
|
|
375
|
+
## Contribuindo
|
|
431
376
|
|
|
432
377
|
```bash
|
|
433
378
|
git clone https://github.com/herdux/herdux-cli.git
|
|
434
379
|
cd herdux-cli
|
|
435
380
|
npm install
|
|
436
|
-
npm run dev
|
|
437
381
|
|
|
438
|
-
#
|
|
439
|
-
npm run test:
|
|
440
|
-
#
|
|
441
|
-
npm run test:e2e:
|
|
442
|
-
npm run test:e2e:
|
|
382
|
+
npm run test:unit # Testes unitários (238 testes, todas as engines)
|
|
383
|
+
npm run test:integration # Testes de integração
|
|
384
|
+
npm run test:e2e:pgsql # Testes E2E para PostgreSQL (requer Docker)
|
|
385
|
+
npm run test:e2e:mysql # Testes E2E para MySQL (requer Docker)
|
|
386
|
+
npm run test:e2e:sqlite # Testes E2E para SQLite (requer sqlite3)
|
|
443
387
|
```
|
|
444
388
|
|
|
389
|
+
O Herdux segue limites arquiteturais estritos: comandos são agnósticos de engine, engines encapsulam todo comportamento específico de banco, e todos os binários são isolados por adaptadores. Mantenha esses limites ao contribuir.
|
|
390
|
+
|
|
391
|
+
PRs são bem-vindos. Abra uma issue primeiro para mudanças maiores.
|
|
392
|
+
|
|
445
393
|
---
|
|
446
394
|
|
|
447
|
-
##
|
|
395
|
+
## Suporte
|
|
448
396
|
|
|
449
|
-
Se o
|
|
397
|
+
Se o Herdux te salvou horas de debugging e trabalho com bancos de dados, considere apoiar o projeto:
|
|
450
398
|
|
|
451
399
|
<a href="https://github.com/sponsors/eduardozaniboni" target="_blank"><img src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=for-the-badge&logo=github" alt="GitHub Sponsors"></a>
|
|
452
400
|
<a href="https://www.buymeacoffee.com/eduardozaniboni" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 28px !important;width: 100px !important;" ></a>
|
|
453
401
|
|
|
454
402
|
---
|
|
455
403
|
|
|
456
|
-
##
|
|
404
|
+
## Licença
|
|
457
405
|
|
|
458
406
|
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8J5D"}
|
package/dist/commands/backup.js
CHANGED
|
@@ -3,8 +3,11 @@ import ora from "ora";
|
|
|
3
3
|
import prompts from "prompts";
|
|
4
4
|
import { resolveEngineAndConnection } from "../infra/engines/resolve-connection.js";
|
|
5
5
|
import * as config from "../infra/config/config.service.js";
|
|
6
|
-
import {
|
|
6
|
+
import { resolveCloudCredentials } from "../infra/cloud/cloud-credential.js";
|
|
7
|
+
import { uploadFile } from "../infra/cloud/s3.service.js";
|
|
8
|
+
import { basename, join } from "path";
|
|
7
9
|
import { homedir } from "os";
|
|
10
|
+
import { unlinkSync } from "fs";
|
|
8
11
|
export function registerBackupCommand(program) {
|
|
9
12
|
program
|
|
10
13
|
.command("backup <database>")
|
|
@@ -15,11 +18,16 @@ Examples:
|
|
|
15
18
|
hdx backup mydb --output /tmp/backups
|
|
16
19
|
hdx backup mydb --format plain
|
|
17
20
|
hdx backup mydb --drop --yes # Backup then drop without confirmation
|
|
18
|
-
hdx backup mydb --engine mysql
|
|
21
|
+
hdx backup mydb --engine mysql
|
|
22
|
+
hdx backup mydb --upload backups/
|
|
23
|
+
hdx backup mydb --upload # Upload to bucket root
|
|
24
|
+
hdx backup mydb --upload --no-keep # Upload and delete local file`)
|
|
19
25
|
.option("-o, --output <dir>", "Output directory for the backup (overrides global config)")
|
|
20
26
|
.option("-d, --drop", "Ask to drop the database after a successful backup")
|
|
21
27
|
.option("-y, --yes", "Skip confirmation when dropping (requires --drop)")
|
|
22
28
|
.option("-F, --format <type>", "Backup format format (custom, plain)", "custom")
|
|
29
|
+
.option("-u, --upload [prefix]", "Upload backup to configured S3 bucket after backup")
|
|
30
|
+
.option("--no-keep", "Delete local backup after successful upload (requires --upload)")
|
|
23
31
|
.action(async (database, cmdOpts) => {
|
|
24
32
|
if (/[\s;|&`$<>(){}\\]/.test(database)) {
|
|
25
33
|
console.error(chalk.red(`\n✖ Invalid database name "${database}". Avoid spaces and special characters (; | & \` $ < > ( ) { } \\).\n`));
|
|
@@ -43,6 +51,25 @@ Examples:
|
|
|
43
51
|
const spinner = ora(`Generating backup for "${database}"...`).start();
|
|
44
52
|
const outputPath = await engine.backupDatabase(database, finalOutputDir, opts, cmdOpts.format);
|
|
45
53
|
spinner.succeed(`Backup saved at ${chalk.cyan(outputPath)}\n`);
|
|
54
|
+
if (cmdOpts.upload !== undefined) {
|
|
55
|
+
const cloud = config.getCloudConfig();
|
|
56
|
+
if (!cloud.bucket) {
|
|
57
|
+
console.error(chalk.red("✖ Bucket not configured. Run: hdx cloud config bucket NAME\n"));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const creds = resolveCloudCredentials(cloud);
|
|
61
|
+
const prefix = typeof cmdOpts.upload === "string" ? cmdOpts.upload : "";
|
|
62
|
+
const key = prefix
|
|
63
|
+
? `${prefix.replace(/\/$/, "")}/${basename(outputPath)}`
|
|
64
|
+
: basename(outputPath);
|
|
65
|
+
const uploadSpinner = ora(`Uploading to s3://${cloud.bucket}/${key}...`).start();
|
|
66
|
+
const s3Url = await uploadFile(outputPath, cloud.bucket, key, creds);
|
|
67
|
+
uploadSpinner.succeed(`Uploaded: ${chalk.cyan(s3Url)}\n`);
|
|
68
|
+
if (!cmdOpts.keep) {
|
|
69
|
+
unlinkSync(outputPath);
|
|
70
|
+
console.log(chalk.gray(` Local backup deleted.\n`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
46
73
|
if (cmdOpts.drop) {
|
|
47
74
|
let shouldDrop = cmdOpts.yes;
|
|
48
75
|
if (!shouldDrop) {
|