68 lines
3.1 KiB
Text
68 lines
3.1 KiB
Text
#!/usr/bin/env nu
|
|
# Materialise the htmx-ssr Minijinja templates into a single deploy directory so
|
|
# the running server reads ONE path and never touches crate source trees
|
|
# (crates/pages_htmx/templates) or the sibling rustelo checkout. This mirrors how
|
|
# cargo-leptos stages target/site/pkg for the leptos-hydration profile.
|
|
#
|
|
# The output is the framework defaults (rustelo_pages_htmx/templates) overlaid
|
|
# with this project's overrides (crates/pages_htmx/templates): project files win,
|
|
# framework-only partials (content_header, content/*, nav/*, overlays/*,
|
|
# not_found) remain. The project→framework cascade is therefore resolved here, at
|
|
# build time — the runtime loader needs no fallback logic.
|
|
#
|
|
# Symlinks are dereferenced (-L): the project templates may live behind links and
|
|
# the tarball must be self-contained.
|
|
#
|
|
# Flow (symmetric with Leptos pkg):
|
|
# assemble → target/site/htmx-templates → distro image_only[htmx-ssr]
|
|
# → site/htmx-templates → /var/www/site/htmx-templates (HTMX_TEMPLATE_PATH)
|
|
#
|
|
# Usage:
|
|
# nu scripts/build/assemble-htmx-templates.nu
|
|
# nu scripts/build/assemble-htmx-templates.nu --out target/site/htmx-templates
|
|
|
|
def main [
|
|
--project-root: string = "" # repo root; auto-derived from script location if empty
|
|
--out: string = "target/site/htmx-templates" # output dir (relative paths resolved under project-root)
|
|
--project-templates: string = "crates/pages_htmx/templates"
|
|
--framework-templates: string = "" # rustelo htmx templates; auto-derived from DEV_ROOT if empty
|
|
]: nothing -> nothing {
|
|
let root = if ($project_root | is-not-empty) {
|
|
$project_root
|
|
} else {
|
|
$env.FILE_PWD | path dirname | path dirname # scripts/build → root
|
|
}
|
|
|
|
let dev_root = ($env.DEV_ROOT? | default "/Users/Akasha/Development")
|
|
let framework = if ($framework_templates | is-not-empty) {
|
|
$framework_templates
|
|
} else {
|
|
$"($dev_root)/rustelo/code/crates/foundation/crates/rustelo_pages_htmx/templates"
|
|
}
|
|
let project = if ($project_templates | str starts-with "/") {
|
|
$project_templates
|
|
} else {
|
|
$root | path join $project_templates
|
|
}
|
|
let out_dir = if ($out | str starts-with "/") { $out } else { $root | path join $out }
|
|
|
|
if not ($framework | path exists) {
|
|
error make { msg: $"framework templates not found: ($framework) — set --framework-templates or DEV_ROOT" }
|
|
}
|
|
if not ($project | path exists) {
|
|
error make { msg: $"project templates not found: ($project)" }
|
|
}
|
|
|
|
# Idempotent: rebuild from scratch so deleted templates never linger.
|
|
if ($out_dir | path exists) { ^rm -rf $out_dir }
|
|
mkdir $out_dir
|
|
|
|
# Framework defaults first (base layer), then project overrides on top.
|
|
# `src/.` copies directory CONTENTS; -L dereferences symlinks; BSD/GNU cp both
|
|
# merge directories and overwrite colliding files, giving the overlay semantics.
|
|
^cp -RL $"($framework)/." $out_dir
|
|
^cp -RL $"($project)/." $out_dir
|
|
|
|
let count = (^find -L $out_dir -type f | lines | where { |l| $l | is-not-empty } | length)
|
|
print $"(ansi green)✅(ansi reset) htmx templates → ($out_dir) — ($count) files"
|
|
}
|