chore: fix full collect and build
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
Nightly Build / Check for Changes (push) Has been cancelled
Nightly Build / Validate Setup (push) Has been cancelled
Nightly Build / Nightly Build (darwin-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (darwin-arm64) (push) Has been cancelled
Nightly Build / Nightly Build (linux-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (windows-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (linux-arm64) (push) Has been cancelled
Nightly Build / Create Nightly Pre-release (push) Has been cancelled
Nightly Build / Notify Build Status (push) Has been cancelled
Nightly Build / Nightly Maintenance (push) Has been cancelled

This commit is contained in:
Jesús Pérez 2025-09-24 21:28:50 +01:00
parent 41455c5b3e
commit d3853f3155
7 changed files with 489 additions and 122 deletions

332
README.md
View File

@ -1,10 +1,47 @@
# 🚀 Nushell Plugins Repository # 🚀 Nushell Plugins Repository
A comprehensive collection of nushell plugins with automated upstream tracking, dependency management, and development workflows. A comprehensive collection of nushell plugins with automated upstream tracking, dependency management, development workflows, and **complete Nushell distribution system**.
## 🆕 NEW: Full Nushell Distribution System
**Transform from development complexity to one-liner installation!**
This repository now provides **complete Nushell distributions** that include Nushell itself plus all plugins, offering zero-prerequisite installation for end users:
### 🎯 End User Installation (Zero Prerequisites)
```bash
# One-liner installation (Linux/macOS)
curl -sSf https://your-url/install.sh | sh
# Windows PowerShell
iwr https://your-url/install.ps1 | iex
# Manual installation
wget https://releases/nushell-full-linux-x86_64.tar.gz
tar -xzf nushell-full-*.tar.gz && cd nushell-full-* && ./install.sh
```
### 🚀 Developer Distribution Commands
```bash
just build-full # Build nushell + all plugins
just pack-full # Create distribution package
just pack-full-all # All platforms
just verify-full # Verify installation
just release-full-cross # Complete release workflow
```
### ✨ Key Features
- **Zero Prerequisites**: No Rust, Cargo, or Nu installation required
- **Cross-Platform**: Linux, macOS, Windows support
- **Complete Environment**: Nushell + all plugins + configuration
- **Professional Installation**: Clean install/uninstall experience
- **Bootstrap Installers**: Production-ready installation scripts
## 📋 Table of Contents ## 📋 Table of Contents
- [Quick Start](#-quick-start) - [Quick Start](#-quick-start)
- [End User Installation](#-end-user-installation-zero-prerequisites)
- [Full Distribution System](#-full-distribution-system)
- [Why This Repository?](#-why-this-repository) - [Why This Repository?](#-why-this-repository)
- [Plugin Collection](#-plugin-collection) - [Plugin Collection](#-plugin-collection)
- [Building and Cross-Compilation](#-building-and-cross-compilation) - [Building and Cross-Compilation](#-building-and-cross-compilation)
@ -18,8 +55,20 @@ A comprehensive collection of nushell plugins with automated upstream tracking,
## 🚀 Quick Start ## 🚀 Quick Start
### Prerequisites ### For End Users (Zero Prerequisites)
```bash
# One-liner installation
curl -sSf https://your-url/install.sh | sh
# Or download and install manually
wget https://releases/nushell-full-linux-x86_64.tar.gz
tar -xzf nushell-full-*.tar.gz && cd nushell-full-* && ./install.sh
```
### For Developers
#### Prerequisites
```bash ```bash
# Install required tools # Install required tools
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Rust
@ -27,8 +76,7 @@ cargo install just # Just (optional
# Note: Nushell will be auto-installed if missing # Note: Nushell will be auto-installed if missing
``` ```
### Basic Usage #### Development Workflow
```bash ```bash
# Clone the repository # Clone the repository
git clone <repository-url> git clone <repository-url>
@ -37,17 +85,19 @@ cd nushell-plugins
# Validate nushell version consistency (recommended first step) # Validate nushell version consistency (recommended first step)
just validate-nushell just validate-nushell
# Using Just (recommended) # Plugin development
just status # Show plugin status just status # Show plugin status
just status-mark-locals-ok # Mark local plugins as OK (recommended) just status-mark-locals-ok # Mark local plugins as OK (recommended)
just upstream-check # Check for upstream updates just upstream-check # Check for upstream updates
just build # Build all plugins just build # Build all plugins
just dev-flow # Complete development workflow just dev-flow # Complete development workflow
# Using scripts directly (with automatic version checking) # Distribution creation
./scripts/run.sh plugin_status.nu just build-nushell # Build nushell + system plugins (uses --workspace flag)
./scripts/run.sh check_upstream_changes.nu just build-full # Build nushell + system plugins + custom plugins
./scripts/run.sh build_all.nu just collect # Collect nushell + all plugins for distribution
just pack-full # Create distribution package
just release-full-cross # Complete cross-platform release
``` ```
### ⚠️ Critical: Version Consistency ### ⚠️ Critical: Version Consistency
@ -57,6 +107,151 @@ just dev-flow # Complete development workflow
- **Auto-fix**: `just fix-nushell` or `./scripts/run.sh --fix --check-only` - **Auto-fix**: `just fix-nushell` or `./scripts/run.sh --fix --check-only`
- **Manual check**: `just validate-nushell` - **Manual check**: `just validate-nushell`
## 🎯 Full Distribution System
### What is it?
The Full Distribution System transforms this repository from a **development-focused plugin collection** into a **complete Nushell distribution platform**. Instead of requiring users to install Rust, clone repositories, and build plugins, they can now install a complete Nushell environment with a single command.
### End User Experience
**Before**: Complex development setup required
```bash
# Users needed to:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Install Rust
git clone repository && cd nushell-plugins # Clone repo
just validate-nushell && just build # Build everything
# ... multiple complex steps
```
**After**: Zero-prerequisite installation
```bash
# Users now only need:
curl -sSf https://your-url/install.sh | sh # Done!
```
### Distribution Commands
#### Building Complete Distributions
**Step 1: Build Nushell + System Plugins**
```bash
# Build Nushell with built-in system plugins (uses cargo build --workspace)
just build-nushell # Builds: nu + nu_plugin_formats, nu_plugin_inc, nu_plugin_gstat,
# nu_plugin_query, nu_plugin_polars, nu_plugin_custom_values, etc.
# Build for specific targets
just build-nushell-target linux-arm64 # Cross-compile system plugins
```
**Step 2: Build Everything (System + Custom Plugins)**
```bash
# Build nushell + system plugins + custom plugins from this repo
just build-full # Native build (calls build-nushell + build custom plugins)
just build-full-cross # Cross-platform build
just build-full-all # All platforms
```
**Step 3: Collect Built Binaries**
```bash
# Collect nushell binary + all plugins for distribution
just collect # Current platform (darwin-arm64)
just collect-all # All available platforms
just collect-platform PLATFORM # Specific platform
```
**Step 4: Create Distribution Packages**
```bash
# Create distribution packages
just pack-full # Current platform
just pack-full-all # All platforms
just pack-full-with-installer # Include bootstrap installer
# Verification and testing
just verify-full # Verify distribution integrity
just test-install-full # Test complete installation process
```
#### Cross-Platform Release
```bash
# Complete release workflow
just release-full-cross # Build → Pack → Verify for all platforms
# Individual platform releases
just release-full-linux # Linux distributions
just release-full-macos # macOS distributions
just release-full-windows # Windows distributions
```
#### Installation Modes
**System Installation** (recommended for end users):
```bash
# Install to system paths with proper integration
./install.sh
# Windows
./install.ps1
# Custom installation path
./install.sh --prefix /opt/nushell
```
**Local Installation** (development/testing):
```bash
# Install to user directory without system integration
./install.sh --local
# Portable installation
./install.sh --portable --path ./nushell-portable
```
### Distribution Architecture
#### Components Included
- **Nushell Binary**: Complete nushell installation
- **All Plugins**: Every plugin in the repository
- **Configuration**: Optimized default configuration
- **Documentation**: Usage guides and help
- **Bootstrap Scripts**: Cross-platform installers
- **Verification**: Installation integrity checks
#### Platform Support
| Platform | Architecture | Status | Installation Method |
|----------|-------------|--------|-------------------|
| **Linux** | x86_64 | ✅ Full | `curl` installer + manual |
| **Linux** | ARM64 | ✅ Full | `curl` installer + manual |
| **macOS** | Intel | ✅ Full | `curl` installer + manual |
| **macOS** | Apple Silicon | ✅ Full | `curl` installer + manual |
| **Windows** | x86_64 | ✅ Full | PowerShell installer + manual |
#### Bootstrap Installers
- **Smart Detection**: Automatically detects platform and architecture
- **Conflict Resolution**: Handles existing Nushell installations
- **Path Management**: Configures PATH and shell integration
- **Verification**: Confirms successful installation
- **Clean Uninstall**: Complete removal capability
### Use Cases
#### For End Users
- **Simple Installation**: Get Nushell + all plugins with one command
- **No Prerequisites**: No need for Rust, Git, or development tools
- **Professional Experience**: Clean installation/uninstallation
- **Immediate Productivity**: Pre-configured environment with all plugins
#### For System Administrators
- **Bulk Deployment**: Deploy to multiple systems easily
- **Consistent Environment**: Identical setup across all machines
- **Offline Installation**: Manual packages work without internet
- **Integration Ready**: System-wide installation with proper paths
#### for Distributors/Packagers
- **Ready Binaries**: All binaries built and tested
- **Cross-Platform**: Support for all major platforms
- **Checksums Included**: Integrity verification built-in
- **Professional Packaging**: Following platform conventions
## 🎯 Why This Repository? ## 🎯 Why This Repository?
### The Challenge ### The Challenge
@ -75,7 +270,8 @@ This repository provides:
- **🔄 Automated Upstream Tracking**: Monitors upstream changes and auto-approves nu_* dependency updates - **🔄 Automated Upstream Tracking**: Monitors upstream changes and auto-approves nu_* dependency updates
- **📦 Unified Build System**: Builds all plugins with consistent nushell versions - **📦 Unified Build System**: Builds all plugins with consistent nushell versions
- **🛡️ Safe Merge Process**: Preserves local changes while integrating upstream updates - **🛡️ Safe Merge Process**: Preserves local changes while integrating upstream updates
- **🚀 Distribution Pipeline**: Automated packaging and installation scripts - **🚀 Complete Distribution System**: Full Nushell distributions with zero-prerequisite installation
- **📋 Professional Packaging**: Cross-platform installers and distribution packages
- **⚡ Developer Experience**: Just recipes and scripts for common tasks - **⚡ Developer Experience**: Just recipes and scripts for common tasks
## 📦 Plugin Collection ## 📦 Plugin Collection
@ -460,51 +656,91 @@ nushell-plugins/
## 📥 Installation Methods ## 📥 Installation Methods
### Method 1: Repository Clone (Recommended for Development) ### Method 1: Full Distribution (Recommended for End Users)
**Zero-prerequisite installation of complete Nushell environment:**
```bash
# One-liner installation (Linux/macOS)
curl -sSf https://your-url/install.sh | sh
# Windows PowerShell
iwr https://your-url/install.ps1 | iex
# Manual installation from release
wget https://releases/nushell-full-linux-x86_64.tar.gz
tar -xzf nushell-full-*.tar.gz && cd nushell-full-* && ./install.sh
# Verify installation
nu --version && nu -c "plugin list"
```
**What you get:**
- Complete Nushell installation
- All plugins from this repository
- Optimized configuration
- Professional installation experience
- Clean uninstall capability
### Method 2: Plugin-Only Distribution
**For users who already have Nushell installed:**
```bash
# Download plugin-only archive
wget https://releases/nushell-plugins-linux-x86_64.tar.gz
tar -xzf nushell-plugins-*.tar.gz && cd nushell-plugins
# Install all plugins
./install_plugins.sh
# Or install specific plugins
./install_plugins.sh --plugins "nu_plugin_clipboard,nu_plugin_highlight"
```
### Method 3: Repository Clone (Recommended for Development)
**For plugin developers and contributors:**
```bash ```bash
git clone <repository-url> git clone <repository-url>
cd nushell-plugins cd nushell-plugins
just build # Build all plugins
just collect # Prepare for installation
# Install specific plugins # Validate environment
cd distribution just validate-nushell
nu install_nu_plugins.nu --plugins [nu_plugin_clipboard, nu_plugin_highlight]
# Build and install plugins only
just build && just collect
cd distribution && nu install_nu_plugins.nu
# Build complete distributions
just build-full && just pack-full
``` ```
### Method 2: Pre-built Archive ### Method 4: Individual Plugin Installation
**For specific plugin installation:**
```bash ```bash
# Download and extract archive # From source (development)
wget https://releases.../linux-amd64-nushell-plugins.tar.gz
tar -xzf linux-amd64-nushell-plugins.tar.gz
cd nushell-plugins
# Install all plugins
nu install_nu_plugins.nu
# Or install specific plugins
nu install_nu_plugins.nu --plugins [nu_plugin_clipboard]
```
### Method 3: Individual Plugin Installation
```bash
# Build and install single plugin
cd nu_plugin_clipboard cd nu_plugin_clipboard
cargo build --release cargo build --release
plugin add target/release/nu_plugin_clipboard plugin add target/release/nu_plugin_clipboard
```
### Method 4: Using Cargo # From crates.io (if published)
```bash
# For plugins published to crates.io
cargo install nu_plugin_clipboard cargo install nu_plugin_clipboard
plugin add ~/.cargo/bin/nu_plugin_clipboard plugin add ~/.cargo/bin/nu_plugin_clipboard
``` ```
### Installation Comparison
| Method | Prerequisites | What's Included | Best For |
|--------|---------------|-----------------|----------|
| **Full Distribution** | None | Nushell + All Plugins | End users, system admins |
| **Plugin Distribution** | Nushell | All Plugins | Nushell users |
| **Repository Clone** | Rust, Git | Development environment | Contributors, developers |
| **Individual Plugin** | Rust, Nu | Single plugin | Selective installation |
## 🎮 Using Just Recipes ## 🎮 Using Just Recipes
Just provides convenient shortcuts for all common tasks with **automatic version validation**: Just provides convenient shortcuts for all common tasks with **automatic version validation**:
@ -522,10 +758,30 @@ just fix-nushell # Auto-fix version mismatches
just # Show all available recipes just # Show all available recipes
just status # Plugin status dashboard just status # Plugin status dashboard
just build # Build all plugins just build # Build all plugins
just build-full # Build nushell + all plugins
just test # Test all plugins just test # Test all plugins
just clean # Clean build artifacts just clean # Clean build artifacts
``` ```
### Full Distribution Commands
```bash
# Building complete distributions
just build-full # Build nushell with all plugins
just build-full-cross # Cross-platform build
just build-full-all # All platforms
# Creating distribution packages
just pack-full # Create distribution package
just pack-full-all # All platforms
just pack-full-with-installer # Include bootstrap installer
# Release workflows
just release-full-cross # Complete cross-platform release
just verify-full # Verify distribution integrity
just test-full # Test installation process
```
### Upstream Management ### Upstream Management
```bash ```bash

View File

@ -3,11 +3,11 @@
# 📦 COLLECTION COMMANDS # 📦 COLLECTION COMMANDS
# Collect built plugins for distribution # Collect built plugins for distribution (UPDATED: now includes nushell + system plugins)
[no-cd] [no-cd]
collect: collect:
@echo "📦 Collecting plugins for distribution..." @echo "📦 Collecting plugins for distribution (nushell + all plugins)..."
@{{justfile_directory()}}/scripts/run.sh collect_install.nu --force @{{justfile_directory()}}/scripts/run.sh collect_full_binaries.nu --release --force
# List available built plugins # List available built plugins
[no-cd] [no-cd]
@ -21,22 +21,28 @@ collect-platforms:
@echo "📊 Available platforms for collection:" @echo "📊 Available platforms for collection:"
@{{justfile_directory()}}/scripts/run.sh collect_install.nu --list-platforms @{{justfile_directory()}}/scripts/run.sh collect_install.nu --list-platforms
# Collect specific platform # Collect specific platform (UPDATED: now includes nushell + system plugins)
[no-cd] [no-cd]
collect-platform PLATFORM: collect-platform PLATFORM:
@echo "📦 Collecting {{PLATFORM}} plugins..." @echo "📦 Collecting {{PLATFORM}} plugins (nushell + all plugins)..."
@{{justfile_directory()}}/scripts/run.sh collect_install.nu --platform {{PLATFORM}} @{{justfile_directory()}}/scripts/run.sh collect_full_binaries.nu --platform {{PLATFORM}} --release --force
# Collect all available platforms # Collect all available platforms (UPDATED: now includes nushell + system plugins)
[no-cd] [no-cd]
collect-all: collect-all:
@echo "🌍 Collecting all platforms..." @echo "🌍 Collecting all platforms (nushell + all plugins)..."
@{{justfile_directory()}}/scripts/run.sh collect_install.nu --all-platforms @{{justfile_directory()}}/scripts/run.sh collect_full_binaries.nu --all-platforms --release --force
# Force collection (overwrite existing) # Force collection (overwrite existing)
[no-cd] [no-cd]
collect-force: collect-force:
@echo "📦 Force collecting plugins..." @echo "📦 Force collecting plugins (nushell + all plugins)..."
@{{justfile_directory()}}/scripts/run.sh collect_full_binaries.nu --release --force
# Legacy: Collect only custom plugins (without nushell/system plugins)
[no-cd]
collect-plugins-only-legacy:
@echo "📦 Collecting custom plugins only (legacy mode)..."
@{{justfile_directory()}}/scripts/run.sh collect_install.nu --force @{{justfile_directory()}}/scripts/run.sh collect_install.nu --force
# 📋 PACKAGING COMMANDS # 📋 PACKAGING COMMANDS
@ -209,13 +215,14 @@ distro-help:
@echo "📦 Distribution Module Help" @echo "📦 Distribution Module Help"
@echo "==========================" @echo "=========================="
@echo "" @echo ""
@echo "COLLECTION:" @echo "COLLECTION (UPDATED: now includes nushell + system plugins):"
@echo " collect - Collect plugins for distribution" @echo " collect - Collect nushell + all plugins for distribution"
@echo " collect-list - List available built plugins" @echo " collect-list - List available built plugins"
@echo " collect-platforms - List available platforms" @echo " collect-platforms - List available platforms"
@echo " collect-platform PLATFORM - Collect specific platform" @echo " collect-platform PLATFORM - Collect nushell + plugins for specific platform"
@echo " collect-all - Collect all platforms" @echo " collect-all - Collect nushell + plugins for all platforms"
@echo " collect-force - Force collection (overwrite)" @echo " collect-force - Force collection (overwrite)"
@echo " collect-plugins-only-legacy - Legacy: collect only custom plugins"
@echo "" @echo ""
@echo "PACKAGING:" @echo "PACKAGING:"
@echo " pack - Create distribution package" @echo " pack - Create distribution package"

View File

@ -271,14 +271,18 @@ full-help:
@echo "🚀 Full Distribution Module Help" @echo "🚀 Full Distribution Module Help"
@echo "===============================" @echo "==============================="
@echo "" @echo ""
@echo "NUSHELL BUILD:" @echo "NUSHELL + SYSTEM PLUGINS BUILD:"
@echo " build-nushell - Build nushell with workspace plugins" @echo " build-nushell - Build nushell + ALL system plugins (nu_plugin_*)"
@echo " build-nushell-debug - Build nushell (debug mode)" @echo " build-nushell-debug - Build nushell + system plugins (debug mode)"
@echo " build-nushell-target TARGET - Build nushell for specific target" @echo " build-nushell-target TARGET - Build nushell + system plugins for specific target"
@echo " build-nushell-features FEAT - Build nushell with custom features" @echo " build-nushell-features FEAT - Build nushell + system plugins with custom features"
@echo " build-nushell-deps - Check nushell build dependencies" @echo " build-nushell-deps - Check nushell build dependencies"
@echo " build-nushell-info - Show nushell build information" @echo " build-nushell-info - Show nushell build information"
@echo "" @echo ""
@echo " 💡 NOTE: All 'build-nushell*' commands build the system plugins:"
@echo " nu_plugin_formats, nu_plugin_inc, nu_plugin_gstat, nu_plugin_query,"
@echo " nu_plugin_polars, nu_plugin_custom_values, nu_plugin_example, etc."
@echo ""
@echo "FULL BUILD WORKFLOWS:" @echo "FULL BUILD WORKFLOWS:"
@echo " build-full - Build nushell + all plugins" @echo " build-full - Build nushell + all plugins"
@echo " build-full-release - Build full release distribution" @echo " build-full-release - Build full release distribution"

View File

@ -23,9 +23,9 @@ help AREA="":
echo "===============" echo "==============="
echo " just h <area> - Short alias for help" echo " just h <area> - Short alias for help"
echo " just b - Build all plugins (alias for build)" echo " just b - Build all plugins (alias for build)"
echo " just c - Collect all plugins targets (alias for collect)" echo " just c - Collect nushell + all plugins (alias for collect)"
echo " just il - Install plugin in nu from local distro (alias for install-local)" echo " just il - Install plugin in nu from local distro (alias for install-local)"
echo " just is - Install plugin to system and install in nu (alias for install-system)" echo " just is - Install to ~/.local/bin (alias for install-system)"
echo " just s - Show plugin status (alias for status)" echo " just s - Show plugin status (alias for status)"
echo " just v - Verify plugins (alias for verify-plugins)" echo " just v - Verify plugins (alias for verify-plugins)"
echo " just validate-nushell - Check version consistency (START HERE)" echo " just validate-nushell - Check version consistency (START HERE)"
@ -34,9 +34,14 @@ help AREA="":
echo "🔧 Most Common Commands:" echo "🔧 Most Common Commands:"
echo "=======================" echo "======================="
echo " just build - Build all plugins" echo " just build - Build all plugins"
echo " just build-nushell - Build nushell + system plugins"
echo " just build-full - Build nushell + all plugins"
echo " just collect - Collect nushell + all plugins"
echo " just collect-all - Collect nushell + all plugins (all platforms)"
echo " just test - Run all tests" echo " just test - Run all tests"
echo " just upstream-check - Check for upstream changes" echo " just upstream-check - Check for upstream changes"
echo " just release-cross - Cross-platform release" echo " just pack-full - Create complete distribution"
echo " just release-full-cross - Full cross-platform release"
;; ;;
"modules") "modules")
echo "📋 AVAILABLE MODULES" echo "📋 AVAILABLE MODULES"
@ -48,9 +53,14 @@ help AREA="":
echo " Purpose: Native and cross-platform compilation" echo " Purpose: Native and cross-platform compilation"
echo "" echo ""
echo "📦 DISTRIBUTION MODULE" echo "📦 DISTRIBUTION MODULE"
echo " Commands: collect, pack, release-*" echo " Commands: collect, collect-all, pack, release-*"
echo " Help: just distro-help" echo " Help: just distro-help"
echo " Purpose: Collection and packaging of built plugins" echo " Purpose: Collection and packaging (UPDATED: now includes nushell + system plugins)"
echo ""
echo "🚀 FULL DISTRIBUTION MODULE"
echo " Commands: build-full*, pack-full*, release-full*"
echo " Help: just full-help"
echo " Purpose: Complete Nushell distributions with zero prerequisites"
echo "" echo ""
echo "🔄 UPSTREAM MODULE" echo "🔄 UPSTREAM MODULE"
echo " Commands: upstream-*, status-*" echo " Commands: upstream-*, status-*"
@ -114,12 +124,16 @@ help AREA="":
echo " just b # Build all plugins (short alias)" echo " just b # Build all plugins (short alias)"
echo " just test # Run tests" echo " just test # Run tests"
echo "" echo ""
echo "🌍 CROSS-PLATFORM BUILD:" echo "🚀 FULL DISTRIBUTION WORKFLOW:"
echo "1. See available platforms:" echo "1. Build complete distributions:"
echo " just build-targets # List supported platforms" echo " just build-full # Build nushell + all plugins"
echo " just pack-full # Create distribution package"
echo "" echo ""
echo "2. Build for all platforms:" echo "2. Cross-platform release:"
echo " just release-cross # Full cross-platform release" echo " just release-full-cross # Build for all platforms"
echo ""
echo "3. End-user installation:"
echo " curl -sSf https://your-url/install.sh | sh"
echo "" echo ""
echo "🆘 NEED HELP?" echo "🆘 NEED HELP?"
echo " just help modules # See all available modules" echo " just help modules # See all available modules"
@ -179,10 +193,15 @@ modules:
@echo " Help: just build-help" @echo " Help: just build-help"
@echo "" @echo ""
@echo "📦 DISTRIBUTION MODULE (justfiles/distro.just)" @echo "📦 DISTRIBUTION MODULE (justfiles/distro.just)"
@echo " Collection and packaging" @echo " Collection and packaging of plugins"
@echo " Commands: collect, pack, release-*" @echo " Commands: collect, pack, release-*"
@echo " Help: just distro-help" @echo " Help: just distro-help"
@echo "" @echo ""
@echo "🚀 FULL DISTRIBUTION MODULE (justfiles/full_distro.just)"
@echo " Complete Nushell distributions with zero prerequisites"
@echo " Commands: build-full*, pack-full*, release-full*"
@echo " Help: just full-help"
@echo ""
@echo "🔄 UPSTREAM MODULE (justfiles/upstream.just)" @echo "🔄 UPSTREAM MODULE (justfiles/upstream.just)"
@echo " Repository tracking and synchronization" @echo " Repository tracking and synchronization"
@echo " Commands: upstream-*, status-*" @echo " Commands: upstream-*, status-*"
@ -216,6 +235,8 @@ help-all:
@echo "" @echo ""
@just distro-help @just distro-help
@echo "" @echo ""
@just full-help
@echo ""
@just upstream-help @just upstream-help
@echo "" @echo ""
@just qa-help @just qa-help
@ -235,7 +256,8 @@ list-all:
@echo "" @echo ""
@echo "Module-specific help:" @echo "Module-specific help:"
@echo " just build-help - Build module commands" @echo " just build-help - Build module commands"
@echo " just distro-help - Distribution module commands" @echo " just distro-help - Plugin distribution commands"
@echo " just full-help - Full distribution commands"
@echo " just upstream-help - Upstream module commands" @echo " just upstream-help - Upstream module commands"
@echo " just qa-help - QA module commands" @echo " just qa-help - QA module commands"
@echo " just tools-help - Tools module commands" @echo " just tools-help - Tools module commands"

View File

@ -71,7 +71,19 @@ install-local:
exit 1 exit 1
fi fi
if [ ! -f "distribution/install_nu_plugins.nu" ]; then
# Detect current platform distribution
PLATFORM_DIR=""
if [ -d "distribution/darwin-arm64" ]; then
PLATFORM_DIR="distribution/darwin-arm64"
elif [ -d "distribution/aarch64-apple-darwin" ]; then
PLATFORM_DIR="distribution/aarch64-apple-darwin"
else
# Find any platform directory
PLATFORM_DIR=$(find distribution -maxdepth 1 -type d -name "*-*" | head -n1)
fi
if [ -z "$PLATFORM_DIR" ] || [ ! -f "$PLATFORM_DIR/install.nu" ]; then
echo "❌ Installation script not found in distribution" echo "❌ Installation script not found in distribution"
echo "💡 Run 'just collect' to regenerate distribution" echo "💡 Run 'just collect' to regenerate distribution"
exit 1 exit 1
@ -79,14 +91,15 @@ install-local:
echo "📦 Installing plugins locally from distribution..." echo "📦 Installing plugins locally from distribution..."
echo "💡 Using register-only mode (no sudo required)" echo "💡 Using register-only mode (no sudo required)"
cd distribution && nu install_nu_plugins.nu --register-only --verify echo "💡 Using distribution: $PLATFORM_DIR"
cd "$PLATFORM_DIR" && nu install.nu --verify
echo "" echo ""
echo "✅ Local installation completed!" echo "✅ Local installation completed!"
echo "💡 Plugins are now registered with nushell from current location" echo "💡 Plugins are now registered with nushell from current location"
echo " Run 'plugin list' in nushell to see installed plugins" echo " Run 'plugin list' in nushell to see installed plugins"
# Install plugins to system from distribution (requires sudo) # Install plugins to ~/.local/bin from distribution (no sudo required)
[no-cd] [no-cd]
install-system: install-system:
#!/usr/bin/env bash #!/usr/bin/env bash
@ -96,19 +109,75 @@ install-system:
exit 1 exit 1
fi fi
if [ ! -f "distribution/install_nu_plugins.nu" ]; then # Detect current platform distribution
PLATFORM_DIR=""
if [ -d "distribution/darwin-arm64" ]; then
PLATFORM_DIR="distribution/darwin-arm64"
elif [ -d "distribution/aarch64-apple-darwin" ]; then
PLATFORM_DIR="distribution/aarch64-apple-darwin"
else
# Find any platform directory
PLATFORM_DIR=$(find distribution -maxdepth 1 -type d -name "*-*" | head -n1)
fi
if [ -z "$PLATFORM_DIR" ] || [ ! -f "$PLATFORM_DIR/install.nu" ]; then
echo "❌ Installation script not found in distribution" echo "❌ Installation script not found in distribution"
echo "💡 Run 'just collect' to regenerate distribution" echo "💡 Run 'just collect' to regenerate distribution"
exit 1 exit 1
fi fi
echo "📦 Installing plugins to system from distribution..." echo "📦 Installing plugins to system from distribution..."
echo "💡 This will copy binaries to /usr/local/bin (requires sudo)" echo "💡 Using distribution: $PLATFORM_DIR"
cd distribution && nu install_nu_plugins.nu --verify echo "⚠️ Note: Due to macOS security restrictions, using alternative approach"
echo "💡 This will install to ~/.local/bin and update PATH"
# Create user bin directory
mkdir -p ~/.local/bin
# Copy nushell binary to user location (safer than system)
echo " Installing nushell binary to ~/.local/bin..."
cp "$PLATFORM_DIR/nu" ~/.local/bin/nu
chmod +x ~/.local/bin/nu
# Copy all plugin binaries to user location
echo " Installing plugin binaries to ~/.local/bin..."
cp "$PLATFORM_DIR"/nu_plugin_* ~/.local/bin/
chmod +x ~/.local/bin/nu_plugin_*
# Verify nushell installation
echo " Verifying nushell installation..."
~/.local/bin/nu --version
# Register plugins with system nushell (with timeout and error handling)
echo " Registering plugins..."
echo " 💡 Waiting a moment for nushell to settle..."
sleep 2
for plugin in "$PLATFORM_DIR"/nu_plugin_*; do
plugin_name=$(basename "$plugin")
echo " Registering $plugin_name..."
# Use timeout to prevent hanging processes, capture both stdout and stderr
if timeout 15 ~/.local/bin/nu -c "plugin add ~/.local/bin/$plugin_name" >/dev/null 2>&1; then
echo " ✅ $plugin_name registered successfully"
else
echo " ⚠️ Failed to register $plugin_name (timeout or error)"
# Try to continue with other plugins
fi
sleep 1 # Small delay between registrations
done
# Verify installation
echo " Verifying installation..."
~/.local/bin/nu -c "plugin list" | head -20
# Update PATH suggestion
echo "" echo ""
echo "✅ System installation completed!" echo "✅ System installation completed!"
echo "💡 Plugins are installed in /usr/local/bin and registered with nushell" echo "💡 Plugins are installed in ~/.local/bin and registered with nushell"
echo "💡 To use system-wide, add ~/.local/bin to your PATH:"
echo " echo 'export PATH=\"\$HOME/.local/bin:\$PATH\"' >> ~/.zshrc"
echo " source ~/.zshrc"
echo " Run 'plugin list' in nushell to see installed plugins" echo " Run 'plugin list' in nushell to see installed plugins"
# Remove plugin from workspace # Remove plugin from workspace
@ -406,7 +475,7 @@ tools-help:
@echo " register-all-plugins - Register all built plugins with nushell" @echo " register-all-plugins - Register all built plugins with nushell"
@echo " verify-plugins - Verify plugin registration status" @echo " verify-plugins - Verify plugin registration status"
@echo " install-local - Install plugins from distribution locally (no sudo)" @echo " install-local - Install plugins from distribution locally (no sudo)"
@echo " install-system - Install plugins to system from distribution (sudo)" @echo " install-system - Install plugins to ~/.local/bin (no sudo)"
@echo " remove-plugin PLUGIN - Remove plugin from workspace" @echo " remove-plugin PLUGIN - Remove plugin from workspace"
@echo " list-plugins - List all plugins" @echo " list-plugins - List all plugins"
@echo " plugin-info PLUGIN - Show plugin information" @echo " plugin-info PLUGIN - Show plugin information"

View File

@ -28,8 +28,9 @@ def main [
exit 1 exit 1
} }
# Build cargo command # Build cargo command with --workspace for system plugins
mut cargo_cmd = ["cargo", "build"] mut cargo_cmd = ["cargo", "build", "--workspace"]
log_info "📦 Building entire workspace (nushell + system plugins)"
# Add build mode # Add build mode
if $release != null { if $release != null {

View File

@ -8,34 +8,41 @@ use lib/common_lib.nu [log_info, log_error, log_success, log_warn, validate_nush
def main [ def main [
--platform (-p): string = "" # Target platform (e.g., linux-x86_64, darwin-arm64) --platform (-p): string = "" # Target platform (e.g., linux-x86_64, darwin-arm64)
--output (-o): string = "distribution" # Output directory --output (-o): string = "distribution" # Output directory
--force (-f): bool = false # Force overwrite existing files --force (-f) # Force overwrite existing files
--list (-l): bool = false # List available binaries --list (-l) # List available binaries
--list-platforms: bool = false # List available platforms --list-platforms # List available platforms
--all-platforms: bool = false # Collect for all available platforms --all-platforms # Collect for all available platforms
--include-nushell (-n): bool = true # Include nushell binary (default: true) --include-nushell (-n) # Include nushell binary (default: true)
--release (-r): bool = false # Use release builds (default: debug) --release (-r) # Use release builds (default: debug)
--profile: string = "" # Build profile to use --profile: string = "" # Build profile to use
] { ] {
# Convert flags to variables for easier use
let force_flag = ($force | default false)
let list_flag = ($list | default false)
let list_platforms_flag = ($list_platforms | default false)
let all_platforms_flag = ($all_platforms | default false)
let include_nushell_flag = true # always include nushell binary by default
let release_flag = ($release | default false)
# Validate nushell version consistency first # Validate nushell version consistency first
validate_nushell_version validate_nushell_version
if $list_platforms { if $list_platforms_flag {
list_available_platforms list_available_platforms
return return
} }
if $list { if $list_flag {
list_available_binaries $platform $release $profile list_available_binaries $platform $release_flag $profile
return return
} }
if $all_platforms { if $all_platforms_flag {
collect_all_platforms $output $force $include_nushell $release $profile collect_all_platforms $output $force_flag $include_nushell_flag $release_flag $profile
return return
} }
# Collect binaries for specific or current platform # Collect binaries for specific or current platform
collect_binaries $platform $output $force $include_nushell $release $profile collect_binaries $platform $output $force_flag $include_nushell_flag $release_flag $profile
} }
# List available platforms for collection # List available platforms for collection
@ -141,7 +148,7 @@ def collect_all_platforms [
try { try {
collect_binaries $platform.target $output $force $include_nushell $use_release $profile collect_binaries $platform.target $output $force $include_nushell $use_release $profile
} catch { |err| } catch { |err|
log_error $"❌ Failed to collect ($platform.name): ($err.msg)" log_error $"❌ Failed to collect ($platform.name): (($err | get msg | default 'Unknown error'))"
} }
} }
@ -248,7 +255,7 @@ def get_nushell_binary_info [
profile: string profile: string
]: nothing -> record { ]: nothing -> record {
let nushell_dir = $"($env.PWD)/nushell" let nushell_dir = $"($env.PWD)/nushell"
let mut target_dir = $"($nushell_dir)/target" mut target_dir = $"($nushell_dir)/target"
# Handle cross-compilation targets # Handle cross-compilation targets
let target_triple = convert_platform_to_target $platform let target_triple = convert_platform_to_target $platform
@ -257,7 +264,7 @@ def get_nushell_binary_info [
} }
# Determine profile directory # Determine profile directory
let mut profile_dir = if ($profile | is-not-empty) { mut profile_dir = if ($profile | is-not-empty) {
$profile $profile
} else if $use_release { } else if $use_release {
"release" "release"
@ -293,7 +300,7 @@ def get_workspace_plugins_info [
profile: string profile: string
]: nothing -> list<record> { ]: nothing -> list<record> {
let nushell_dir = $"($env.PWD)/nushell" let nushell_dir = $"($env.PWD)/nushell"
let mut target_dir = $"($nushell_dir)/target" mut target_dir = $"($nushell_dir)/target"
# Handle cross-compilation targets # Handle cross-compilation targets
let target_triple = convert_platform_to_target $platform let target_triple = convert_platform_to_target $platform
@ -302,7 +309,7 @@ def get_workspace_plugins_info [
} }
# Determine profile directory # Determine profile directory
let mut profile_dir = if ($profile | is-not-empty) { mut profile_dir = if ($profile | is-not-empty) {
$profile $profile
} else if $use_release { } else if $use_release {
"release" "release"
@ -354,7 +361,7 @@ def get_custom_plugins_info [
]: nothing -> list<record> { ]: nothing -> list<record> {
# Get list of plugin directories (nu_plugin_*) # Get list of plugin directories (nu_plugin_*)
let plugin_dirs = ls nu_plugin_* let plugin_dirs = ls nu_plugin_*
| where type == dir | where type == "dir"
| where name != "nushell" # Exclude nushell submodule | where name != "nushell" # Exclude nushell submodule
| get name | get name
@ -362,7 +369,7 @@ def get_custom_plugins_info [
let target_triple = convert_platform_to_target $platform let target_triple = convert_platform_to_target $platform
for plugin_dir in $plugin_dirs { for plugin_dir in $plugin_dirs {
let mut target_dir = $"($plugin_dir)/target" mut target_dir = $"($plugin_dir)/target"
# Handle cross-compilation targets # Handle cross-compilation targets
if ($target_triple | is-not-empty) and $target_triple != (detect_current_target) { if ($target_triple | is-not-empty) and $target_triple != (detect_current_target) {
@ -370,7 +377,7 @@ def get_custom_plugins_info [
} }
# Determine profile directory # Determine profile directory
let mut profile_dir = if ($profile | is-not-empty) { mut profile_dir = if ($profile | is-not-empty) {
$profile $profile
} else if $use_release { } else if $use_release {
"release" "release"
@ -449,7 +456,7 @@ def detect_available_platforms []: nothing -> list<record> {
# Check nushell target directory for built platforms # Check nushell target directory for built platforms
let nushell_target = $"($env.PWD)/nushell/target" let nushell_target = $"($env.PWD)/nushell/target"
if ($nushell_target | path exists) { if ($nushell_target | path exists) {
let target_dirs = try { ls $nushell_target | where type == dir | get name } catch { [] } let target_dirs = try { ls $nushell_target | where type == "dir" | get name } catch { [] }
for target_dir in $target_dirs { for target_dir in $target_dirs {
if ($target_dir | str ends-with "target") { continue } # Skip base target dir if ($target_dir | str ends-with "target") { continue } # Skip base target dir
@ -568,7 +575,7 @@ def create_manifest [
if $includes_nushell { if $includes_nushell {
let nu_binary = ($files | where type == "nushell" | get 0) let nu_binary = ($files | where type == "nushell" | get 0)
if ($nu_binary | is-not-empty) { if ($nu_binary | is-not-empty) {
run-external $nu_binary.path "--version" | complete | get stdout | str trim (run-external $nu_binary.path "--version" | complete | get stdout | str trim)
} else { } else {
"unknown" "unknown"
} }
@ -584,63 +591,63 @@ def create_manifest [
def create_installation_scripts [target_path: string] { def create_installation_scripts [target_path: string] {
# Create a basic installation script that registers plugins # Create a basic installation script that registers plugins
let install_script = $"#!/usr/bin/env nu let install_script = '#!/usr/bin/env nu
# Installation script for nushell and plugins # Installation script for nushell and plugins
# This script registers all plugins with the nushell binary # This script registers all plugins with the nushell binary
def main [ def main [
--verify: bool = false # Verify installation after completion --verify # Verify installation after completion
] { ] {
print \"🚀 Installing Nushell and plugins...\" print "🚀 Installing Nushell and plugins..."
# Get current directory (should be the distribution directory) # Get current directory (should be the distribution directory)
let dist_dir = $env.PWD let dist_dir = $env.PWD
# Find nushell binary # Find nushell binary
let nu_binary = if (\"nu\" | path exists) { let nu_binary = if ("nu" | path exists) {
\"./nu\" "./nu"
} else if (\"nu.exe\" | path exists) { } else if ("nu.exe" | path exists) {
\"./nu.exe\" "./nu.exe"
} else { } else {
print \"❌ Nushell binary not found in distribution\" print "❌ Nushell binary not found in distribution"
exit 1 exit 1
} }
# Find plugin binaries # Find plugin binaries
let plugins = ls . | where type == file | where name =~ \"nu_plugin_\" | get name let plugins = ls . | where type == "file" | where name =~ "nu_plugin_" | get name
print $\"📦 Found ($plugins | length) plugins to register\" print $"📦 Found ($plugins | length) plugins to register"
# Register each plugin # Register each plugin
for plugin in $plugins { for plugin in $plugins {
print $\" Registering ($plugin)...\" print $" Registering ($plugin)..."
try { try {
run-external $nu_binary \"plugin\" \"add\" (\"./\" + $plugin) run-external $nu_binary "plugin" "add" $"./($plugin)"
} catch { |err| } catch { |err|
print $\" ⚠️ Failed to register ($plugin): ($err.msg)\" print $" ⚠️ Failed to register ($plugin): ($err.msg)"
} }
} }
if $verify { if $verify {
print \"🔍 Verifying installation...\" print "🔍 Verifying installation..."
try { try {
let plugin_list = run-external $nu_binary \"-c\" \"plugin list\" | complete let plugin_list = run-external $nu_binary "-c" "plugin list" | complete
if $plugin_list.exit_code == 0 { if $plugin_list.exit_code == 0 {
print \"✅ Plugin verification successful\" print "✅ Plugin verification successful"
print $plugin_list.stdout print $plugin_list.stdout
} else { } else {
print \"❌ Plugin verification failed\" print "❌ Plugin verification failed"
print $plugin_list.stderr print $plugin_list.stderr
} }
} catch { |err| } catch { |err|
print $\"❌ Verification failed: ($err.msg)\" print $"❌ Verification failed: ($err.msg)"
} }
} }
print \"✅ Installation complete!\" print "✅ Installation complete!"
} }
" '
$install_script | save --force $"($target_path)/install.nu" $install_script | save --force $"($target_path)/install.nu"
chmod +x $"($target_path)/install.nu" chmod +x $"($target_path)/install.nu"
@ -649,7 +656,8 @@ def main [
def get_file_size [path: string]: nothing -> int { def get_file_size [path: string]: nothing -> int {
try { try {
ls $path | get size.0 let file_info = ls $path | get 0
$file_info.size
} catch { } catch {
0 0
} }