Migrating from Renovate

On this page 25

This guide provides detailed instructions for migrating from Renovate to Buddy, including configuration mappings and best practices.

Automated Migration

Buddy can automatically detect and migrate most Renovate configurations:

buddy setup

The migration process will:

  • 🔍 Detect Renovate config files (renovate.json, .renovaterc, package.json)
  • ⚙️ Convert settings to Buddy format
  • ⚠️ Identify incompatible features
  • 📋 Generate detailed migration report

Configuration Mapping

Basic Settings

Renovate SettingBuddy EquivalentNotes
extendsN/AUse explicit configuration instead
scheduleschedule.cronConverted to cron expressions
timezoneschedule.timezoneDirect mapping
automergepullRequest.autoMerge.enabledBoolean mapping
automergeStrategypullRequest.autoMerge.strategyStrategy mapping
ignoreDepspackages.ignoreArray of package names
assigneespullRequest.assigneesDirect array mapping
reviewerspullRequest.reviewersDirect array mapping

Schedule Conversion

Renovate Text Schedules → Cron:

// Renovate
{
  "schedule": ["before 6am"]
}

// Buddy
{
  schedule: {
    cron: '0 4 * * *', // 4 AM daily
    timezone: 'UTC'
  }
}

Common Schedule Mappings:

RenovateBuddy CronDescription
"before 6am"0 4 * * *Daily at 4 AM
"every weekend"0 2 * * 6Saturday 2 AM
"after 10pm every weekday"0 22 * * 1-5Weekdays 10 PM
"before 5am on Monday"0 4 * * 1Monday 4 AM
"on the first day of the month"0 2 1 * *Monthly, 1st at 2 AM

Package Rules Migration

Simple Package Rules:

// Renovate
{
  "packageRules": [
    {
      "matchPackageNames": ["react", "react-dom"],
      "groupName": "React packages"
    }
  ]
}

// Buddy
{
  packages: {
    groups: [
      {
        name: 'React packages',
        patterns: ['react', 'react-dom'],
        updateType: 'all'
      }
    ]
  }
}

Pattern-Based Rules:

// Renovate
{
  "packageRules": [
    {
      "matchPackagePatterns": ["^@types/"],
      "groupName": "TypeScript definitions",
      "schedule": ["before 6am on Monday"]
    }
  ]
}

// Buddy
{
  packages: {
    groups: [
      {
        name: 'TypeScript definitions',
        patterns: ['@types/*'],
        updateType: 'all',
        schedule: {
          cron: '0 4 * * 1' // Monday 4 AM
        }
      }
    ]
  }
}

Update Type Rules:

// Renovate
{
  "packageRules": [
    {
      "matchUpdateTypes": ["major"],
      "enabled": false
    },
    {
      "matchUpdateTypes": ["patch"],
      "automerge": true
    }
  ]
}

// Buddy
{
  packages: {
    strategy: 'minor', // Excludes major updates
    groups: [
      {
        name: 'Patch Updates',
        patterns: ['*'],
        updateType: 'patch',
        autoMerge: true
      }
    ]
  }
}

Advanced Features

Dependency Dashboard:

// Renovate
{
  "dependencyDashboard": true,
  "dependencyDashboardTitle": "Dependency Updates"
}

// Buddy
{
  dashboard: {
    enabled: true,
    title: 'Dependency Updates',
    pin: true,
    labels: ['dependencies']
  }
}

Auto-merge Configuration:

// Renovate
{
  "automerge": true,
  "automergeType": "pr",
  "automergeStrategy": "squash",
  "packageRules": [
    {
      "matchUpdateTypes": ["patch"],
      "automerge": true
    },
    {
      "matchUpdateTypes": ["major"],
      "automerge": false
    }
  ]
}

// Buddy
{
  pullRequest: {
    autoMerge: {
      enabled: true,
      strategy: 'squash'
    }
  },
  packages: {
    groups: [
      {
        name: 'Patch Updates',
        patterns: ['*'],
        updateType: 'patch',
        autoMerge: true
      },
      {
        name: 'Major Updates',
        patterns: ['*'],
        updateType: 'major',
        autoMerge: false
      }
    ]
  }
}

Incompatible Features

Some Renovate features don't have direct equivalents in Buddy:

