# CLI

> Envía resultados JUnit XML y Cucumber JSON desde cualquier CI a Probara, y sincroniza archivos .feature, con la CLI de Probara.

La CLI de Probara, `@probara/cli`, envía a Probara desde cualquier CI los informes JUnit XML y Cucumber JSON que tu
framework de pruebas ya genera, y sincroniza los escenarios de tus archivos `.feature`. Cada importación crea una ejecución automatizada, vincula cada
prueba con su caso de prueba (y crea los casos que aún no existen), registra los resultados, sube
los archivos a los que apunta el informe y cierra la ejecución.

La CLI es de código abierto y está en el
[repositorio probara-sdk](https://github.com/cynch-me/probara-sdk), que documenta cada comando,
cada opción y cada sistema de CI. Esta página cubre lo que configuras en Probara. Para compararla
con los reporters de Playwright, Jest, Cypress, Vitest y Cucumber, consulta [Integraciones CI](https://docs.probara.net/es/developers/ci-integrations/).

## Antes de empezar

| Necesitas                                                    | Por qué                                                                                                                                              |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Un plan de pago (**Pro** o **Enterprise**, o una prueba Pro) | El envío de resultados desde CI y la sincronización de archivos `.feature` no forman parte del plan Free. En Free, Probara responde `403 forbidden`. |
| Un **propietario** o **administrador** de Probara            | Solo los propietarios y administradores crean y revocan tokens de aplicación.                                                                        |
| El **ID del Proyecto** al que enviar los resultados          | Por ejemplo `SHOP`. La CLI lo lee de `PROBARA_PROJECT`.                                                                                              |

## 1. Crea un token de aplicación

La CLI se autentica con un [token de aplicación](https://docs.probara.net/es/developers/authentication/#tokens-de-aplicación):
un token que pertenece a tu organización, no a una persona, así que sigue funcionando cuando alguien
se va.

1. En **Workspace → Integraciones**, selecciona la tarjeta **JUnit XML**, o la tarjeta **Cucumber**
   para la sincronización Gherkin y los resultados de Cucumber.
2. Abre la pestaña **Tokens de acceso** y selecciona **Crear un token de aplicación**.
3. Escribe un **Nombre del token** — ponle el nombre de lo que lo usa, como el repositorio o el
   pipeline — y selecciona **Crear token**.
4. Copia el token desde **Copia tu nuevo token**. Empieza por `probara_app_`, y es la única vez que
   Probara lo muestra.

## 2. Guárdalo en tu CI

Guarda el token como un secreto de CI llamado `PROBARA_API_TOKEN` (en GitHub Actions: **Settings →
Secrets and variables → Actions**). La CLI solo lee el token de esa variable; no tiene opción
`--token`, así que el token nunca aparece en una lista de procesos ni en un registro. El ID del
Proyecto no es un secreto.

## 3. Añade el paso

Añade este paso de GitHub Actions después de tus pruebas, sustituye
`<PROJECT_CODE>` por el ID del Proyecto y apunta la ruta al archivo que genera tu framework:

```yaml
- name: Report to Probara
  if: always()
  run: npx @probara/cli import junit reports/junit.xml
  env:
    PROBARA_API_TOKEN: ${{ secrets.PROBARA_API_TOKEN }}
    PROBARA_PROJECT: <PROJECT_CODE>
```

`if: always()` envía el informe también cuando las pruebas fallan. Para GitLab CI, Jenkins,
CircleCI, Azure Pipelines, Bitbucket Pipelines, Buildkite y jobs en paralelo, sigue las
[guías de CI](https://github.com/cynch-me/probara-sdk/tree/main/packages/cli/docs/ci) (en inglés).

## Sincronizar archivos `.feature`

Git puede ser la fuente de verdad de tus casos Gherkin. `probara sync gherkin` hace que los casos
sincronizados de un proyecto coincidan con los escenarios de tus archivos `.feature`: un escenario
nuevo crea un caso, uno modificado lo actualiza y uno eliminado lo archiva. Ejecútalo en tu rama
principal, después del checkout:

```yaml
- name: Sync the feature files to Probara
  run: npx @probara/cli sync gherkin "features/**/*.feature"
  env:
    PROBARA_API_TOKEN: ${{ secrets.PROBARA_API_TOKEN }}
    PROBARA_PROJECT: <PROJECT_CODE>
```

Pon el patrón entre comillas y ejecuta el comando desde la raíz del repositorio. La
[guía de sincronización](https://docs.probara.net/es/guides/syncing-feature-files-from-git/) explica cómo se convierte cada
escenario en un caso, cómo funcionan los movimientos y los vínculos, y qué puede archivar una
sincronización. La [referencia de comandos](https://github.com/cynch-me/probara-sdk/blob/main/packages/cli/docs/commands.md#probara-sync-gherkin)
(en inglés) enumera todas las opciones, como `--dry-run`, `--file-url` y `--suite-ulid`.

## Importar resultados de Cucumber

`probara import cucumber` envía los resultados de un informe JSON de Cucumber. Cada escenario se
convierte en un resultado de su caso sincronizado, cada fila de un Scenario Outline es un resultado
propio y cada paso es un paso de resultado con su palabra clave. Úsalo para los informes de Cucumber-JVM,
playwright-bdd y otras herramientas que generan Cucumber JSON.

Para cucumber-js, el [reporter de Cucumber](https://docs.probara.net/es/developers/ci-integrations/cucumber/) es la mejor opción: envía cada
escenario al final de la ejecución, con los archivos que adjuntan sus pasos, y no necesita ningún archivo JSON. Ambos
leen las mismas claves, así que cualquiera de los dos llega a los mismos casos:

```bash
npx cucumber-js --format json:results/cucumber.json
npx @probara/cli import cucumber results/cucumber.json
```

El comando lee el JSON de Cucumber que cucumber-js escribe con `--format json`. Probara se ha probado
con cucumber-js 13. Cucumber-JVM y playwright-bdd escriben el mismo formato, que Probara no ha
probado. Reqnroll, que no escribe JSON de Cucumber, y Behave no son compatibles. Los adjuntos del
informe no se envían. Mantén los archivos `.feature` en el checkout: un resultado encuentra su caso
a través de la ruta de su archivo. La
[referencia de Gherkin](https://github.com/cynch-me/probara-sdk/blob/main/packages/cli/docs/gherkin.md)
(en inglés) explica las claves y el estado de cada resultado.

## Qué puede hacer el token

Un token de aplicación solo puede hacer lo que hace la CLI: crear ejecuciones automatizadas, enviar
informes (que pueden crear casos de prueba y suites), añadir adjuntos a sus resultados, cerrar
ejecuciones, sincronizar archivos `.feature` (que crean, actualizan y archivan casos sincronizados)
y, para los reporters de frameworks, leer las claves de casos de una ejecución. Cualquier otra
llamada responde `403 forbidden` — consulta las
[llamadas exactas](https://docs.probara.net/es/developers/authentication/#llamadas-permitidas).

- Las ejecuciones, los resultados y los adjuntos que envía muestran su tarjeta, **JUnit XML** o
  **Cucumber**, y el nombre del token, no una persona.
- No ocupa ningún puesto y sobrevive a la persona que lo creó. Revócalo desde la misma tarjeta, y
  crea otro, cuando pueda haberse filtrado o cuando alguien que podía leer el secreto deje tu equipo.
- Si tu organización pasa al plan Free, Probara conserva el token pero lo rechaza; vuelve a
  funcionar cuando la organización vuelve a un plan de pago.
- Un [token API](https://docs.probara.net/es/developers/authentication/) personal también funciona con un plan de pago,
  pero actúa con los permisos de su usuario y deja de funcionar cuando ese usuario se va. En CI, usa
  un token de aplicación.

## Cuando Probara rechaza el token

| Respuesta          | Qué revisar                                                                                                     |
| ------------------ | --------------------------------------------------------------------------------------------------------------- |
| `401 unauthorized` | El token se revocó, o `PROBARA_API_TOKEN` falta o contiene otra cosa. Crea un token nuevo y vuelve a guardarlo. |
| `403 forbidden`    | La organización está en el plan Free, o el token se usó para algo distinto de las llamadas de la CLI.           |

La [guía de solución de problemas](https://github.com/cynch-me/probara-sdk/blob/main/packages/cli/docs/troubleshooting.md)
de la CLI (en inglés) cubre el resto, incluidos los errores del informe y de red.
