nushell-plugins/guides/DISTRIBUTION_SYSTEM.md
Jesús Pérez 4b92aa764a
Some checks failed
Build and Test / Validate Setup (push) Has been cancelled
Build and Test / Build (darwin-amd64) (push) Has been cancelled
Build and Test / Build (darwin-arm64) (push) Has been cancelled
Build and Test / Build (linux-amd64) (push) Has been cancelled
Build and Test / Build (windows-amd64) (push) Has been cancelled
Build and Test / Build (linux-arm64) (push) Has been cancelled
Build and Test / Security Audit (push) Has been cancelled
Build and Test / Package Results (push) Has been cancelled
Build and Test / Quality Gate (push) Has been cancelled
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
2025-12-11 22:04:54 +00:00

8.3 KiB

Nushell Distribution System (Streamlined)

Version: 1.0.0 (Consolidated) Date: 2025-10-22 Status: Complete and tested

Overview

This is a smart, minimal distribution system for Nushell plugins that:

  • Installs Nushell binary and/or plugins
  • Automatically discovers available components
  • Provides preset plugin selections (essential, development, full)
  • Supports interactive selection or command-line specification
  • Includes dry-run mode for previewing changes
  • Manages both installation and plugin registration

Core Components

1. Distribution Manifest Generator (scripts/create_distribution_manifest.nu)

Purpose: Auto-generate manifest from actual binaries in distribution

# Scan current directory for plugins
./scripts/create_distribution_manifest.nu

# Scan specific directory
./scripts/create_distribution_manifest.nu /path/to/plugins

# Custom output file
./scripts/create_distribution_manifest.nu --output manifest.json

Output: DISTRIBUTION_MANIFEST.json

{
  "version": "1.0.0",
  "created": "2025-10-22T10:52:08Z",
  "source_directory": "/path/to/plugins",
  "total_plugins": 13,
  "plugins": [
    {
      "name": "nu_plugin_auth",
      "purpose": "Authentication (JWT, MFA)",
      "path": "/path/to/plugins/nu_plugin_auth",
      "size_bytes": 11846592
    }
    // ... more plugins
  ]
}

2. Smart Distribution Installer (scripts/install_from_manifest.nu)

Purpose: Install and register Nushell + plugins based on manifest

# Interactive menu (prompts for selection)
./install_from_manifest.nu

# List available plugins
./install_from_manifest.nu --list

# Install everything
./install_from_manifest.nu --all

# Use preset (essential, development, full)
./install_from_manifest.nu --preset essential

# Install specific plugins
./install_from_manifest.nu --select auth kms orchestrator

# Dry-run (preview without changes)
./install_from_manifest.nu --all --check

# Install only, skip registration
./install_from_manifest.nu --all --install-only

# Register only, skip installation
./install_from_manifest.nu --all --register-only

# Custom manifest location
./install_from_manifest.nu --manifest /path/to/manifest.json

Usage Workflow

For Distribution Creators

Step 1: Prepare Distribution Directory

distribution/
├── bin/
│   ├── nu_plugin_auth
│   ├── nu_plugin_kms
│   ├── nu_plugin_orchestrator
│   └── ... (all plugin binaries)
├── nu (optional - nushell binary)
└── install_from_manifest.nu (symlink to script)

Step 2: Generate Manifest

cd distribution
../../scripts/create_distribution_manifest.nu bin --output DISTRIBUTION_MANIFEST.json

Step 3: Package for Distribution

tar -czf nushell-plugins-distribution.tar.gz distribution/

For End Users

Step 1: Extract Distribution

tar -xzf nushell-plugins-distribution.tar.gz
cd distribution

Step 2: Preview Available Plugins

./install_from_manifest.nu --list

Step 3: Install Preferred Preset

# Essential plugins (5 core plugins)
./install_from_manifest.nu --preset essential

# Development plugins (8 plugins)
./install_from_manifest.nu --preset development

# All plugins
./install_from_manifest.nu --all

Step 4: Verify Installation

nu -c "plugin list"

Available Presets

Essential (5 plugins)

  • nu_plugin_auth - Authentication (JWT, MFA)
  • nu_plugin_kms - Encryption & KMS
  • nu_plugin_orchestrator - Orchestration operations
  • nu_plugin_kcl - KCL configuration
  • nu_plugin_tera - Template rendering

