nushell-plugins/CHANGELOG.md
Jesús Pérez 2f6089caaf # Summary
feat: bootstrap installer with robust archive extraction, version mismatch handling, and improved PATH messaging

## Detailed Description

This commit implements a production-ready bootstrap installer with comprehensive error handling, version-agnostic archive extraction, and clear user messaging. All improvements follow DRY principles using symlink-based architecture for single-source-of-truth maintenance.

## Major Changes (Session 2025-10-19)

### 0. Bootstrap Installer & Distribution Improvements (NEW)

#### 0a. Install Script Architecture - DRY Design

**Issue**: Code duplication across installation paths
- `./install.sh`, `./scripts/templates/install.sh`, `installers/bootstrap/install.sh` were separate copies
- Changes required updating multiple files
- Risk of divergence and inconsistency

**Solution**: Implemented symlink-based DRY architecture
- Single source of truth: `installers/bootstrap/install.sh` (1,247 lines)
- Symlinks created:
  - `./install.sh` → `installers/bootstrap/install.sh`
  - `./scripts/templates/install.sh` → `installers/bootstrap/install.sh`
- All changes automatically propagate through symlinks
- No code duplication

**Impact**:
-  Single maintenance point for all install scripts
-  Consistent behavior across all paths
-  Reduced maintenance burden
-  No divergence risk

#### 0b. Archive Extraction - Version-Agnostic Binary Detection

**Issue**: "No Nushell binary found in extracted archive"
- Script failed when extracting from `nushell-full-0.108.0-darwin-arm64.tar.gz`
- Error occurred even though binaries were present at `nushell-full-0.108.0/bin/nu`

**Root Cause**: `find` command returning parent directory itself in results
```bash
#  OLD - find returns parent directory first
local extracted=$(find "$extract_dir" -maxdepth 1 -type d -name "nushell-*" | head -1)
# Returns: /tmp/nushell-install-22919/nushell-extract (parent!)
# Should return: /tmp/nushell-install-22919/nushell-extract/nushell-full-0.108.0 (subdirectory)
```

**Solution**: Added `-not -path` to exclude starting directory
```bash
#  NEW - exclude parent directory
local extracted=$(find "$extract_dir" -maxdepth 1 -type d -name "nushell-*" -not -path "$extract_dir" | head -1)
# Now correctly returns the subdirectory
```

**Additional Improvements**:
- 4-level fallback detection strategy:
  1. Check `$extracted/bin/nu` (subdirectory structure)
  2. Check `$extracted/nu` (flat structure)
  3. Fallback search for any `nushell-*` subdirectory with `bin/nu`
  4. Last resort recursive search for any executable named `nu`
- Validates binaries exist before using them
- Clear error reporting with all search locations

**Version-Agnostic**:
- Uses `nushell-*` pattern (not hardcoded version numbers)
- Works with any Nushell version: 0.107, 0.108, 0.109, etc.
- Supports both `.tar.gz` and `.zip` archive formats

**Impact**:
-  Archive extraction works reliably
-  Works with any Nushell version
-  Clear error messages guide users
-  Multiple archive structure support

#### 0c. Plugin Registration - Version Mismatch Handling

**Issue**: Plugin registration failed with version incompatibility errors
```
Error: nu:🐚:plugin_failed_to_load
× Plugin `polars` is compiled for nushell version 0.107.1, which is not compatible with version 0.108.0
```

**Solution**: Implemented intelligent error classification
- Captures both stdout and stderr from plugin add commands
- Detects version incompatibility: "is not compatible with version" or "is compiled for nushell version"
- Classifies errors into three categories:
  1. **Success**: Plugin registered successfully 
  2. **Incompatible**: Version mismatch (skipped gracefully) ⚠️
  3. **Failed**: Other registration failures 
- Reports summary with counts of each category
- Installation continues successfully even with version mismatches

**New Error Reporting**:
```
 Registered nu_plugin_auth
⚠️  Skipping nu_plugin_polars: Version mismatch (built for different Nushell version)
 Successfully registered 13 plugins
⚠️  Skipped 1 incompatible plugins (version mismatch):
  - nu_plugin_polars
```

**Impact**:
-  No installation failures due to version mismatches
-  Users informed of incompatible plugins
-  Clear distinction between error types
-  Installation completes successfully

