Help us improve
Share bugs, ideas, or general feedback.
From cms-cultivator
Guides users through drupal.org contribution workflows: git clone, branch naming, issue fork setup, commit messages, and merge request creation.
npx claudepluginhub kanopi/claude-toolbox --plugin cms-cultivatorHow this skill is triggered — by the user, by Claude, or both
Slash command
/cms-cultivator:drupalorg-contribution-helperThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Quick assistance with drupal.org contribution workflows, git commands, and merge request creation.
Creates and lists merge requests for Drupal.org projects via git.drupalcode.org. Automates cloning, branching, and pushing for issue-based MRs.
Automates GitHub workflow: branching, committing, pushing, PRs, issues, and code review. Use when managing git operations or GitHub development lifecycle.
Open-source pull request creation: PR descriptions, titles, fork workflows, and contribution compliance. Invoke whenever task involves any interaction with pull requests for external repositories — contributing code, opening PRs from forks, writing PR descriptions, or preparing changes for upstream submission.
Share bugs, ideas, or general feedback.
Quick assistance with drupal.org contribution workflows, git commands, and merge request creation.
Activate this skill when the user:
The drupalorg-cli package provides helpful shortcuts for drupal.org contribution:
# Install
curl -LO https://github.com/mglaman/drupalorg-cli/releases/latest/download/drupalorg.phar
chmod +x drupalorg.phar
sudo mv drupalorg.phar /usr/local/bin/drupalorg
# Create branch for issue (inside project directory)
drupalorg issue:branch 3456789
# Apply latest patch from issue
drupalorg issue:apply 3456789
# Generate patch from local changes
drupalorg issue:patch
# List project issues
drupalorg project:issues paragraphs
# Open issue in browser
drupalorg issue:link 3456789
# Clone any drupal.org project
git clone git@git.drupal.org:project/{project_name}.git
# Examples
git clone git@git.drupal.org:project/paragraphs.git
git clone git@git.drupal.org:project/webform.git
git clone git@git.drupal.org:project/easy_lqp.git
{issue_number}-{description-slug}
Examples:
3456789-fix-validation-error
3456789-add-ckeditor5-support
3456789-update-documentation
Rules:
Remote naming follows {project}-{issue} convention to allow multiple issue forks per project:
# Add issue fork remote
git remote add {project}-{issue_number} git@git.drupal.org:issue/{project}-{issue_number}.git
# Examples
git remote add paragraphs-3456789 git@git.drupal.org:issue/paragraphs-3456789.git
git remote add easy_lqp-3456790 git@git.drupal.org:issue/easy_lqp-3456790.git
# Fetch from issue fork
git fetch {project}-{issue_number}
# Verify remotes
git remote -v
Issue #{issue_number}: {description}
Example:
Issue #3456789: Fix validation error in configuration form
# Push branch to issue fork
git push {project}-{issue_number} {branch_name}
# Example
git push paragraphs-3456789 3456789-fix-validation-error
# Clone to isolated location (recommended)
mkdir -p ~/.cache/drupal-contrib
git clone git@git.drupal.org:project/{project}.git ~/.cache/drupal-contrib/{project}
cd ~/.cache/drupal-contrib/{project}
Issue forks must be created via the drupal.org web UI. This cannot be automated due to CAPTCHA protection.
https://www.drupal.org/project/{project}/issues/{issue_number}Note: This step cannot be done via command line or API.
git remote add {project}-{issue_number} git@git.drupal.org:issue/{project}-{issue_number}.git
git fetch {project}-{issue_number}
# If branch already exists on fork, checkout tracking it:
git checkout -b '{issue_number}-{description}' --track {project}-{issue_number}/'{issue_number}-{description}'
# If creating new branch:
git checkout -b {issue_number}-{description}
# Make your code changes
# ...
# Stage and commit
git add .
git commit -m "Issue #{issue_number}: {description}"
git push {project}-{issue_number} {branch_name}
When you push, git outputs the MR creation URL:
remote: To create a merge request for {branch}, visit:
remote: https://git.drupalcode.org/issue/{project}-{issue}/-/merge_requests/new?...
Open that URL in your browser to complete MR creation.
Alternative: Via Web UI
ls -la ~/.ssh/id_*.pub
ssh-keygen -t ed25519 -C "your-email@example.com"
cat ~/.ssh/id_ed25519.pubssh -T git@git.drupal.org
If your network blocks SSH port 22, use HTTPS with a personal access token:
# Create token at: https://git.drupalcode.org/-/user_settings/personal_access_tokens
# Required scopes: read_repository, write_repository
# For clone:
git clone https://{username}:{token}@git.drupalcode.org/project/{project}.git
# For issue fork remote:
git remote add {project}-{issue} \
"https://{username}:{token}@git.drupalcode.org/issue/{project}-{issue}.git"
Verify SSH key is added to git.drupalcode.org:
Verify issue fork exists:
Verify remote is correct:
git remote -v
# Should show: {project}-{issue} git@git.drupal.org:issue/{project}-{issue}.git
You must create the issue fork via drupal.org web UI first:
# If local branch exists
git checkout {existing_branch}
# If remote branch exists
git fetch {project}-{issue_number}
git checkout -b {branch} --track {project}-{issue_number}/{branch}
# Make additional changes
git add .
git commit -m "Issue #{issue_number}: Additional fixes"
# Push updates (existing MR updates automatically)
git push {project}-{issue_number} {branch_name}
Example 1: Quick Workflow Question
User: "How do I create a merge request for drupal.org?"
Skill response:
1. Clone the project
2. Create issue fork on drupal.org (click button in web UI - required manual step)
3. Add remote: `git remote add {project}-{issue} git@git.drupal.org:issue/{project}-{issue}.git`
4. Fetch: `git fetch {project}-{issue}`
5. Create branch: `git checkout -b {issue_number}-{description}`
6. Commit with: `Issue #{issue_number}: description`
7. Push: `git push {project}-{issue} {branch}`
8. Open MR creation URL from git output in browser
Example 2: Branch Naming Help
User: "What should I name my branch for issue 3456789?"
Skill response:
Use: `3456789-{brief-description}`
Examples:
- `3456789-fix-validation`
- `3456789-update-docs`
- `3456789-add-feature`
Create it with:
```bash
git checkout -b 3456789-your-description
**Example 3: Remote Setup Help**
User: "I created the issue fork, now what?"
Skill response: Add the issue fork as a remote:
git remote add {project}-{issue_number} git@git.drupal.org:issue/{project}-{issue_number}.git
git fetch {project}-{issue_number}
Replace {project} with your project name and {issue_number} with your issue number.
Then push your branch:
git push {project}-{issue_number} {your-branch-name}
## Resources
- [Drupal.org GitLab Guide](https://www.drupal.org/docs/develop/git/using-gitlab-to-contribute-to-drupal)
- [Creating Issue Forks](https://www.drupal.org/docs/develop/git/using-gitlab-to-contribute-to-drupal/creating-issue-forks)
- [git.drupalcode.org](https://git.drupalcode.org)