Development (8 plugins)

Essential +

  • nu_plugin_highlight - Syntax highlighting
  • nu_plugin_image - Image processing
  • nu_plugin_clipboard - Clipboard operations

Full (All plugins in manifest)

All available plugins in the distribution

Installation Modes

Mode Command Behavior
Default No args Interactive menu
All --all Install all plugins
Preset --preset essential Use preset selection
Custom --select auth kms Select specific plugins
List --list Show available plugins
Dry-run --check Preview without changes
Install-only --install-only Skip registration
Register-only --register-only Skip installation

Default Behavior

If no manifest is found, the installer:

  1. Scans current directory for plugin binaries (nu_plugin_* pattern)
  2. Detects Nushell binary if present (./nu or ./bin/nu)
  3. Shows interactive menu for selection
  4. Installs and registers as normal

This allows graceful fallback when manifest isn't available.

Features

Manifest-Driven: JSON manifest lists all available plugins Auto-Detection: Discovers plugins in distribution if no manifest Flexible Selection: Presets, specific plugins, or interactive menu User Choice: No forced installations Safe: Dry-run mode to preview changes Separate Modes: Install-only or register-only options Clear Logging: Color-coded output at each step Smart: Single script handles all scenarios Verified: Tested with actual plugin manifests

Testing

The installer has been tested with:

  • Manifest loading (list mode)
  • Preset selection (essential, development, full)
  • Dry-run mode (--check flag)
  • Full installation flow (with confirmation)

Test Results:

$ ./install_from_manifest.nu --manifest /tmp/manifest.json --list
✅ Loaded 13 plugins successfully

$ ./install_from_manifest.nu --manifest /tmp/manifest.json --preset essential --check
✅ Selected 5 plugins (essential preset)
✅ DRY RUN - No changes made

$ ./install_from_manifest.nu --manifest /tmp/manifest.json --all --check
✅ Selected 13 plugins
✅ DRY RUN - No changes made

File Structure

provisioning/core/plugins/nushell-plugins/
├── scripts/
│   ├── create_distribution_manifest.nu    # Generate manifest
│   ├── install_from_manifest.nu           # Main installer
│   └── ... (other build/distribution scripts)
├── DISTRIBUTION_INSTALLER_WORKFLOW.md     # Complete workflow docs
├── DISTRIBUTION_SYSTEM.md                 # This file
└── README.md                              # Main project README

Cleanup Summary

Consolidated Files

  • Deleted redundant markdown docs (5 files)
  • Deleted redundant installers (3 scripts)
  • Kept single unified installer: install_from_manifest.nu
  • Kept manifest generator: create_distribution_manifest.nu
  • Reduced from 13+ files to 2 core scripts + 1 doc

Result: Clean, minimal, production-ready distribution system

Example: Complete Distribution Package

nushell-plugins-distribution/
├── nu                          # Nushell binary (if included)
├── nu_plugin_auth              # Plugin binaries
├── nu_plugin_kms
├── nu_plugin_orchestrator
├── ... (all other plugins)
├── DISTRIBUTION_MANIFEST.json  # Auto-generated manifest
├── install_from_manifest.nu    # Main installer
├── README.md                   # User guide
└── LICENSE

Users can then:

./install_from_manifest.nu --preset essential --check  # Preview
./install_from_manifest.nu --preset essential           # Install
nu -c "plugin list"                                     # Verify

Quick Reference

Task Command
Generate manifest ./scripts/create_distribution_manifest.nu [path]
List plugins ./install_from_manifest.nu --list
Preview install ./install_from_manifest.nu --all --check
Install all ./install_from_manifest.nu --all
Install preset ./install_from_manifest.nu --preset essential
Install specific ./install_from_manifest.nu --select auth kms
Install without register ./install_from_manifest.nu --all --install-only
Register only ./install_from_manifest.nu --all --register-only

Documentation

  • Workflow Guide: DISTRIBUTION_INSTALLER_WORKFLOW.md - Complete step-by-step guide
  • This File: Architecture and features overview
  • Inline Comments: Both scripts are well-commented for maintainability

Status: Production Ready Tested: All modes verified Simplified: Consolidated from 13+ files to 2 core scripts