--- name: fn_sync_with_pass kind: pipeline lang: bash domain: pipelines version: "1.0.0" purity: impure signature: "fn_sync_with_pass [status|locations|...]" description: "Wrapper de fn sync que lee credenciales del password-store pass y exporta FN_REGISTRY_API y REGISTRY_API_TOKEN antes de invocar el CLI. Evita persistir secretos en ~/.zshrc." tags: [sync, registry, pass, gpg, launcher] uses_functions: - pass_get_bash_infra uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: - name: "registry/basicauth-user" desc: "Entry de pass con el usuario para basicAuth del registry API (linea 1)" - name: "registry/basicauth-pass" desc: "Entry de pass con la contraseña para basicAuth del registry API (linea 1)" - name: "registry/api-token" desc: "Entry de pass con el REGISTRY_API_TOKEN (linea 1)" - name: "args" desc: "Argumentos opcionales forwarded a fn sync: status, locations, o nada para push+pull completo" output: "Mismo output que ./fn sync (stdin/stdout/stderr heredados). Exit code del subproceso fn sync." tested: false tests: [] test_file_path: "" file_path: "bash/functions/pipelines/fn_sync_with_pass.sh" --- ## Ejemplo ```bash # Sync simple (push+pull completo) ./fn run fn_sync_with_pass_bash_pipelines # Ver estado local: PC, API, conteos ./fn run fn_sync_with_pass_bash_pipelines status # Mapa de ubicaciones cross-PC ./fn run fn_sync_with_pass_bash_pipelines locations ``` ## Cuando usarla Cuando necesites ejecutar `fn sync` sin tener las credenciales exportadas en el entorno. Sustituye al bloque de `export FN_REGISTRY_API=...` que de otro modo habria que poner en `~/.zshrc`. ## Gotchas - Si GPG no tiene la clave desbloqueada, `pass show` abre el prompt del agente gpg. Dejarlo pasar — no capturar stderr para no interferir con el pinentry. - Requiere que el password-store este inicializado (`pass init`). Si no existe, `pass show` falla con error claro. - `FN_REGISTRY_ROOT` debe apuntar a la raiz del registry donde vive el binario `./fn`. Si no esta seteado, se resuelve via `git rev-parse --show-toplevel`. - Los tres entries de pass deben tener el valor en la **linea 1** (convencion estandar de pass). Metadata adicional en lineas siguientes es ignorada.