Rustelo/templates/website-leptos/provisioning/distro.ncl
2026-07-18 19:57:03 +01:00

47 lines
1.9 KiB
Text

# Distro composition manifest — single source of truth for "what files make a
# deployable distro". Consumed by:
# - lian-build/build_directives.ncl (image_only → what the runtime image bakes)
# - provisioning/content.nu (content_hot → incremental PV hot-updates)
# - just distro (site_tree + image_only → local tarball)
#
# Two layers, mapping the Build-Time vs Runtime tension (ADR-006):
#
# site_tree Capa B — delivered to the PV at /var/www/site/. Identical for
# both render profiles, independent of the binary, updatable
# without a rebuild. website.css under public/styles/ must be
# freshly built (uno) before packing — that is an assembly step,
# not a Dockerfile concern (the runtime image is content-agnostic).
#
# image_only Capa A — baked into the runtime image, per profile. The Leptos
# WASM pkg/ is version-matched to the binary by construction:
# baked to /usr/local/share/website/pkg/ and bootstrap-copied
# into the PV. htmx-ssr ships no WASM, so its image bakes nothing
# beyond the binary.
#
# content_hot Subset of site_tree that content.nu ships to a running pod with
# no rebuild (markdown / locales / static assets). FTL changes
# still require a restart; new routes require a full rebuild
# (build.nu). Equivalent mechanism for both profiles — htmx-ssr
# simply has a larger hot surface (no hydration tree to keep in
# sync with the binary).
{
site_tree = [
"site/content",
"site/config",
"site/i18n",
"site/templates",
"site/public",
"site/rbac.ncl",
],
image_only = {
"leptos-hydration" = ["target/site/pkg"],
"htmx-ssr" = [],
},
content_hot = [
"site/content",
"site/i18n/locales",
"site/public",
],
}