nip/docs/automatic-updates.md

13 KiB

Automatic Updates Guide

Overview

NIP's automatic update system keeps your recipes, build tools, and NIP itself up to date with minimal user intervention. Updates are checked periodically and can be applied with a single command.

Features

  • Automatic Update Checking: Periodic checks for new versions
  • Multiple Update Channels: Stable, Beta, and Nightly
  • Configurable Frequency: Never, Daily, Weekly, or Monthly
  • Selective Notifications: Choose which components to monitor
  • Automatic Backups: All updates create backups before applying
  • Easy Rollback: Revert to previous versions if needed
  • Non-Intrusive: Updates never interrupt your workflow

Quick Start

1. Check for Updates

nip update check

Output:

🔍 Checking for updates...

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 Update Available: recipes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Current Version: abc1234
Latest Version:  def5678

Changelog:
- Added 50 new recipes
- Updated Nix recipes for 24.05
- Fixed Gentoo build issues

To update, run:
  nip update recipes

2. Update Components

# Update recipes
nip update recipes

# Update all components
nip update all

# Update NIP itself
nip update self

3. Configure Automatic Updates

# Enable automatic updates
nip update config --enable --frequency weekly

# Set update channel
nip update config --channel stable

Configuration

Update Configuration File

Settings are stored in ~/.config/nip/update-config.json:

{
  "enabled": true,
  "channel": "stable",
  "frequency": "weekly",
  "lastCheck": 1700000000,
  "notifyRecipes": true,
  "notifyTools": true,
  "notifyNip": true
}

Configuration Options

Option Description Values Default
enabled Enable automatic updates true/false true
channel Update channel stable/beta/nightly stable
frequency Check frequency never/daily/weekly/monthly weekly
notifyRecipes Notify of recipe updates true/false true
notifyTools Notify of tool updates true/false true
notifyNip Notify of NIP updates true/false true

Update Channels

Stable (Recommended)

  • Thoroughly tested releases
  • Recommended for production use
  • Updates every 2-4 weeks
  • Maximum stability

Beta

  • Early access to new features
  • Tested but may have minor issues
  • Updates weekly
  • Good for testing new features

Nightly

  • Bleeding edge development builds
  • May have bugs or breaking changes
  • Updates daily
  • For developers and early adopters

Update Frequency

Never

  • Manual updates only
  • No automatic checking
  • Use when you want full control

Daily

  • Check for updates every day
  • Good for nightly channel users
  • Ensures latest features/fixes

Weekly (Recommended)

  • Check for updates once per week
  • Good balance of freshness and stability
  • Recommended for most users

Monthly

  • Check for updates once per month
  • Minimal interruption
  • Good for stable environments

Usage

Check for Updates

# Check if updates are available
nip update check

# Force check even if not due
nip update check --force

Update Recipes

Recipes contain package definitions and build instructions:

# Update recipe repository
nip update recipes

Output:

📥 Fetching recipe updates...
🔄 Updating recipes...

📝 Changes:
abc1234 Added vim recipe
def5678 Updated firefox to 120.0
ghi9012 Fixed gentoo portage issues

✅ Recipes updated successfully

Update Tools

Build tools (Nix, Gentoo, PKGSRC) are updated via recipes:

# Tools are updated through recipes
nip update recipes

Update NIP

Update NIP itself to the latest version:

# Check for NIP updates
nip update check

# Update NIP
nip update self

Output:

📦 NIP Update Available

Current Version: 0.1.0
Latest Version:  0.2.0

Changelog:
- Added remote binary cache
- Improved container support
- Performance improvements

Update now? (y/N): y

📥 Downloading NIP update...
🔄 Installing update...
✅ NIP updated successfully
   Please restart NIP to use the new version

Update All Components

Update everything at once:

nip update all

Output:

🔄 Updating all components...

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 Updating Recipes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Recipes updated successfully

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 Updating NIP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ NIP updated successfully

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ All updates completed successfully
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Configuration Commands

Enable/Disable Updates

# Enable automatic updates
nip update config --enable

# Disable automatic updates
nip update config --disable

Set Update Channel

# Use stable channel (recommended)
nip update config --channel stable

# Use beta channel
nip update config --channel beta

# Use nightly channel
nip update config --channel nightly

Set Update Frequency

# Check weekly (recommended)
nip update config --frequency weekly

# Check daily
nip update config --frequency daily

# Check monthly
nip update config --frequency monthly

# Never check automatically
nip update config --frequency never

Configure Notifications

# Enable recipe notifications
nip update config --notify-recipes yes

# Disable tool notifications
nip update config --notify-tools no

# Enable NIP notifications
nip update config --notify-nip yes

View Configuration

nip update status

Output:

Update Configuration
====================

Enabled: Yes
Channel: stable
Frequency: weekly
Last Check: 2024-11-15 10:30:00

Notifications:
  Recipes: Yes
  Tools: Yes
  NIP: Yes

🔍 Checking for updates...
✅ All components are up to date

Backup and Rollback

Automatic Backups

All updates automatically create backups before applying changes:

~/.cache/nip/backups/
├── recipes-20241115-103000/
├── nip-20241115-103100.bin
└── gentoo-20241110-150000/

List Backups

nip update backups

Output:

