This document describes the release process for vibecore maintainers.
Before releasing, ensure you have:
- Commit access to the main repository
- PyPI account with maintainer access to vibecore
- TestPyPI account for testing releases
- uv package manager installed (
curl -LsSf https://astral.sh/uv/install.sh | sh) - GitHub CLI installed (optional, for creating releases manually)
Before creating a release, ensure:
- All tests pass:
uv run pytest - Type checking passes:
uv run pyright - Code is formatted:
uv run ruff format . - Linting passes:
uv run ruff check . - CHANGELOG.md is updated with release notes
- Documentation is up to date
- Dependencies are locked:
uv lock
Vibecore follows Semantic Versioning with the format: MAJOR.MINOR.PATCH
- MAJOR: Breaking API changes
- MINOR: New features, backwards compatible
- PATCH: Bug fixes, backwards compatible
Pre-release versions:
- Alpha:
X.Y.ZaN(early testing) - Beta:
X.Y.ZbN(feature complete, testing) - Release Candidate:
X.Y.ZrcN(final testing)
For testing and early feedback:
# Bump to alpha version
uv version 0.2.0a1 # Set specific alpha version
# OR
uv version --bump alpha # Auto-increment alpha number
# Commit changes
git add pyproject.toml uv.lock
git commit -m "release: bump version to 0.2.0a1"
git push
# Create and push tag (triggers GitHub Actions)
git tag v0.2.0a1
git push origin v0.2.0a1The GitHub Actions workflow will automatically:
- Build the package
- Run tests
- Publish to TestPyPI
- Create a GitHub pre-release
For stable releases:
# Bump version (choose one)
uv version 0.2.0 # Set specific version
uv version --bump patch # 0.1.0 -> 0.1.1
uv version --bump minor # 0.1.0 -> 0.2.0
uv version --bump major # 0.1.0 -> 1.0.0
# Update CHANGELOG.md
# Document all changes since last release
# Commit changes
git add pyproject.toml uv.lock CHANGELOG.md
git commit -m "release: bump version to 0.2.0"
git push
# Create and push tag (triggers GitHub Actions)
git tag v0.2.0
git push origin v0.2.0The GitHub Actions workflow will automatically:
- Build the package
- Run comprehensive tests
- Publish to PyPI
- Create a GitHub release with artifacts
If GitHub Actions is unavailable, you can release manually:
# Clean previous builds
rm -rf dist/
# Build the package
uv build
# Verify the build
ls -la dist/
# Should contain:
# - vibecore-X.Y.Z-py3-none-any.whl
# - vibecore-X.Y.Z.tar.gz# Create test environment
uv venv test-env
source test-env/bin/activate # On Windows: test-env\Scripts\activate
# Install from wheel
uv pip install dist/vibecore-*.whl
# Test it works
vibecore --version
# Should show: vibecore X.Y.Z
# Deactivate test environment
deactivate
rm -rf test-envuv publish --index testpypi
# Test installation from TestPyPI
uv pip install --index-url https://test.pypi.org/simple/ vibecore==X.Y.Z# Upload to PyPI (ONLY for stable releases)
uv publish
# Verify installation
uv pip install vibecore==X.Y.ZAfter a successful release:
-
Create GitHub Release (if not auto-created):
gh release create v0.2.0 \ --title "v0.2.0" \ --notes "Release notes here" \ --prerelease # Only for alpha/beta
-
Announce the Release:
- Update README.md if needed
- Post to relevant channels/forums
- Update documentation site
-
Prepare for Next Development:
# Bump to next development version uv version 0.3.0a0 # Next minor version alpha git add pyproject.toml uv.lock git commit -m "chore: bump version for development" git push
If you get "version already exists" error:
- Check PyPI/TestPyPI for existing version
- Bump to a new version number
- Ensure you're not re-using version numbers
Check the Actions tab for detailed logs:
- Go to https://github.com/yourusername/vibecore/actions
- Click on the failed workflow run
- Review logs for each job
Common issues:
- Test failures: Fix tests before releasing
- Token issues: Verify PyPI tokens in repository secrets
- Build issues: Test build locally with
uv build
- Verify package metadata in
pyproject.toml - Check that all required files are included
- Test local installation:
uv pip install dist/*.whl - Check PyPI page for package details
If a bad release is published:
- Cannot delete from PyPI - versions are immutable
- Yank the release on PyPI (marks as broken)
- Release a patch version with fixes immediately
- Update documentation to skip the bad version
- Go to https://test.pypi.org/manage/account/token/
- Create token named "vibecore-github-actions"
- Add as
TESTPYPI_API_TOKENin GitHub repository secrets
- Go to https://pypi.org/manage/account/token/
- Create token named "vibecore-github-actions"
- Add as
PYPI_API_TOKENin GitHub repository secrets
# Check current version
uv run vibecore --version
# Run all quality checks
uv run ruff check . && uv run ruff format --check . && uv run pyright && uv run pytest
# Bump versions
uv version --bump alpha # 0.2.0a1 -> 0.2.0a2
uv version --bump beta # 0.2.0a2 -> 0.2.0b1
uv version --bump rc # 0.2.0b1 -> 0.2.0rc1
uv version --bump patch # 0.2.0 -> 0.2.1
uv version --bump minor # 0.2.0 -> 0.3.0
uv version --bump major # 0.2.0 -> 1.0.0
# Create and push tag
git tag v$(uv version)
git push origin v$(uv version)