❌ Not Supported

  • Preset Extensions (extends): Use explicit configuration
  • Regex Managers (regexManagers): Manual configuration needed
  • Custom Datasources: Limited to npm, Composer, GitHub Actions
  • Complex Scheduling Logic: Use cron expressions instead
  • Branch Prefix Customization: Fixed buddy/ prefix

⚠️ Requires Manual Setup

  • Custom PR Templates: Configure in pullRequest.bodyTemplate
  • Platform-specific Settings: Adapt to GitHub Actions workflows
  • Complex Grouping Logic: Simplify to pattern-based groups

Migration Examples

Conservative Setup

For teams wanting minimal changes:

// Equivalent to Renovate's config:base
export default {
  schedule: {
    cron: '0 2 * * 1', // Weekly
    timezone: 'UTC'
  },
  packages: {
    strategy: 'minor', // No major updates
    ignore: [
      // Add packages you want to manage manually
    ]
  },
  pullRequest: {
    autoMerge: {
      enabled: false // Manual review required
    },
    reviewers: ['@team-leads'],
    labels: ['dependencies']
  }
} satisfies BuddyConfig

Advanced Setup

For teams using complex Renovate configurations:

export default {
  schedule: {
    cron: '0 2 * * *', // Daily
    timezone: 'America/New_York'
  },
  packages: {
    strategy: 'all',
    rules: [
      {
        matchPackages: ['@types/*', 'typescript'],
        groupName: 'TypeScript',
        autoMerge: true
      },
      {
        matchPackages: ['eslint*', '@typescript-eslint/*'],
        groupName: 'ESLint',
        strategy: 'minor',
        schedule: '0 2 * * 1' // Only proposed on a Monday run
      },
      {
        matchPackages: ['react', 'react-dom', '@types/react'],
        groupName: 'React Ecosystem',
        strategy: 'minor',
        autoMerge: false // Requires review
      },
      {
        matchUpdateTypes: ['patch'],
        groupName: 'Patch Updates',
        autoMerge: true,
        labels: ['auto-merge']
      }
    ]
  },
  pullRequest: {
    autoMerge: {
      enabled: true,
      strategy: 'squash',
      conditions: ['patch-only']
    },
    titleFormat: 'chore(deps): {action} {packages}',
    labels: ['dependencies', 'automated']
  },
  dashboard: {
    enabled: true,
    title: 'Dependency Dashboard',
    pin: true,
    includePackageJson: true,
    includeGitHubActions: true
  }
} satisfies BuddyConfig

Step-by-Step Migration

1. Backup Current Configuration

# Backup Renovate config
cp renovate.json renovate.json.backup
# or for package.json config
jq '.renovate' package.json > renovate-config.backup.json

2. Run Automated Migration

buddy setup

Review the migration report and note any warnings or incompatible features.

3. Test Configuration

# Test scanning
buddy scan --verbose

# Test update process (dry run)
buddy update --dry-run

4. Validate Generated Workflows

Check the generated GitHub Actions workflows:

  • .github/workflows/buddy-dashboard.yml
  • .github/workflows/buddy-check.yml
  • .github/workflows/buddy-update.yml

5. Gradual Transition

  1. Week 1: Run both Renovate and Buddy in parallel
  2. Week 2: Compare PR quality and timing
  3. Week 3: Disable Renovate, monitor Buddy
  4. Week 4: Remove Renovate configuration

6. Cleanup

# Remove Renovate files
rm renovate.json .renovaterc .renovaterc.json

# Remove package.json renovate config
npm pkg delete renovate

# Disable Renovate app in GitHub (if installed)
# Visit: https://github.com/settings/installations

Troubleshooting

Common Issues

Complex scheduling not migrated correctly:

// Convert manually using cron expressions
// Use: https://crontab.guru/ for help

Package rules too complex:

// Simplify to basic patterns and groups
// Use multiple groups instead of complex rules

Custom managers not working:

// Buddy focuses on standard package managers
// For custom files, consider manual updates

Getting Help

Best Practices

✅ Do

  • Start with automated migration
  • Test thoroughly before removing Renovate
  • Simplify complex configurations
  • Use standard cron expressions
  • Monitor PR quality during transition

❌ Don't

  • Remove Renovate immediately
  • Ignore migration warnings
  • Use overly complex grouping
  • Skip dry-run testing
  • Forget to update team documentation

Renovate's flexibility comes with complexity. Buddy aims for simplicity while maintaining power - your migration might be a good opportunity to simplify your dependency management strategy.

Suggest a change to this page

Last updated:

Released under the MIT License.