add fixture-invoicing example, sample-room wrap, kind cluster support

- examples/fixture-invoicing/: FastAPI + Vue + Postgres demo (4-entity invoice fixture)
- cfg/sample/: wraps the fixture (managed.repos points at examples/)
- ctrl/kind-{up,down,status}.sh + per-room k8s render in soleprint/ctrl/k8s/
- build.py: relative repo paths, resilient rmtree, optional k8s render hook
- cfg/.gitignore: stop ignoring sample/ and standalone/ template rooms

Manifests render cleanly but kind cluster has not been run end-to-end yet.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-29 05:30:52 -03:00
parent b886455431
commit 5f9cac1947
78 changed files with 3025 additions and 201 deletions

20
ctrl/k8s/kind-config.yaml Normal file
View File

@@ -0,0 +1,20 @@
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
# Single shared cluster for all soleprint rooms.
# Each room deploys into its own namespace; gateway Services pick a
# NodePort from the 30080-30099 range mapped here.
name: spr
nodes:
- role: control-plane
extraPortMappings:
# Room gateway NodePorts (one per active room).
- {containerPort: 30080, hostPort: 30080, protocol: TCP}
- {containerPort: 30081, hostPort: 30081, protocol: TCP}
- {containerPort: 30082, hostPort: 30082, protocol: TCP}
- {containerPort: 30083, hostPort: 30083, protocol: TCP}
- {containerPort: 30084, hostPort: 30084, protocol: TCP}
- {containerPort: 30085, hostPort: 30085, protocol: TCP}
- {containerPort: 30086, hostPort: 30086, protocol: TCP}
- {containerPort: 30087, hostPort: 30087, protocol: TCP}
- {containerPort: 30088, hostPort: 30088, protocol: TCP}
- {containerPort: 30089, hostPort: 30089, protocol: TCP}

12
ctrl/kind-down.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
# Delete the shared `spr` kind cluster (drops every room's namespace too).
# Use `gen/<room>/ctrl/k8s-down.sh` instead if you only want to remove
# a single room's namespace.
set -e
if kind get clusters 2>/dev/null | grep -q '^spr$'; then
echo "Deleting kind cluster 'spr'..."
kind delete cluster --name spr
else
echo "No kind cluster 'spr' to delete."
fi

12
ctrl/kind-status.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
# Show what's running on the shared `spr` cluster.
set -e
if ! kind get clusters 2>/dev/null | grep -q '^spr$'; then
echo "No 'spr' kind cluster — run ctrl/kind-up.sh"
exit 0
fi
kubectl --context kind-spr get namespaces -l soleprint-room
echo
kubectl --context kind-spr get pods -A -l soleprint-room

21
ctrl/kind-up.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/bash
# Create (or no-op) the single shared `spr` kind cluster used by every
# soleprint room. Per-room work happens inside namespaces — see
# `gen/<room>/ctrl/k8s-up.sh`.
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
KIND_CONFIG="$SCRIPT_DIR/k8s/kind-config.yaml"
if kind get clusters 2>/dev/null | grep -q '^spr$'; then
echo "Kind cluster 'spr' already exists."
else
echo "Creating kind cluster 'spr'..."
kind create cluster --config "$KIND_CONFIG"
fi
kubectl config use-context kind-spr >/dev/null
echo
echo "Cluster ready. Per-room deploy:"
echo " cd gen/<room> && ./ctrl/k8s-up.sh"