Skip to content

v0.18.0

Choose a tag to compare

@gfargo gfargo released this 21 Apr 15:30
· 64 commits to main since this release
ab9dc66

Release 9 delivers curated scaffold recipes so new stacks can start from a working Dockerfile + compose + config instead of generic boilerplate.

Highlights

Scaffold recipes (#45)

strut scaffold list
strut scaffold list --json
strut scaffold my-api  --recipe python-api
strut scaffold my-site --recipe static-site
strut scaffold my-app  --recipe next-postgres

--recipe <name> copies a curated recipe directory into stacks/<name>/ and runs the usual STACK_NAME_PLACEHOLDER / YOUR_ORG substitutions. Without --recipe, strut scaffold still emits the default single-service template from v0.17.0 and earlier — recipes are purely additive.

Three built-in recipes

  • static-site — Caddy serving public/ with automatic Let's Encrypt TLS
  • python-api — FastAPI + Postgres with /health running SELECT 1
  • next-postgres — Next.js standalone + Postgres + Caddy reverse proxy

Each ships with its own README.md that explains the recipe-specific setup (e.g. point DNS, set output: 'standalone' in Next.js config).

Custom / team recipes

Drop your own recipe under .strut/recipes/<name>/ at the project root. Strut picks them up automatically, scaffold list shows them alongside official recipes, and user recipes override official recipes of the same name — so teams can lock their own flavor of a stack without forking strut.

Recipe structure

<recipe-name>/
├── recipe.conf        # NAME, DESCRIPTION, TAGS, …
├── docker-compose.yml
├── services.conf      # health-check wiring
├── required_vars
├── .env.template
└── README.md          # printed in "Next steps"

PRs

  • #83 feat: scaffold recipes for common stack types
  • #84 chore: bump version to 0.18.0

Test coverage

1001/1001 BATS tests green — 23 new cases in tests/test_recipes.bats covering discovery, user-override precedence, scaffold list text/JSON, and all three official recipes.