409 lines
9.5 KiB
Markdown
409 lines
9.5 KiB
Markdown
|
|
# Update Installed Plugins Guide
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
The `scripts/update_installed_plugins.nu` script manages updating Nushell plugins that are already installed in `~/.local/bin`. It:
|
||
|
|
|
||
|
|
1. **Detects** which plugins are installed
|
||
|
|
2. **Matches** them with source code in the repository
|
||
|
|
3. **Removes** old plugin binaries
|
||
|
|
4. **Rebuilds** plugins from source
|
||
|
|
5. **Installs** new versions to `~/.local/bin`
|
||
|
|
6. **Registers** plugins with Nushell
|
||
|
|
|
||
|
|
This is different from `update_all_plugins.nu` which only updates Cargo.toml dependencies.
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
### Update All Installed Plugins
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check what would be updated (dry-run)
|
||
|
|
./scripts/update_installed_plugins.nu --check
|
||
|
|
|
||
|
|
# Update all installed plugins (with confirmation)
|
||
|
|
./scripts/update_installed_plugins.nu
|
||
|
|
|
||
|
|
# Update with verification
|
||
|
|
./scripts/update_installed_plugins.nu --verify
|
||
|
|
|
||
|
|
# Force rebuild (ignore cache)
|
||
|
|
./scripts/update_installed_plugins.nu --force
|
||
|
|
```
|
||
|
|
|
||
|
|
### Update Specific Plugin
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check if plugin can be updated
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_auth --check
|
||
|
|
|
||
|
|
# Update specific plugin
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_auth
|
||
|
|
|
||
|
|
# Update specific plugin without registering
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_auth --no-register
|
||
|
|
```
|
||
|
|
|
||
|
|
## Full Command Reference
|
||
|
|
|
||
|
|
### Basic Options
|
||
|
|
|
||
|
|
| Option | Short | Purpose | Default |
|
||
|
|
|--------|-------|---------|---------|
|
||
|
|
| `--check` | `-c` | Dry-run mode, no actual changes | `false` |
|
||
|
|
| `--verify` | `-v` | Verify registration after update | `false` |
|
||
|
|
| `--force` | `-f` | Force rebuild (clean build artifacts) | `false` |
|
||
|
|
| `--plugin NAME` | - | Update only specific plugin | All installed |
|
||
|
|
| `--no-register` | - | Skip registration step | `false` |
|
||
|
|
|
||
|
|
### Examples
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Dry-run to see what would happen
|
||
|
|
./scripts/update_installed_plugins.nu --check
|
||
|
|
|
||
|
|
# 2. Update all plugins with verification
|
||
|
|
./scripts/update_installed_plugins.nu --verify
|
||
|
|
|
||
|
|
# 3. Update with force rebuild and verification
|
||
|
|
./scripts/update_installed_plugins.nu --force --verify
|
||
|
|
|
||
|
|
# 4. Update specific plugin
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_kms
|
||
|
|
|
||
|
|
# 5. Check specific plugin only
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_orchestrator --check
|
||
|
|
|
||
|
|
# 6. Update and skip registration (register manually later)
|
||
|
|
./scripts/update_installed_plugins.nu --no-register
|
||
|
|
```
|
||
|
|
|
||
|
|
## What This Script Does
|
||
|
|
|
||
|
|
### Step 1: Detection
|
||
|
|
```
|
||
|
|
📋 Step 1: Detecting installed plugins...
|
||
|
|
Found 3 installed plugin(s):
|
||
|
|
• nu_plugin_auth (installed: /Users/user/.local/bin/nu_plugin_auth)
|
||
|
|
• nu_plugin_kms (installed: /Users/user/.local/bin/nu_plugin_kms)
|
||
|
|
• nu_plugin_orchestrator (installed: /Users/user/.local/bin/nu_plugin_orchestrator)
|
||
|
|
```
|
||
|
|
|
||
|
|
Scans `~/.local/bin` for executables matching `nu_plugin_*` pattern.
|
||
|
|
|
||
|
|
### Step 2: Source Discovery
|
||
|
|
```
|
||
|
|
🔍 Step 2: Finding plugin sources...
|
||
|
|
Found 5 plugin source(s)
|
||
|
|
```
|
||
|
|
|
||
|
|
Finds all `nu_plugin_*` directories in the current repository.
|
||
|
|
|
||
|
|
### Step 3: Matching
|
||
|
|
```
|
||
|
|
🔗 Step 3: Matching installed plugins with sources...
|
||
|
|
Ready to update 3 plugin(s):
|
||
|
|
• nu_plugin_auth
|
||
|
|
Source: /path/to/nu_plugin_auth
|
||
|
|
Target: ~/.local/bin/nu_plugin_auth
|
||
|
|
```
|
||
|
|
|
||
|
|
Matches installed plugins with their source directories.
|
||
|
|
|
||
|
|
### Step 4: Removal
|
||
|
|
```
|
||
|
|
🗑️ Step 4: Removing old plugin binaries...
|
||
|
|
Removing: nu_plugin_auth
|
||
|
|
✓ Deleted
|
||
|
|
```
|
||
|
|
|
||
|
|
Removes old plugin binaries from `~/.local/bin`.
|
||
|
|
|
||
|
|
### Step 5: Building
|
||
|
|
```
|
||
|
|
🔨 Step 5: Building updated plugins...
|
||
|
|
Building: nu_plugin_auth
|
||
|
|
Cleaning build artifacts...
|
||
|
|
Compiling...
|
||
|
|
✓ Built successfully
|
||
|
|
```
|
||
|
|
|
||
|
|
Rebuilds plugins with `cargo build --release` (optional cleanup with `--force`).
|
||
|
|
|
||
|
|
### Step 6: Installation
|
||
|
|
```
|
||
|
|
📦 Step 6: Installing new plugin binaries...
|
||
|
|
Installing: nu_plugin_auth
|
||
|
|
✓ Installed to ~/.local/bin/nu_plugin_auth
|
||
|
|
```
|
||
|
|
|
||
|
|
Copies new binaries to `~/.local/bin` with execute permission.
|
||
|
|
|
||
|
|
### Step 7: Registration
|
||
|
|
```
|
||
|
|
🔌 Step 7: Registering plugins with nushell...
|
||
|
|
Registering: nu_plugin_auth
|
||
|
|
✓ Registered
|
||
|
|
✓ Verified
|
||
|
|
```
|
||
|
|
|
||
|
|
Registers plugins with Nushell (removes old registration first).
|
||
|
|
|
||
|
|
## Workflow Examples
|
||
|
|
|
||
|
|
### Complete Update Cycle
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Check what would be updated
|
||
|
|
./scripts/update_installed_plugins.nu --check
|
||
|
|
|
||
|
|
# 2. Update all plugins
|
||
|
|
./scripts/update_installed_plugins.nu
|
||
|
|
|
||
|
|
# 3. Restart shell to load new plugins
|
||
|
|
exit
|
||
|
|
|
||
|
|
# 4. Verify plugins are working
|
||
|
|
nu -c "plugin list"
|
||
|
|
nu -c "auth login --help" # Test a specific plugin
|
||
|
|
```
|
||
|
|
|
||
|
|
### Update With Force Rebuild
|
||
|
|
|
||
|
|
Use this if you have suspicious cache or want clean build:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Force clean rebuild with verification
|
||
|
|
./scripts/update_installed_plugins.nu --force --verify
|
||
|
|
|
||
|
|
# Then restart and verify
|
||
|
|
exit
|
||
|
|
nu -c "plugin list"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Update Specific Plugin for Testing
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check if plugin can be updated
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_auth --check
|
||
|
|
|
||
|
|
# Update just this plugin
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_auth
|
||
|
|
|
||
|
|
# Restart and test
|
||
|
|
exit
|
||
|
|
nu -c "plugin list | where name =~ auth"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Manual Registration (if using --no-register)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Update without registration
|
||
|
|
./scripts/update_installed_plugins.nu --no-register
|
||
|
|
|
||
|
|
# Register manually later
|
||
|
|
nu -c "plugin add ~/.local/bin/nu_plugin_auth"
|
||
|
|
nu -c "plugin add ~/.local/bin/nu_plugin_kms"
|
||
|
|
nu -c "plugin add ~/.local/bin/nu_plugin_orchestrator"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Plugin Not Found
|
||
|
|
|
||
|
|
**Problem**: "Plugin not found or not installed"
|
||
|
|
|
||
|
|
**Solution**:
|
||
|
|
```bash
|
||
|
|
# List what's installed
|
||
|
|
ls ~/.local/bin/nu_plugin_*
|
||
|
|
|
||
|
|
# List what's available in repo
|
||
|
|
ls -d nu_plugin_*
|
||
|
|
|
||
|
|
# Install plugin first
|
||
|
|
./scripts/update_installed_plugins.nu # Updates only installed plugins
|
||
|
|
```
|
||
|
|
|
||
|
|
### Build Failure
|
||
|
|
|
||
|
|
**Problem**: Build fails during step 5
|
||
|
|
|
||
|
|
**Solution**:
|
||
|
|
```bash
|
||
|
|
# Try with verbose output
|
||
|
|
cd nu_plugin_NAME
|
||
|
|
cargo build --release
|
||
|
|
|
||
|
|
# Or use force rebuild
|
||
|
|
./scripts/update_installed_plugins.nu --force
|
||
|
|
```
|
||
|
|
|
||
|
|
### Registration Fails
|
||
|
|
|
||
|
|
**Problem**: Plugin registers but doesn't work
|
||
|
|
|
||
|
|
**Solution**:
|
||
|
|
```bash
|
||
|
|
# Remove and re-register manually
|
||
|
|
nu -c "plugin rm auth"
|
||
|
|
nu -c "plugin add ~/.local/bin/nu_plugin_auth"
|
||
|
|
|
||
|
|
# Restart shell
|
||
|
|
exit
|
||
|
|
nu -c "plugin list"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Permission Denied
|
||
|
|
|
||
|
|
**Problem**: "Permission denied" when trying to execute
|
||
|
|
|
||
|
|
**Solution**:
|
||
|
|
```bash
|
||
|
|
# Ensure ~/.local/bin is in PATH
|
||
|
|
echo $env.PATH | str split (char esep)
|
||
|
|
|
||
|
|
# Fix permissions
|
||
|
|
chmod +x ~/.local/bin/nu_plugin_*
|
||
|
|
|
||
|
|
# Ensure ~/.local/bin directory exists and is accessible
|
||
|
|
ls -ld ~/.local/bin
|
||
|
|
```
|
||
|
|
|
||
|
|
## Integration with Justfile
|
||
|
|
|
||
|
|
Add to `justfile` for easy access:
|
||
|
|
|
||
|
|
```makefile
|
||
|
|
# Update installed plugins with full workflow
|
||
|
|
update-installed-plugins:
|
||
|
|
@echo "🔄 Updating installed plugins..."
|
||
|
|
@./scripts/update_installed_plugins.nu --verify
|
||
|
|
|
||
|
|
# Update specific plugin
|
||
|
|
update-plugin-from-installed PLUGIN:
|
||
|
|
@./scripts/update_installed_plugins.nu --plugin {{PLUGIN}}
|
||
|
|
|
||
|
|
# Dry-run before update
|
||
|
|
check-plugin-updates:
|
||
|
|
@./scripts/update_installed_plugins.nu --check
|
||
|
|
```
|
||
|
|
|
||
|
|
Then use:
|
||
|
|
```bash
|
||
|
|
just update-installed-plugins
|
||
|
|
just update-plugin-from-installed nu_plugin_auth
|
||
|
|
just check-plugin-updates
|
||
|
|
```
|
||
|
|
|
||
|
|
## Comparison: Update Scripts
|
||
|
|
|
||
|
|
### `update_all_plugins.nu`
|
||
|
|
- **Purpose**: Update Cargo.toml dependencies
|
||
|
|
- **When to use**: Updating Nushell version in cargo files
|
||
|
|
- **Scope**: Changes source files only
|
||
|
|
- **Output**: Modified Cargo.toml files
|
||
|
|
- **Next step**: Must rebuild with `just build`
|
||
|
|
|
||
|
|
### `update_installed_plugins.nu` ✨ NEW
|
||
|
|
- **Purpose**: Update already-installed binaries
|
||
|
|
- **When to use**: Refresh binaries in ~/.local/bin
|
||
|
|
- **Scope**: Full cycle: build → install → register
|
||
|
|
- **Output**: New binaries in ~/.local/bin
|
||
|
|
- **Includes**: Automatic registration with Nushell
|
||
|
|
|
||
|
|
### Typical Workflow
|
||
|
|
|
||
|
|
1. **Update source dependencies**
|
||
|
|
```bash
|
||
|
|
./scripts/update_all_plugins.nu 0.108.0
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Rebuild and install**
|
||
|
|
```bash
|
||
|
|
./scripts/update_installed_plugins.nu --force --verify
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Restart and test**
|
||
|
|
```bash
|
||
|
|
exit
|
||
|
|
nu -c "plugin list"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Advanced Usage
|
||
|
|
|
||
|
|
### Custom Install Directory (Future Enhancement)
|
||
|
|
|
||
|
|
Currently hardcoded to `~/.local/bin`. To support custom directory:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Future: Would allow
|
||
|
|
PLUGIN_INSTALL_DIR=/custom/path ./scripts/update_installed_plugins.nu
|
||
|
|
```
|
||
|
|
|
||
|
|
### Batch Update Multiple Plugins
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Update in sequence
|
||
|
|
for plugin in auth kms orchestrator; do
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_$plugin
|
||
|
|
done
|
||
|
|
```
|
||
|
|
|
||
|
|
### Verify After Update
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Update with verification
|
||
|
|
./scripts/update_installed_plugins.nu --verify
|
||
|
|
|
||
|
|
# Or verify separately
|
||
|
|
nu -c "plugin list | format table"
|
||
|
|
nu -c "plugin list | each {|p| $\"($p.name): ($p.filename)\" }"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration Files
|
||
|
|
|
||
|
|
- **Plugin Registry**: `etc/plugin_registry.toml` - Track plugin metadata
|
||
|
|
- **Common Library**: `scripts/lib/common_lib.nu` - Shared logging functions
|
||
|
|
- **Build Config**: `Cargo.toml` in each plugin directory
|
||
|
|
|
||
|
|
## Support & Issues
|
||
|
|
|
||
|
|
For issues or enhancements:
|
||
|
|
1. Check troubleshooting section above
|
||
|
|
2. Review script output for specific error messages
|
||
|
|
3. Run with `--check` first to preview changes
|
||
|
|
4. Check build output: `cd nu_plugin_NAME && cargo build --release`
|
||
|
|
|
||
|
|
## Quick Reference Card
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# DRY RUN (safe, no changes)
|
||
|
|
./scripts/update_installed_plugins.nu --check
|
||
|
|
|
||
|
|
# UPDATE ALL (interactive confirmation)
|
||
|
|
./scripts/update_installed_plugins.nu
|
||
|
|
|
||
|
|
# UPDATE WITH VERIFICATION
|
||
|
|
./scripts/update_installed_plugins.nu --verify
|
||
|
|
|
||
|
|
# UPDATE ONE PLUGIN
|
||
|
|
./scripts/update_installed_plugins.nu --plugin nu_plugin_NAME
|
||
|
|
|
||
|
|
# FORCE REBUILD
|
||
|
|
./scripts/update_installed_plugins.nu --force
|
||
|
|
|
||
|
|
# SKIP REGISTRATION
|
||
|
|
./scripts/update_installed_plugins.nu --no-register
|
||
|
|
|
||
|
|
# THEN RESTART
|
||
|
|
exit
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Script Location**: `scripts/update_installed_plugins.nu`
|
||
|
|
**Install Directory**: `~/.local/bin`
|
||
|
|
**Created**: 2025-10-22
|
||
|
|
**Nushell Version**: 0.107.1+
|