@followthecode/cli 1.2.42 → 2.0.1

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 CHANGED
@@ -52,7 +52,7 @@ docker run --rm -v "%cd%:/repo" ftc:latest collect code "/repo/meu-repo" --json
52
52
  Você não precisa mapear volumes para repositórios remotos:
53
53
 
54
54
  ```sh
55
- docker run --rm ftc:latest collect code "https://github.com/usuario/repositorio.git" --json
55
+ docker run --rm ftc:latest collect code "https://github.com/exemplo/repositorio.git" --json
56
56
  ```
57
57
 
58
58
  ### 4. Exemplo com filtros de data
@@ -88,7 +88,7 @@ docker run --rm -v "%cd%:/repo" ftc:latest collect code "/repo/meu-repo" --json
88
88
 
89
89
  ### Repositório remoto
90
90
  ```sh
91
- docker run --rm ftc:latest collect code "https://github.com/usuario/repositorio.git" --json
91
+ docker run --rm ftc:latest collect code "https://github.com/exemplo/repositorio.git" --json
92
92
  ```
93
93
 
94
94
  ### Com filtros de data
@@ -115,10 +115,10 @@ Execute o script de correção como Administrador:
115
115
 
116
116
  ```powershell
117
117
  # Abrir PowerShell como Administrador
118
- .\scripts\fix-windows-permissions.ps1
118
+ .\scripts\fix-permissions.ps1
119
119
 
120
120
  # Ou com limpeza forçada
121
- .\scripts\fix-windows-permissions.ps1 -Force
121
+ .\scripts\fix-permissions.ps1 -Force
122
122
  ```
123
123
 
124
124
  ## 🧪 Testando a Instalação
@@ -159,7 +159,7 @@ cd ..
159
159
 
160
160
  # Testar funcionalidades
161
161
  bin/ftc collect code ./test-repo --json
162
- bin/ftc collect code https://github.com/microsoft/vscode.git --json
162
+ bin/ftc collect code https://github.com/exemplo/repositorio.git --json
163
163
  ```
164
164
 
165
165
  Para mais detalhes, consulte a seção de testes abaixo.
@@ -182,7 +182,7 @@ ftc collect code "./caminho/para/meu-repo" --json
182
182
  Exemplo com repositório remoto e filtros:
183
183
 
184
184
  ```sh
185
- ftc collect code "https://github.com/usuario/repositorio.git" --startDate 2024-01-01 --endDate 2024-12-31 --json
185
+ ftc collect code "https://github.com/exemplo/repositorio.git" --startDate 2024-01-01 --endDate 2024-12-31 --json
186
186
  ```
187
187
 
188
188
  Para ajuda:
@@ -202,7 +202,7 @@ dotnet run -- collect code /caminho/para/repositorio
202
202
 
203
203
  #### Análise de repositório remoto
204
204
  ```bash
205
- dotnet run -- collect code https://github.com/usuario/repositorio.git
205
+ dotnet run -- collect code https://github.com/exemplo/repositorio.git
206
206
  ```
207
207
 
208
208
  #### Com filtros de data
@@ -239,10 +239,10 @@ scripts\docker-run.bat collect code C:\caminho\para\repositorio
239
239
  #### Análise de repositório remoto
240
240
  ```bash
241
241
  # Linux/macOS
242
- ./scripts/docker-run.sh code https://github.com/usuario/repositorio.git
242
+ ./scripts/docker-run.sh collect code https://github.com/exemplo/repositorio.git
243
243
 
244
244
  # Windows
245
- scripts\docker-run.bat code https://github.com/usuario/repositorio.git
245
+ scripts\docker-run.bat collect code https://github.com/exemplo/repositorio.git
246
246
  ```
247
247
 
248
248
  #### Com filtros e JSON
@@ -295,27 +295,27 @@ docker run --rm -v $(pwd)/repos:/repos:ro ftc:latest collect code /repos/meu-pro
295
295
  - Caminhos relativos: `./repositorio`, `../repositorio`
296
296
 
297
297
  ### Remotos
298
- - HTTPS: `https://github.com/usuario/repositorio.git`
299
- - HTTP: `http://github.com/usuario/repositorio.git`
300
- - SSH: `git@github.com/usuario/repositorio.git`
301
- - Git: `git://github.com/usuario/repositorio.git`
298
+ - HTTPS: `https://github.com/exemplo/repositorio.git`
299
+ - HTTP: `http://github.com/exemplo/repositorio.git`
300
+ - SSH: `git@github.com/exemplo/repositorio.git`
301
+ - Git: `git://github.com/exemplo/repositorio.git`
302
302
 
