210 lines
5.6 KiB
Markdown
210 lines
5.6 KiB
Markdown
|
|
# Migration Guide: Nushell 0.109.0
|
||
|
|
|
||
|
|
**Date**: 2025-11-30
|
||
|
|
**From**: 0.108.0
|
||
|
|
**To**: 0.109.0
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
This guide covers the migration of all 13 plugins from Nushell 0.108.0 to 0.109.0, including the improvements made to the version update system.
|
||
|
|
|
||
|
|
## What You Need to Know
|
||
|
|
|
||
|
|
### Version Management Changes
|
||
|
|
|
||
|
|
#### Smart Version Detection (NEW)
|
||
|
|
The update process now uses intelligent version management:
|
||
|
|
|
||
|
|
1. **Dependency Versions**: Always synchronized with Nushell version (all plugins get 0.109.0)
|
||
|
|
2. **Package Versions**: Only updated for plugins that tracked Nushell versions
|
||
|
|
3. **Independent Versions**: Preserved for plugins with their own versioning
|
||
|
|
|
||
|
|
Example:
|
||
|
|
```toml
|
||
|
|
# Before 0.109.0 update
|
||
|
|
[package]
|
||
|
|
version = "0.108.0" # Tracks Nushell version
|
||
|
|
|
||
|
|
[dependencies]
|
||
|
|
nu-plugin = "0.108.0" # Gets updated
|
||
|
|
```
|
||
|
|
|
||
|
|
```toml
|
||
|
|
# After 0.109.0 update
|
||
|
|
[package]
|
||
|
|
version = "0.109.0" # Updated because it was 0.108.0
|
||
|
|
nu-plugin = "0.109.0" # Always updated
|
||
|
|
```
|
||
|
|
|
||
|
|
### Script Improvements
|
||
|
|
|
||
|
|
#### 1. String Interpolation Fix (Rule 18 Compliance)
|
||
|
|
**Before**:
|
||
|
|
```nushell
|
||
|
|
log_info $"(DRY RUN) Would update ($p.name)" # ❌ Error: DRY is not a command
|
||
|
|
```
|
||
|
|
|
||
|
|
**After**:
|
||
|
|
```nushell
|
||
|
|
log_info $"\(DRY RUN\) Would update ($p.name)" # ✅ Correct: escaped parentheses
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 2. Template Generation Fix
|
||
|
|
**Before**:
|
||
|
|
```nushell
|
||
|
|
# Generated incorrect filename
|
||
|
|
install_script | save --force $"($target_path)/install.nu" # ❌ Wrong name
|
||
|
|
```
|
||
|
|
|
||
|
|
**After**:
|
||
|
|
```nushell
|
||
|
|
# Correctly generates register-plugins.nu
|
||
|
|
install_script | save --force $"($target_path)/register-plugins.nu" # ✅ Correct
|
||
|
|
```
|
||
|
|
|
||
|
|
**Reason**:
|
||
|
|
- `install.sh` - Installs binaries to filesystem
|
||
|
|
- `register-plugins.nu` - Registers plugins with Nushell (doesn't install binaries)
|
||
|
|
|
||
|
|
#### 3. Bootstrap Auto-Detection
|
||
|
|
**Before**:
|
||
|
|
```bash
|
||
|
|
# Had to manually specify source path
|
||
|
|
./install.sh --source-path ./bin
|
||
|
|
```
|
||
|
|
|
||
|
|
**After**:
|
||
|
|
```bash
|
||
|
|
# Automatically detects local binaries
|
||
|
|
./install.sh # ✅ Auto-detects ./bin/nu or ./nu
|
||
|
|
```
|
||
|
|
|
||
|
|
### Updated Plugins
|
||
|
|
|
||
|
|
#### Package Version Updated
|
||
|
|
- **nu_plugin_clipboard**: 0.108.0 → 0.109.0
|
||
|
|
- Had previous Nushell version, so it was automatically updated
|
||
|
|
- All 13 plugins still have nu-plugin = 0.109.0 dependency
|
||
|
|
|
||
|
|
#### Package Versions Preserved
|
||
|
|
All other plugins kept their own versions:
|
||
|
|
- `nu_plugin_auth`: 0.1.0 (custom version)
|
||
|
|
- `nu_plugin_desktop_notifications`: 1.2.12 (custom version)
|
||
|
|
- `nu_plugin_fluent`: 0.1.0 (custom version)
|
||
|
|
- `nu_plugin_hashes`: 0.1.8 (custom version)
|
||
|
|
- `nu_plugin_highlight`: 1.4.7+0.105.2 (custom version)
|
||
|
|
- `nu_plugin_image`: 0.105.1 (custom version)
|
||
|
|
- `nu_plugin_kcl`: 0.1.0 (custom version)
|
||
|
|
- `nu_plugin_kms`: 0.1.0 (custom version)
|
||
|
|
- `nu_plugin_orchestrator`: 0.1.0 (custom version)
|
||
|
|
- `nu_plugin_port_extension`: 0.109.0 (already at Nushell version)
|
||
|
|
- `nu_plugin_qr_maker`: 1.1.0 (custom version)
|
||
|
|
- `nu_plugin_tera`: 0.1.0 (custom version)
|
||
|
|
|
||
|
|
## Backward Compatibility
|
||
|
|
|
||
|
|
### For Future Updates
|
||
|
|
|
||
|
|
When updating to **0.110.0** or later, the system will:
|
||
|
|
|
||
|
|
1. Calculate the previous version automatically (0.109.0 in this case)
|
||
|
|
2. Only update plugins that have version = 0.109.0
|
||
|
|
3. Preserve all independent versions
|
||
|
|
|
||
|
|
**Example for 0.110.0 update**:
|
||
|
|
```nushell
|
||
|
|
# Plugin versions with 0.109.0 would become 0.110.0
|
||
|
|
# Others would stay as-is
|
||
|
|
```
|
||
|
|
|
||
|
|
### Breaking Changes
|
||
|
|
|
||
|
|
**None** - All plugins are backward compatible with 0.109.0
|
||
|
|
|
||
|
|
### Deprecations
|
||
|
|
|
||
|
|
**None** - All functionality is preserved
|
||
|
|
|
||
|
|
## Installation & Registration
|
||
|
|
|
||
|
|
### New Workflow
|
||
|
|
```bash
|
||
|
|
# 1. Install binaries
|
||
|
|
cd distribution/darwin-arm64
|
||
|
|
./install.sh
|
||
|
|
|
||
|
|
# 2. Register plugins with Nushell (doesn't install, just registers)
|
||
|
|
nu register-plugins.nu
|
||
|
|
|
||
|
|
# 3. Verify installation
|
||
|
|
nu -c 'plugin list'
|
||
|
|
```
|
||
|
|
|
||
|
|
### Old Workflow (Before)
|
||
|
|
The `install.sh` script now handles both binary installation and has better auto-detection.
|
||
|
|
|
||
|
|
## Performance Impact
|
||
|
|
|
||
|
|
- **None** - All plugins compile to equivalent binaries
|
||
|
|
- Build times may vary based on system load
|
||
|
|
- No runtime performance changes
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Issue: "plugin list" shows old version
|
||
|
|
|
||
|
|
**Solution**: Rebuild and re-register
|
||
|
|
```bash
|
||
|
|
just build
|
||
|
|
nu register-plugins.nu
|
||
|
|
```
|
||
|
|
|
||
|
|
### Issue: "DRY RUN error" when running update script
|
||
|
|
|
||
|
|
**Solution**: This is fixed in 0.109.0. Ensure you have the latest scripts.
|
||
|
|
|
||
|
|
### Issue: install.sh doesn't auto-detect binaries
|
||
|
|
|
||
|
|
**Solution**: Ensure you have the latest `installers/bootstrap/install.sh`
|
||
|
|
|
||
|
|
## Files Changed
|
||
|
|
|
||
|
|
### Modified Scripts
|
||
|
|
- `scripts/update_all_plugins.nu` - Smart version detection
|
||
|
|
- `scripts/collect_full_binaries.nu` - Correct template generation
|
||
|
|
- `scripts/complete_update.nu` - Updated documentation
|
||
|
|
- `scripts/create_full_distribution.nu` - Updated documentation
|
||
|
|
- `installers/bootstrap/install.sh` - Auto-detection added
|
||
|
|
|
||
|
|
### Modified Documentation
|
||
|
|
- `CLAUDE.md` - Version updated to 0.109.0
|
||
|
|
|
||
|
|
### Plugin Updates
|
||
|
|
- `nu_plugin_clipboard/Cargo.toml` - Version 0.108.0 → 0.109.0
|
||
|
|
|
||
|
|
## Validation Checklist
|
||
|
|
|
||
|
|
- [x] All 13 plugins compile successfully
|
||
|
|
- [x] All plugins have nu-plugin = 0.109.0 dependency
|
||
|
|
- [x] Package versions are correctly handled (1 updated, 12 preserved)
|
||
|
|
- [x] Scripts work without string interpolation errors
|
||
|
|
- [x] Templates generate correct filenames
|
||
|
|
- [x] Bootstrap installer auto-detects local binaries
|
||
|
|
- [x] Plugin registration works correctly
|
||
|
|
- [x] Distribution packages are complete
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
1. Review the update summary: `updates/109/UPDATE_SUMMARY.md`
|
||
|
|
2. Build plugins: `just build`
|
||
|
|
3. Test: `just test`
|
||
|
|
4. Create distribution: `just pack-full`
|
||
|
|
5. Review changes and commit when ready
|
||
|
|
|
||
|
|
## Questions or Issues?
|
||
|
|
|
||
|
|
Refer to:
|
||
|
|
- `CLAUDE.md` - Project guidelines and setup
|
||
|
|
- `guides/COMPLETE_VERSION_UPDATE_GUIDE.md` - Complete update procedures
|
||
|
|
- `updates/109/UPDATE_SUMMARY.md` - What changed in this update
|