#### 0d. Shell Configuration PATH Update - Clear Messaging

**Issue**: Confusing PATH update messages
- User sees: "PATH already updated" for all files
- Then sees: "No shell configuration files were updated" warning
- Then sees: "Please manually add to your PATH" error
- **Problem**: Contradictory messages when PATH is already configured everywhere

**Root Cause**: Script conflated two states
- State 1: "Was PATH found in files?" (skips updating if found)
- State 2: "Did we add PATH to any file?" (used for messaging)
- Both states ignored means no update was made, but PATH might already exist

**Solution**: Track two separate states
```bash
local updated=false        # Was PATH ADDED to any file?
local path_found=false     # Was PATH FOUND in any file?

# In loop:
if grep -q "$install_dir" "$config_file"; then
    path_found=true        # Found it! Mark as true
    continue
fi

# After loop:
if [ "$updated" = "true" ]; then
    log_success "Shell configuration updated"
elif [ "$path_found" = "true" ]; then
    log_success "PATH is already configured in your shell configuration files"
else
    log_warn "Could not find or update shell configuration"
fi
```

**New Clear Messages**:
-  "PATH is already configured in your shell configuration files" (when found everywhere)
-  "Shell configuration updated" (when just added)
- ⚠️ "Could not find or update shell configuration" (when file missing)

**Impact**:
-  Non-contradictory messages
-  Users understand what happened
-  No false warnings when PATH already configured
-  Clear guidance when manual action needed

#### 0e. Installation Features

**`--source-path` Option** (Local Installation):
- Install from local archive: `./install.sh --source-path archive.tar.gz`
- Install from local directory: `./install.sh --source-path /path/to/binaries`
- Default behavior: `./install.sh --source-path` uses `./bin_archives`
- Works with custom `--install-dir` paths
- No download needed, offline installation support

**`--uninstall` with Configuration Management**:
- Prompts user: "Remove ~/.config/nushell? [y/N]"
- Removes all installed binaries and plugins
- Preserves user choice for configuration
- Clean uninstall before fresh reinstall

#### 0f. Documentation Updates

**CLAUDE.md**:
- Added "Install Script Architecture (DRY Design)" section
- Documents source of truth and symlink structure
- Explains `--source-path` feature
- Shows version-agnostic archive detection
- Lists DRY architecture benefits

**README.md**:
- Added "Install Script Architecture (DRY Design)" subsection
- Shows symlink structure with arrows
- Provides `--source-path` usage examples
- Explains version-agnostic detection
- "How DRY Works" 3-step explanation

#### 0g. Files Modified

Core Changes:
- `installers/bootstrap/install.sh` (+3 lines for PATH messaging fix)
  - Archive extraction fix with `-not -path`
  - Plugin registration error classification
  - Clear PATH update messaging
  - Total: 1,247 lines (unified)

Auto-Updated via Symlinks:
- `./install.sh` - Auto-updated (1,247 lines)
- `./scripts/templates/install.sh` - Auto-updated (1,247 lines)

Documentation:
- `CLAUDE.md` - Added install architecture section
- `README.md` - Added install architecture subsection
- `CHANGELOG.md` - Added comprehensive entry (+100 lines)

#### 0h. Testing & Verification

All scenarios tested and verified:
- [x] Archive extraction works with version-agnostic detection
- [x] Installation to `~/.local` successful (16 binaries)
- [x] Installation to `~/.local/bin` successful (21 plugins loaded)
- [x] Plugin registration handles version mismatches gracefully
- [x] PATH messaging is clear and non-contradictory
- [x] Clean uninstall followed by fresh reinstall works perfectly

#### 0i. Impact

User-Facing Benefits:
-  Users can install from any version of nushell-full archive
-  Version mismatch plugins skipped without breaking installation
-  Clear, honest error messages
-  Non-confusing PATH update messages
-  Offline installation support via `--source-path`
-  Clean uninstall/reinstall workflow

Developer Benefits:
-  Single source of truth eliminates code duplication
-  Changes propagate automatically through symlinks
-  Reduced maintenance burden
-  Consistent behavior across all paths
-  Production-ready installation process

---

### 1. Help System Integration (New Feature)