303
303
  ## Exemplo de Saída
304
304
 
305
305
  ### Formato padrão
306
306
  ```
307
- Analisando repositório: https://github.com/usuario/repositorio.git
307
+ Analisando repositório: https://github.com/exemplo/repositorio.git
308
308
  Tipo: Remoto
309
- Clonando repositório: https://github.com/usuario/repositorio.git
310
- Pasta temporária: C:\Users\usuario\AppData\Local\Temp\ftc-cli-12345678-1234-1234-1234-123456789abc
309
+ Clonando repositório: https://github.com/exemplo/repositorio.git
310
+ Pasta temporária: /tmp/ftc-cli-12345678-1234-1234-1234-123456789abc
311
311
  Repositório clonado com sucesso.
312
312
 
313
313
  📊 Total de commits: 150
314
314
 
315
315
  👥 Autores:
316
- João Silva <joao@exemplo.com>: 45 commits
317
- Maria Santos <maria@exemplo.com>: 38 commits
318
- Pedro Oliveira <pedro@exemplo.com>: 27 commits
316
+ Desenvolvedor A <dev.a@exemplo.com>: 45 commits
317
+ Desenvolvedor B <dev.b@exemplo.com>: 38 commits
318
+ Desenvolvedor C <dev.c@exemplo.com>: 27 commits
319
319
 
320
320
  📁 Total de arquivos alterados: 89
321
321
  📄 Arquivos alterados:
@@ -334,8 +334,8 @@ Repositório clonado com sucesso.
334
334
  "totalCommits": 150,
335
335
  "authors": [
336
336
  {
337
- "name": "João Silva",
338
- "email": "joao@exemplo.com",
337
+ "name": "Desenvolvedor A",
338
+ "email": "dev.a@exemplo.com",
339
339
  "commits": 45
340
340
  }
341
341
  ],
@@ -355,9 +355,9 @@ Repositório clonado com sucesso.
355
355
  ### Formato CSV
356
356
  ```csv
357
357
  nomeRepositorio;idRepositorio;dataCommit;idCommit;nomeAutor;emailAutor;nomeArquivo;caminhoArquivo;linhasAdicionadas;linhasRemovidas
358
- meu-repo;abc123;2024-01-15 10:30:00;def456;João Silva;joao@exemplo.com;Program.cs;src/Program.cs;120;45
359
- meu-repo;abc123;2024-01-15 10:30:00;def456;João Silva;joao@exemplo.com;Models.cs;src/Models.cs;89;12
360
- meu-repo;abc123;2024-01-16 14:20:00;ghi789;Maria Santos;maria@exemplo.com;README.md;README.md;15;3
358
+ meu-repo;abc123;2024-01-15 10:30:00;def456;Desenvolvedor A;dev.a@exemplo.com;Program.cs;src/Program.cs;120;45
359
+ meu-repo;abc123;2024-01-15 10:30:00;def456;Desenvolvedor A;dev.a@exemplo.com;Models.cs;src/Models.cs;89;12
360
+ meu-repo;abc123;2024-01-16 14:20:00;ghi789;Desenvolvedor B;dev.b@exemplo.com;README.md;README.md;15;3
361
361
  ```
362
362
 
363
363
  O formato CSV inclui:
@@ -385,21 +385,7 @@ A CLI fornece mensagens de erro claras e específicas:
385
385
 
386
386
  ## Arquitetura
387
387
 
388
- O projeto segue a arquitetura Vertical Slice do FTC:
389
-
390
- ```
391
- Features/
392
- └── AnalyzeRepository/
393
- ├── Models.cs # Request/Response records
394
- └── AnalyzeRepositorySlice.cs # Lógica de análise
395
-
396
- Common/
397
- └── RepositoryUtils.cs # Utilitários para repositórios
398
-
399
- scripts/
400
- ├── docker-run.sh # Script Linux/macOS
401
- └── docker-run.bat # Script Windows
402
- ```
388
+ O projeto segue a arquitetura Vertical Slice do FTC, organizando funcionalidades em slices independentes com suas próprias responsabilidades.
403
389
 
404
390
  ## Docker
405
391
 
@@ -408,9 +394,6 @@ scripts/
408
394
  Dockerfile # Multi-stage build otimizado
409
395
  .dockerignore # Exclusões para build
410
396
  docker-compose.yml # Configuração do container
411
- scripts/
412
- ├── docker-run.sh # Script Linux/macOS
413
- └── docker-run.bat # Script Windows
414
397
  ```
