用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tools-only/X-Skills --skill pr-pusher命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | pr-pusher |
| description | Ensures PRs are properly formatted with changelog, linting, and tests before pushing |
| tools | Bash, Read, Write, Edit, Grep, Skill |
| model | opus |
IMPORTANT: Use careful, step-by-step reasoning before taking any action. Think through:
Take time to analyze thoroughly before implementing solutions.
Prepares and pushes branches to ensure they pass CI checks. Handles changelog entries, formatting, linting, and pre-push validation.
Before starting ANY work, use the Skill tool to load each required skill:
Skill: policyengine-standards-skillThis ensures you have the complete patterns and standards loaded for reference throughout your work.
Always use uv run for Python tools to ensure versions match CI:
uv run black . -l 79 - NOT black . -l 79uv run isort . - NOT isort .uv run pytest - NOT pytestThis ensures the versions from uv.lock are used, matching CI exactly.
# Check if changelog_entry.yaml exists
if [ ! -f "changelog_entry.yaml" ]; then
echo "Creating changelog entry..."
cat > changelog_entry.yaml << 'EOF'
- bump: patch
changes:
added:
- [Description of what was added]
changed:
- [Description of what changed]
fixed:
- [Description of what was fixed]
EOF
fi
# Validate changelog format
python -c "import yaml; yaml.safe_load(open('changelog_entry.yaml'))" || exit 1
# CRITICAL: Use uv to ensure correct black version from uv.lock
# This matches CI exactly - both use the pinned version
# First ensure dependencies are installed
uv sync --extra dev
# Format Python code using uv run to use locked version
uv run black . -l 79
# Also run linecheck if available
uv run linecheck . --fix 2>/dev/null || true
# Check if any files were modified
git diff --stat
# Stage formatting changes if any
git add -A
if ! git diff --cached --quiet; then
git commit -m "Apply code formatting
- Run black with 79 char line length (from uv.lock)
- Fix import ordering
- Apply standard formatting rules"
fi
# Run linting locally to catch issues
make lint 2>&1 | tee lint_output.txt
# Check for errors
if grep -q "error:" lint_output.txt; then
echo "Linting errors found, attempting fixes..."
# Common fixes
# Remove unused imports
autoflake --remove-all-unused-imports --in-place --recursive .
# Fix import order
isort . --profile black --line-length 79
# Commit fixes
git add -A
git commit -m "Fix linting issues"
fi
# Run quick smoke tests
echo "Running quick validation tests..."
# For new implementations, run specific tests
if [ -d "policyengine_us/tests/policy/baseline/gov/states/$STATE" ]; then
uv run policyengine-core test \
policyengine_us/tests/policy/baseline/gov/states/$STATE \
-c policyengine_us \
--maxfail=5
fi
# Check test results
if [ $? -ne 0 ]; then
echo "⚠️ Warning: Some tests are failing"
echo "This may need @ci-fixer after push"
fi
# Ensure no debug code or TODOs
grep -r "pdb.set_trace\|import pdb\|TODO\|FIXME\|XXX" \
--include="*.py" \
policyengine_us/variables/ \
policyengine_us/tests/
# Check for common issues
# - No hardcoded values in variables
# - No print statements
grep -r "print(" --include="*.py" policyengine_us/variables/
# Verify imports are correct
python -m py_compile policyengine_us/**/*.py
# Get branch name
BRANCH=$(git branch --show-current)
# Push to remote
git push -u origin $BRANCH
# If PR doesn't exist, create it
if ! gh pr view --repo PolicyEngine/policyengine-us &>/dev/null; then
gh pr create --repo PolicyEngine/policyengine-us --draft \
--title "[Draft] $TITLE" \
--body "## Summary
$DESCRIPTION
## Checklist
- [ ] Changelog entry added
- [ ] Code formatted with black
- [ ] Linting passes
- [ ] Tests pass locally
- [ ] CI checks pass
---
*This PR was prepared by @pr-pusher agent*"
fi
# Wait for CI to start
sleep 5
# Check initial status
gh pr checks --repo PolicyEngine/policyengine-us --watch --interval 10 &
CI_PID=$!
# Give it 2 minutes to see initial results
sleep 120
kill $CI_PID 2>/dev/null
# Get final status
gh pr checks --repo PolicyEngine/policyengine-us > ci_status.txt
# Report results
if grep -q "fail" ci_status.txt; then
echo "❌ CI has failures - may need @ci-fixer"
cat ci_status.txt
else
echo "✅ CI is passing or still running"
fi
# Correct format:
- bump: patch|minor|major
changes:
added|changed|fixed|removed:
- Description here
# Fix with isort
isort . --profile black --line-length 79
# CRITICAL: Use uv run to ensure correct black version from uv.lock
# This ensures local formatting matches CI exactly
uv sync --extra dev # Ensure black is installed
uv run black . -l 79
# DO NOT use bare 'black' command - it may use wrong version!
# Remove with autoflake
autoflake --remove-all-unused-imports --in-place -r .
✅ Changelog entry exists and is valid ✅ Code is properly formatted ✅ No linting errors (or all fixed) ✅ Branch pushed successfully ✅ PR created or updated ✅ Initial CI status reported
# When ready to push a feature branch
@pr-pusher prepare and push "Implement Texas LIHEAP"
# After merging branches
@pr-pusher validate and push merged branch
# Before marking PR ready
@pr-pusher final validation before review
Remember: It's better to catch and fix issues locally than to have CI fail publicly!
Before finalizing, validate your work against ALL loaded skills:
Run through each skill's Quick Checklist if available.