52 lines
No EOL
1.7 KiB
Text
Executable file
52 lines
No EOL
1.7 KiB
Text
Executable file
#!/usr/bin/env nu
|
|
|
|
# Distribution Packaging Script
|
|
# Nushell version of dist-pack.sh
|
|
# Creates tar.gz archives for project distribution
|
|
|
|
def main [os_arch?: string] {
|
|
# Validate input parameter
|
|
if ($os_arch | is-empty) {
|
|
print $"(ansi red)Error:(ansi reset) No OS ARCH provided (example: linux-amd64)"
|
|
exit 1
|
|
}
|
|
|
|
# Configuration - following project's configuration-driven approach
|
|
let target_path = $"dist/website-($os_arch).tar.gz"
|
|
let target_list = "scripts/dist-list-files"
|
|
|
|
# Ensure dist directory exists
|
|
mkdir dist
|
|
|
|
# Check if file list exists
|
|
if not ($target_list | path exists) {
|
|
print $"(ansi red)Error:(ansi reset) File list not found: ($target_list)"
|
|
exit 1
|
|
}
|
|
|
|
# Read file list and filter out empty lines and comments
|
|
let files_to_pack = (
|
|
open $target_list
|
|
| lines
|
|
| where ($it | str trim | str length) > 0
|
|
| where not ($it | str starts-with "#")
|
|
)
|
|
|
|
print $"(ansi blue)📦 Packing files from ($target_list)...(ansi reset)"
|
|
print $"(ansi blue)🎯 Target: ($target_path)(ansi reset)"
|
|
|
|
# Create the archive
|
|
try {
|
|
tar --exclude='.DS_Store' -czf $target_path -T $target_list
|
|
print "--------------------------------------------------------------"
|
|
print $"(ansi green)✅ ($target_list) PACKED IN ($target_path)(ansi reset)"
|
|
|
|
# Show archive info
|
|
let archive_size = (ls $target_path | get size | first)
|
|
print $"(ansi blue)📊 Archive size: ($archive_size)(ansi reset)"
|
|
|
|
} catch {
|
|
print $"(ansi red)❌ Failed to create archive: ($target_path)(ansi reset)"
|
|
exit 1
|
|
}
|
|
} |