website-htmx-rustelo-code/scripts/build/leptos-build.nu
2026-07-10 03:44:13 +01:00

127 lines
No EOL
4.2 KiB
Text
Executable file

#!/usr/bin/env nu
# Leptos Build Script
# Nushell version of leptos-build.sh
# Full build pipeline for Leptos application with dependencies and CSS
def main [] {
print $"(ansi blue)🏗️ Leptos Production Build Pipeline(ansi reset)"
# Install main dependencies
install_main_dependencies
# Install end2end dependencies
install_e2e_dependencies
# Build CSS assets
build_css_assets
# Build Leptos application
build_leptos_application
print $"(ansi green)🎉 Leptos build pipeline completed successfully!(ansi reset)"
}
# Install main project dependencies
def install_main_dependencies [] {
print $"(ansi blue)📦 Installing main project dependencies...(ansi reset)"
try {
pnpm i
print $"(ansi green)✅ Main dependencies installed(ansi reset)"
} catch {
print $"(ansi red)❌ Failed to install main dependencies(ansi reset)"
exit 1
}
}
# Install end-to-end test dependencies
def install_e2e_dependencies [] {
print $"(ansi blue)📦 Installing end-to-end test dependencies...(ansi reset)"
if ("end2end" | path exists) {
try {
cd end2end
pnpm i
cd ..
print $"(ansi green)✅ End-to-end dependencies installed(ansi reset)"
} catch {
print $"(ansi red)❌ Failed to install end-to-end dependencies(ansi reset)"
cd ..
exit 1
}
} else {
print $"(ansi yellow)⚠️ end2end directory not found, skipping e2e dependencies(ansi reset)"
}
}
# Build CSS assets
def build_css_assets [] {
print $"(ansi blue)🎨 Building CSS assets...(ansi reset)"
try {
pnpm build:css
print $"(ansi green)✅ CSS assets built successfully(ansi reset)"
} catch {
print $"(ansi red)❌ Failed to build CSS assets(ansi reset)"
exit 1
}
}
# Build Leptos application with production settings
def build_leptos_application [] {
print $"(ansi blue)🚀 Building Leptos application for production...(ansi reset)"
print $"(ansi blue)📋 Features: tls, content-static(ansi reset)"
print $"(ansi blue)⚡ Optimizations: release mode, JS minification(ansi reset)"
try {
cargo leptos build -r --js-minify true --features "tls,content-static"
print $"(ansi green)✅ Leptos application built successfully(ansi reset)"
# Show build results
show_build_results
} catch {
print $"(ansi red)❌ Failed to build Leptos application(ansi reset)"
exit 1
}
}
# Show build results and statistics
def show_build_results [] {
print $"(ansi blue)📊 Build Results:(ansi reset)"
# Check for server binary
if ("target/release/server" | path exists) {
let server_size = (du "target/release/server" | get apparent | first)
print $"(ansi green) 🖥️ Server binary: ($server_size)(ansi reset)"
}
# Check for site directory
if ("target/site" | path exists) {
let site_files = (ls target/site | length)
let site_size = (du target/site | get apparent | first)
print $"(ansi green) 🌐 Site assets: ($site_files) files, ($site_size)(ansi reset)"
# Show key site files
let js_files = (ls target/site/**/*.js | length)
let wasm_files = (ls target/site/**/*.wasm | length)
let css_files = (ls target/site/**/*.css | length)
print $"(ansi blue) 📄 JavaScript files: ($js_files)(ansi reset)"
print $"(ansi blue) 🦀 WebAssembly files: ($wasm_files)(ansi reset)"
print $"(ansi blue) 🎨 CSS files: ($css_files)(ansi reset)"
}
# Check for public directory
if ("site/public" | path exists) {
let public_size = (du site/public | get apparent | first)
print $"(ansi green) 📁 Public assets: ($public_size)(ansi reset)"
}
print ""
print $"(ansi blue)🚀 Ready for deployment!(ansi reset)"
print $"(ansi yellow)💡 Next steps:(ansi reset)"
print " 1. Test the build: cargo run --release --features tls,content-static"
print " 2. Deploy using: ./scripts/build/deploy.nu deploy"
print " 3. Or create distribution package: ./scripts/build/dist-pack.nu"
}