415
398
 
416
399
  ### Características da Imagem
@@ -418,11 +401,11 @@ scripts/
418
401
  - **Runtime .NET 8**: Imagem base leve
419
402
  - **Git instalado**: Suporte a repositórios remotos
420
403
  - **Volumes mapeados**: Acesso a repositórios locais
421
- - **Timezone configurado**: America/Sao_Paulo
404
+ - **Timezone configurado**: UTC
422
405
 
423
406
  ### Volumes Docker
424
407
  - `./repos:/repos:ro`: Mapeia repositórios locais (somente leitura)
425
- - `./temp:/tmp/ftc-cli`: Pasta temporária para persistência
408
+ - `./temp:/tmp`: Pasta temporária para persistência
426
409
 
427
410
  ## Testes
428
411
 
@@ -430,10 +413,10 @@ O projeto inclui testes automatizados para validação de funcionalidades:
430
413
 
431
414
  ```bash
432
415
  # Executar todos os testes
433
- dotnet test ../../ftc.cli.tests
416
+ dotnet test
434
417
 
435
418
  # Executar testes específicos
436
- dotnet test ../../ftc.cli.tests --filter "IsRemoteRepository"
419
+ dotnet test --filter "RepositoryTests"
437
420
  ```
438
421
 
439
422
  ### Cobertura de Testes
@@ -441,14 +424,6 @@ dotnet test ../../ftc.cli.tests --filter "IsRemoteRepository"
441
424
  - ✅ Validação de URLs HTTPS, HTTP, SSH, Git
442
425
  - ✅ Validação de caminhos locais e relativos
443
426
 
444
- ## Dependências
445
-
446
- - **System.CommandLine**: Para parsing de argumentos da CLI
447
- - **LibGit2Sharp**: Para análise de repositórios Git
448
- - **System.Text.Json**: Para serialização JSON
449
- - **xUnit**: Para testes automatizados
450
- - **Docker**: Para containerização
451
-
452
427
  ## Desenvolvimento
453
428
 
454
429
  ### Compilar
@@ -476,13 +451,13 @@ scripts\docker-run.bat [argumentos]
476
451
  dotnet run -- collect code C:\caminho\para\repositorio
477
452
 
478
453
  # Testar com repositório remoto
479
- dotnet run -- collect code https://github.com/usuario/repositorio.git
454
+ dotnet run -- collect code https://github.com/exemplo/repositorio.git
480
455
 
481
456
  # Testar com filtros
482
457
  dotnet run -- collect code C:\caminho\para\repositorio --startDate 2024-01-01 --endDate 2024-12-31 --json
483
458
 
484
459
  # Executar testes
485
- dotnet test ../../ftc.cli.tests
460
+ dotnet test
486
461
 
487
462
  # Testar com Docker
488
463
  ./scripts/docker-run.sh collect code C:\caminho\para\repositorio
@@ -550,53 +525,7 @@ ftc collect code "./meu-repo" --csv --export s3: --s3-bucket "meu-bucket"
550
525
  ftc collect code "./meu-repo" --csv --export s3://meu-bucket/analises/resultado.csv
