
## Summary Comprehensive repository cleanup focusing on plugin dependency management, documentation improvements, and git tracking optimization. ## Key Changes ### 🔧 Core Infrastructure - Synchronized all nu-* dependencies across plugins for version consistency - Enhanced upstream tracking and automation systems - Removed nushell directory from git tracking for cleaner repository management ### 📚 Documentation - Significantly expanded README.md with comprehensive development guides - Added detailed workflow documentation and command references - Improved plugin collection overview and usage examples ### 🧹 Repository Cleanup - Removed legacy bash scripts (build-all.sh, collect-install.sh, make_plugin.sh) - Streamlined automation through unified justfile and nushell script approach - Updated .gitignore with nushell directory and archive patterns - Removed nushell directory from git tracking to prevent unwanted changes ### 🔌 Plugin Updates - **nu_plugin_image**: Major refactoring with modular architecture improvements - **nu_plugin_hashes**: Enhanced functionality and build system improvements - **nu_plugin_highlight**: Updated for new plugin API compatibility - **nu_plugin_clipboard**: Dependency synchronization - **nu_plugin_desktop_notifications**: Version alignment - **nu_plugin_port_extension & nu_plugin_qr_maker**: Consistency updates - **nu_plugin_kcl & nu_plugin_tera**: Submodule synchronization ### 🏗️ Git Tracking Optimization - Removed nushell directory from version control for cleaner repository management - Added comprehensive .gitignore patterns for build artifacts and archives ## Statistics - 2,082 files changed - 2,373 insertions, 339,936 deletions - Net reduction of 337,563 lines (primarily from removing nushell directory tracking) ## Benefits - Complete version consistency across all plugins - Cleaner repository with optimized git tracking - Improved developer experience with streamlined workflows - Enhanced documentation and automation - Reduced repository size and complexity 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
243 lines
7.6 KiB
Plaintext
Executable File
243 lines
7.6 KiB
Plaintext
Executable File
#!/usr/bin/env nu
|
|
|
|
# Collect Install Script
|
|
# Collects built plugins and prepares them for installation/distribution
|
|
|
|
# Load environment variables from env file
|
|
def load_env_vars [] {
|
|
let env_file = "env"
|
|
if ($env_file | path exists) {
|
|
let content = open $env_file | lines
|
|
| where ($it | str trim | str length) > 0
|
|
| where not ($it | str starts-with "#")
|
|
| each {|line|
|
|
if ($line | str contains "=") {
|
|
let parts = $line | split column "=" key value
|
|
let key = $parts | get 0 | str replace "export " "" | str trim
|
|
let value = $parts | get 1 | str trim
|
|
{$key: $value}
|
|
} else {
|
|
{}
|
|
}
|
|
}
|
|
| reduce -f {} {|item, acc| $acc | merge $item}
|
|
|
|
$content
|
|
} else {
|
|
{
|
|
TARGET_PATH: "distribution",
|
|
INSTALL_BIN_PATH: "/usr/local/bin",
|
|
ARCHIVE_DIR_PATH: "/tmp",
|
|
BIN_ARCHIVES_DIR_PATH: "bin_archives"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Get all built plugin binaries
|
|
def get_built_plugins [] {
|
|
glob "nu_plugin_*/target/release/nu_plugin_*"
|
|
| where ($it | path type) == "file"
|
|
| where ($it | path exists)
|
|
| each {|path|
|
|
let plugin_name = $path | path basename
|
|
let plugin_dir = $path | path dirname | path dirname | path dirname
|
|
{
|
|
name: $plugin_name,
|
|
path: $path,
|
|
source_dir: $plugin_dir,
|
|
size: (ls $path | get 0.size)
|
|
}
|
|
}
|
|
}
|
|
|
|
# Create target directory structure
|
|
def create_target_structure [target_path: string] {
|
|
if not ($target_path | path exists) {
|
|
mkdir $target_path
|
|
print $"📁 Created target directory: ($target_path)"
|
|
}
|
|
|
|
# Create subdirectories if needed
|
|
let subdirs = ["scripts", "docs"]
|
|
for subdir in $subdirs {
|
|
let subdir_path = $"($target_path)/($subdir)"
|
|
if not ($subdir_path | path exists) {
|
|
mkdir $subdir_path
|
|
}
|
|
}
|
|
}
|
|
|
|
# Copy plugin binaries to target
|
|
def copy_plugins [plugins: list, target_path: string] {
|
|
print $"📦 Copying ($plugins | length) plugin binaries..."
|
|
|
|
for plugin in $plugins {
|
|
let dest_path = $"($target_path)/($plugin.name)"
|
|
cp $plugin.path $dest_path
|
|
|
|
# Make executable
|
|
chmod +x $dest_path
|
|
|
|
print $" ✅ ($plugin.name) (($plugin.size))"
|
|
}
|
|
}
|
|
|
|
# Copy additional files
|
|
def copy_additional_files [target_path: string] {
|
|
let files_to_copy = [
|
|
{src: "LICENSE", dest: "LICENSE", required: false},
|
|
{src: "README.md", dest: "README", required: false},
|
|
{src: "env", dest: "env", required: false}
|
|
]
|
|
|
|
for file in $files_to_copy {
|
|
if ($file.src | path exists) {
|
|
cp $file.src $"($target_path)/($file.dest)"
|
|
print $" 📄 Copied ($file.src) → ($file.dest)"
|
|
} else if $file.required {
|
|
print $" ⚠️ Required file not found: ($file.src)"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Create installation script
|
|
def create_install_script [target_path: string, install_file: string] {
|
|
let install_script_content = $"#!/usr/bin/env nu
|
|
|
|
# Auto-generated installation script for nushell plugins
|
|
# Generated at: (date now)
|
|
|
|
def main [
|
|
--bin-path (-b): string = \"/usr/local/bin\" # Installation path
|
|
--plugins (-p): list<string> = [] # Specific plugins to install
|
|
--list (-l) # List available plugins
|
|
--dry-run (-d) # Show what would be done
|
|
] {
|
|
let available_plugins = ls | where type == file and name =~ \"nu_plugin_\" | get name
|
|
|
|
if \\$list {
|
|
print \"📦 Available plugins:\"
|
|
for plugin in \\$available_plugins {
|
|
print \\$\" - (\\$plugin)\"
|
|
}
|
|
return
|
|
}
|
|
|
|
let plugins_to_install = if (\\$plugins | length) > 0 {
|
|
\\$plugins | where \\$it in \\$available_plugins
|
|
} else {
|
|
\\$available_plugins
|
|
}
|
|
|
|
if (\\$plugins_to_install | length) == 0 {
|
|
print \"❓ No plugins to install\"
|
|
return
|
|
}
|
|
|
|
print \\$\"🚀 Installing (\\$plugins_to_install | length) plugins to (\\$bin_path)...\"
|
|
|
|
for plugin in \\$plugins_to_install {
|
|
if \\$dry_run {
|
|
print \\$\"Would install: (\\$plugin) → (\\$bin_path)/(\\$plugin)\"
|
|
} else {
|
|
try {
|
|
cp \\$plugin \\$\"(\\$bin_path)/(\\$plugin)\"
|
|
chmod +x \\$\"(\\$bin_path)/(\\$plugin)\"
|
|
print \\$\" ✅ Installed (\\$plugin)\"
|
|
} catch {|err|
|
|
print \\$\" ❌ Failed to install (\\$plugin): (\\$err.msg)\"
|
|
}
|
|
}
|
|
}
|
|
|
|
if not \\$dry_run {
|
|
print \"\\n💡 Don't forget to run 'plugin add' for each plugin in nushell!\"
|
|
}
|
|
}
|
|
"
|
|
|
|
$install_script_content | save $"($target_path)/($install_file)"
|
|
chmod +x $"($target_path)/($install_file)"
|
|
print $"📜 Created installation script: ($install_file)"
|
|
}
|
|
|
|
# Main function
|
|
def main [
|
|
--target (-t): string = "" # Override target path
|
|
--force (-f) # Force overwrite existing files
|
|
--list (-l) # List available plugins only
|
|
] {
|
|
# Ensure we're in the repository root directory
|
|
if not ("nu_plugin_clipboard" | path exists) {
|
|
error make {msg: "Please run this script from the nushell-plugins repository root directory"}
|
|
}
|
|
|
|
print "📦 Nushell Plugin Collection & Installation Preparation"
|
|
|
|
# Load environment variables
|
|
let env_vars = load_env_vars
|
|
let target_path = if ($target | str length) > 0 { $target } else { $env_vars.TARGET_PATH? | default "distribution" }
|
|
let install_file = $env_vars.INSTALL_FILE? | default "install_nu_plugins.nu"
|
|
|
|
# Get built plugins
|
|
let plugins = get_built_plugins
|
|
|
|
if $list {
|
|
if ($plugins | length) == 0 {
|
|
print "❓ No built plugins found"
|
|
print "💡 Run './scripts/sh/build-all.sh' first to build plugins"
|
|
} else {
|
|
print $"📦 Found ($plugins | length) built plugins:"
|
|
for plugin in $plugins {
|
|
print $" ✅ ($plugin.name) (($plugin.size)) from ($plugin.source_dir)"
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
if ($plugins | length) == 0 {
|
|
print "❓ No built plugins found"
|
|
print "💡 Run './scripts/sh/build-all.sh' first to build plugins"
|
|
exit 1
|
|
}
|
|
|
|
print $"📦 Found ($plugins | length) built plugins to collect"
|
|
|
|
# Check if target exists and handle accordingly
|
|
if ($target_path | path exists) and not $force {
|
|
print $"⚠️ Target directory '($target_path)' already exists"
|
|
let confirm = input "Continue and overwrite? [y/N]: "
|
|
if ($confirm | str downcase) != "y" {
|
|
print "❌ Aborted"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Create target structure
|
|
create_target_structure $target_path
|
|
|
|
# Copy plugins
|
|
copy_plugins $plugins $target_path
|
|
|
|
# Copy additional files
|
|
print "📄 Copying additional files..."
|
|
copy_additional_files $target_path
|
|
|
|
# Create installation script
|
|
create_install_script $target_path $install_file
|
|
|
|
# Summary
|
|
print $"\n✅ Collection completed!"
|
|
print $"📁 Target directory: ($target_path)"
|
|
print $"📦 Plugins collected: ($plugins | length)"
|
|
print $"🚀 Installation script: ($target_path)/($install_file)"
|
|
|
|
print "\n💡 Next steps:"
|
|
print $" 1. Test installation: cd ($target_path) && nu ($install_file) --dry-run"
|
|
print $" 2. Package for distribution: ./scripts/sh/pack-dist.sh"
|
|
print $" 3. Install locally: cd ($target_path) && nu ($install_file)"
|
|
}
|
|
|
|
if ($env.NUSHELL_EXECUTION_CONTEXT? | default "" | str contains "run") {
|
|
main
|
|
} |