Skip to main content

Convenciones para contribuir

Agregar un recurso o un verbo​

Cada recurso es un paquete en cmd/<recurso>/ con un archivo por verbo:

cmd/holder/
root.go # var Cmd = &cobra.Command{Use: "holder", Short, Long}; AddCommand(...) en init()
get.go # var getCmd, flags en init(), HolderGetResult, runHolderGet
list.go

Un verbo nuevo sigue el molde de los existentes:

  1. var xxxCmd con Use, Short, Long y Example, todo en inglés. Example es obligatorio en todo comando ejecutable: un ejemplo realista, con --tenant acme-bank si necesita tenant. El test de cmd/docs_test.go falla si falta.
  2. Un tipo de resultado que implementa output.Renderer (Human() string) y, por convención, MarshalJSON() devolviendo el objeto del SDK. Se imprime con output.Render(cmd, resultado).
  3. RunE que abre el cliente con grpc.NewSDK(cmd.Context()) y, si el comando tiene alcance de tenant, arma el contexto con grpc.PrepareContextWithTenant.
  4. Registrar el recurso nuevo en cmd/root.go con rootCmd.AddCommand(...).
  5. make docs en octopus-cli (o make cli-docs acá) regenera la referencia. No se edita a mano.

octopus-cli no está en go.work​

El módulo no figura en el go.work del workspace, así que go falla si no se desactiva. El Makefile del CLI ya exporta GOWORK=off; si corrés go a mano, hacelo igual. Esta documentación no cambia eso: solo lo registra.

Tests: brecha conocida​

Según el INVENTORY.md del workspace (2026-05), octopus-cli tiene 0 tests. Hoy hay uno solo, el del generador de documentación. Cerrar esa brecha es parte de la Fase 0 del roadmap: «CLI: Example en todos los comandos, generador de docs, tests».