--- name: create-pr description: Generate PR description using repository's PR template and current branch changes, copy to clipboard --- # Create PR Generate GitHub pull request descriptions using the PR template at `.github/PULL_REQUEST_TEMPLATE.md` and referencing changes in the current branch. Outputs markdown and copies to clipboard. ## When to Use Activate this skill when the user: - Uses `/create-pr` command with or without a repo name - Says "create a PR description", "generate PR body", "make a pull request" - Wants a PR description for their current branch ## Important **This skill does NOT:** - ❌ Commit changes - ❌ Push to remote - ❌ Create the actual PR on GitHub **This skill ONLY:** - ✅ Generates PR title and description - ✅ Outputs as markdown - ✅ Copies to clipboard (platform-specific: `pbcopy` on macOS, `xclip`/`xsel` on Linux, `clip.exe` on Windows) ## Workflow ### Step 1: Identify Repository **If repo name is provided:** - Use the specified repository **If no repo name is provided:** - Check for `.git` in current workspace - If multiple git repositories detected in workspace, ask user to specify which one **Validation:** - Verify the repository has a remote on GitHub - Confirm current branch is not `main`, `master`, or the default branch ### Step 2: Gather Branch Information Run these commands in the repository directory: ```bash # Get current branch name git branch --show-current # Get the base branch (usually main or master) git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@' # Get commit history since divergence from base git log {base-branch}..HEAD --oneline # Get full diff since divergence git diff {base-branch}...HEAD ``` ### Step 3: Find and Read PR Template Look for PR template in these locations (in order): 1. `.github/PULL_REQUEST_TEMPLATE.md` 2. `.github/pull_request_template.md` 3. `docs/PULL_REQUEST_TEMPLATE.md` 4. `docs/pull_request_template.md` 5. `PULL_REQUEST_TEMPLATE.md` 6. `pull_request_template.md` **CRITICAL: If template found:** - **Read the template file** using the Read tool - **Use the EXACT template structure** - do not restructure or rename sections - **Preserve HTML comments** () - they provide context for reviewers - **Keep all checkbox items** exactly as defined in the template - **Only fill in the content areas** between section headers - **Do not add sections** that don't exist in the template - **Do not remove sections** - leave them empty or with "N/A" if not applicable **If no template found:** - Use a generic structure: ```markdown ## Summary ## Changes ## Testing ## Related Issues ``` ### Step 4: Analyze Changes Based on the git diff and commit history: 1. **Categorize changes:** - New features - Bug fixes - Refactoring - Documentation - Tests - Chores 2. **Identify key files changed:** - List the most significant file changes - Note any breaking changes or migrations 3. **Extract commit messages:** - Review commit messages for context - Identify patterns and themes ### Step 5: Fill PR Template **Title Generation:** - Create concise title (50-70 characters max) - Format: `[Type] Brief description` - Types: feat, fix, refactor, docs, test, chore **Body Generation:** **IMPORTANT: Follow the repository's template structure exactly.** 1. **Copy the entire template** as the starting point 2. **Keep all HTML comments** - they guide reviewers and may be used by automation 3. **Fill in content** below each section header, after any HTML comments 4. **For checkbox sections:** - Mark applicable items with `[x]` - Leave others as `[ ]` - Do NOT remove any checkbox items 5. **For text sections**, fill based on: - **Summary/Description:** High-level overview of what changed and why - **Changes:** Bulleted list of key changes from the diff - **Testing:** How to test/verify the changes (use numbered steps) - **Related Issues:** Extract from commit messages or branch names. Use short IDs (e.g., "Fixes WOOSHIP-456") NOT full URLs - **Screenshots:** Add if UI changes, otherwise write "N/A" or "N/A - Logic fix, no visual changes" ### Step 6: Generate Final Output **Format the complete PR content:** ```markdown ## Title {Generated PR title} ## Description {Filled PR template body} ``` ### Step 7: Copy to Clipboard and Display 1. **Display the generated PR description** to the user in a markdown code block 2. **Copy to clipboard** using the appropriate platform-specific command: **macOS:** ```bash echo "{PR title and body}" | pbcopy ``` **Linux:** ```bash # Using xclip (install: apt-get install xclip or yum install xclip) echo "{PR title and body}" | xclip -selection clipboard # Or using xsel (install: apt-get install xsel or yum install xsel) echo "{PR title and body}" | xsel --clipboard --input ``` **Windows (Git Bash/WSL):** ```bash echo "{PR title and body}" | clip.exe ``` **Cross-platform detection example:** ```bash # Detect OS and use appropriate clipboard command if command -v pbcopy > /dev/null; then echo "{PR title and body}" | pbcopy elif command -v xclip > /dev/null; then echo "{PR title and body}" | xclip -selection clipboard elif command -v xsel > /dev/null; then echo "{PR title and body}" | xsel --clipboard --input elif command -v clip.exe > /dev/null; then echo "{PR title and body}" | clip.exe else echo "⚠️ No clipboard utility found. Please copy manually." fi ``` 3. **Confirm to user:** ``` ✅ PR description generated and copied to clipboard! Next steps: 1. Push your branch: git push -u origin HEAD 2. Create PR on GitHub 3. Paste from clipboard ``` ## Repository-Specific Patterns ### **WooCommerce/woocommerce** - Look for changelog entries - Check for version bumps - Verify coding standards compliance ### **Automattic/woocommerce-connect-server** - Note API changes - Check for database migrations - Verify environment variable updates ### **Automattic/ciab-admin** - Note UI/component changes - Check for new dependencies - Verify integration with WC Shipping ### **woocommerce/woocommerce-shipping** - Check for UDM module changes - Note carrier integrations - Verify backward compatibility ## Error Handling ### **No remote configured:** ``` Error: No GitHub remote found. Please configure origin remote first. Suggestion: git remote add origin https://github.com/{org}/{repo}.git ``` ### **On default branch:** ``` Error: Cannot create PR from default branch (main/master). Suggestion: Create a feature branch first: git checkout -b feature/your-branch-name ``` ### **No changes:** ``` Error: No commits found on this branch compared to {base-branch}. Suggestion: Make some commits first, or check if you're on the right branch. ``` ## Examples ### **Example 1: Simple Feature PR** ``` User: /create-pr woocommerce-shipping [Skill analyzes branch: feature/add-scanform-ui] [Base branch: main] [Commits: 3 commits adding ScanForm UI components] [Template found: .github/PULL_REQUEST_TEMPLATE.md] Agent outputs: ✅ PR description generated and copied to clipboard! --- ## Title feat: Add ScanForm UI for USPS bulk label printing ## Description ### Summary Implements the ScanForm UI to allow merchants to generate USPS ScanForms for bulk label printing. ### Changes - Added ScanFormModal component with form validation - Integrated ScanForm API endpoint - Added ScanForm history table to settings page - Updated tests for new components ### Testing 1. Enable USPS in WooCommerce Shipping 2. Purchase multiple USPS labels 3. Navigate to Settings > Shipping Labels > ScanForm 4. Generate a new ScanForm 5. Verify history shows in table ### Related Issues Closes WOOSHIP-1761 --- Next steps: 1. Push your branch: git push -u origin HEAD 2. Create PR on GitHub 3. Paste description from clipboard ``` ### **Example 2: Multiple Repos Detected** ``` User: /create-pr [Skill detects 3 git repos in workspace] Response: I found multiple repositories in your workspace: 1. woocommerce-shipping 2. ciab-admin 3. woocommerce-connect-server Which repository do you want to create a PR for? ``` ### **Example 3: Bug Fix PR** ``` User: /create-pr [Skill analyzes branch: fix/null-shipment-ids] [Single commit: "Fix critical error when opening orders with null shipment IDs"] Agent outputs: ✅ PR description generated and copied to clipboard! --- ## Title fix: Handle null shipment item IDs in older orders ## Description ### Summary Fixes critical error when opening older orders that have null shipment item IDs. ### Changes - Added null check in shipment data retrieval - Updated error handling for legacy order data - Added defensive coding for missing shipment metadata ### Testing 1. Create an order with WooCommerce Shipping 1.x 2. Upgrade to 2.x 3. Open the order in admin 4. Verify no fatal error occurs ### Related Issues Fixes #1395 --- Content is in your clipboard - paste into GitHub PR form! ``` ## Best Practices 1. **Be specific:** Reference actual code changes, not generic descriptions 2. **Include context:** Why was this change needed? What problem does it solve? 3. **Testing instructions:** Make them actionable and specific 4. **Link issues:** Extract Linear issue IDs and GitHub issue numbers from commits 5. **Clean output:** Format as clean markdown suitable for GitHub ## Output Format Always output in this structure: ```markdown ## Title {Generated title} ## Description {Filled template body} ``` Then run the appropriate clipboard command for the user's platform (see Step 7 for cross-platform options): ```bash # macOS echo "{full content}" | pbcopy # Linux (xclip) echo "{full content}" | xclip -selection clipboard # Windows echo "{full content}" | clip.exe ``` And tell the user: ``` ✅ PR description generated and copied to clipboard! Next steps: 1. Push your branch: git push -u origin HEAD 2. Create PR on GitHub 3. Paste description from clipboard ``` ## Notes - This skill does NOT create the PR - it only generates the description - User must manually push branch and create PR on GitHub - **ALWAYS read the repository's PR template first** - do not assume a structure - **Follow the template EXACTLY** - preserve HTML comments, section headers, and checkbox items - Some repos use issue templates in `.github/ISSUE_TEMPLATE/` - don't confuse with PR templates - If commits or branch names reference Linear issues (WOOSHIP-1234, WOO13-143), use the short ID format in "Closes" - NOT the full linear.app URL - Use platform-appropriate clipboard command (`pbcopy` on macOS, `xclip`/`xsel` on Linux, `clip.exe` on Windows) - The clipboard content should be the PR body only (not wrapped in code blocks) - ready to paste directly into GitHub