source-command-ship-release
Use this skill when the user asks to run the migrated source command ship-release.
Command Template
Ship Release
Orchestrates the full release workflow: version prep, PR creation, tagging, and PyPI publication.
Usage
/ship-release 0.7.7
What This Does
Runs the complete release workflow for projects with protected main branches:
- Invokes
/prepare-releaseto update versions and changelog - Creates release branch (
release/v{version}) - Commits the changes
- Pushes branch and creates PR
- PAUSES for human PR review and merge
- After merge, creates git tag
- Creates GitHub Release (triggers PyPI publish via Actions)
- Monitors PyPI publication
Workflow
Phase 1: Prepare Release
Run /prepare-release {version} which:
- Updates CHANGELOG.md
- Updates version in pyproject.toml, src/neo/init.py, .claude-plugin/plugin.json, plugins/neo/.codex-plugin/plugin.json
- Refreshes the local editable install metadata and verifies
importlib.metadata.version("neo-reasoner") == "{version}" - Builds distributions
Phase 2: Create Release Branch
git checkout -b release/v{version}
If branch already exists, check it out instead.
Phase 3: Commit Changes
git add CHANGELOG.md pyproject.toml src/neo/__init__.py .claude-plugin/plugin.json plugins/neo/.codex-plugin/plugin.json
git commit -m "chore: bump version to {version}"
Phase 4: Push and Create PR
git push origin release/v{version}
gh pr create --title "Release v{version}" --body "<changelog summary>"
CHECKPOINT: Command stops here. Report PR URL and next steps.
User must:
- Review the PR
- Verify changelog and version updates
- Verify local install metadata reports the release version:
python -c "import importlib.metadata as m; print(m.version('neo-reasoner'))" - Merge the PR
Then run: /ship-release {version} --continue
Phase 5: Create Tag (after PR merge)
git checkout main
git pull origin main
git tag v{version}
git push origin v{version}
Phase 6: Create GitHub Release
gh release create v{version} \
--title "v{version}" \
--notes "<changelog content>" \
dist/neo_reasoner-{version}*
This triggers the GitHub Actions workflow (.github/workflows/publish.yml) which publishes to PyPI.
Phase 7: Verify Publication
Check that:
- GitHub Actions workflow completed successfully
- Package appears on PyPI: https://pypi.org/project/neo-reasoner/
Report status and provide link to new release.
Options
--continue: Resume after PR is merged (skips phases 1-4)--dry-run: Show what would happen without making changes
Error Handling
If PR creation fails: Check if PR already exists, provide URL if so
If tag already exists: Report conflict, suggest incrementing version
If GitHub Actions fails: Check workflow logs at github.com/{repo}/actions
If PyPI publish fails: Check Actions logs for authentication or build issues
Notes
- Main branch must be protected (requires PR for merges)
- Requires
ghCLI authenticated with GitHub - Requires PyPI configured with Trusted Publishers in GitHub Actions
- Safe to re-run - checks existing state at each phase
- Use
/prepare-releasealone if you just want to prep without full release