**Issue**: Version-update module recipes were not discoverable
- Not shown in `just help modules`
- Not referenced in `just help`
- Not included in help navigation system
- Users had to manually run `just --list` to find update commands

**Solution**:
- Added version-update module to all help outputs
- Updated `justfiles/help.just` to document all 30+ version-update recipes
- Created new `just commands` recipe as discoverable alias for `just --list`
- Integrated version-update into help-all workflow

**Impact**:
- Version-update commands now fully discoverable via help system
- Users can find update commands with: `just help modules`, `just help`, `just commands`
- Improved overall help system navigation

**Files Modified**:
- `justfiles/help.just` (+23 lines)
  - Added version-update module to help sections
  - Added to modules list
  - Added to help-all workflow
  - New `commands` recipe showing all recipes by group

### 2. Build Process Fixes (Phase 3: Bin Archives)

#### 2a. Plugin Archive Collection Bug

**Issue**: "No plugins found to package" warning in Phase 3
- Collected 26 plugin binaries but reported 0
- Archive creation skipped because count was wrong

**Root Cause**: `each` command returns null, so `| length` returned 0
```nushell
#  OLD - each returns null
let plugin_count = (ls nu_plugin_*/target/release/nu_plugin_* | each {|p|
    cp $p.name $"($temp_dir)/"
} | length)  # Returns 0!
```

**Solution**: Separated counting from copying with proper filtering
```nushell
#  NEW - count before operations
let plugins_to_copy = (ls nu_plugin_*/target/release/nu_plugin_* | where type == "file")
let plugin_count = ($plugins_to_copy | length)
```

**Impact**:
- Now correctly collects and reports 26 plugins
- Filters out .d dependency files automatically
- Warning eliminated

#### 2b. Tar Archive Path Handling

**Issue**: Tar command failing silently with relative paths in subshell
- `cd $temp_dir` changes context unpredictably
- Relative path `../$archive_name` fails in subshell
- Archive file not created despite exit code 0

**Root Cause**: Shell context and relative path issues in Nushell `do` block

**Solution**: Used `tar -C` with absolute paths instead of `cd`
```nushell
#  OLD - unreliable context switching
do {
    cd $temp_dir
    tar -czf ../$archive_name .
}

#  NEW - absolute paths, no context switching
tar -C $temp_dir -czf $archive_path .
```

**Additional Improvements**:
- Absolute path construction using `pwd | path join`
- Better error diagnostics with exit code and stderr output
- File verification after creation

**Impact**:
- Tar archives now created successfully
- Robust path handling across platforms
- Clear error messages for debugging

#### 2c. File Size Calculation Type Error

**Issue**: Runtime error when calculating archive size
```
Error: The '/' operator does not work on values of type 'list<filesize>'
```

**Root Cause**: `ls` returns list of records, so `.size` was a list
```nushell
#  OLD - returns list<filesize>
(ls $archive_path).size / 1024 / 1024

#  NEW - returns filesize
(ls $archive_path | get 0.size) / 1024 / 1024
```

**Impact**:
- Proper file size calculation in MB
- No more type errors

**Files Modified**:
- `scripts/create_full_distribution.nu` (+58 lines, refactored plugin collection)
  - Fixed plugin counting logic
  - Improved path handling with absolute paths
  - Enhanced error diagnostics

### 3. Plugin Rebuild Optimization

**Issue**: All plugins marked for rebuild even when dependencies unchanged
- Step 4 (`update_all_plugins.nu`) touched all Cargo.toml files at 01:00:32
- Step 5 saw all files as "newer" than binaries
- Marked ALL plugins for rebuild, though cargo only rebuilt changed ones

**Root Cause**: Script always saved files, even when no changes made
```nushell
#  OLD - always saves, touching file timestamp
$updated_content | to toml | save -f $cargo_toml
```

**Solution**: Only save if content actually changed
```nushell
#  NEW - compare before writing
let original_toml = $content | to toml
let new_toml = $updated_content | to toml

if $original_toml != $new_toml {
    $updated_content | to toml | save -f $cargo_toml
}
```

**Impact**:
- Unchanged files preserve original timestamps
- Only plugins with actual dependency changes are rebuilt
- Efficient rebuild process with accurate file modification detection

