Skip to content
Back to skills

Migrate

ASecurity

Run/create DB migrations (Alembic, Prisma, Laravel, Django, Flyway, Drizzle); checks backup. Triggers: apply migration, rollback, generate migration.

  • 177 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
developmentpythongophpbashsqldjangodatabase

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add softspark/ai-toolkit --skill migrate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Migrate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Migrate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/softspark-migrate/badge)](https://www.skillsdirectory.com/skills/softspark-migrate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: migrate
description: "Run/create DB migrations (Alembic, Prisma, Laravel, Django, Flyway, Drizzle); checks backup. Triggers: apply migration, rollback, generate migration."
effort: medium
disable-model-invocation: true
argument-hint: "[direction]"
allowed-tools: Bash, Read
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "echo 'Reminder: ensure database backup exists before running migrations'"
scripts:
  - scripts/migration-status.py
---

# /migrate - Database Migration Workflow

$ARGUMENTS

## What This Command Does

Create, run, or manage database migrations with auto-detection of the migration tool.

## Project context

- Migration tools: !`ls alembic.ini prisma/ database/migrations/ manage.py 2>/dev/null`

## Migration Status Script

Detect migration tool and report status:
```bash
python3 scripts/migration-status.py [directory]
```

Returns JSON with: `tool`, `config_file`, `migrations_dir`, `total_migrations`, `latest`, `commands{}` (status/create/upgrade/downgrade).

## Auto-Detection

| File Found | Tool | Commands |
|------------|------|----------|
| `alembic.ini` | Alembic | `alembic revision`, `alembic upgrade` |
| `prisma/schema.prisma` | Prisma | `npx prisma migrate dev` |
| `database/migrations/` + `artisan` | Laravel | `php artisan migrate` |
| `manage.py` | Django | `python manage.py migrate` |
| `flyway.conf` | Flyway | `flyway migrate` |
| `drizzle.config.ts` | Drizzle | `npx drizzle-kit push` |

## Workflow

### Create New Migration
1. Detect migration tool
2. Generate migration from model/schema changes
3. Review generated SQL
4. Validate syntax

### Run Migrations
1. Show pending migrations
2. Dry-run if supported (`--pretend`, `--sql`)
3. Backup reminder
4. Apply with user confirmation
5. Verify success

### Rollback
1. Show last applied migration
2. Confirm rollback scope
3. Execute rollback
4. Verify state

## Safety Checks (MANDATORY)

- [ ] Migration tested on development/staging first
- [ ] Rollback path verified
- [ ] No data loss in forward or backward direction
- [ ] Large table operations use concurrent/online DDL
- [ ] Backup exists or reminder given

## Usage Examples

```
/migrate                     # Show migration status
/migrate create add_users    # Create new migration
/migrate run                 # Apply pending migrations
/migrate rollback            # Rollback last migration
/migrate status              # Show applied/pending migrations
```

## Reference Skill
Use `migration-patterns` skill for zero-downtime strategies and best practices.

## Rules

- **MUST** verify a recent backup exists (or confirmed in-progress) before any forward migration on production
- **MUST** show the generated SQL (dry-run / `--pretend` / `--sql`) before applying — the user approves the diff, not just the command
- **NEVER** run destructive migrations (DROP TABLE/COLUMN, NOT NULL on existing column, type change) without a tested rollback path
- **NEVER** mix schema changes and data backfill in the same migration — they fail differently and roll back differently
- **CRITICAL**: large-table operations use the concurrent/online variant (`ALTER TABLE ... ALGORITHM=INPLACE`, `CREATE INDEX CONCURRENTLY`) — table locks in production cause outages, not slowdowns
- **MANDATORY**: migrations test on a non-production environment first with representative data volume

## Gotchas

- `alembic upgrade head` silently skips migrations with `branches` if the branch head is not explicit. Multi-head migrations need `alembic upgrade <revision>@head` or a merge migration first.
- Prisma's `prisma migrate dev` auto-generates migrations AND applies them AND reseeds the dev database. Running it on a production-connected config destroys data. Always use `prisma migrate deploy` in non-dev.
- Laravel's `migrate` command without `--force` refuses to run in `APP_ENV=production`. Scripts that blindly run `migrate` hang on interactive prompts in prod — always use `artisan migrate --force` in automation.
- Django's `migrate --fake` marks a migration as applied **without running it**. Intended for manual data fixes, but accidentally using it skips real schema changes and silently diverges production from code.
- `CREATE INDEX CONCURRENTLY` (Postgres) cannot run inside a transaction. Alembic wraps each migration in a transaction by default — concurrent index creation needs `op.execute()` with `autocommit_block()` or a manual `COMMIT`.
- Rolling back a forward migration that added a NOT NULL column deletes the column; data in that column is gone. "Rollback" is not "undo" if the column held user data during the forward window.

## When NOT to Use

- For **zero-downtime schema evolution** strategy (expand-contract, double-write) — use `/migration-patterns`
- For designing the schema from scratch — use `/database-patterns`
- For application-layer rollback (deploying previous code) — use `/rollback`
- For CI-triggered migrations — use `/ci` or `/deploy`
- When no migration tool is detected — propose one from `/app-builder` instead of ad-hoc SQL

Files in this skill

  • SKILL.md5 KB
  • scripts/migration-status.py6.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.