Headless y CI
Los valores por defecto de kovra asumen una persona frente a una Mac: la master key en el Keychain y las acciones sensibles protegidas detrás de un bioProve. Los entornos desatendidos — runners de CI, contenedores — no tienen ninguno de los dos. kovra también funciona ahí, en modo passphrase.
Modo passphrase (sin keyring)
Sección titulada «Modo passphrase (sin keyring)»Al definir KOVRA_PASSPHRASE, kovra deja de usar por completo el keyring del SO: deriva
la master key de 256 bits con Argon2id a partir de la passphrase más un salt estable y
no secreto guardado junto al vault (kdf.salt). Se inicializa el vault una vez
para crear el salt, y luego cada ejecución posterior deriva la misma clave:
export KOVRA_PASSPHRASE="$CI_VAULT_PASSPHRASE" # from your CI secret storekovra initConviene mantener la passphrase en el almacén de secretos del proveedor de CI — es lo único que desbloquea el vault, así que se la trata como la master key que deriva.
Las confirmaciones necesitan el escritorio de la Mac
Sección titulada «Las confirmaciones necesitan el escritorio de la Mac»Un bioProve necesita a una persona frente a la Mac. kovra 0.12.1 se
entrega para macOS, y ahí toda aprobación se lee y se aprueba en la ventana de revisión de
kovra: el sensor de Touch ID dentro de ella, o un código y el diálogo de macOS con la
contraseña de su sesión si la Mac no tiene Touch ID (o no está configurado). En CI, por SSH o
donde no haya sesión gráfica, esa ventana no se puede mostrar: con un teléfono vinculado, la
solicitud va a la app de aprobación de kovra en ese teléfono (kovra Mobile, próximamente), donde una persona la aprueba o
la deniega; sin teléfono vinculado, todo lo que necesita aprobación se rechaza, con un
mensaje que lo indica. La llave maestra y la vinculación se aprueban solo en la Mac. kovra nunca recae en una aprobación que
un script o un agente pueda darse a sí mismo, y KOVRA_CONFIRMER no cambia eso en una Mac
(solo aplica a builds de desarrollo).
Esto tiene una consecuencia deliberada: las acciones high/prod no pueden automatizarse
— requieren a una persona, frente a la Mac o en el teléfono vinculado, por diseño. Por eso, en CI:
- Los secretos
low/mediumse inyectan sin prompt — el camino cotidiano en CI:kovra runsin valoreshigh/prodfunciona de forma desatendida. - Todo lo que necesita aprobación — inyectar un valor
high/prod, eliminar o bajar de nivel un secreto crítico — se rechaza, salvo que una persona lo apruebe en el teléfono vinculado. No hay bypass desatendido parakovra run; ejecútelo desde el escritorio de la Mac.
El gate de lanzamiento del Dashboard puede omitirse en dev/CI/contenedores con --no-confirm
(o KOVRA_UI_NO_CONFIRM=1).
Un esquema de GitHub Actions
Sección titulada «Un esquema de GitHub Actions»jobs: test: runs-on: [self-hosted, macos] env: KOVRA_PASSPHRASE: ${ secrets.KOVRA_VAULT_PASSPHRASE } steps: - uses: actions/checkout@v4 - name: Run tests with injected secrets run: kovra run --env dev -- npm testkovra run --env dev resuelve el .env.refs commiteado e inyecta los valores dev
(no high) directamente en npm test — sin escribir nada en disco, argv ni
el log.