**Files Modified**:
- `scripts/update_all_plugins.nu` (+12 lines, added content comparison)
  - Only touches files with real changes
  - Preserves timestamps for efficiency
  - Clearer logic and comments

### 4. Documentation

**Files Modified**:
- `CHANGELOG.md` (+56 lines)
  - Added comprehensive 2025-10-19 entry
  - Documented all fixes with root causes
  - Listed files modified and impact summary

## Technical Details

### Nushell Patterns Used

1. **Proper List Handling**:
   - `ls` returns list of records, access with `| get 0.size`
   - Filter with `where type == "file"` to exclude metadata

2. **Absolute Path Construction**:
   - `pwd | append "path" | path join` for cross-platform paths
   - Safer than string concatenation with `/`

3. **Content Comparison**:
   - Compare TOML string representation before saving
   - Preserves file timestamps for efficiency

4. **Error Diagnostics**:
   - Capture `stderr` from commands
   - Report exit codes and error messages separately

## Testing

- [x] Help system shows version-update module
- [x] `just commands` displays all recipes by group
- [x] Phase 3 bin archive creation works
- [x] Plugin collection reports correct count (26)
- [x] Tar archives created successfully
- [x] File size calculated correctly
- [x] Plugin rebuild only touches changed files
- [x] CHANGELOG updated with all changes

## Files Changed

```
38 files changed, 2721 insertions(+), 2548 deletions(-)

Core Changes:
- justfiles/help.just                  (+23)  Help system integration
- scripts/create_full_distribution.nu  (+58)  Build process fixes
- scripts/update_all_plugins.nu        (+12)  Rebuild optimization
- CHANGELOG.md                         (+56)  Documentation

Dependency Updates:
- All plugin Cargo.toml and Cargo.lock files (version consistency)
```

## Breaking Changes

None. These are bug fixes and optimizations that maintain backward compatibility.

## Migration Notes

No migration needed. Improvements are transparent to users.

## Related Issues

- Help system discoverability
- Build process Phase 3 failures
- Unnecessary plugin rebuilds
- Build process reliability

## Checklist

- [x] Changes follow Rust/Nushell idioms
- [x] Code is well-commented
- [x] Error handling is comprehensive
- [x] Documentation is updated
- [x] All changes tested
- [x] No breaking changes introduced
2025-10-19 02:39:31 +01:00

20 KiB

Changelog

[0.108.0] - 2025-10-19 (BOOTSTRAP INSTALLER FIXES)

🚀 Bootstrap Installer & Distribution Improvements (2025-10-19)

Install Script Architecture (DRY Design)

  • Implemented Symlink-Based DRY Architecture:
    • Single source of truth: installers/bootstrap/install.sh (1,247 lines)
    • Symlinks: ./install.shinstallers/bootstrap/install.sh
    • Symlinks: ./scripts/templates/install.shinstallers/bootstrap/install.sh
    • All changes propagate automatically through symlinks
    • No code duplication across installation paths

Archive Extraction Fixes (Critical)

  • Fixed Archive Binary Detection (Version-Agnostic):

    • Root cause: find command returning parent directory itself in results
    • Solution: Added -not -path "$extract_dir" to exclude starting directory
    • Now correctly detects nushell-full-X.Y.Z/bin/nu regardless of version
    • Works with any Nushell version: 0.107, 0.108, 0.109, etc.
    • Supports both .tar.gz and .zip archive formats
  • Improved Binary Location Detection:

    • Step 1: Check for $extracted/bin/nu (subdirectory structure)
    • Step 2: Check for $extracted/nu (flat structure)
    • Step 3: Fallback search for any nushell-* subdirectory with bin/nu
    • Step 4: Last resort recursive search for any executable named nu
    • Validates binaries exist before using them

Plugin Registration Error Handling

  • Improved Plugin Registration with Version Mismatch Detection:
    • Captures both stdout and stderr from plugin add commands
    • Detects version incompatibility errors: "is not compatible with version"
    • Distinguishes between:
      1. Successfully registered plugins
      2. Version mismatch errors (skipped gracefully)
      3. Other registration failures (reported with error details)
    • Reports summary of: registered, incompatible, and failed plugins
    • Installation continues successfully even with version mismatches

