127 lines
4.2 KiB
Text
127 lines
4.2 KiB
Text
|
|
#!/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"
|
||
|
|
}
|