Follow these steps in order:
1. Confirm on Dev
- Verify we're on the
devbranch - If not, stop and ask
2. Run Tests
- Run tests and ensure all tests pass. (Use
-n autoto run tests in parallel) - If tests fail, STOP and report the failures
3. Version Bump
- Read
docs/changelog.mdxto see what's in the## Unreleasedsection - Suggest the next version (based on existing versions in the changelog)
- Update
docs/changelog.mdx: change## Unreleasedto## <version> - <today's date> - Update
pyproject.tomlversion to match - Run
uv lockto sync the lock file with the new version - Summarize the changes for this version in a human friendly way. Focus on impactful changes and user facing changes.
4. Update Skill Version
- Update the version comment in
ezvals/skills/evals/SKILL.md(the<!-- Version: X.X.X -->line) to match the release version - The skill version MUST match the release tag — the Sync Skill to Marketplace workflow will fail otherwise
5. Commit & Push Dev
bash1git add -A 2git commit -m "release <version>" 3git push origin dev
6. Merge to Main
bash1git checkout main 2git pull origin main 3git merge dev 4git push origin main
7. Tag & Push
bash1git tag v<version> 2git push origin v<version>
8. Return to Dev
bash1git checkout dev
PyPI Publishing (Automatic)
Publishing to PyPI is handled automatically by GitHub Actions:
- Dev builds (
.github/workflows/publish-dev.yml): Every push tomainpublishes a dev version (0.0.0.dev{timestamp}) to PyPI - Release builds (
.github/workflows/publish.yml): Pushing a tag likev0.1.0triggers a release publish to PyPI
You don't need to manually run uv publish - just push the tag and the workflow handles it.
Error Handling
- If tests fail → stop and report
- If merge conflicts occur → stop and ask for help
- If not on dev → stop and ask