v0.17.0
Release 8 bundles three extensibility and developer-experience upgrades: shared config via includes, project-local plugins, and shell completions.
Highlights
Include directive for shared config (#46)
# stacks/my-stack/services.conf
include ../../shared/services.base.conf
API_PORT=8080include preprocesses any strut config file (strut.conf, services.conf, required_vars, volume.conf, backup.conf, …) — relative paths resolve against the including file, absolute paths work too, and later assignments win so a stack can override shared defaults. Circular includes are detected and rejected with a clear error; nested A -> B -> C chains work.
Project-local plugin system (#43)
Drop a file at .strut/plugins/cmd_<name>.sh that defines plugin_main — and optionally plugin_help — and it becomes a top-level or per-stack command:
strut <plugin> # top-level
strut <stack> <plugin> # stack-level (receives stack + env as args)
strut list plugins [--json] # enumerate discovered plugins
strut help <plugin> # plugin help textCore commands and stack names win dispatch; plugins run in a sandboxed subshell so state stays isolated and the CLI is re-entrant (plugins can invoke strut itself).
Shell completions for bash, zsh, fish (#20)
eval "$(strut completions bash)" # bash — add to ~/.bashrc
eval "$(strut completions zsh)" # zsh — add to ~/.zshrc
strut completions fish > ~/.config/fish/completions/strut.fish
strut init --completions # auto-detect + install (idempotent)Stack names, env names, and group names are discovered dynamically by walking up to strut.conf. Per-command subcommands (backup postgres, drift detect, keys rotate, …) and flag values (--env, --services, --registry) complete too.
PRs
- #79 feat: add include directive for shared config
- #80 feat: project-local plugin system
- #81 feat: shell completions for bash, zsh, fish
- #82 chore: bump version to 0.17.0
Test coverage
978/978 BATS tests green — 54 new cases across the three features (20 plugin, 16 include, 18 completions).