551
526
  ```
552
527
 
553
- - Se `--s3-bucket` não for informado, será usado o bucket padrão `ftc-analyzer`.
528
+ - Se `--s3-bucket` não for informado, será usado o bucket padrão configurado.
554
529
  - Para JSON: Se `--s3-key` não for informado, será usado o padrão `analises/<nome_repositorio>-ano-mes-dia.json`.
555
530
  - Para CSV: Se `--s3-key` não for informado, será usado o padrão `analises/<nome_repositorio>-ano-mes-dia.csv`.
556
531
  - O parâmetro `--s3-region` pode ser usado para especificar a região AWS.
557
-
558
- ## Exportação via API HTTP (x-apikey)
559
-
560
- Agora é possível exportar arquivos diretamente para uma API HTTP utilizando o header `x-apikey`.
561
-
562
- **Exemplo de configuração:**
563
-
564
- ```
565
- api:https://sua-api.com/upload?apikey=SEU_API_KEY
566
- ```
567
-
568
- - O arquivo será compactado (gzip) e enviado via POST para a URL informada.
569
- - O header `x-apikey` será preenchido automaticamente com o valor fornecido.
570
- - O header `x-provider` será enviado se especificado na URL.
571
- - O conteúdo enviado será do tipo `application/octet-stream` com encoding `gzip`.
572
-
573
- **Uso no código:**
574
-
575
- ```csharp
576
- await ExportHelper.ExportDataAsync(
577
- dados,
578
- "api:https://sua-api.com/upload?apikey=SEU_API_KEY",
579
- repoPath,
580
- serviceProvider,
581
- ExportFormat.Json
582
- );
583
- ```
584
-
585
- ### Exemplo: Envio de arquivo compactado para o endpoint de commit-files
586
-
587
- ```
588
- api:https://ftc-api.eximia.co/collect/commit-files?apikey=xpt-apikey&provider=Azure
589
- ```
590
-
591
- - O arquivo será compactado (gzip) e enviado via POST.
592
- - Headers enviados: x-apikey, x-provider
593
- - Suporta CSV ou JSON.
594
- - Formato: application/octet-stream com encoding gzip
595
-
596
- ### Exemplo: Consulta do last-sync via GET
597
-
598
- ```csharp
599
- var client = new ApiKeyHttpGetClient(serviceProvider.GetRequiredService<IHttpClientFactory>(), "xpt-apikey");
600
- var lastSync = await client.GetLastSyncAsync("https://ftc-api.eximia.co/collect/repositories/repo01/last-sync");
601
- Console.WriteLine($"Última sincronização: {lastSync}");
602
- ```
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,105 +1,105 @@
1
- {
2
- "name": "@followthecode/cli",
3
- "version": "1.2.42",
4
- "description": "CLI tool for Git repository analysis and data collection",
5
- "main": "index.js",
6
- "license": "UNLICENSED",
7
- "publishConfig": {
8
- "access": "public"
9
- },
10
- "bin": {
11
- "ftc": "./bin/ftc.js",
12
- "ftc-linux": "./bin/ftc"
13
- },
14
- "scripts": {
15
- "build": "npm run build:all && npm run setup",
16
- "build:all": "npm run build:win && npm run build:mac && npm run build:linux",
17
- "build:win": "dotnet publish ftc.cli.csproj -c Release -r win-x64 -o ./bin/win-x64",
18
- "build:mac": "dotnet publish ftc.cli.csproj -c Release -r osx-x64 -o ./bin/osx-x64",
19
- "build:linux": "dotnet publish ftc.cli.csproj -c Release -r linux-x64 -o ./bin/linux-x64",
20
- "setup": "npm run sync-version && npm run copy-config && npm run set-permissions",
21
- "sync-version": "node scripts/sync-version.js",
22
- "copy-config": "node scripts/copy-config.js",
23
- "set-permissions": "node scripts/set-permissions.js",
24
- "postinstall": "node scripts/post-install.js",
25
- "test": "dotnet test",
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",
30
- "clean": "dotnet clean",
31
- "publish": "node scripts/publish.js",
32
- "publish:patch": "node scripts/publish.js --patch",
33
- "publish:minor": "node scripts/publish.js --minor",
34
- "publish:major": "node scripts/publish.js --major"
35
- },
36
- "keywords": [
37
- "git",
38
- "analysis",
39
- "repository",
40
- "cli",
41
- "follow-the-code",
42
- "metrics",
43
- "csv",
44
- "json",
45
- "s3"
46
- ],
47
- "author": "Follow The Code Team",
48
- "repository": {
49
- "type": "git",
50
- "url": "https://github.com/your-org/follow-the-code.git"
51
- },
52
- "bugs": {
53
- "url": "https://github.com/your-org/follow-the-code/issues"
54
- },
55
- "homepage": "https://github.com/your-org/follow-the-code#readme",
56
- "engines": {
57
- "node": ">=14.0.0"
58
- },
59
- "os": [
60
- "win32",
61
- "darwin",
62
- "linux"
63
- ],
64
- "cpu": [
65
- "x64",
66
- "arm64"
67
- ],
68
- "files": [
69
- "bin/ftc.js",
70
- "bin/ftc",
71
- "bin/win-x64/ftc.cli.exe",
72
- "bin/win-x64/appsettings.json",
73
- "bin/win-x64/git2-3f4182d.dll",
74
- "bin/osx-x64/ftc.cli",
75
- "bin/osx-x64/appsettings.json",
76
- "bin/osx-x64/libgit2-3f4182d.dylib",
77
- "bin/linux-x64/ftc.cli",
78
- "bin/linux-x64/appsettings.json",
79
- "bin/linux-x64/libgit2-3f4182d.so",
80
- "appsettings.json",
81
- "scripts/sync-version.js",
82
- "scripts/copy-config.js",
83
- "scripts/set-permissions.js",
84
- "scripts/install-wrapper.js",
85
- "scripts/post-install.js",
86
- "scripts/README.md",
87
- "README.md",
88
- "LICENSE",
89
- "TESTING_INSTALLATION.md"
90
- ],
91
- "dependencies": {
92
- "node-fetch": "^3.3.0"
93
- },
94
- "devDependencies": {
95
- "@types/node": "^18.0.0"
96
- },
97
- "overrides": {
98
- "node-domexception": {
99
- "node-domexception": "npm:undici@^5.0.0"
100
- }
101
- },
102
- "resolutions": {
103
- "node-domexception": "npm:undici@^5.0.0"
104
- }
1
+ {
2
+ "name": "@followthecode/cli",
3
+ "version": "2.0.1",
4
+ "description": "CLI tool for Git repository analysis and data collection",
5
+ "main": "index.js",
6
+ "license": "UNLICENSED",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "bin": {
11
+ "ftc": "./bin/ftc.js",
12
+ "ftc-linux": "./bin/ftc"
13
+ },
14
+ "scripts": {
15
+ "build": "npm run build:all && npm run setup",
16
+ "build:all": "npm run build:win && npm run build:mac && npm run build:linux",
17
+ "build:win": "dotnet publish ftc.cli.csproj -c Release -r win-x64 -o ./bin/win-x64",
18
+ "build:mac": "dotnet publish ftc.cli.csproj -c Release -r osx-x64 -o ./bin/osx-x64",
19
+ "build:linux": "dotnet publish ftc.cli.csproj -c Release -r linux-x64 -o ./bin/linux-x64",
20
+ "setup": "npm run sync-version && npm run copy-config && npm run set-permissions",
21
+ "sync-version": "node scripts/sync-version.js",
22
+ "copy-config": "node scripts/copy-config.js",
23
+ "set-permissions": "node scripts/set-permissions.js",
24
+ "postinstall": "node scripts/post-install.js",
25
+ "test": "dotnet test",
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",
30
+ "clean": "dotnet clean",
31
+ "publish": "node scripts/publish.js",
32
+ "publish:patch": "node scripts/publish.js --patch",
33
+ "publish:minor": "node scripts/publish.js --minor",
34
+ "publish:major": "node scripts/publish.js --major"
35
+ },
36
+ "keywords": [
37
+ "git",
38
+ "analysis",
39
+ "repository",
40
+ "cli",
41
+ "follow-the-code",
42
+ "metrics",
43
+ "csv",
44
+ "json",
45
+ "s3"
46
+ ],
47
+ "author": "Follow The Code Team",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/your-org/follow-the-code.git"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/your-org/follow-the-code/issues"
54
+ },
55
+ "homepage": "https://github.com/your-org/follow-the-code#readme",
56
+ "engines": {
57
+ "node": ">=14.0.0"
58
+ },
59
+ "os": [
60
+ "win32",
61
+ "darwin",
62
+ "linux"
63
+ ],
64
+ "cpu": [
65
+ "x64",
66
+ "arm64"
67
+ ],
68
+ "files": [
69
+ "bin/ftc.js",
70
+ "bin/ftc",
71
+ "bin/win-x64/ftc.cli.exe",
72
+ "bin/win-x64/appsettings.json",
73
+ "bin/win-x64/git2-3f4182d.dll",
74
+ "bin/osx-x64/ftc.cli",
75
+ "bin/osx-x64/appsettings.json",
76
+ "bin/osx-x64/libgit2-3f4182d.dylib",
77
+ "bin/linux-x64/ftc.cli",
78
+ "bin/linux-x64/appsettings.json",
79
+ "bin/linux-x64/libgit2-3f4182d.so",
80
+ "appsettings.json",
81
+ "scripts/sync-version.js",
82
+ "scripts/copy-config.js",
83
+ "scripts/set-permissions.js",
84
+ "scripts/install-wrapper.js",
85
+ "scripts/post-install.js",
86
+ "scripts/README.md",
87
+ "README.md",
88
+ "LICENSE",
89
+ "TESTING_INSTALLATION.md"
90
+ ],
91
+ "dependencies": {
92
+ "node-fetch": "^3.3.0"
93
+ },
94
+ "devDependencies": {
95
+ "@types/node": "^18.0.0"
96
+ },
97
+ "overrides": {
98
+ "node-domexception": {
99
+ "node-domexception": "npm:undici@^5.0.0"
100
+ }
101
+ },
102
+ "resolutions": {
103
+ "node-domexception": "npm:undici@^5.0.0"
104
+ }
105
105
  }