name: release-pipeline
trigger:
type: webhook
source: git-push
match:
branch: main
prompt: |
A push to main just landed. Here are the commits:
{{commits}}
Execute this release pipeline in order. If any safety gate fails,
STOP and report the failure via Telegram — do not publish a broken release.
## Step 1: Version Bump
- Read current version from pyproject.toml
- Analyze the commits to determine increment type:
- patch (X.Y.Z+1): bug fixes, small tweaks, doc updates
- minor (X.Y+1.0): new features, new skills, new CLI commands
- major (X+1.0.0): breaking changes to CLI, job schema, or skill API
- Update the version string in pyproject.toml
## Step 2: README Maintenance
- If commits warrant README updates (new features, changed CLI): update
- If not: skip — don't touch README for the sake of touching it
## Step 3: Commit, Test, Build, Publish
- Stage and commit: "release: vX.Y.Z"
- SAFETY GATES (both must pass before publishing):
1. pytest tests/ -q
2. ruff check src/
- If gates pass: build and publish to PyPI
- If either fails: STOP HERE. Do not build or publish.
## Step 4: Sync Public Repo
- Copy README.md to public repo
- Add CHANGELOG.md entry for this version
- Commit and push
## Step 5: Update Developer Docs
- If new features need documenting, update relevant docs
- If no doc changes needed, skip
## Step 6: Telegram Summary
- Version number and bump type
- What changed (1-3 bullet points)
- PyPI status: published or failed
- Public repo: synced or failed
- Docs: updated or skipped
skills:
- shell
- read_file
- write_file
- edit_file
- list_directory
- grep
- find
- send_telegram
- memory_read
- memory_write
- get_current_time
delivery:
type: telegram
chat_id: "12345678"
enabled: true