Documentation
¶
Overview ¶
Command sluis is the whole product in one binary, one image and one chart (docs/decisions/0032), and one process: `sluis serve` is the issuer, the hub, the console and, beside them, the controllers its document names.
sluis serve --config <file> the one process: the issuer, the hub, the console and its controllers sluis controller github --config <file> the GitHub controller's loop alone (deprecated) sluis controller slack --config <file> the Slack controller's loop alone (deprecated) sluis tick github <target> --config <file> one GitHub target's tick, once sluis tick slack <target> --config <file> one Slack workspace's tick, once sluis migrate --from <config> --to <config> copy the State between storages (docs/decisions/0031)
The command line is a urfave/cli v3 tree (commands.go): one multi-call binary, one module per process (docs/decisions/0071). The module commands (issuer, console, github, slack, cloudflare, google, backup) each run their role; the commands above stay as they are.
Each subcommand is configured by one file and reads nothing else (see internal/config). Everything a subcommand decides is assembled in its own package, internal/rosterapp and internal/{github,slack}roster/app; this file only chooses which one to start and stops it.
`serve` runs every controller its service document (apiVersion sluis.truvity.github.io/sluis/v3) names under `controllers`, each in a loop of its own beside the service. `controller <kind>` is the same loop as a process of its own, kept for one release for a deployment that still runs the controllers apart; it reads either its own v2 document or the one document, and says it is deprecated. `tick <kind> <target>` is the unit of work the loop is made of (docs/decisions/0029), run once under the target's lease and then exit: an operator's command now, and the shape of a function that lives for one invocation later. A target is an organisation's login or `github:links` for GitHub, and a workspace's key for Slack.