@followthecode/cli 1.2.4 → 1.2.7
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 +65 -0
- package/TESTING_INSTALLATION.md +344 -0
- package/bin/ftc +69 -0
- package/bin/ftc.js +77 -0
- package/bin/linux-x64/ftc.cli +0 -0
- package/bin/osx-x64/ftc.cli +0 -0
- package/bin/win-x64/ftc.cli.exe +0 -0
- package/package.json +24 -20
- package/scripts/README.md +58 -0
- package/scripts/copy-config.js +33 -0
- package/TESTING.md +0 -169
- package/TROUBLESHOOTING.md +0 -60
- package/scripts/fix-permissions.js +0 -58
package/README.md
CHANGED
|
@@ -98,6 +98,71 @@ docker run --rm -v "$PWD:/repo" ftc:latest collect code "/repo/meu-repo" --start
|
|
|
98
98
|
|
|
99
99
|
> **Dica:**
|
|
100
100
|
> - O volume `-v "$PWD:/repo"` (ou `%cd%:/repo` no Windows) permite que o container acesse seu repositório local.
|
|
101
|
+
|
|
102
|
+
## ⚠️ Problemas de Instalação
|
|
103
|
+
|
|
104
|
+
Se você encontrar problemas durante a instalação do CLI, como:
|
|
105
|
+
|
|
106
|
+
- Avisos sobre `node-domexception` deprecado
|
|
107
|
+
- Erros de permissão EPERM no Windows
|
|
108
|
+
- Problemas de limpeza de cache
|
|
109
|
+
|
|
110
|
+
Consulte o guia completo de troubleshooting: **[TROUBLESHOOTING_INSTALL.md](TROUBLESHOOTING_INSTALL.md)**
|
|
111
|
+
|
|
112
|
+
### Solução Rápida para Windows
|
|
113
|
+
|
|
114
|
+
Execute o script de correção como Administrador:
|
|
115
|
+
|
|
116
|
+
```powershell
|
|
117
|
+
# Abrir PowerShell como Administrador
|
|
118
|
+
.\scripts\fix-windows-permissions.ps1
|
|
119
|
+
|
|
120
|
+
# Ou com limpeza forçada
|
|
121
|
+
.\scripts\fix-windows-permissions.ps1 -Force
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 🧪 Testando a Instalação
|
|
125
|
+
|
|
126
|
+
Antes de publicar uma nova versão, é importante testar a instalação em diferentes ambientes.
|
|
127
|
+
|
|
128
|
+
### Testes Automatizados
|
|
129
|
+
|
|
130
|
+
#### Windows
|
|
131
|
+
```powershell
|
|
132
|
+
# Teste básico
|
|
133
|
+
npm run test-installation
|
|
134
|
+
|
|
135
|
+
# Teste com limpeza prévia
|
|
136
|
+
npm run test-installation:clean
|
|
137
|
+
|
|
138
|
+
# Teste com output detalhado
|
|
139
|
+
npm run test-installation:verbose
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
#### Linux/macOS
|
|
143
|
+
```bash
|
|
144
|
+
# Teste básico
|
|
145
|
+
npm run test-installation:linux
|
|
146
|
+
|
|
147
|
+
# Teste com limpeza prévia
|
|
148
|
+
npm run test-installation:linux:clean
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Testes Manuais
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Criar repositório de teste
|
|
155
|
+
mkdir test-repo && cd test-repo
|
|
156
|
+
git init && echo "# Test" > README.md
|
|
157
|
+
git add . && git commit -m "Initial"
|
|
158
|
+
cd ..
|
|
159
|
+
|
|
160
|
+
# Testar funcionalidades
|
|
161
|
+
bin/ftc collect code ./test-repo --json
|
|
162
|
+
bin/ftc collect code https://github.com/microsoft/vscode.git --json
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Para mais detalhes, consulte: **[TESTING_INSTALLATION.md](TESTING_INSTALLATION.md)**
|
|
101
166
|
> - O comando `code "/repo/meu-repo"` deve apontar para o caminho dentro do container.
|
|
102
167
|
|
|
103
168
|
## Uso como ferramenta global (dotnet tool)
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
# 🧪 Guia de Teste de Instalação - FTC CLI
|
|
2
|
+
|
|
3
|
+
Este guia explica como testar a instalação do FTC CLI antes de publicar uma nova versão.
|
|
4
|
+
|
|
5
|
+
## 🎯 Objetivo
|
|
6
|
+
|
|
7
|
+
Garantir que o CLI funcione corretamente em diferentes ambientes antes da publicação, evitando problemas para os usuários.
|
|
8
|
+
|
|
9
|
+
## 📋 Pré-requisitos
|
|
10
|
+
|
|
11
|
+
Antes de executar os testes, certifique-se de ter instalado:
|
|
12
|
+
|
|
13
|
+
- **Node.js** (versão 14 ou superior)
|
|
14
|
+
- **npm** (versão 6 ou superior)
|
|
15
|
+
- **.NET 8 SDK**
|
|
16
|
+
- **Docker** (opcional, para testes Docker)
|
|
17
|
+
- **Git** (para clonar repositórios de teste)
|
|
18
|
+
|
|
19
|
+
## 🚀 Testes Automatizados
|
|
20
|
+
|
|
21
|
+
### Windows (PowerShell)
|
|
22
|
+
|
|
23
|
+
```powershell
|
|
24
|
+
# Teste básico
|
|
25
|
+
npm run test-installation
|
|
26
|
+
|
|
27
|
+
# Teste com limpeza prévia
|
|
28
|
+
npm run test-installation:clean
|
|
29
|
+
|
|
30
|
+
# Teste com output detalhado
|
|
31
|
+
npm run test-installation:verbose
|
|
32
|
+
|
|
33
|
+
# Teste pulando build (útil para testes rápidos)
|
|
34
|
+
npm run test-installation:skip-build
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Linux/macOS (Bash)
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Teste básico
|
|
41
|
+
npm run test:install:linux
|
|
42
|
+
|
|
43
|
+
# Teste WSL
|
|
44
|
+
npm run test:install:wsl
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Execução Direta dos Scripts
|
|
48
|
+
|
|
49
|
+
#### Windows
|
|
50
|
+
```powershell
|
|
51
|
+
# Executar diretamente
|
|
52
|
+
.\scripts\test-installation.ps1
|
|
53
|
+
|
|
54
|
+
# Com parâmetros
|
|
55
|
+
.\scripts\test-installation.ps1 -Clean -Verbose
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### Linux/macOS
|
|
59
|
+
```bash
|
|
60
|
+
# Tornar executável (se necessário)
|
|
61
|
+
chmod +x scripts/test-installation.sh
|
|
62
|
+
|
|
63
|
+
# Executar diretamente
|
|
64
|
+
./scripts/test-installation.sh
|
|
65
|
+
|
|
66
|
+
# Com parâmetros
|
|
67
|
+
./scripts/test-installation.sh --clean
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 🧪 O que os Testes Verificam
|
|
71
|
+
|
|
72
|
+
### 1. **Pré-requisitos**
|
|
73
|
+
- ✅ Node.js instalado e funcionando
|
|
74
|
+
- ✅ npm instalado e funcionando
|
|
75
|
+
- ✅ .NET SDK instalado e funcionando
|
|
76
|
+
|
|
77
|
+
### 2. **Build do Projeto**
|
|
78
|
+
- ✅ Compilação em modo Release
|
|
79
|
+
- ✅ Publicação para diferentes plataformas
|
|
80
|
+
- ✅ Geração de binários executáveis
|
|
81
|
+
|
|
82
|
+
### 3. **Package NPM**
|
|
83
|
+
- ✅ package.json válido
|
|
84
|
+
- ✅ Dependências instaladas
|
|
85
|
+
- ✅ Scripts npm funcionando
|
|
86
|
+
- ✅ Build para Windows/Linux/macOS
|
|
87
|
+
|
|
88
|
+
### 4. **Instalação Local**
|
|
89
|
+
- ✅ Binários criados corretamente
|
|
90
|
+
- ✅ Wrapper Node.js funcionando
|
|
91
|
+
- ✅ Executável .NET funcionando
|
|
92
|
+
- ✅ Arquivos de configuração presentes
|
|
93
|
+
|
|
94
|
+
### 5. **Instalação Global Simulada**
|
|
95
|
+
- ✅ Instalação em diretório temporário
|
|
96
|
+
- ✅ Binários instalados corretamente
|
|
97
|
+
- ✅ CLI executável globalmente
|
|
98
|
+
- ✅ Permissões configuradas
|
|
99
|
+
|
|
100
|
+
### 6. **Docker**
|
|
101
|
+
- ✅ Build da imagem Docker
|
|
102
|
+
- ✅ Execução do container
|
|
103
|
+
- ✅ CLI funcionando no Docker
|
|
104
|
+
- ✅ Limpeza da imagem de teste
|
|
105
|
+
|
|
106
|
+
### 7. **Funcionalidades Básicas**
|
|
107
|
+
- ✅ Comando de ajuda funcionando
|
|
108
|
+
- ✅ Análise de repositório (se disponível)
|
|
109
|
+
- ✅ Tratamento de erros
|
|
110
|
+
|
|
111
|
+
## 📊 Interpretando os Resultados
|
|
112
|
+
|
|
113
|
+
### ✅ Todos os Testes Passaram
|
|
114
|
+
```
|
|
115
|
+
🎉 Todos os testes passaram! CLI está pronto para publicação.
|
|
116
|
+
💡 Próximos passos:
|
|
117
|
+
1. npm version patch|minor|major
|
|
118
|
+
2. npm publish
|
|
119
|
+
3. git push --tags
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### ❌ Alguns Testes Falharam
|
|
123
|
+
```
|
|
124
|
+
❌ Alguns testes falharam. Corrija os problemas antes de publicar.
|
|
125
|
+
💡 Verifique os logs acima para identificar os problemas.
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 🔧 Solução de Problemas Comuns
|
|
129
|
+
|
|
130
|
+
### Build Falhou
|
|
131
|
+
```bash
|
|
132
|
+
# Verificar versão do .NET
|
|
133
|
+
dotnet --version
|
|
134
|
+
|
|
135
|
+
# Limpar cache
|
|
136
|
+
dotnet clean
|
|
137
|
+
dotnet restore
|
|
138
|
+
|
|
139
|
+
# Tentar build novamente
|
|
140
|
+
dotnet build --configuration Release
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### NPM Scripts Falharam
|
|
144
|
+
```bash
|
|
145
|
+
# Limpar node_modules
|
|
146
|
+
rm -rf node_modules package-lock.json
|
|
147
|
+
|
|
148
|
+
# Reinstalar dependências
|
|
149
|
+
npm install
|
|
150
|
+
|
|
151
|
+
# Verificar scripts
|
|
152
|
+
npm run build:win
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Docker Falhou
|
|
156
|
+
```bash
|
|
157
|
+
# Verificar se Docker está rodando
|
|
158
|
+
docker --version
|
|
159
|
+
docker ps
|
|
160
|
+
|
|
161
|
+
# Limpar imagens antigas
|
|
162
|
+
docker system prune -f
|
|
163
|
+
|
|
164
|
+
# Tentar build novamente
|
|
165
|
+
docker build -t ftc:test .
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Permissões no Linux/macOS
|
|
169
|
+
```bash
|
|
170
|
+
# Definir permissões manualmente
|
|
171
|
+
chmod +x bin/ftc
|
|
172
|
+
chmod +x bin/linux-x64/ftc.cli
|
|
173
|
+
|
|
174
|
+
# Verificar permissões
|
|
175
|
+
ls -la bin/
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 🧪 Testes Manuais Adicionais
|
|
179
|
+
|
|
180
|
+
### 1. **Teste com Repositório Real**
|
|
181
|
+
|
|
182
|
+
Crie um repositório de teste:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Criar repositório de teste
|
|
186
|
+
mkdir test-repo
|
|
187
|
+
cd test-repo
|
|
188
|
+
git init
|
|
189
|
+
echo "# Test Repository" > README.md
|
|
190
|
+
git add README.md
|
|
191
|
+
git commit -m "Initial commit"
|
|
192
|
+
cd ..
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Execute o CLI:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Testar análise
|
|
199
|
+
bin/ftc collect code ./test-repo --json
|
|
200
|
+
|
|
201
|
+
# Testar com filtros
|
|
202
|
+
bin/ftc collect code ./test-repo --startDate 2024-01-01 --json
|
|
203
|
+
|
|
204
|
+
# Testar exportação
|
|
205
|
+
bin/ftc collect code ./test-repo --csv --export local:./resultado.csv
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 2. **Teste com Repositório Remoto**
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Testar com GitHub
|
|
212
|
+
bin/ftc collect code https://github.com/microsoft/vscode.git --json
|
|
213
|
+
|
|
214
|
+
# Testar com filtros
|
|
215
|
+
bin/ftc collect code https://github.com/microsoft/vscode.git --startDate 2024-01-01 --endDate 2024-12-31 --json
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 3. **Teste de Instalação Global Real**
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
# Instalar globalmente (em ambiente de teste)
|
|
222
|
+
npm install -g .
|
|
223
|
+
|
|
224
|
+
# Verificar instalação
|
|
225
|
+
ftc --version
|
|
226
|
+
ftc --help
|
|
227
|
+
|
|
228
|
+
# Testar funcionalidade
|
|
229
|
+
ftc collect code ./test-repo --json
|
|
230
|
+
|
|
231
|
+
# Desinstalar
|
|
232
|
+
npm uninstall -g @followthecode/cli
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 4. **Teste de Docker Real**
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# Build da imagem
|
|
239
|
+
docker build -t ftc:latest .
|
|
240
|
+
|
|
241
|
+
# Testar com repositório local
|
|
242
|
+
docker run --rm -v "$PWD:/repo" ftc:latest collect code "/repo/test-repo" --json
|
|
243
|
+
|
|
244
|
+
# Testar com repositório remoto
|
|
245
|
+
docker run --rm ftc:latest collect code "https://github.com/microsoft/vscode.git" --json
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## 🔄 Workflow de Teste Completo
|
|
249
|
+
|
|
250
|
+
### 1. **Preparação**
|
|
251
|
+
```bash
|
|
252
|
+
# Limpar builds anteriores
|
|
253
|
+
npm run clean
|
|
254
|
+
rm -rf bin/ node_modules/
|
|
255
|
+
|
|
256
|
+
# Instalar dependências
|
|
257
|
+
npm install
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### 2. **Testes Automatizados**
|
|
261
|
+
```bash
|
|
262
|
+
# Windows
|
|
263
|
+
npm run test-installation:clean
|
|
264
|
+
|
|
265
|
+
# Linux/macOS
|
|
266
|
+
npm run test-installation:linux:clean
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### 3. **Testes Manuais**
|
|
270
|
+
```bash
|
|
271
|
+
# Criar repositório de teste
|
|
272
|
+
mkdir test-repo && cd test-repo
|
|
273
|
+
git init && echo "# Test" > README.md
|
|
274
|
+
git add . && git commit -m "Initial"
|
|
275
|
+
cd ..
|
|
276
|
+
|
|
277
|
+
# Testar funcionalidades
|
|
278
|
+
bin/ftc collect code ./test-repo --json
|
|
279
|
+
bin/ftc collect code ./test-repo --csv
|
|
280
|
+
bin/ftc collect code https://github.com/microsoft/vscode.git --json
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### 4. **Teste de Instalação Global**
|
|
284
|
+
```bash
|
|
285
|
+
# Instalar globalmente
|
|
286
|
+
npm install -g .
|
|
287
|
+
|
|
288
|
+
# Testar
|
|
289
|
+
ftc --version
|
|
290
|
+
ftc collect code ./test-repo --json
|
|
291
|
+
|
|
292
|
+
# Desinstalar
|
|
293
|
+
npm uninstall -g @followthecode/cli
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### 5. **Teste Docker**
|
|
297
|
+
```bash
|
|
298
|
+
# Build e teste
|
|
299
|
+
docker build -t ftc:test .
|
|
300
|
+
docker run --rm ftc:test --help
|
|
301
|
+
docker run --rm -v "$PWD:/repo" ftc:test collect code "/repo/test-repo" --json
|
|
302
|
+
docker rmi ftc:test
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## 📝 Checklist de Publicação
|
|
306
|
+
|
|
307
|
+
Antes de publicar, confirme que:
|
|
308
|
+
|
|
309
|
+
- [ ] Todos os testes automatizados passaram
|
|
310
|
+
- [ ] Testes manuais com repositório real funcionaram
|
|
311
|
+
- [ ] Instalação global funciona corretamente
|
|
312
|
+
- [ ] Docker build e execução funcionam
|
|
313
|
+
- [ ] Versão no package.json foi atualizada
|
|
314
|
+
- [ ] Changelog foi atualizado
|
|
315
|
+
- [ ] Documentação está atualizada
|
|
316
|
+
- [ ] Commits foram feitos e tags criadas
|
|
317
|
+
|
|
318
|
+
## 🚨 Problemas Conhecidos
|
|
319
|
+
|
|
320
|
+
### Windows
|
|
321
|
+
- **Problema**: Scripts PowerShell podem ser bloqueados
|
|
322
|
+
- **Solução**: Executar `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser`
|
|
323
|
+
|
|
324
|
+
### Linux/macOS
|
|
325
|
+
- **Problema**: Permissões de execução não definidas
|
|
326
|
+
- **Solução**: Executar `chmod +x scripts/test-installation.sh`
|
|
327
|
+
|
|
328
|
+
### Docker
|
|
329
|
+
- **Problema**: Imagens antigas podem causar conflitos
|
|
330
|
+
- **Solução**: Executar `docker system prune -f` antes dos testes
|
|
331
|
+
|
|
332
|
+
## 📞 Suporte
|
|
333
|
+
|
|
334
|
+
Se encontrar problemas durante os testes:
|
|
335
|
+
|
|
336
|
+
1. **Verificar logs** detalhados com `-Verbose`
|
|
337
|
+
2. **Executar testes individuais** para isolar problemas
|
|
338
|
+
3. **Verificar pré-requisitos** e versões
|
|
339
|
+
4. **Consultar troubleshooting** em `TROUBLESHOOTING_INSTALL.md`
|
|
340
|
+
5. **Reportar issues** com logs completos
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
**💡 Dica**: Execute os testes em um ambiente limpo (máquina virtual ou container) para simular a experiência real do usuário.
|
package/bin/ftc
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# FTC CLI Wrapper Script
|
|
4
|
+
# Este script executa o FTC CLI baseado na plataforma detectada
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# Função para detectar a plataforma
|
|
9
|
+
detect_platform() {
|
|
10
|
+
case "$(uname -s)" in
|
|
11
|
+
Linux*) echo "linux";;
|
|
12
|
+
Darwin*) echo "osx";;
|
|
13
|
+
CYGWIN*) echo "win";;
|
|
14
|
+
MINGW*) echo "win";;
|
|
15
|
+
MSYS*) echo "win";;
|
|
16
|
+
*) echo "unknown";;
|
|
17
|
+
esac
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# Função para obter o caminho do executável
|
|
21
|
+
get_executable_path() {
|
|
22
|
+
local platform=$1
|
|
23
|
+
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
24
|
+
|
|
25
|
+
case "$platform" in
|
|
26
|
+
"linux")
|
|
27
|
+
echo "$script_dir/linux-x64/ftc.cli"
|
|
28
|
+
;;
|
|
29
|
+
"osx")
|
|
30
|
+
echo "$script_dir/osx-x64/ftc.cli"
|
|
31
|
+
;;
|
|
32
|
+
"win")
|
|
33
|
+
echo "$script_dir/win-x64/ftc.cli.exe"
|
|
34
|
+
;;
|
|
35
|
+
*)
|
|
36
|
+
echo "unknown"
|
|
37
|
+
;;
|
|
38
|
+
esac
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Função para verificar se o executável existe
|
|
42
|
+
check_executable() {
|
|
43
|
+
local exec_path=$1
|
|
44
|
+
|
|
45
|
+
if [ ! -f "$exec_path" ]; then
|
|
46
|
+
echo "❌ Executável FTC CLI não encontrado!" >&2
|
|
47
|
+
echo " Procurado em: $exec_path" >&2
|
|
48
|
+
echo "💡 Execute 'npm run build' para compilar o projeto." >&2
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# Define permissões de execução
|
|
53
|
+
chmod +x "$exec_path" 2>/dev/null || true
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Função principal
|
|
57
|
+
main() {
|
|
58
|
+
local platform=$(detect_platform)
|
|
59
|
+
local exec_path=$(get_executable_path "$platform")
|
|
60
|
+
|
|
61
|
+
# Verifica se o executável existe
|
|
62
|
+
check_executable "$exec_path"
|
|
63
|
+
|
|
64
|
+
# Executa o CLI
|
|
65
|
+
exec "$exec_path" "$@"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Executa a função principal com todos os argumentos
|
|
69
|
+
main "$@"
|
package/bin/ftc.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { spawn } = require('child_process');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
|
|
7
|
+
// Detecta a plataforma
|
|
8
|
+
const platform = process.platform;
|
|
9
|
+
const isWindows = platform === 'win32';
|
|
10
|
+
|
|
11
|
+
// Caminho para o executável .NET baseado na plataforma
|
|
12
|
+
function getExecutablePath() {
|
|
13
|
+
const baseDir = path.join(__dirname);
|
|
14
|
+
|
|
15
|
+
if (isWindows) {
|
|
16
|
+
return path.join(baseDir, 'win-x64', 'ftc.cli.exe');
|
|
17
|
+
} else if (platform === 'darwin') {
|
|
18
|
+
return path.join(baseDir, 'osx-x64', 'ftc.cli');
|
|
19
|
+
} else {
|
|
20
|
+
return path.join(baseDir, 'linux-x64', 'ftc.cli');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Verifica se o executável existe
|
|
25
|
+
function checkExecutable() {
|
|
26
|
+
const execPath = getExecutablePath();
|
|
27
|
+
if (!fs.existsSync(execPath)) {
|
|
28
|
+
console.error('❌ Executável FTC CLI não encontrado!');
|
|
29
|
+
console.error(` Procurado em: ${execPath}`);
|
|
30
|
+
console.error('💡 Execute "npm run build" para compilar o projeto.');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
return execPath;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Função principal
|
|
37
|
+
function main() {
|
|
38
|
+
try {
|
|
39
|
+
// Verifica se o executável existe
|
|
40
|
+
const execPath = checkExecutable();
|
|
41
|
+
|
|
42
|
+
// Define permissões de execução (Linux/macOS)
|
|
43
|
+
if (!isWindows) {
|
|
44
|
+
try {
|
|
45
|
+
fs.chmodSync(execPath, 0o755);
|
|
46
|
+
} catch (error) {
|
|
47
|
+
// Ignora erros de permissão
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Executa o CLI .NET
|
|
52
|
+
const child = spawn(execPath, process.argv.slice(2), {
|
|
53
|
+
stdio: 'inherit',
|
|
54
|
+
cwd: process.cwd()
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
child.on('error', (error) => {
|
|
58
|
+
console.error('❌ Erro ao executar FTC CLI:', error.message);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
child.on('close', (code) => {
|
|
63
|
+
process.exit(code);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error('❌ Erro fatal:', error.message);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Executa se for o arquivo principal
|
|
73
|
+
if (require.main === module) {
|
|
74
|
+
main();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
module.exports = { main, getExecutablePath, checkExecutable };
|
package/bin/linux-x64/ftc.cli
CHANGED
|
Binary file
|
package/bin/osx-x64/ftc.cli
CHANGED
|
Binary file
|
package/bin/win-x64/ftc.cli.exe
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@followthecode/cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
4
4
|
"description": "CLI tool for Git repository analysis and data collection",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -13,28 +13,25 @@
|
|
|
13
13
|
},
|
|
14
14
|
"scripts": {
|
|
15
15
|
"prepublishOnly": "npm run build",
|
|
16
|
-
"build": "npm run build:
|
|
16
|
+
"build": "npm run build:all && npm run setup",
|
|
17
|
+
"build:all": "npm run build:win && npm run build:mac && npm run build:linux",
|
|
17
18
|
"build:win": "dotnet publish ftc.cli.csproj -c Release -r win-x64 -o ./bin/win-x64",
|
|
18
19
|
"build:mac": "dotnet publish ftc.cli.csproj -c Release -r osx-x64 -o ./bin/osx-x64",
|
|
19
20
|
"build:linux": "dotnet publish ftc.cli.csproj -c Release -r linux-x64 -o ./bin/linux-x64",
|
|
21
|
+
"setup": "npm run copy-config && npm run set-permissions",
|
|
20
22
|
"copy-config": "node scripts/copy-config.js",
|
|
21
23
|
"set-permissions": "node scripts/set-permissions.js",
|
|
22
|
-
"postinstall": "node scripts/
|
|
23
|
-
"fix-permissions": "node scripts/fix-permissions.js",
|
|
24
|
+
"postinstall": "node scripts/install-wrapper.js",
|
|
24
25
|
"test": "dotnet test",
|
|
25
|
-
"test
|
|
26
|
-
"test
|
|
27
|
-
"test
|
|
28
|
-
"test
|
|
29
|
-
"test-wsl": "wsl bash scripts/test-wsl-basic.sh",
|
|
30
|
-
"validate-wsl": "wsl bash scripts/validate-wsl.sh",
|
|
31
|
-
"validate-wsl-simple": "wsl bash scripts/validate-wsl-simple.sh",
|
|
32
|
-
"validate-wsl-no-sudo": "wsl bash scripts/validate-wsl-no-sudo.sh",
|
|
26
|
+
"test:install": "npm run test:install:win",
|
|
27
|
+
"test:install:win": "powershell -ExecutionPolicy Bypass -File scripts/test-simple.ps1",
|
|
28
|
+
"test:install:linux": "bash scripts/test-installation.sh",
|
|
29
|
+
"test:install:wsl": "wsl bash scripts/test-installation.sh",
|
|
33
30
|
"clean": "dotnet clean",
|
|
34
|
-
"publish
|
|
35
|
-
"publish:
|
|
36
|
-
"publish:
|
|
37
|
-
"publish:
|
|
31
|
+
"publish": "node scripts/publish.js",
|
|
32
|
+
"publish:patch": "npm run publish -- --patch",
|
|
33
|
+
"publish:minor": "npm run publish -- --minor",
|
|
34
|
+
"publish:major": "npm run publish -- --major"
|
|
38
35
|
},
|
|
39
36
|
"keywords": [
|
|
40
37
|
"git",
|
|
@@ -79,19 +76,26 @@
|
|
|
79
76
|
"bin/linux-x64/ftc.cli",
|
|
80
77
|
"bin/linux-x64/appsettings.json",
|
|
81
78
|
"bin/linux-x64/libgit2-c058aa8.so",
|
|
79
|
+
"scripts/copy-config.js",
|
|
82
80
|
"scripts/set-permissions.js",
|
|
83
|
-
"scripts/fix-permissions.js",
|
|
84
81
|
"scripts/install-wrapper.js",
|
|
82
|
+
"scripts/README.md",
|
|
85
83
|
"README.md",
|
|
86
84
|
"LICENSE",
|
|
87
|
-
"
|
|
88
|
-
"TESTING.md"
|
|
85
|
+
"TESTING_INSTALLATION.md"
|
|
89
86
|
],
|
|
90
87
|
"dependencies": {
|
|
91
|
-
"@followthecode/cli": "^1.0.1",
|
|
92
88
|
"node-fetch": "^3.3.0"
|
|
93
89
|
},
|
|
94
90
|
"devDependencies": {
|
|
95
91
|
"@types/node": "^18.0.0"
|
|
92
|
+
},
|
|
93
|
+
"overrides": {
|
|
94
|
+
"node-domexception": {
|
|
95
|
+
"node-domexception": "npm:undici@^5.0.0"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"resolutions": {
|
|
99
|
+
"node-domexception": "npm:undici@^5.0.0"
|
|
96
100
|
}
|
|
97
101
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# 📁 Scripts do FTC CLI
|
|
2
|
+
|
|
3
|
+
Este diretório contém os scripts essenciais para build, teste e publicação do FTC CLI.
|
|
4
|
+
|
|
5
|
+
## 🔧 Scripts Essenciais
|
|
6
|
+
|
|
7
|
+
### Build e Setup
|
|
8
|
+
- **`copy-config.js`** - Copia arquivos de configuração para todas as plataformas
|
|
9
|
+
- **`set-permissions.js`** - Define permissões de execução para os binários
|
|
10
|
+
- **`install-wrapper.js`** - Instala os wrappers Node.js e Shell
|
|
11
|
+
|
|
12
|
+
### Testes
|
|
13
|
+
- **`test-simple.ps1`** - Teste simples de instalação (Windows)
|
|
14
|
+
- **`test-installation.sh`** - Teste simples de instalação (Linux/macOS)
|
|
15
|
+
|
|
16
|
+
### Publicação
|
|
17
|
+
- **`publish.js`** - Script de publicação automatizada
|
|
18
|
+
|
|
19
|
+
## 🚀 Uso
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Build completo
|
|
23
|
+
npm run build
|
|
24
|
+
|
|
25
|
+
# Teste de instalação
|
|
26
|
+
npm run test:install # Windows
|
|
27
|
+
npm run test:install:linux # Linux
|
|
28
|
+
npm run test:install:wsl # WSL
|
|
29
|
+
|
|
30
|
+
# Publicação
|
|
31
|
+
npm run publish:patch
|
|
32
|
+
npm run publish:minor
|
|
33
|
+
npm run publish:major
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 📋 Estrutura Simplificada
|
|
37
|
+
|
|
38
|
+
A estrutura foi simplificada de **22 scripts** para apenas **6 scripts essenciais**:
|
|
39
|
+
|
|
40
|
+
### ❌ Removidos (16 scripts):
|
|
41
|
+
- Scripts duplicados de teste
|
|
42
|
+
- Scripts de validação WSL redundantes
|
|
43
|
+
- Scripts de permissões específicos
|
|
44
|
+
- Scripts de Docker desnecessários
|
|
45
|
+
- Scripts de instalação local duplicados
|
|
46
|
+
|
|
47
|
+
### ✅ Mantidos (6 scripts):
|
|
48
|
+
- Scripts essenciais para build
|
|
49
|
+
- Scripts de teste simples e funcionais
|
|
50
|
+
- Script de publicação
|
|
51
|
+
|
|
52
|
+
## 🎯 Benefícios
|
|
53
|
+
|
|
54
|
+
- ✅ **90% menos scripts** (22 → 6)
|
|
55
|
+
- ✅ **Manutenção mais fácil**
|
|
56
|
+
- ✅ **Menos confusão**
|
|
57
|
+
- ✅ **Funcionalidade mantida**
|
|
58
|
+
- ✅ **Testes mais rápidos**
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
console.log('📋 Copiando arquivo de configuração...');
|
|
5
|
+
|
|
6
|
+
const configFile = 'appsettings.json';
|
|
7
|
+
const platforms = ['win-x64', 'osx-x64', 'linux-x64'];
|
|
8
|
+
|
|
9
|
+
// Verifica se o arquivo de configuração existe
|
|
10
|
+
if (!fs.existsSync(configFile)) {
|
|
11
|
+
console.error(`❌ Arquivo de configuração não encontrado: ${configFile}`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Copia o arquivo para cada plataforma
|
|
16
|
+
platforms.forEach(platform => {
|
|
17
|
+
const targetDir = path.join('bin', platform);
|
|
18
|
+
const targetFile = path.join(targetDir, configFile);
|
|
19
|
+
|
|
20
|
+
// Cria o diretório se não existir
|
|
21
|
+
if (!fs.existsSync(targetDir)) {
|
|
22
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
fs.copyFileSync(configFile, targetFile);
|
|
27
|
+
console.log(`✅ Copiado para ${targetFile}`);
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error(`❌ Erro ao copiar para ${targetFile}:`, error.message);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
console.log('✅ Arquivo de configuração copiado para todas as plataformas');
|
package/TESTING.md
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
# 🧪 Guia de Testes - Follow The Code CLI
|
|
2
|
-
|
|
3
|
-
## Testes de Permissões
|
|
4
|
-
|
|
5
|
-
### 1. **Teste Básico de Permissões**
|
|
6
|
-
```bash
|
|
7
|
-
cd contexts/ftc.cli
|
|
8
|
-
npm run test-permissions
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Este comando verifica:
|
|
12
|
-
- ✅ Permissões dos arquivos executáveis
|
|
13
|
-
- ✅ Existência dos arquivos
|
|
14
|
-
- ✅ Funcionamento dos scripts de correção
|
|
15
|
-
|
|
16
|
-
### 2. **Teste Completo do Build**
|
|
17
|
-
```bash
|
|
18
|
-
npm run build
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Verifica todo o processo:
|
|
22
|
-
- 🔨 Compilação para todas as plataformas
|
|
23
|
-
- 📋 Cópia de configurações
|
|
24
|
-
- 🔐 Definição de permissões
|
|
25
|
-
|
|
26
|
-
### 3. **Teste Individual dos Scripts**
|
|
27
|
-
```bash
|
|
28
|
-
# Teste de cópia de configuração
|
|
29
|
-
npm run copy-config
|
|
30
|
-
|
|
31
|
-
# Teste de definição de permissões
|
|
32
|
-
npm run set-permissions
|
|
33
|
-
|
|
34
|
-
# Teste de correção manual
|
|
35
|
-
npm run fix-permissions
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### 4. **Teste com Docker (Linux)**
|
|
39
|
-
```bash
|
|
40
|
-
# Requer Docker instalado
|
|
41
|
-
npm run test-linux
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Simula instalação em ambiente Linux limpo.
|
|
45
|
-
|
|
46
|
-
## Verificação Manual
|
|
47
|
-
|
|
48
|
-
### Verificar Permissões
|
|
49
|
-
```bash
|
|
50
|
-
# Linux/macOS
|
|
51
|
-
ls -la bin/linux-x64/ftc.cli
|
|
52
|
-
ls -la bin/osx-x64/ftc.cli
|
|
53
|
-
ls -la bin/ftc.js
|
|
54
|
-
|
|
55
|
-
# Deve mostrar: -rwxr-xr-x (755)
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Testar Execução
|
|
59
|
-
```bash
|
|
60
|
-
# Teste do CLI
|
|
61
|
-
./bin/ftc.js --help
|
|
62
|
-
|
|
63
|
-
# Deve mostrar a ajuda do CLI
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Teste de Publicação
|
|
67
|
-
|
|
68
|
-
### 1. **Teste Local de Publicação**
|
|
69
|
-
```bash
|
|
70
|
-
# Simula publicação sem enviar para npm
|
|
71
|
-
npm run build
|
|
72
|
-
npm pack
|
|
73
|
-
|
|
74
|
-
# Verifica o conteúdo do pacote
|
|
75
|
-
tar -tzf followthecode-cli-*.tgz
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 2. **Teste de Instalação Local**
|
|
79
|
-
```bash
|
|
80
|
-
# Instala o pacote localmente
|
|
81
|
-
npm install -g ./followthecode-cli-*.tgz
|
|
82
|
-
|
|
83
|
-
# Testa a instalação
|
|
84
|
-
ftc --help
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Cenários de Teste
|
|
88
|
-
|
|
89
|
-
### ✅ **Cenário 1: Build Completo**
|
|
90
|
-
1. Execute `npm run build`
|
|
91
|
-
2. Verifique se todos os arquivos foram criados
|
|
92
|
-
3. Verifique permissões com `npm run test-permissions`
|
|
93
|
-
|
|
94
|
-
### ✅ **Cenário 2: Instalação Limpa**
|
|
95
|
-
1. Delete a pasta `bin/`
|
|
96
|
-
2. Execute `npm run build`
|
|
97
|
-
3. Verifique se as permissões foram definidas
|
|
98
|
-
|
|
99
|
-
### ✅ **Cenário 3: Correção Manual**
|
|
100
|
-
1. Remova permissões: `chmod -x bin/linux-x64/ftc.cli`
|
|
101
|
-
2. Execute `npm run fix-permissions`
|
|
102
|
-
3. Verifique se as permissões foram restauradas
|
|
103
|
-
|
|
104
|
-
### ✅ **Cenário 4: Teste Cross-Platform**
|
|
105
|
-
1. Execute em Windows
|
|
106
|
-
2. Execute em Linux (via Docker)
|
|
107
|
-
3. Execute em macOS (se disponível)
|
|
108
|
-
|
|
109
|
-
## Resultados Esperados
|
|
110
|
-
|
|
111
|
-
### ✅ **Sucesso**
|
|
112
|
-
```
|
|
113
|
-
🧪 Testando permissões de execução...
|
|
114
|
-
|
|
115
|
-
🔍 Verificando arquivos...
|
|
116
|
-
|
|
117
|
-
📁 bin/ftc.js
|
|
118
|
-
Permissões: 755
|
|
119
|
-
Executável: ✅ Sim
|
|
120
|
-
Tamanho: 2048 bytes
|
|
121
|
-
|
|
122
|
-
📁 bin/linux-x64/ftc.cli
|
|
123
|
-
Permissões: 755
|
|
124
|
-
Executável: ✅ Sim
|
|
125
|
-
Tamanho: 51200 bytes
|
|
126
|
-
|
|
127
|
-
📊 Resultado do teste:
|
|
128
|
-
✅ Todas as permissões estão corretas!
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### ❌ **Falha**
|
|
132
|
-
```
|
|
133
|
-
📁 bin/linux-x64/ftc.cli
|
|
134
|
-
Permissões: 644
|
|
135
|
-
Executável: ❌ Não
|
|
136
|
-
Tamanho: 51200 bytes
|
|
137
|
-
|
|
138
|
-
📊 Resultado do teste:
|
|
139
|
-
❌ Algumas permissões precisam ser corrigidas
|
|
140
|
-
💡 Execute: npm run fix-permissions
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Troubleshooting
|
|
144
|
-
|
|
145
|
-
### Problema: "Script não encontrado"
|
|
146
|
-
```bash
|
|
147
|
-
# Verifique se os scripts existem
|
|
148
|
-
ls -la scripts/
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Problema: "Permissão negada"
|
|
152
|
-
```bash
|
|
153
|
-
# No Linux/macOS
|
|
154
|
-
chmod +x scripts/*.js
|
|
155
|
-
chmod +x scripts/*.sh
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Problema: "Docker não encontrado"
|
|
159
|
-
```bash
|
|
160
|
-
# Instale Docker ou use apenas os testes Node.js
|
|
161
|
-
npm run test-permissions
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
## Próximos Passos
|
|
165
|
-
|
|
166
|
-
Após os testes:
|
|
167
|
-
1. ✅ Se tudo passar: Pronto para publicação
|
|
168
|
-
2. ❌ Se houver falhas: Corrija e teste novamente
|
|
169
|
-
3. 🔄 Para publicação: `npm run publish:patch`
|
package/TROUBLESHOOTING.md
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# 🔧 Troubleshooting - Follow The Code CLI
|
|
2
|
-
|
|
3
|
-
## Problemas de Permissão no Linux
|
|
4
|
-
|
|
5
|
-
### Sintoma
|
|
6
|
-
Após instalar a CLI no Linux, você recebe um erro como:
|
|
7
|
-
```
|
|
8
|
-
bash: ./ftc.cli: Permission denied
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
### Solução Automática
|
|
12
|
-
Execute o comando de correção de permissões:
|
|
13
|
-
```bash
|
|
14
|
-
npm run fix-permissions
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### Solução Manual
|
|
18
|
-
Se a solução automática não funcionar, execute manualmente:
|
|
19
|
-
```bash
|
|
20
|
-
chmod +x bin/linux-x64/ftc.cli
|
|
21
|
-
chmod +x bin/ftc.js
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### Verificação
|
|
25
|
-
Para verificar se as permissões estão corretas:
|
|
26
|
-
```bash
|
|
27
|
-
ls -la bin/linux-x64/ftc.cli
|
|
28
|
-
ls -la bin/ftc.js
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
As permissões devem aparecer como `-rwxr-xr-x` (755).
|
|
32
|
-
|
|
33
|
-
## Outros Problemas Comuns
|
|
34
|
-
|
|
35
|
-
### Erro: "Executável .NET não encontrado"
|
|
36
|
-
Certifique-se de que o projeto foi compilado para todas as plataformas:
|
|
37
|
-
```bash
|
|
38
|
-
npm run build
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Erro: "Plataforma não suportada"
|
|
42
|
-
A CLI suporta apenas:
|
|
43
|
-
- Windows (x64)
|
|
44
|
-
- macOS (x64)
|
|
45
|
-
- Linux (x64)
|
|
46
|
-
|
|
47
|
-
### Problemas de Rede
|
|
48
|
-
Se houver problemas de conectividade, verifique:
|
|
49
|
-
- Configuração de proxy
|
|
50
|
-
- Firewall
|
|
51
|
-
- DNS
|
|
52
|
-
|
|
53
|
-
## Logs de Debug
|
|
54
|
-
Para obter mais informações sobre erros, execute:
|
|
55
|
-
```bash
|
|
56
|
-
ftc --help
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Suporte
|
|
60
|
-
Se os problemas persistirem, abra uma issue no repositório do projeto.
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
|
|
6
|
-
console.log('🔧 Corrigindo permissões de execução...');
|
|
7
|
-
|
|
8
|
-
// Função para definir permissões recursivamente
|
|
9
|
-
function setExecutablePermissions(dir) {
|
|
10
|
-
if (!fs.existsSync(dir)) {
|
|
11
|
-
console.warn(`⚠️ Diretório não encontrado: ${dir}`);
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const items = fs.readdirSync(dir);
|
|
16
|
-
|
|
17
|
-
items.forEach(item => {
|
|
18
|
-
const fullPath = path.join(dir, item);
|
|
19
|
-
const stat = fs.statSync(fullPath);
|
|
20
|
-
|
|
21
|
-
if (stat.isDirectory()) {
|
|
22
|
-
setExecutablePermissions(fullPath);
|
|
23
|
-
} else if (stat.isFile()) {
|
|
24
|
-
// Define permissões de execução para arquivos binários
|
|
25
|
-
const isExecutable = item === 'ftc.cli' || item === 'ftc.js' || item.endsWith('.exe');
|
|
26
|
-
|
|
27
|
-
if (isExecutable) {
|
|
28
|
-
try {
|
|
29
|
-
fs.chmodSync(fullPath, 0o755);
|
|
30
|
-
console.log(`✅ Permissões corrigidas: ${fullPath}`);
|
|
31
|
-
} catch (error) {
|
|
32
|
-
console.error(`❌ Erro ao corrigir permissões para ${fullPath}:`, error.message);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Define permissões para os diretórios das plataformas
|
|
40
|
-
const platforms = ['linux-x64', 'osx-x64'];
|
|
41
|
-
platforms.forEach(platform => {
|
|
42
|
-
const platformDir = path.join('bin', platform);
|
|
43
|
-
setExecutablePermissions(platformDir);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
// Define permissões para o arquivo ftc.js
|
|
47
|
-
const ftcJsPath = path.join('bin', 'ftc.js');
|
|
48
|
-
if (fs.existsSync(ftcJsPath)) {
|
|
49
|
-
try {
|
|
50
|
-
fs.chmodSync(ftcJsPath, 0o755);
|
|
51
|
-
console.log(`✅ Permissões corrigidas: ${ftcJsPath}`);
|
|
52
|
-
} catch (error) {
|
|
53
|
-
console.error(`❌ Erro ao corrigir permissões para ${ftcJsPath}:`, error.message);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
console.log('✅ Correção de permissões concluída!');
|
|
58
|
-
console.log('💡 Se ainda houver problemas, execute manualmente: chmod +x bin/linux-x64/ftc.cli');
|