157 lines
3.9 KiB
Markdown
157 lines
3.9 KiB
Markdown
# Tea CLI Installer - Advanced Version Management
|
|
|
|
## Enhanced Installation Strategy
|
|
|
|
The Tea CLI installer now implements sophisticated version management with user-specific installations:
|
|
|
|
### Installation Priority Order
|
|
|
|
1. **User Bin Directory** (`~/bin`) - Preferred
|
|
- Checks if `~/bin` exists and is in PATH
|
|
- Installs binaries with version-specific names
|
|
- Creates symlinks for easy version switching
|
|
- Allows multiple versions side-by-side
|
|
|
|
2. **System Installation** (`/usr/local/bin`) - Fallback
|
|
- Used when user bin is not available
|
|
- Requires sudo for system-wide installation
|
|
- Single version installation
|
|
|
|
### Version Management Features
|
|
|
|
#### Symlink-Based Version Control
|
|
```bash
|
|
~/bin/
|
|
├── tea -> tea-v0.11.1 # Active version symlink
|
|
├── tea-v0.11.0 # Previous version
|
|
├── tea-v0.11.1 # Current version
|
|
└── tea-v0.12.0 # Future version (when available)
|
|
```
|
|
|
|
#### Automatic Updates
|
|
- Detects current version via symlink
|
|
- Downloads newer versions with version suffix
|
|
- Updates symlink to point to latest version
|
|
- Preserves old versions for rollback
|
|
|
|
### Installation Strategies
|
|
|
|
#### `user_install` - Fresh User Installation
|
|
- When Tea CLI not found in user bin
|
|
- Creates versioned binary and symlink
|
|
- No sudo required
|
|
|
|
#### `user_update` - User Version Update
|
|
- When newer version available
|
|
- Downloads new version with suffix
|
|
- Updates symlink to new version
|
|
- Keeps old versions
|
|
|
|
#### `user_upgrade` - User Upgrade (No Symlink)
|
|
- When existing binary found but no symlink
|
|
- Creates versioned structure
|
|
- Adds symlink management
|
|
|
|
#### `system_install` - System Installation
|
|
- When user bin not available/in PATH
|
|
- Installs to `/usr/local/bin`
|
|
- Requires sudo privileges
|
|
|
|
### Usage Examples
|
|
|
|
#### Normal Usage (Auto-detects strategy)
|
|
```bash
|
|
./install-tea-cli.sh
|
|
# Detects user bin, checks versions, updates if needed
|
|
```
|
|
|
|
#### Force Binary Installation
|
|
```bash
|
|
./install-tea-cli.sh --force --binary
|
|
# Forces binary download regardless of current version
|
|
```
|
|
|
|
#### Check Current Status
|
|
```bash
|
|
./install-tea-cli.sh
|
|
# Shows current version and installation type
|
|
# Exits if no update needed
|
|
```
|
|
|
|
### Version Detection Logic
|
|
|
|
1. **Check PATH**: Finds `tea` command location
|
|
2. **Installation Type**: Determines user vs system installation
|
|
3. **Symlink Check**: Detects version-specific symlinks
|
|
4. **Version Comparison**: Compares with latest release
|
|
5. **Strategy Selection**: Chooses appropriate installation method
|
|
|
|
### Benefits
|
|
|
|
✅ **User Isolation**: Installations don't affect other users
|
|
✅ **Version Control**: Multiple versions can coexist
|
|
✅ **Easy Updates**: Symlinks automatically point to latest
|
|
✅ **Rollback Support**: Old versions preserved
|
|
✅ **No Sudo Required**: User installations don't need root
|
|
✅ **System Fallback**: Falls back to system installation when needed
|
|
|
|
### Directory Structure
|
|
|
|
#### User Installation
|
|
```
|
|
~/bin/
|
|
├── tea -> tea-v0.11.1
|
|
├── tea-v0.11.0
|
|
└── tea-v0.11.1
|
|
```
|
|
|
|
#### System Installation
|
|
```
|
|
/usr/local/bin/
|
|
├── tea -> tea-v0.11.1
|
|
├── tea-v0.11.0
|
|
└── tea-v0.11.1
|
|
```
|
|
|
|
### PATH Requirements
|
|
|
|
For user installations, ensure `~/bin` is in PATH:
|
|
```bash
|
|
# Add to ~/.bashrc or ~/.profile
|
|
export PATH="$HOME/bin:$PATH"
|
|
```
|
|
|
|
### Troubleshooting
|
|
|
|
#### Version Not Updating
|
|
```bash
|
|
# Check current symlink
|
|
ls -la ~/bin/tea
|
|
|
|
# Force reinstall
|
|
./install-tea-cli.sh --force
|
|
```
|
|
|
|
#### PATH Issues
|
|
```bash
|
|
# Check if user bin is in PATH
|
|
echo $PATH | grep -q "$HOME/bin" && echo "OK" || echo "Add to PATH"
|
|
|
|
# Test tea command
|
|
which tea
|
|
tea --version
|
|
```
|
|
|
|
#### Permission Issues
|
|
```bash
|
|
# For system installation
|
|
sudo ./install-tea-cli.sh --binary
|
|
```
|
|
|
|
### Integration with Setup Script
|
|
|
|
The installer integrates seamlessly with the main setup script:
|
|
- Automatically called when Tea CLI is needed
|
|
- Respects user preferences for installation location
|
|
- Provides clear feedback on installation strategy
|
|
- Handles both new installations and updates |