josemoreupeso.es
02-analyzer.md β€” TLOTP
# πŸ” Analyzer - Escaneo del CI/CD Actual

## MisiΓ³n

Escanear el proyecto completo para detectar toda la infraestructura de CI/CD existente.
Generar un inventario exhaustivo de lo que el proyecto posee.

---

## Paso 1: Escaneo de Archivos CI/CD

**Buscar en el proyecto** los siguientes elementos usando las herramientas Glob y Read:

### 1.1 GitHub Actions Workflows

```
Buscar: .github/workflows/*.yml, .github/workflows/*.yaml
```

Para cada workflow encontrado, extraer:
- **Nombre** del workflow (`name:`)
- **Triggers** (`on:`) - push, pull_request, schedule, workflow_dispatch, etc.
- **Jobs** - nombre de cada job y sus steps
- **Runners** (`runs-on:`)
- **Servicios** (`services:`)
- **Matrices** (`strategy.matrix`)
- **Secrets** referenciados (`secrets.*`)
- **Variables** de entorno (`env:`)
- **Caching** (`actions/cache`, `actions/setup-*` con cache)
- **Artifacts** (`actions/upload-artifact`, `actions/download-artifact`)
- **Concurrency** groups
- **Permissions** (`permissions:`)
- **Reusable workflows** (`uses: ./.github/workflows/...` o externos)

### 1.2 ConfiguraciΓ³n de Branch Protection

```
Buscar: .github/branch-protection.yml, .github/settings.yml (probot settings)
```

**Nota**: Branch protection rules normalmente se configuran en la UI de GitHub o via API.
Informar al usuario que para ver las reglas activas necesita acceso admin al repo.

### 1.3 Otros archivos CI/CD relacionados

```
Buscar:
- .github/dependabot.yml          β†’ Dependabot config
- .github/renovate.json           β†’ Renovate config
- .github/CODEOWNERS              β†’ Code owners
- .github/pull_request_template.md β†’ PR template
- .github/ISSUE_TEMPLATE/         β†’ Issue templates
- .releaserc, .releaserc.json, .releaserc.yml β†’ Semantic release
- release.config.js, release.config.cjs β†’ Semantic release
- .changeset/                     β†’ Changesets config
- Makefile                        β†’ Make targets (pueden tener CI tasks)
- Dockerfile, docker-compose.yml  β†’ Docker (relevante para CI)
- .dockerignore                   β†’ Docker ignore
- .env.example, .env.ci           β†’ Env configs para CI
- .nvmrc, .node-version, .tool-versions β†’ Version pinning
- .editorconfig                   β†’ Editor config
- .pre-commit-config.yaml         β†’ Pre-commit hooks
- .husky/                         β†’ Husky git hooks
- .lintstagedrc, lint-staged.config.* β†’ Lint staged
- commitlint.config.*             β†’ Commit lint
- .eslintrc*, eslint.config.*     β†’ ESLint
- .prettierrc*                    β†’ Prettier
- tsconfig.json                   β†’ TypeScript
- jest.config.*, vitest.config.*  β†’ Tests
- playwright.config.*             β†’ E2E tests
- cypress.config.*                β†’ E2E tests
- phpunit.xml*                    β†’ PHP tests
- phpstan.neon*, psalm.xml        β†’ PHP static analysis
- composer.json                   β†’ PHP dependencies (scripts section)
- package.json                    β†’ Node scripts section
```

### 1.4 Archivos de CI/CD de otras plataformas (detecciΓ³n informativa)

```
Buscar:
- .gitlab-ci.yml                  β†’ GitLab CI
- .circleci/config.yml            β†’ CircleCI
- Jenkinsfile                     β†’ Jenkins
- .travis.yml                     β†’ Travis CI
- azure-pipelines.yml             β†’ Azure DevOps
- bitbucket-pipelines.yml         β†’ Bitbucket
```

Si se encuentran, informar al usuario pero el foco de los Ents es GitHub Actions.

---

## Paso 2: AnΓ‘lisis de Scripts del Proyecto

### 2.1 package.json scripts (si existe)

Leer `package.json` y extraer la secciΓ³n `scripts`:
- Identificar scripts de: test, lint, build, format, type-check, start, dev
- Detectar si hay scripts de CI especΓ­ficos (ci:*, test:ci, etc.)

### 2.2 composer.json scripts (si existe)

Leer `composer.json` y extraer la secciΓ³n `scripts`:
- Identificar scripts de: test, lint, analyse, format, phpstan, psalm

### 2.3 Makefile targets (si existe)

Leer `Makefile` y extraer targets principales.

---

## Paso 3: Generar Inventario

**Formato de salida** - Mostrar al usuario:

```
═══════════════════════════════════════════════════════════════
πŸ” AnΓ‘lisis CI/CD - Resultados del Escaneo
═══════════════════════════════════════════════════════════════

πŸ“‚ Proyecto: [nombre del directorio]
πŸ“… Fecha de anΓ‘lisis: [fecha actual]

───────────────────────────────────────────────────────────────
πŸ“Š Resumen RΓ‘pido
───────────────────────────────────────────────────────────────

  Workflows GitHub Actions:  [N encontrados / 0 si ninguno]
  Jobs totales:              [N]
  Triggers configurados:     [lista]
  Secrets referenciados:     [N]
  Caching:                   [SΓ­/No]
  Matrix strategy:           [SΓ­/No]
  Reusable workflows:        [SΓ­/No]
  Docker:                    [SΓ­/No]
  Linting:                   [herramientas encontradas]
  Testing:                   [frameworks encontrados]
  Type checking:             [SΓ­/No]
  Dependabot/Renovate:       [SΓ­/No]
  Semantic Release:          [SΓ­/No]
  Git Hooks (Husky/etc):     [SΓ­/No]
  Pre-commit:                [SΓ­/No]
  Branch Protection:         [Detectado/No detectado/Solo via API]

───────────────────────────────────────────────────────────────
πŸ“‹ Detalle por Workflow
───────────────────────────────────────────────────────────────

[Para cada workflow encontrado:]

  πŸ“„ [nombre-archivo.yml]
     Nombre: [name del workflow]
     Triggers: [on: push, pull_request, etc.]
     Jobs:
       - [job_name]: [breve descripciΓ³n]
         Runner: [ubuntu-latest, etc.]
         Steps: [N steps]
         [Si tiene cache]: Cache: βœ…
         [Si tiene matrix]: Matrix: βœ… [dimensiones]
         [Si tiene services]: Services: [lista]

───────────────────────────────────────────────────────────────
πŸ”§ Herramientas del Proyecto
───────────────────────────────────────────────────────────────

  [Lista de herramientas detectadas con sus configuraciones]

═══════════════════════════════════════════════════════════════
```

---

## Paso 4: Guardar Estado Interno

Mantener en memoria el resultado del anΓ‘lisis para que los mΓ³dulos siguientes
(04-diagram-renderer, 05-improvement-engine, 06-modifier) puedan utilizarlo
sin repetir el escaneo.

**NO guardar en archivos**. Solo mantener en el contexto de la conversaciΓ³n.

---

## Reglas del Analyzer

1. **Ser exhaustivo**: No dejar archivos sin escanear
2. **No modificar nada**: Solo lectura, cero escritura
3. **Informar de ausencias**: Si no hay CI/CD, decirlo claramente
4. **Detectar el tipo de proyecto**: Para contextualizar las sugerencias posteriores
5. **No inventar**: Solo reportar lo que realmente existe

---

*MΓ³dulo 02 β€” Analyzer de CI/CD*