QuickCall SuperTrace releases are published to PyPI. When you push a tag (v*), the publish workflow builds and uploads the package.
When releasing, bump version in both files using the bump script:
./scripts/bump-version.sh X.Y.ZThis updates:
packages/server/pyproject.tomlpackages/web/package.json
Keep versions in sync!
Create a parent issue for the feature/release, then add sub-issues for individual tasks.
Refer to
.github/ISSUE_TEMPLATE/for issue formats (feature_request, bug_report, chore, etc.)
Example structure:
#65 feat: Auto-update notifications (parent)
├── #66 B1: Version Service
├── #67 B2: Version API Endpoint
├── #68 B3: Update Trigger Endpoint
├── #69 F1: Version Check Hook
└── #70 F2: Update Notification Component
git checkout main
git pull origin main
git checkout -b feature/my-featureWork on your feature, commit changes with proper prefixes:
add:- New featurefix:- Bug fixupdate:- Update existing functionalityrefactor:- Code refactoringtest:- Adding testsdocs:- Documentationchore:- Maintenance
When ready to release:
./scripts/bump-version.sh 0.2.1
git add -A
git commit -m "chore: bump version to 0.2.1"
git push origin feature/my-featuregh pr create \
--draft \
--title "feat: My feature description" \
--assignee @me \
--body "## Summary
Closes #65
Description of changes.
## Changes
- Feature 1
- Feature 2
## Version
Bumped to 0.2.1
"Mark ready for review when done. Always assign to @me.
Always use squash merge. Do NOT delete the branch (user deletes manually when ready).
gh pr merge <PR_NUMBER> --squashOr merge manually:
git checkout main
git pull origin main
git merge --squash feature/my-feature
git commit -m "add: my feature description (v0.2.1)"
git push origin mainCreate the release and tag:
gh release create v0.2.1 \
--title "v0.2.1 - Brief description" \
--notes "## What's New
- Feature 1
- Feature 2
- Bug fix
"This will:
- Create and push git tag
v0.2.1 - Trigger
publish-pypi.ymlworkflow - Build frontend, bundle into Python package
- Publish to PyPI
# Check tag was created
git fetch --tags
git tag -l | tail -5
# Check GitHub Actions
gh run list --limit 5
# Check PyPI (may take a few minutes)
pip index versions quickcall-supertrace| Item | Convention |
|---|---|
| Branch name | feature/feature-name or fix/issue-name |
| Commit message | Prefix + description (e.g., add: user auth) |
| PR | Draft first, squash merge, do NOT delete branch |
| Issues | Use templates, create sub-issues for tasks |
| Assignment | Always @me for issues and PRs |
# Work on feature branch
git checkout -b feature/auto-update-notifications
# ... develop, commit changes ...
# Bump version
./scripts/bump-version.sh 0.2.1
git add -A && git commit -m "chore: bump version to 0.2.1"
git push origin feature/auto-update-notifications
# Create draft PR
gh pr create --draft --title "feat: Auto-update notifications" --assignee @me
# After review, squash merge
git checkout main && git pull
git merge --squash feature/auto-update-notifications
git commit -m "add: auto-update notifications (v0.2.1)"
git push origin main
# Create release
gh release create v0.2.1 \
--title "v0.2.1 - Auto-update notifications" \
--notes "## What's New
- Check PyPI for latest version
- Show notification when update available
- One-click update and restart
"If something goes wrong:
# Delete tag locally and remotely
git tag -d v0.1.9
git push origin :refs/tags/v0.1.9
# PyPI releases cannot be deleted, only yanked
# Contact PyPI support if needed| Workflow | Trigger | Action |
|---|---|---|
publish-pypi.yml |
Tag push (v*) |
Builds frontend, bundles package, publishes to PyPI |
Note: Tags are created manually via gh release create. There is no auto-tag workflow.