Skip to content
Crow CI

Migration

Crow CI tries to maintains compatibility with Woodpecker CI and Drone CI to simplify migration.

| Feature | Woodpecker | Drone | | --------------------- | ------------------------ | ------------------- | | Plugins | Full | Full | | Environment variables | WOODPECKER_* supported | DRONE_* supported | | Pipeline syntax | Full | Partial (2019 fork) |

Crow v5 is a hard-fork of Woodpecker CI. Earlier Crow v4 was a soft-fork with some unique database migrations.

Crow accepts both prefixes:

  • CROW_* — native Crow configuration
  • WOODPECKER_* — supported for migration convenience
  1. Back up your database — While migration is safe, backups are always recommended

  2. Replace container images with Crow equivalents

  3. Start Crow — it will automatically detect and migrate the Woodpecker database

  4. Optionally rename WOODPECKER_* vars to CROW_*

  5. Update webhook URLs if using a different domain

When Crow starts with a Woodpecker database, it automatically:

  1. Detects the Woodpecker database — Crow checks for Woodpecker-specific migration IDs

  2. Displays a migration banner — You’ll see a prominent message in the logs:

    ╔════════════════════════════════════════════════════════════════╗
    ║  WOODPECKER DATABASE DETECTED                                  ║
    ║                                                                ║
    ║  Migrating from Woodpecker CI to Crow CI                       ║
    ║  This is a ONE-TIME migration process.                         ║
    ║                                                                ║
    ║  Your data will be preserved and upgraded automatically.       ║
    ║  For best results, ensure you have a database backup.          ║
    ╚════════════════════════════════════════════════════════════════╝
  3. Applies Crow-specific migrations — New tables and columns for Crow features (HA mode, maintenance, autoscalers, etc.)

  4. Confirms completion — A success message confirms the migration

If your Woodpecker database has migrations that Crow doesn’t recognize (e.g., from a newer Woodpecker version), you’ll see a warning:

Unknown migration IDs detected in database. These may be from a different
version or fork. Migration will continue but review is recommended.

This is informational — Crow will continue and apply its own migrations. Your data is preserved.

Switching from one database backend (e.g. SQLite) to another (e.g. PostgreSQL) is a separate concern from migrating between Crow and Woodpecker. The Crow server has no built-in command for this; the recommended approach is to start the new backend fresh and re-create the data you need, or to use a tool that preserves auto-increment semantics.

  1. Fresh start (recommended for most users): point Crow at the new backend and let pipelines re-populate organically. Existing build history is lost, but no data corruption risks.

  2. Backup-restore between identical backends: pg_dump/pg_restore between two PostgreSQL instances, or copying the SQLite file directly.

  3. If you must migrate across backends: use a tool that explicitly creates and attaches sequences for every PK column, or apply the repair SQL surfaced by the startup check after the data copy.

Woodpecker forked from Drone in 2019, and Crow inherits that compatibility Drone plugins work with Crow.