From drupal-boost
Drupal Migrate API for ETL data migration including source plugins, process plugins, destination plugins, migration groups, and migration dependencies. Use when building migrations, importing data, or migrating from another CMS/database.
npx claudepluginhub abderrahimghazali/drupal-boostThis skill is limited to using the following tools:
The Migrate API follows an ETL (Extract-Transform-Load) pattern.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
The Migrate API follows an ETL (Extract-Transform-Load) pattern.
id: my_migration
label: 'Migrate articles from legacy database'
migration_group: my_migrations
migration_tags:
- content
source:
plugin: d7_node # or csv, url, json, etc.
node_type: article
process:
title: title
body/value: body
body/format:
plugin: default_value
default_value: basic_html
uid:
plugin: migration_lookup
migration: my_users_migration
source: author_id
field_tags:
plugin: sub_process
source: tags
process:
target_id:
plugin: entity_generate
source: name
entity_type: taxonomy_term
bundle: tags
bundle_key: vid
value_key: name
destination:
plugin: entity:node
default_bundle: article
migration_dependencies:
required:
- my_users_migration
optional:
- my_tags_migration
source:
plugin: d7_node
node_type: article
# Or custom SQL:
plugin: custom_sql
query: "SELECT id, title, body FROM legacy_articles"
source:
plugin: csv
path: /path/to/data.csv
ids: [id]
header_offset: 0
fields:
- name: id
- name: title
- name: body
source:
plugin: url
data_fetcher_plugin: http
data_parser_plugin: json
urls:
- 'https://api.example.com/articles'
item_selector: /data
fields:
- name: id
selector: /id
- name: title
selector: /attributes/title
ids:
id:
type: integer
process:
# Direct copy
title: source_title
# Default value
status:
plugin: default_value
default_value: 1
# Value mapping
field_type:
plugin: static_map
source: legacy_type
map:
news: article
blog: blog_post
# Entity lookup/generate
uid:
plugin: migration_lookup
migration: users
source: author_id
# Date formatting
created:
plugin: format_date
source: date
from_format: 'Y-m-d H:i:s'
to_format: 'U'
# Concatenation
path:
plugin: concat
source:
- constants/prefix
- slug
delimiter: /
# Skip empty
field_image:
- plugin: skip_on_empty
source: image_url
method: process
- plugin: file_copy
source: image_url
destination: 'public://images/'
# Callback
title:
plugin: callback
callable: trim
source: title
# Run a migration
drush migrate:import my_migration
# Run with limit (for testing)
drush migrate:import my_migration --limit=10
# Check status
drush migrate:status
# Rollback
drush migrate:rollback my_migration
# Reset stuck migration
drush migrate:reset-status my_migration
# Run all in a group
drush migrate:import --group=my_migrations
# Update existing (re-import changed rows)
drush migrate:import my_migration --update
migration_dependencies to ensure correct execution ordermigration_lookup for entity references between migrations--limit=10 before running full migrationentity_generate for creating referenced entities on the flydrush migrate:rollback)migrate_plus for URL/JSON/XML sourcesmigrate_tools for advanced Drush commands and groupsRead reference files for details:
reference/source-plugins.md for all source plugin typesreference/process-plugins.md for process plugin referencereference/destination-plugins.md for destination plugin types