---
name: swl:configurar-ci
description: Instala y gestiona los workflows CI/CD de swl-ses en proyectos de usuarios. Subcomandos init (flujo interactivo completo), status (muestra qué está instalado) y uninstall (quita los workflows). Para setup automatizado de GitHub Actions con revisión de seguridad Claude, CI genérico y release automatizado.
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
user-invocable: true
version: "1.0.0"
---

# /swl:configurar-ci — Setup de CI/CD en tu proyecto

Orquesta la instalación de los workflows GitHub Actions de swl-ses en el proyecto donde estés trabajando.

## Subcomandos

| Subcomando | Descripción |
|-----------|-------------|
| `init` | Flujo interactivo completo (default) |
| `status` | Muestra qué workflows están instalados y qué secrets se necesitan |
| `uninstall` | Quita los workflows SWL del proyecto |

Si se invoca sin subcomando, ejecutar `init`.

---

## /swl:configurar-ci init

Flujo interactivo paso a paso. Detecta el proyecto en el directorio actual.

### Paso 1 — Verificar contexto

```bash
node -e "const p=require('./package.json');console.log('Proyecto:',p.name,'v'+p.version)" 2>/dev/null || echo "Sin package.json"
ls .github/workflows/ 2>/dev/null && echo "Directorio .github/workflows existe" || echo "Directorio .github/workflows no existe"
```

Mostrar al usuario qué se detectó y confirmar que es el proyecto correcto.

### Paso 2 — Preguntar qué workflows instalar (si TTY)

```
¿Qué workflows quieres instalar? (Enter para activar, espacio para omitir)

[x] swl-security.yml — Revisión de seguridad con Claude en cada PR
    REQUIERE: secret CLAUDE_API_KEY en GitHub Settings → Secrets

[x] swl-ci.yml — CI estándar (lint + test) en push y PRs
    Sin secrets adicionales

[ ] release-please.yml — Releases automáticos desde conventional commits
    Sin secrets adicionales. Requiere conventional commits.
```

Si el usuario omite `init` e invoca con flags directos, respetar esos flags sin preguntar:
- `--with-security` / `--no-security`
- `--with-ci` / `--no-ci`
- `--with-release-please`
- `--dry-run`
- `--force`

### Paso 3 — Copiar workflows

Invocar `scripts/lib/configurar-ci.js` con las opciones seleccionadas:

```javascript
const { init } = require('./scripts/lib/configurar-ci');
const resultado = init({
  withSecurity: true,
  withCi: true,
  withReleasePlease: false,
  // dryRun: true,  // con --dry-run
});
```

Si hay archivos existentes en `resultado.existentes`, preguntar:
```
Los siguientes workflows ya existen en .github/workflows/:
  - swl-security.yml
¿Sobreescribir? (s/N)
```

Si el usuario dice que sí, volver a llamar `init` con `force: true`.

### Paso 4 — Configurar CLAUDE_API_KEY (solo si se instaló swl-security.yml)

Preguntar:
```
swl-security.yml requiere el secret CLAUDE_API_KEY en GitHub.

¿Quieres configurarlo ahora con gh CLI? (s/N)
```

Si dice sí, verificar que `gh` esté disponible:

```bash
gh auth status 2>&1 | head -3
```

Si está autenticado, guiar al usuario para que pegue su API key (sin almacenarla):

```
Pega tu CLAUDE_API_KEY (la input estará oculta):
```

Luego ejecutar:
```bash
gh secret set CLAUDE_API_KEY
# gh leerá el valor desde stdin de forma segura
```

Si `gh` no está disponible o el usuario dice que no, mostrar el link para hacerlo manualmente:
```
Para configurar manualmente:
  https://github.com/<owner>/<repo>/settings/secrets/actions/new
  Nombre: CLAUDE_API_KEY
  Valor:  tu clave de https://console.anthropic.com
```

### Paso 5 — Configurar branch protection (opcional)

Preguntar:
```
¿Aplicar branch protection en main?
Esto requiere gh CLI autenticado y permisos de admin en el repo.
(s/N)
```

Si dice sí:
```bash
npx -y @saulwade/swl-ses@latest configure-branch-protection --dry-run
# Mostrar el plan al usuario
# Si confirma:
npx -y @saulwade/swl-ses@latest configure-branch-protection
```

El subcomando `configure-branch-protection` del CLI funciona desde cualquier proyecto: detecta el repo actual con `gh repo view`, aplica las reglas a su rama `main` y reporta resultado. No depende de la ubicación del paquete swl-ses.

### Paso 6 — Resumen final

```
Setup completado:
  ✓ .github/workflows/swl-security.yml
  ✓ .github/workflows/swl-ci.yml
  - release-please.yml (omitido)

Próximos pasos:
  1. git add .github/workflows/ && git commit -m "ci: agregar workflows CI/CD swl-ses"
  2. Abrir un PR para ver el workflow en acción
  3. Verificar que CLAUDE_API_KEY esté en GitHub Settings → Secrets
```

---

## /swl:configurar-ci status

Muestra el estado actual de los workflows SWL en el proyecto.

```javascript
const { status } = require('./scripts/lib/configurar-ci');
const resultado = status();
```

Formato de salida:

```
Workflows SWL en .github/workflows/:

Instalados:
  ✓ swl-security.yml
    Secrets requeridos: CLAUDE_API_KEY (verificar en GitHub Settings)
  ✓ swl-ci.yml
    Sin secrets adicionales

No instalados:
  - release-please.yml

Para instalar los faltantes: /swl:configurar-ci init
```

Si `gh` está disponible, intentar verificar si el secret existe:
```bash
gh secret list 2>/dev/null | grep CLAUDE_API_KEY
```

---

## /swl:configurar-ci uninstall

Elimina los workflows gestionados por swl-ses. No toca branch protection ni otros workflows.

```javascript
const { uninstall } = require('./scripts/lib/configurar-ci');

// Primero listar qué se eliminaría (sin confirmar)
const plan = uninstall({ confirmar: false });
```

Mostrar:
```
Los siguientes workflows serán eliminados:
  - .github/workflows/swl-security.yml
  - .github/workflows/swl-ci.yml

¿Confirmar? (s/N)
```

Si el usuario confirma:
```javascript
const resultado = uninstall({ confirmar: true });
```

Mostrar confirmación de archivos eliminados. Recordar que la branch protection NO se toca.

---

## Flags globales

| Flag | Descripción |
|------|-------------|
| `--dry-run` | Muestra qué se haría sin modificar nada |
| `--force` | Sobreescribe archivos existentes sin preguntar |
| `--with-release-please` | Incluir release-please.yml |
| `--no-security` | Omitir swl-security.yml |
| `--no-ci` | Omitir swl-ci.yml |

## Skill de referencia

Para troubleshooting, gotchas y guía avanzada: `Skill("infra-github-actions")`.
