# Ejecutar Lockpick en CI

Revisa tu sitio con un Pulse cuando publiques una versión, y haz fallar la compilación cuando haya hallazgos graves abiertos.

La CLI funciona en cualquier CI que tenga Node.js 20.9 o posterior. Un Pulse en CI usa un escaneo Pulse de tu cupo mensual cada vez, igual que iniciarlo en Lockpick, así que ejecútalo cuando publiques una versión y no en cada envío.

## Escribe el flujo de trabajo

Desde tu repositorio, con la CLI con sesión iniciada:

```bash title="Terminal"
lockpick ci init <site>
```

Escribe `.github/workflows/lockpick.yml`. El flujo de trabajo se ejecuta cuando publicas una versión y cuando lo inicias desde la pestaña Actions. Ejecuta un Pulse en el sitio, espera el resultado y falla cuando los hallazgos abiertos son `high` o más graves. Fija la versión de la CLI con la que se escribió.

* `--fail-on critical`, `high`, `medium` o `low` define el límite.
* `--dry-run` muestra el flujo de trabajo sin escribirlo.
* `--file <path>` lo escribe en otro lugar, y `--force` reemplaza un archivo existente.

Si la CLI tiene sesión iniciada en una dirección local, `ci init` te avisa: los runners de GitHub solo pueden llegar a una dirección pública de Lockpick. Pasa `--host` con esa dirección.

## Añade la clave

El flujo de trabajo lee su clave del secreto del repositorio `LOCKPICK_KEY`. Usa una clave que tenga permiso para iniciar escaneos Pulse.

```bash title="Terminal"
gh secret set LOCKPICK_KEY
```

> **Careful**
>
> Una clave puede hacer lo que permitiste al iniciar sesión. Guárdala en el
> almacén de secretos de tu CI, nunca en tu repositorio, y revócala en Lockpick
> en **Añadir a tu IA**, en la pestaña **CLI y claves**, cuando ya no la necesites.

## Falla con los hallazgos en cualquier lugar

`--fail-on` funciona en cualquier comando que termine con un escaneo completado: `lockpick pulse`, `lockpick recheck`, `lockpick watch`, `lockpick deep start` y `lockpick findings`. `lockpick ci check <run-id>` lo aplica a un escaneo que ya terminó, sin iniciar uno ni usar tu cupo, y también puede fallar por su antigüedad (`--max-age-hours`) o su cobertura (`--min-coverage`). Cuando los hallazgos abiertos alcanzan el límite, el comando termina con el código 8, así que cualquier CI puede detener la compilación:

```bash title="Terminal"
lockpick pulse <site> --fail-on high --timeout 900
```

En CI, la CLI imprime una línea cada vez que cambia el estado de un escaneo en lugar de una línea de progreso en vivo, y `--json` imprime solo el resultado. Define `FORCE_COLOR=1` para tener color en un registro que lo muestre.

## Códigos de salida de la CLI y del script release-scan

La CLI y el [script release-scan](/es/docs/protect/release-scans) independiente usan contratos de salida distintos. Comprueba cuál ejecuta tu trabajo.

| Resultado                                   | CLI `lockpick`                                                      | Script release-scan independiente |
| ------------------------------------------- | ------------------------------------------------------------------- | --------------------------------- |
| Terminó dentro del umbral de hallazgos      | 0                                                                   | 0                                 |
| Los hallazgos abiertos alcanzaron el umbral | 8                                                                   | 1                                 |
| El escaneo falló o ocurrió otro error       | Mira [códigos de salida de la CLI](/es/docs/cli/install#exit-codes) | 1                                 |

El script release-scan usa una clave de CI limitada a un sitio (`LOCKPICK_CI_KEY`); la CLI usa `LOCKPICK_KEY` y los permisos que aprobaste.