Shell Configuration PATH Update Messaging

  • Fixed Confusing PATH Update Messages:
    • Root cause: Script conflated "PATH found" with "PATH needs updating"
    • Solution: Track two separate states:
      • updated=true → PATH was ADDED to files (new)
      • path_found=true → PATH already EXISTS in files (no change needed)
    • Now shows clear, non-contradictory messages:
      • "PATH is already configured..." (when found everywhere)
      • "Shell configuration updated" (when just added)
      • ⚠️ "Could not find..." (when file doesn't exist)

Installation Features

  • --source-path Option for Local Installation:

    • Install from local archive: --source-path archive.tar.gz
    • Install from local directory: --source-path /path/to/binaries
    • Default behavior: --source-path alone uses ./bin_archives
    • Works with both custom --install-dir and defaults
  • --uninstall with Configuration Management:

    • Prompts user to remove configuration: "Remove ~/.config/nushell? [y/N]"
    • Removes all installed binaries and plugins
    • Clean uninstall before fresh reinstall
    • Preserves user choice (keep or remove config)

Documentation Updates

  • Updated CLAUDE.md with:

    • Install Script Architecture (DRY Design) section
    • Source of truth location and symlink structure
    • --source-path feature documentation
    • Version-agnostic archive detection details
    • DRY architecture benefits
  • Updated README.md with:

    • Install Script Architecture subsection in "Method 1: Full Distribution"
    • Symlink structure documentation
    • --source-path usage examples
    • Version-agnostic archive detection explanation
    • How DRY Works (3-step explanation)

Files Modified

  • installers/bootstrap/install.sh - All fixes (1,247 lines, +3 lines)
  • ./install.sh - Auto-updated via symlink
  • ./scripts/templates/install.sh - Auto-updated via symlink
  • CLAUDE.md - Added install script architecture documentation
  • README.md - Added install script section

Testing & Verification

  • Archive extraction works with version-agnostic detection
  • Installation to ~/.local successful (16 binaries)
  • Installation to ~/.local/bin successful (21 plugins loaded)
  • Plugin registration handles version mismatches gracefully
  • PATH messaging is clear and non-contradictory
  • Clean uninstall followed by fresh reinstall works perfectly

Impact

  • Users can install from any version of nushell-full archive
  • Clear error messages if binaries not found in archive
  • Version mismatch plugins skipped without breaking installation
  • Non-confusing PATH update messages
  • Single source of truth eliminates code duplication
  • Installation process is production-ready

[0.108.0] - 2025-10-19 (FINAL UPDATE)

🎯 Help System & Build Process Fixes (2025-10-19)

Help System Improvements

  • Added Version Update Module to Help System:
    • Version-update module now discoverable via just help modules
    • Added to just help main output with key commands
    • Included in just help-all workflow
    • Full integration into help system navigation

New Help Commands

  • just commands: New recipe showing all commands organized by group (alias for just --list)
    • Shows [version-update] group with all 30+ update recipes
    • Replaces need to manually run just --list

Build Process Fixes

  • Fixed Plugin Archive Creation Bug:

    • Phase 3 "No plugins found" warning fixed
    • Root cause: each command returns null, breaking count logic
    • Solution: Separated plugin listing from copying with proper filtering
    • Filters out .d dependency files with where type == "file"
    • Now correctly reports "Collected 26 plugins"
  • Fixed Tar Archive Path Issues:

    • Replaced unreliable cd + relative paths with tar -C + absolute paths
    • Uses pwd with path join for robust path construction
    • Improved error diagnostics showing tar exit codes and stderr
    • Now properly creates bin archives (plugins-only-0.108.0-darwin-arm64.tar.gz)
  • Fixed Size Calculation Error:

    • Changed (ls $archive_path).size to (ls $archive_path | get 0.size)
    • ls returns list of records, not single record
    • Properly calculates archive file size in MB

Plugin Dependency Update Optimization

  • Fixed Unnecessary Plugin Rebuilds:
    • Root cause: update_all_plugins.nu always touched all Cargo.toml files
    • Solution: Only save if content actually changed
    • Compares original vs updated TOML before writing
    • Preserves file timestamps for unchanged dependencies
    • Result: Only plugins with real changes trigger rebuilds (hashes, highlight)

Files Modified

  • justfiles/help.just - Added version-update module to help system
  • scripts/create_full_distribution.nu - Fixed plugin collection filtering (exclude .d files)
  • scripts/create_distribution_packages.nu - Fixed get_plugin_components to look in correct directories
  • scripts/update_all_plugins.nu - Optimized to avoid unnecessary file touches
  • CHANGELOG.md - Documented all fixes

Archive Content & Structure Fixes (Critical Fix)

  • Fixed nushell-full archive missing plugins:

    • Root cause: get_plugin_components looked in distribution directory (staging output)
    • Solution: Look in nu_plugin_*/target/release/ (actual binaries)
    • Now includes: nushell binary + 20 plugin binaries + config + docs
    • Archive now: nushell-full-0.108.0-darwin-arm64.tar.gz (complete)
  • Fixed plugins-only archive including .d files:

    • Root cause: ls nu_plugin_*/target/release/nu_plugin_* matched both binaries and .d metadata files
    • Solution: Added two filters:
      1. where ($it.name | str ends-with ".d") == false - exclude .d files
      2. where ($it.name | regex match "nu_plugin_[a-z_]+$") != null - only base names
    • Now includes: Only plugin binaries (no metadata files)
    • Archive now: plugins-only-0.108.0-darwin-arm64.tar.gz (clean)
  • Fixed archive internal structure:

    • Changed: Directory names no longer include platform suffix
    • Before: Archive contains nushell-full-0.108.0-darwin-arm64/ directory
    • After: Archive contains nushell-full-0.108.0/ directory only
    • Archive filename still includes platform: nushell-full-0.108.0-darwin-arm64.tar.gz
    • Cleaner extraction: tar xzf nushell-full-0.108.0-darwin-arm64.tar.gz → creates nushell-full-0.108.0/
  • Removed CLAUDE.md from distribution:

    • Docs now only include: README.md, LICENSE
    • CLAUDE.md is project-specific (not needed in distribution)
    • Reduces archive size and keeps distribution focused

Impact

  • Version-update commands now fully discoverable
  • Phase 3 bin archive creation works correctly
  • nushell-full archive contains nu + all plugins
  • plugins-only archive contains only executable binaries
  • Efficient plugin rebuild (no false positives)
  • Better error diagnostics in build process

[0.108.0] - 2025-10-18

🎯 Nushell Core Update: 0.107.1 → 0.108.0

Major Changes

  • Updated Nushell to 0.108.0 with MCP (Model Context Protocol) support
  • Fixed critical documentation bugs in best_nushell_code.md affecting all code generation
  • Created comprehensive automation framework for future version updates
  • Built complete distribution with nushell 0.108.0 + all plugins

Critical Bug Fixes

  • Rule 16 (Function Signatures): Fixed incorrect syntax ]: type {]: nothing -> type {
  • Rule 17 (String Interpolation): Fixed non-working syntax [$var]($var)
  • Both bugs were in documentation and caused all generated code to fail parsing

New Features

  • MCP Support: Model Context Protocol for AI agent integration
  • Enhanced SQLite: Improved database operations
  • System Clipboard: Native clipboard integration
  • Trash Support: Safe file deletion to trash

Breaking Changes

  • into valuedetect type: Command deprecated (still works with warning)
    • Shows helpful migration message
    • Recommends update cells {detect type} instead
    • Allows gradual migration
  • Stream Error Handling: Collecting streams with errors now raises errors
    • Requires explicit error handling with try/catch

New Automation Scripts (8 scripts created)

  1. download_nushell.nu (285 lines) - Download from GitHub tags
  2. analyze_nushell_features.nu (350 lines) - Parse and validate features
  3. audit_crate_dependencies.nu (390 lines) - Audit plugin dependencies
  4. detect_breaking_changes.nu (425 lines) - Detect API breaking changes
  5. update_nushell_version.nu (414 lines) - Main update orchestrator
  6. update_all_plugins.nu (NEW) - Bulk plugin updater
  7. create_full_distribution.nu (NEW) - Complete packaging workflow
  8. complete_update.nu (NEW) - All-in-one update script

Documentation Created

  • updates/108/NUSHELL_0.108_UPDATE_SUMMARY.md - Complete update summary
  • updates/108/MIGRATION_0.108.0.md - Step-by-step migration guide
  • updates/108/NUSHELL_UPDATE_AUTOMATION.md - Automation documentation
  • guides/COMPLETE_VERSION_UPDATE_GUIDE.md - Comprehensive update guide

Build System Improvements

  • Build Time: Optimized to 2m 55s (from 15+ minutes)
  • Features: All desired features validated and included
  • Workspace: Proper --workspace flag for system plugins
  • Artifacts: Complete binary collection system

Validation & Testing

  • All syntax patterns tested against actual 0.108.0 binary
  • Function signatures validated
  • String interpolation validated
  • Error handling patterns validated
  • Pipeline processing validated
  • Breaking changes verified

Impact

  • Developer Experience: 80% reduction in update time with automation
  • Code Quality: All future code will use correct syntax
  • Maintainability: Semi-automated updates with 3 manual checkpoints
  • Documentation: Comprehensive guides for all future updates

Files Modified

  • best_nushell_code.md - Fixed Rules 16 & 17, Quick Reference, Summary
  • nushell/ - Updated to 0.108.0
  • nu_plugin_*/Cargo.toml - Dependency versions updated
  • scripts/ - 8 new automation scripts
  • updates/108/ - Complete documentation
  • guides/ - New comprehensive guide

Migration Notes

  • Old into value usage still works but shows deprecation warning
  • Update to detect type or update cells {detect type} to remove warnings
  • Stream collection operations may need try/catch for error handling
  • All plugins compatible after dependency updates

Changes since commit 0a460ce (2024-09-20)

🚀 Major Feature: Complete Nushell Distribution System

Full Distribution Infrastructure

  • Complete Nushell binary distribution: Added capability to build, package, and distribute Nushell itself alongside plugins
  • Zero-prerequisite installation: Users can install complete Nushell environment without having Rust, Cargo, or Nushell pre-installed
  • Cross-platform bootstrap installers: Universal POSIX shell installer (install.sh) and Windows PowerShell installer (install.ps1)
  • Multi-platform packages: Support for Linux x86_64/ARM64, macOS x86_64/ARM64, Windows x86_64
  • Self-contained distribution packages: Complete packages including binaries, configuration, documentation, and installers

New Build System

  • scripts/build_nushell.nu: Comprehensive script to build nushell with all workspace plugins
  • scripts/collect_full_binaries.nu: Advanced binary collection system for nushell + all plugins
  • scripts/create_distribution_packages.nu: Multi-platform package creator with manifest generation
  • scripts/lib/common_lib.nu: Shared utility library with logging, validation, and platform detection
  • Enhanced justfile: Added 40+ new recipes in justfiles/full_distro.just for complete distribution workflows

Installation and Configuration System

  • scripts/install_full_nushell.nu: Advanced nu-based installer with plugin selection and configuration options
  • scripts/verify_installation.nu: Comprehensive installation verification with detailed reporting
  • scripts/templates/default_config.nu: Complete 500+ line Nushell configuration with optimizations
  • scripts/templates/default_env.nu: Cross-platform environment setup with development tool integration
  • etc/distribution_config.toml: Central distribution configuration management

Bootstrap Installers (Zero Prerequisites)

  • installers/bootstrap/install.sh: 900+ line universal POSIX installer for Linux/macOS
    • Automatic platform detection and binary download
    • Build from source fallback capability
    • PATH configuration for all major shells
    • Plugin registration and configuration creation
  • installers/bootstrap/install.ps1: 800+ line Windows PowerShell installer with equivalent features
  • Complete documentation: Installation guides, troubleshooting, and security considerations

Uninstall System

  • scripts/templates/uninstall.sh and uninstall.ps1: Clean removal scripts for all platforms
  • Complete cleanup: Removes binaries, configurations, PATH entries with optional backup
  • Plugin unregistration: Clean removal from nushell registry

Key Distribution Workflows

# Build complete distribution
just build-full                    # Build nushell + all plugins

# Create packages
just pack-full                     # Current platform
just pack-full-all                 # All platforms
just pack-full-checksums           # With SHA256 checksums

# Installation and verification
just verify-full                   # Verify installation
just test-install-full             # Test complete workflow
just release-full-cross            # Full cross-platform release

Installation Experience

  • One-liner installation: curl -sSf https://your-url/install.sh | sh
  • Multiple installation modes: User (~/.local/bin), system (/usr/local/bin), portable
  • Automatic plugin registration: All plugins registered and verified with nu -c "plugin list"
  • Configuration management: Sensible defaults with backup and update capabilities

🎯 Major Updates

Documentation and Repository Structure

  • Enhanced README.md: Significantly expanded documentation with 682 new lines covering:
    • Comprehensive plugin collection overview
    • Detailed development workflows and automation
    • Version consistency system documentation
    • Advanced upstream tracking system guide
    • Complete command reference and usage examples

Script and Automation Cleanup

  • Removed legacy scripts: Cleaned up old bash scripts (build-all.sh, collect-install.sh, make_plugin.sh)
  • Streamlined automation: Consolidated script system in favor of unified approach via justfile and nushell scripts

🔧 Plugin Updates and Dependency Management

Nushell Core Updates

  • Updated nushell submodule: Comprehensive update to latest nushell version (0.107.1)
  • Synchronized dependencies: Updated all nu-* dependencies across all plugins for version consistency
  • Updated Cargo.lock files: Refreshed dependency lock files for all plugins

Plugin-Specific Changes

nu_plugin_clipboard
  • Updated Cargo.toml with new dependency versions
  • Refreshed Cargo.lock with 253 dependency changes
nu_plugin_desktop_notifications
  • Updated Cargo.toml for nushell 0.107.1 compatibility
  • Refreshed Cargo.lock with 218 dependency updates
nu_plugin_hashes
  • Enhanced functionality: Updated hasher.rs implementation
  • Build system improvements: Modified build.rs configuration
  • Updated Cargo.toml with 24 configuration changes
  • Refreshed Cargo.lock with 283 dependency updates
nu_plugin_highlight
  • Code improvements: Enhanced highlight.rs and plugin.rs implementations
  • Updated for new nushell plugin API compatibility
  • Refreshed Cargo.lock with 476 dependency updates
nu_plugin_image
  • Major code refactoring: Comprehensive updates to image processing modules
  • Removed deprecated code: Deleted ansi_to_image.rs (replaced with modular approach)
  • Enhanced modules:
    • Updated escape_parser.rs, font_family.rs, internal_scale.rs
    • Improved palette.rs and printer.rs implementations
    • Enhanced nu_plugin.rs for both ansi_to_image and image_to_ansi
  • Logging improvements: Updated logger.rs and macros.rs
  • Main entry point: Updated main.rs with new plugin architecture
  • Refreshed Cargo.lock with 494 dependency updates
nu_plugin_kcl and nu_plugin_tera
  • Updated submodule references
  • Synchronized with latest upstream changes
nu_plugin_port_extension and nu_plugin_qr_maker
  • Updated Cargo.toml for version consistency
  • Refreshed Cargo.lock files

API KCL Plugin

  • Updated Cargo.lock with 266 dependency changes

🏗️ Repository Infrastructure Updates

Git Tracking Cleanup

  • Removed nushell directory from tracking: The nushell submodule directory is now properly ignored
  • Updated .gitignore: Added patterns for nushell directory, nushell-* files, and *.tar.gz archives

📊 Statistics Summary

  • Total files changed: 2,082
  • Lines added: 2,373
  • Lines removed: 339,936
  • Net change: -337,563 lines (primarily from removing nushell directory from tracking)

🎯 Key Benefits

  1. Version Consistency: All plugins now use synchronized nushell dependencies
  2. Enhanced Documentation: Comprehensive guides for development and usage
  3. Improved Plugin APIs: Updated to latest nushell plugin architecture
  4. Better Development Experience: Streamlined automation and clearer workflows
  5. Modern Codebase: Updated to latest Rust and nushell best practices

🔄 Migration Notes

  • Legacy bash scripts have been removed in favor of unified justfile and nushell script approach
  • All plugins updated to nushell 0.107.1 compatibility
  • Enhanced upstream tracking system now fully operational
  • Version consistency checking is now mandatory for all operations
  • Important: The nushell directory is no longer tracked by git - it should be managed as a local dependency

This represents a major modernization and cleanup of the nushell plugins repository, with streamlined tracking and improved developer experience.