Skip to main content

draft-pr

Draft a PR description based on branch changes and the project PR template

Informations de source

Dépôt
openshift/cac-content-fork
Dernière activité de la source
4 mars 2026 à 13:31
Langue détectée de SKILL.md
anglais
Étoiles
6
Forks
6

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
draft-pr
description
Draft a PR description based on branch changes and the project PR template
# Draft Pull Request Description Generate a pull request description for the current branch by analyzing commits since the branching point from master, following the project's PR template format. ## Tool Strategy This skill uses `mcp__content-mcp__*` tools when available (preferred — deterministic, structured results). When the MCP server is not configured, fall back to filesystem-based alternatives noted as **Fallback** in each step. See `.claude/skills/shared/mcp_fallbacks.md` for detailed fallback procedures. The skill must complete successfully either way. ## Phase 1: Gather Branch Data 1. **Get current branch and branching point**: ```bash git branch --show-current git merge-base HEAD master ``` 2. **Abort if not on a feature branch**: - If on `master`, or if `merge-base` equals `HEAD` (no diverging commits), inform the user: "No diverging commits found. Please switch to your feature branch first." - Stop execution. 3. **Collect commit history** (all commits since branching point): ```bash MERGE_BASE=$(git merge-base HEAD master) git log --no-merges --format="%H %s%n%b---" ${MERGE_BASE}..HEAD ``` 4. **Collect diff information**: ```bash MERGE_BASE=$(git merge-base HEAD master) git diff --stat ${MERGE_BASE}..HEAD git diff ${MERGE_BASE}..HEAD git diff --name-only ${MERGE_BASE}..HEAD ``` ## Phase 2: Analyze Changes ### 2.1 Categorize Change Type Determine which categories apply based on changed files and diff content: - New rule (new `rule.yml` added) - Modified rule (existing `rule.yml` changed) - New or modified template (`shared/templates/`) - Remediation changes (Bash/Ansible files) - Profile changes (`.profile` files) - Control file changes (`controls/`) - Test scenario changes (`tests/`) - Build system or infrastructure changes - Documentation changes ### 2.2 Identify Affected Products Look for product indicators: - CCE identifiers in `rule.yml` files (`cce@rhel8`, `cce@rhel9`, `cce@rhel10`, etc.) - Product-specific paths (`products/<product>/`) - Profile or control file names containing product identifiers - Platform applicability in rule definitions ### 2.3 Read Key Changed Files For significant changed files, use MCP functions to get structured metadata: - **Rules**: Use `mcp__content-mcp__get_rule_details` with the rule ID to get title, description, rationale, template, severity, references, and platform info - **Profiles**: Use `mcp__content-mcp__get_profile_details` with product and profile ID to get profile structure and rule selections - **Controls**: Use `mcp__content-mcp__get_control_details` to understand control framework structure - **Templates**: Use `mcp__content-mcp__get_template_schema` to get template parameter info **Fallback**: Read the files directly — `rule.yml`, `.profile`, control YAML, and template files in `shared/templates/<name>/`. ### 2.4 Check Test Coverage - Look for added/modified test scenarios in `tests/` subdirectories - Check if rules use templates (inheriting template tests) ### 2.5 Detect Issue References Scan commit messages for patterns like `Fixes #N`, `Resolves #N`, `Closes #N`, or bare `#N` references. ## Phase 3: Draft PR Description Read the PR template: ```bash cat .github/pull_request_template.md ``` Draft all three sections following the template format exactly: ### 3.1 Description Section Auto-generate from analysis: - **New rules**: "Add new rule `<rule_id>` that <what the rule checks>. The rule has `<severity>` severity and targets <products>. It uses the `<template>` template / includes custom OVAL and <Bash/Ansible/both> remediation." - **Rule modifications**: "Modify rule `<rule_id>` to <what changed>." - **Profile/control changes**: "Update <profile/control> for <product> to <what changed>." - **Template changes**: "Modify template `<template_name>` to <what changed>." - **Multi-change PRs**: List each major change as a separate bullet point. ### 3.2 Rationale Section Attempt to infer from: - Commit message bodies (look for explanations of "why") - Rule `rationale` field in `rule.yml` - Security references indicating compliance requirements - Profile additions indicating framework alignment If rationale cannot be fully inferred, include what was found and mark gaps for user input. Include issue reference if detected in commit messages, otherwise leave a placeholder. ### 3.3 Review Hints Section Auto-generate: - **Affected products** with build commands: `./build_product --datastream-only <product>` - **Test commands** if test scenarios exist: ``` ./tests/automatus.py rule --libvirt qemu:///session <product_vm_name> --datastream build/ssg-<product>-ds.xml <rule_id> ``` Note: Adjust `qemu:///session` to `qemu:///system` and `<product_vm_name>` to the actual VM name based on reviewer's local setup. - **Key files to review**: highlight the most important changed files - **Review approach**: suggest reviewing all commits together or in sequence, based on how related the commits are - **Related issues/PRs**: include any references found in commit messages ## Phase 4: Write Output File ### 4.1 Write PR_DESCRIPTION.md Write the final description to `PR_DESCRIPTION.md` in the repository root. If the file already exists, inform the user and ask whether to overwrite. The file must begin with the suggested PR title on the first line, followed by a blank line, then the PR template sections: ``` <suggested PR title> #### Description: - <description content> #### Rationale: - <rationale content> - Fixes #<number> (only if user provided one, otherwise omit this line) #### Review Hints: - <review hints content> ``` ### 4.2 PR Title Generate a PR title following project conventions: - Under 70 characters - Imperative mood ("Add", "Fix", "Update") - Useful for changelog The title is included at the top of `PR_DESCRIPTION.md` so the user can edit it alongside the body. ### 4.3 Report Next Steps Tell the user: - Path to the output file (`PR_DESCRIPTION.md`) - Suggested PR title - Commands to create the PR: ```bash git push -u origin <current_branch> gh pr create --title "<suggested title>" --body-file PR_DESCRIPTION.md ``` - Reminder: do not commit `PR_DESCRIPTION.md` to the repository ## Important Notes - **Do NOT push or create the PR** — only draft the description file - **Match the PR template format exactly** — the output must be drop-in compatible with `.github/pull_request_template.md` - **Analyze ALL commits** in the branch, not just the latest one - **Use `--no-merges`** when reading commit log to skip merge commits - **Be specific about products** — use actual product names (rhel8, rhel9, rhel10) - **Handle large diffs gracefully** — for branches with many changes, summarize by category rather than listing every file
Voir sur GitHub