en un clic
migrate
Manage Drupal migrations (import, rollback, status, debug)
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
Manage Drupal migrations (import, rollback, status, debug)
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
Use when reviewing Drupal code for standards compliance across PHP, JavaScript, CSS, Twig, YAML, SQL, and markup — dynamically loads relevant standards per file type using Drupal's official community guidelines.
How to write, modify, and style React components for Drupal Canvas and Drupal CMS. Covers the technology stack (React 19, Tailwind CSS 4, CVA variants, cn utility), component.yml prop and slot definitions, enum naming, image and video prop types, formatted text fields, color scheme variants, theme tokens from global.css, required folder structure (index.jsx + component.yml), and matching source site visual styles including extracting design tokens, dark backgrounds, gradient text, glass/blur effects, and updating global.css theme. Use when building, editing, or fixing any component in src/components/.
Managing content in Drupal CMS via JSON:API. Covers listing, fetching, creating, updating, and deleting pages and content entities using npm run content commands. Includes page component structure (uuid, component_id, inputs, parent_uuid, slot), image uploading and media target_id handling, formatted HTML text fields, UUID generation, input format reference mapping component.yml prop types to JSON formats, menu item listing (menu_items--main, menu_items--footer, menu_items--social-media are read-only via API — must use admin UI for create/update/delete), page path alias management, and common pitfalls like wrong media IDs, link props as objects instead of strings, plain strings for HTML fields, target_id as integer instead of string, langcode errors, and JSON:API read-only mode. Use when composing pages, adding components to pages, uploading images, or interacting with the Drupal CMS content API.
Search and fetch Canvas and Drupal CMS documentation pages. Takes a query describing what you need to know (e.g., "code components", "page regions", "known issues", "data fetching") and returns the full content of matching documentation pages. Invoke with /canvas-docs-explorer <query>. Use this whenever you need to understand how Canvas or Drupal CMS works, verify platform behavior, check for limitations, or find configuration options.
Use when setting up a new Drupal CMS project with Canvas for component development. Covers DDEV, JSON:API write mode, Canvas OAuth client, permissions, page regions, menus, project scaffolding, .env, CSS layer fix, and Storybook validation. Every step is idempotent — safe to re-run.
Step-by-step guide for scaffolding a new React component from scratch. Covers copying an existing component as a base, creating the required index.jsx and component.yml files, naming conventions (snake_case machineName, no project prefixes), creating the matching Storybook story file, reusing existing components via imports, composability patterns, and internal component setup (status false). Use when a needed component does not yet exist in src/components/ and must be created.
| name | migrate |
| description | Manage Drupal migrations (import, rollback, status, debug) |
| version | 1.0.0 |
You are a Drupal migration assistant. Your job is to help manage migrations in Drupal 11 using migrate, migrate_plus, and migrate_tools modules.
Migration Modules:
Custom Migrations: Located in web/modules/custom/ as needed.
Ask the user or detect from context what they want to do:
View all migrations:
ddev drush migrate:status
# or shorthand
ddev drush ms
View specific group:
ddev drush migrate:status --group=GROUP_NAME
ddev drush ms --group=GROUP_NAME
View specific migration:
ddev drush migrate:status migration_id
ddev drush ms migration_id
Output interpretation:
Import specific migration:
ddev drush migrate:import migration_id
# or shorthand
ddev drush mim migration_id
Import all migrations in a group:
ddev drush migrate:import --group=GROUP_NAME
ddev drush mim --group=GROUP_NAME
Import with options:
# Update existing items (instead of skip)
ddev drush mim migration_id --update
# Force update even if no changes detected
ddev drush mim migration_id --force
# Limit number of items to process
ddev drush mim migration_id --limit=100
# Process only specific IDs
ddev drush mim migration_id --idlist=1,2,3
# Continue from last interrupted run
ddev drush mim migration_id --continue
# Execute dependencies first
ddev drush mim migration_id --execute-dependencies
# Skip progress bar (better for logs)
ddev drush mim migration_id --no-progress
Import all migrations in order:
# Import all migrations respecting dependencies
ddev drush migrate:import --group=GROUP_NAME --execute-dependencies
Feedback options:
# Show detailed feedback during import
ddev drush mim migration_id --feedback=100
# Higher verbosity
ddev drush mim migration_id -vvv
Rollback specific migration:
ddev drush migrate:rollback migration_id
# or shorthand
ddev drush mr migration_id
Rollback all in group:
ddev drush migrate:rollback --group=GROUP_NAME
ddev drush mr --group=GROUP_NAME
Rollback all migrations:
ddev drush migrate:rollback --all
What rollback does:
Reset migration status (clears stuck states):
ddev drush migrate:reset-status migration_id
# or shorthand
ddev drush mrs migration_id
When to use:
Stop currently running migration:
ddev drush migrate:stop migration_id
# or shorthand
ddev drush mst migration_id
Use case:
View error/warning messages:
ddev drush migrate:messages migration_id
# or shorthand
ddev drush mmsg migration_id
Filter by message level:
# Only errors
ddev drush mmsg migration_id --severity=error
# Only warnings
ddev drush mmsg migration_id --severity=warning
# Show specific ID's messages
ddev drush mmsg migration_id --idlist=123
List available source fields:
ddev drush migrate:fields-source migration_id
# or shorthand
ddev drush mfs migration_id
List destination fields:
ddev drush migrate:fields-destination migration_id
ddev drush mfd migration_id
Migrations are YAML files in web/modules/custom/<module>/config/install/:
id: example_migration
label: 'Example migration'
migration_group: my_group
source:
plugin: url
data_fetcher_plugin: file
data_parser_plugin: json
urls:
- '/path/to/source/data.json'
item_selector: /items
fields:
- name: id
label: 'Item ID'
selector: Id
- name: title
label: 'Title'
selector: Title
- name: body
label: 'Body'
selector: Content
ids:
id:
type: string
process:
title: title
body/value: body
body/format:
plugin: default_value
default_value: full_html
destination:
plugin: 'entity:node'
default_bundle: article
migration_dependencies:
required: []
optional: []
Source plugins:
url (from migrate_plus) — Remote/local JSON, XMLcsv (from migrate_source_csv) — CSV filesembedded_data — Inline data in YAMLd7_node (core) — Drupal 7 upgrade migrationData fetchers: file (local), http (remote)
Data parsers: json, xml, simple_xml
Process plugins (commonly used):
default_value - Set default valuemigration_lookup - Reference another migrationskip_on_empty - Skip if source emptycallback - Custom PHP callbackget - Get value from sourcestatic_map - Map values (e.g., status codes)entity_generate - Create taxonomy terms on-the-flyentity_lookup - Look up existing entitiessub_process - Process arrays of valuesfile_import - Import files from URLsDestination plugins:
entity:node - Create nodesentity:taxonomy_term - Create taxonomy termsentity:user - Create usersentity:file - Import filesentity:paragraph - Create paragraphsentity:media - Create media entitiesmigration_dependencies:
required:
- taxonomy_categories
optional:
- files
# View source JSON structure (adjust path for your data)
ddev exec cat /path/to/source/data.json | head -100
# Create new migration config file
touch web/modules/custom/<module>/config/install/migrate_plus.migration.<migration_id>.yml
Write migration configuration (see structure above)
Reinstall module to load new migration:
# Reinstall module
ddev drush pm:uninstall <module> -y
ddev drush pm:install <module> -y
# Or just clear cache and config import
ddev drush cr
ddev drush config:import --partial -y
ddev drush migrate:status --group=<group>
# Import first 10 items
ddev drush mim <migration_id> --limit=10 --feedback=1
ddev drush mmsg <migration_id>
ddev drush mr <migration_id>
# Edit YAML file
ddev drush pm:uninstall <module> -y && ddev drush pm:install <module> -y
ddev drush mim <migration_id> --limit=10
ddev drush mim <migration_id>
ddev drush cex -y
ddev drush migrate:reset-status migration_id
ddev drush mim migration_id
# View source fields
ddev drush mfs migration_id
# Run with high verbosity
ddev drush mim migration_id -vvv --feedback=1
ddev drush mmsg migration_id
Common errors:
# Process in batches
ddev drush mim migration_id --limit=1000
# Import with dependencies
ddev drush mim migration_id --execute-dependencies
source:
track_changes: true
ddev drush mim migration_id --update
process:
field_category:
plugin: migration_lookup
migration: taxonomy_categories
source: category_id
no_stub: true
process:
skip_row:
plugin: skip_on_value
source: published
method: row
value: false
process:
field_tags:
plugin: sub_process
source: tags
process:
target_id:
plugin: migration_lookup
migration: tags
source: id
process:
field_image:
plugin: file_import
source: image_url
destination: 'public://images/'
reuse: true
// web/modules/custom/<module>/src/Plugin/migrate/process/CustomProcess.php
namespace Drupal\<module>\Plugin\migrate\process;
use Drupal\migrate\Attribute\MigrateProcessPlugin;
use Drupal\migrate\ProcessPluginBase;
use Drupal\migrate\MigrateExecutableInterface;
use Drupal\migrate\Row;
#[MigrateProcessPlugin(
id: 'custom_process',
)]
class CustomProcess extends ProcessPluginBase {
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
// Custom transformation logic.
return $transformed_value;
}
}
--limit=10 --feedback=1ddev drush mmsg migration_idddev drush cex -yddev export-db --file=backup.sql.gzid: articles
label: 'Articles migration'
migration_group: my_group
source:
plugin: url
data_fetcher_plugin: file
data_parser_plugin: json
urls:
- '/path/to/articles.json'
item_selector: /
fields:
- name: id
selector: Id
- name: title
selector: Title
- name: body
selector: Content
- name: created
selector: PublicationDate
ids:
id:
type: string
process:
type:
plugin: default_value
default_value: article
title: title
body/value: body
body/format:
plugin: default_value
default_value: full_html
created:
plugin: callback
callable: strtotime
source: created
status:
plugin: default_value
default_value: 1
destination:
plugin: 'entity:node'
id: taxonomy_categories
label: 'Categories'
migration_group: my_group
source:
plugin: url
data_fetcher_plugin: file
data_parser_plugin: json
urls:
- '/path/to/categories.json'
item_selector: /
fields:
- name: id
selector: Id
- name: name
selector: Title
ids:
id:
type: string
process:
vid:
plugin: default_value
default_value: categories
name: name
destination:
plugin: 'entity:taxonomy_term'
id: articles_full
label: 'Articles with References'
migration_group: my_group
source:
plugin: url
data_fetcher_plugin: file
data_parser_plugin: json
urls:
- '/path/to/articles.json'
item_selector: /
fields:
- name: id
selector: Id
- name: title
selector: Title
- name: category_id
selector: Category/Id
ids:
id:
type: string
process:
type:
plugin: default_value
default_value: article
title: title
field_category:
plugin: migration_lookup
migration: taxonomy_categories
source: category_id
no_stub: true
destination:
plugin: 'entity:node'
migration_dependencies:
required:
- taxonomy_categories
# Status and information
ddev drush migrate:status # All migrations
ddev drush ms --group=GROUP # Group status
ddev drush mfs migration_id # Source fields
ddev drush mfd migration_id # Destination fields
# Import/execution
ddev drush mim migration_id # Import
ddev drush mim migration_id --update # Update existing
ddev drush mim migration_id --limit=100 # Limit items
ddev drush mim migration_id --idlist=1,2,3 # Specific IDs
ddev drush mim --group=GROUP # Import group
ddev drush mim migration_id --execute-dependencies # With deps
# Rollback
ddev drush mr migration_id # Rollback one
ddev drush mr --group=GROUP # Rollback group
ddev drush mr --all # Rollback all
# Maintenance
ddev drush mrs migration_id # Reset status
ddev drush mst migration_id # Stop migration
ddev drush mmsg migration_id # View messages