pulumi/shipit
Finalize and ship changes with quality checks, commits, and PR creation
npx skills add https://github.com/pulumi/docs --skill shipit
Use this when: You're ready to commit your work and create a pull request.
Performs comprehensive quality checks (lint, build, code compilation), creates meaningful commits, and handles the complete workflow from staging to PR creation with multiple approval checkpoints.
/shipit
Finalizes your current work by running quality checks, committing changes, pushing to remote, and creating a pull request.
Required: Uncommitted changes in the working directory
Works with: All file types (Go code, YAML, CI workflows, scripts, theme, infrastructure)
Special handling: Detects and prevents master branch commits, validates Go code and YAML, and scans conversation history to avoid redundant quality checks.
CRITICAL SUCCESS CRITERIA: Complete all 8 steps in sequence. Every step is mandatory and serves a critical purpose in the workflow. DO NOT SKIP ANY STEP OR END THE WORKFLOW PREMATURELY!
Step Counter: Display progress before each step as: [Step X/8] followed by the step heading. This helps users track progress through the workflow.
References: This skill uses detailed reference files. Always follow the detailed instructions in these referenced documents when applicable:
shipit:references:quality-checks - Quality check procedures and code testingshipit:references:commit-messages - Commit message style guidelinesPurpose: Understand what's changed and check for next steps from previous work.
Actions:
git status --short to see all changesgit branch --show-current to verify current branchthemes/default/data/registry/packages/)tools/resourcedocsgen/, tools/mktutorial/).github/workflows/)Makefile, scripts/)infrastructure/)themes/default/layouts/, themes/default/theme/)community-packages/)Output: Display summary of changes with file counts per category
Run context-aware quality checks. Scan conversation history to skip redundant checks (lint/build), and run appropriate checks based on file types changed.
See shipit:references:quality-checks for complete procedures, detection patterns, and error handling.
Display summary and ask user to proceed with AskUserQuestion.
Purpose: Prevent accidental commits to master branch.
Actions:
git branch --show-currentmaster or main:AskUserQuestion with options:CamSoper/{descriptive-name}git checkout -b CamSoper/{name}git reset --hard origin/master{branch-name}"Safety: Always preview destructive operations (like reset --hard) before executing.
Generate 3 meaningful commit message suggestions based on:
git diff --stat outputgit log --oneline -5)See shipit:references:commit-messages for message format, prefix guidelines, and generation strategies.
Present suggestions with AskUserQuestion (3 options + custom message).
All messages include: Co-Authored-By: Claude Opus 4.6 <[email protected]>
Purpose: Preview exactly what will be committed before execution.
Display preview:
Ready to commit:
Branch: CamSoper/fix-yaml-validation
Files to be committed:
M themes/default/data/registry/packages/example.yaml
M tools/resourcedocsgen/cmd/generate.go
A tools/resourcedocsgen/cmd/generate_test.go
Commit message:
─────────────────────────────────────────
Fix YAML validation for community packages
Corrects category field validation in resourcedocsgen.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
─────────────────────────────────────────
Commands that will run:
git add themes/default/data/registry/packages/example.yaml tools/resourcedocsgen/cmd/generate.go tools/resourcedocsgen/cmd/generate_test.go
git commit -m "$(cat <<'EOF'
Fix YAML validation for community packages
Corrects category field validation in resourcedocsgen.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
EOF
)"
Ask for confirmation:
AskUserQuestion with options:If "Edit message": Loop back to Step 4
If "Cancel": Exit skill with message about uncommitted changes
Purpose: Commit and push changes to remote.
Actions (execute sequentially):
git add file1.yaml file2.go file3_test.go ...
Never use git add . or git add -A - always list specific files
git commit -m "$(cat <<'EOF'
{commit message from Step 5}
Co-Authored-By: Claude Opus 4.6 <[email protected]>
EOF
)"
git rev-parse --abbrev-ref @{u} 2>/dev/null
If fails (no tracking branch): Need to push with -u
# If no tracking branch:
git push -u origin {branch-name}
# If tracking branch exists:
git push
git status
Should show "Your branch is up to date with 'origin/{branch}'"
Display confirmation:
✓ Committed changes (abc123d)
✓ Pushed to origin/CamSoper/fix-yaml-validation
If any step fails:
Purpose: Generate and create a pull request with appropriate description.
Actions:
Title: Use first line of commit message (without co-author line)
Body:
git diff --stat master...HEAD)Example:
Corrects category field validation in resourcedocsgen for community packages.
## Changes
- Fixed YAML validation for category enum values
- Added unit tests for edge cases
- Updated example package YAML
Pull Request Preview:
─────────────────────────────────────────
Title: Fix YAML validation for community packages
Body:
Corrects category field validation in resourcedocsgen for community packages.
## Changes
- Fixed YAML validation for category enum values
- Added unit tests for edge cases
- Updated example package YAML
─────────────────────────────────────────
AskUserQuestion with options: gh pr create --title "{title}" --body "$(cat <<'EOF'
{body}
EOF
)"
If PR creation fails:
https://github.com/pulumi/registry/pull/new/{branch-name}
Purpose: Confirm successful completion and provide next steps.
Actions:
gh pr view --json url,number,title
Successfully shipped your changes!
Pull Request: #1234
URL: https://github.com/pulumi/registry/pull/1234
Title: Fix YAML validation for community packages
Branch: CamSoper/fix-yaml-validation
Next steps:
- Monitor PR for CI/CD status
- {any next steps from conversation}
Ship it! Your changes are ready for review.
End of skill
/AGENTS.md repository guidelinesCamSoper/{descriptive-name} formatTake pulumi/shipit from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.