Available Backups:
==================

  recipes-20241115-103000
    Date: 2024-11-15 10:30:00
    Path: /home/user/.cache/nip/backups/recipes-20241115-103000

  nip-20241115-103100.bin
    Date: 2024-11-15 10:31:00
    Path: /home/user/.cache/nip/backups/nip-20241115-103100.bin

Total: 2 backups

Rollback to Previous Version

# Rollback recipes
nip update rollback recipes

# Rollback NIP
nip update rollback nip

Output:

🔄 Rolling back recipes to backup from 2024-11-15 10:30:00
✅ Rollback successful

Clean Old Backups

# Clean backups older than 30 days (default)
nip update clean-backups

# Keep only last 7 days
nip update clean-backups --keep-days 7

Integration with Workflows

Daily Development Workflow

# Morning routine
nip update check

# If updates available
nip update all

# Continue working
nip build myproject

CI/CD Integration

# GitHub Actions
name: Build with Latest Recipes

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Install NIP
        run: curl -sSL https://nip.example.com/install.sh | sh

      - name: Update Recipes
        run: nip update recipes

      - name: Build Package
        run: nip build myapp

Automated Update Script

#!/bin/bash
# update-nip.sh - Automated update script

# Check for updates
nip update check --force

# Update all components
nip update all

# Verify installation
nip --version

# Run tests
nip build --test myproject

Update Notifications

Non-Intrusive Notifications

Updates are checked in the background and notifications are shown at appropriate times:

$ nip build firefox

📦 Update Available: recipes (run 'nip update check' for details)

🔨 Building firefox...

Disable Notifications

# Disable all notifications
nip update config --notify-recipes no --notify-tools no --notify-nip no

# Or disable updates entirely
nip update config --disable

Troubleshooting

Update Check Fails

❌ Failed to check for updates: connection timeout

Solutions:

  1. Check internet connectivity
  2. Verify firewall allows HTTPS
  3. Try again later
  4. Use --force to retry immediately

Update Fails

❌ Failed to update recipes: merge conflict

Solutions:

  1. Rollback to previous version: nip update rollback recipes
  2. Clean and re-clone: rm -rf ~/.local/share/nip/recipes && nip update recipes
  3. Check for local modifications

Backup Fails

⚠️  Failed to create backup: disk full

Solutions:

  1. Free up disk space
  2. Clean old backups: nip update clean-backups
  3. Disable backups (not recommended): Edit config manually

Rollback Fails

❌ No backup found for: recipes

Solutions:

  1. List available backups: nip update backups
  2. Manually restore from backup directory
  3. Re-install component from scratch

Best Practices

For Individual Users

  1. Enable automatic updates with weekly frequency
  2. Use stable channel for production work
  3. Check updates before starting important work
  4. Keep backups for at least 30 days
  5. Test updates in non-critical projects first

For Teams

  1. Coordinate updates across team members
  2. Use same update channel for consistency
  3. Document update schedule in team wiki
  4. Test updates in staging environment first
  5. Keep update logs for troubleshooting

For CI/CD

  1. Update recipes at start of pipeline
  2. Pin specific versions for reproducibility
  3. Cache updated recipes between runs
  4. Monitor update failures in CI logs
  5. Rollback automatically on build failures

Advanced Configuration

Custom Update Server

Edit ~/.config/nip/update-config.json:

{
  "updateUrl": "https://custom-updates.example.com/v1",
  "enabled": true,
  "channel": "stable"
}

Update Hooks

Run custom scripts after updates:

# ~/.config/nip/hooks/post-update.sh
#!/bin/bash

echo "Update completed at $(date)"

# Rebuild critical packages
nip build --rebuild myapp

# Send notification
notify-send "NIP Updated" "Recipes and tools updated successfully"

Selective Component Updates

Update only specific components:

# Update only recipes, skip NIP
nip update config --notify-nip no
nip update recipes

# Update only NIP, skip recipes
nip update config --notify-recipes no
nip update self

Security Considerations

Update Verification

  • All updates are verified with checksums
  • HTTPS is used for all downloads
  • Backups are created before applying updates
  • Rollback is available if issues occur

Update Sources

  • Official updates come from trusted servers
  • Custom update servers can be configured
  • Updates are signed (future feature)
  • Verify update authenticity before applying

Permissions

  • Updates don't require root access
  • User-level installations only
  • No system-wide modifications
  • Isolated from system packages

FAQ

Q: How often should I update? A: Weekly is recommended for most users. Daily for nightly channel, monthly for stable environments.

Q: Will updates break my builds? A: Stable channel updates are thoroughly tested. Backups allow easy rollback if issues occur.

Q: Can I skip an update? A: Yes, updates are never forced. You can skip any update and apply it later.

Q: How much disk space do backups use? A: Typically 100-500MB per backup. Clean old backups regularly to save space.

Q: Can I update offline? A: No, updates require internet connectivity. Download updates on another machine and transfer manually if needed.

Q: What happens if an update fails? A: The system automatically rolls back to the previous version using the backup.

Q: Can I test updates before applying? A: Yes, use beta or nightly channels in a test environment before updating production.

Q: How do I know what changed in an update? A: Changelogs are shown before applying updates. Check nip update check for details.

See Also