website-htmx-rustelo-code/scripts/build/copy-logos.nu

113 lines
3.2 KiB
Text
Raw Permalink Normal View History

2026-07-10 03:44:13 +01:00
#!/usr/bin/env nu
# Logo & Image Deployment Script
#
# Copies logo and image files from source directories to public/ for deployment.
# Recursively copies subdirectories (e.g. logos/projects/, images/projects/).
#
# Source directories:
# - site/assets/logos/ — site-specific logos
# - rustelo/assets/logos/ — framework logos
# - site/assets/images/ — site-specific images (if exists)
#
# Destination:
# - site/public/logos/ — served to clients
# - site/public/images/ — served to clients
#
# Usage:
# nu scripts/build/copy-logos.nu
# Recursively copy a source directory into a destination directory,
# preserving subdirectory structure.
def copy_dir_recursive [src_dir: string, dst_dir: string]: nothing -> list<string> {
mut copied = []
if not ($dst_dir | path exists) {
mkdir $dst_dir
}
let entries = (ls $src_dir -a | where { |e| ($e.name | path basename) != ".DS_Store" })
for entry in $entries {
let name = ($entry.name | path basename)
let src_path = $entry.name
let dst_path = $"($dst_dir)/($name)"
if $entry.type == "dir" {
let sub_copied = (copy_dir_recursive $src_path $dst_path)
$copied = ($copied | append $sub_copied)
} else {
cp $src_path $dst_path
let rel = ($src_path | str replace $src_dir "" | str trim --left --char '/')
$copied = ($copied | append $rel)
}
}
$copied
}
def main [] {
print $"(ansi blue)Logo & Image Deployment(ansi reset)"
let logo_sources = [
"site/assets/logos"
"rustelo/assets/logos"
]
let image_sources = [
"site/assets/images"
]
let public_logos_dir = "site/public/images/logos"
let public_images_dir = "site/public/images"
mut copied_files = []
mut missing_dirs = []
# --- Logos ---
for source_dir in $logo_sources {
if not ($source_dir | path exists) {
$missing_dirs = ($missing_dirs | append $source_dir)
continue
}
let result = (copy_dir_recursive $source_dir $public_logos_dir)
$copied_files = ($copied_files | append ($result | each { |f| $"logos/($f)" }))
}
# --- Images ---
for source_dir in $image_sources {
if not ($source_dir | path exists) {
$missing_dirs = ($missing_dirs | append $source_dir)
continue
}
let result = (copy_dir_recursive $source_dir $public_images_dir)
$copied_files = ($copied_files | append ($result | each { |f| $"images/($f)" }))
}
print $"(ansi green)Logo & Image Deployment Complete!(ansi reset)"
print ""
if ($copied_files | length) > 0 {
print $"(ansi green)Copied:(ansi reset)"
for file in $copied_files {
print $" ($file)"
}
}
if ($missing_dirs | length) > 0 {
print ""
print $"(ansi yellow)Missing source directories [skipped]:(ansi reset)"
for dir in $missing_dirs {
print $" ($dir)"
}
}
let total_files = ($copied_files | length)
print ""
print $"(ansi cyan)Summary: ($total_files) files copied(ansi reset)"
print $"(ansi green)Ready for serving from site/public/(ansi reset)"
}