Refactor component terminology to programs in config and manifest

- Updated the terminology from "components" to "programs" across the codebase, including in config loading, saving, and manifest specifications.
- Introduced a new `stacks.py` file to handle lifecycle actions for development stacks, implementing handlers for Python and React Vite stacks.
- Adjusted tests to reflect the new program structure and ensure proper functionality.
- Revised documentation to align with the new terminology and structure, ensuring clarity on the purpose and configuration of programs, services, and jobs.
This commit is contained in:
2026-02-23 22:09:41 -08:00
parent f559fba143
commit 0d36e4f72a
48 changed files with 7512 additions and 632 deletions

View File

@@ -314,7 +314,7 @@ uv run ruff format . # Format
## Registering in castle.yaml
```yaml
components:
programs:
my-tool:
description: Does something useful
source: components/my-tool
@@ -326,7 +326,7 @@ components:
Tools with system dependencies declare them in the component:
```yaml
components:
programs:
pdf2md:
description: Convert PDF files to Markdown
source: components/pdf2md
@@ -337,7 +337,7 @@ components:
system_dependencies: [pandoc, poppler-utils]
```
Tools live in the `components:` section. If a tool also runs on a schedule,
Tools live in the `programs:` section. If a tool also runs on a schedule,
add a separate entry in the `jobs:` section referencing the component.
See @docs/component-registry.md for the full registry reference.

View File

@@ -99,7 +99,7 @@ settings = Settings()
Castle passes config via env vars in castle.yaml:
```yaml
components:
programs:
my-service:
description: Does something useful
source: components/my-service

View File

@@ -108,12 +108,12 @@ The `build` output is a static SPA in `dist/` — just HTML, JS, and CSS files.
## Registering as a castle component
A frontend component has a `build` spec (produces static output). Register it
in the `components:` section of `castle.yaml`. No `run` block needed if Caddy
in the `programs:` section of `castle.yaml`. No `run` block needed if Caddy
handles serving directly from the build output.
```yaml
# castle.yaml
components:
programs:
my-frontend:
description: Web dashboard
source: components/my-frontend