This document outlines all manual steps you need to take to complete the semantic release setup.
The following has been automatically configured:
- Python Semantic Release: Added as a dev dependency (
python-semantic-release>=9.0.0) - Semantic Release Configuration: Complete configuration in
pyproject.tomlwith:- Conventional commit parsing
- Automatic version bumping based on commit types
- CHANGELOG.md auto-generation
- GitHub release creation
- GitHub Actions Workflow: New
.github/workflows/release.ymlthat:- Triggers on every push to
mainbranch - Can also be manually triggered via workflow_dispatch
- Runs tests before releasing
- Automatically determines version from commits
- Creates tags and GitHub releases
- Publishes to PyPI (when token is configured)
- Triggers on every push to
If you want to publish to PyPI automatically:
- Go to https://pypi.org/manage/account/token/
- Click "Add API token"
- Give it a name (e.g., "mcp-devbench-github-actions")
- Set scope to "Entire account" or create after first manual upload with "Project: mcp-devbench"
- Copy the generated token (starts with
pypi-) - Go to your GitHub repository: https://github.com/pvliesdonk/mcp-devbench/settings/secrets/actions
- Click "New repository secret"
- Name:
PYPI_API_TOKEN - Value: Paste the PyPI token
- Click "Add secret"
If you don't want to publish to PyPI:
- Remove or comment out the "Publish package to PyPI" step in
.github/workflows/release.yml
Ensure GitHub Actions has write permissions:
- Go to https://github.com/pvliesdonk/mcp-devbench/settings/actions
- Under "Workflow permissions", select "Read and write permissions"
- Check "Allow GitHub Actions to create and approve pull requests"
- Click "Save"
From now on, all commits to the main branch should follow the Conventional Commits format:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
| Type | Description | Version Bump | Example |
|---|---|---|---|
feat: |
New feature | Minor (0.1.0 → 0.2.0) | feat: add container networking support |
fix: |
Bug fix | Patch (0.1.0 → 0.1.1) | fix: correct memory leak in exec manager |
perf: |
Performance improvement | Patch (0.1.0 → 0.1.1) | perf: optimize database queries |
BREAKING CHANGE: |
Breaking change | Major (0.1.0 → 1.0.0) | See example below |
docs: |
Documentation only | No release | docs: update API reference |
style: |
Code style changes | No release | style: format with ruff |
refactor: |
Code refactoring | No release | refactor: simplify container manager |
test: |
Test updates | No release | test: add unit tests for auth |
chore: |
Maintenance tasks | No release | chore: update dependencies |
ci: |
CI/CD changes | No release | ci: update workflow |
feat!: redesign authentication API
BREAKING CHANGE: The authentication API has been completely redesigned.
The old token-based auth is no longer supported. Users must migrate to
the new OAuth2 flow.
Option A: Merge this PR and let it run automatically
- Merge this PR to
main - The workflow will automatically run
- Since this PR contains
feat:commits, it should create version 0.2.0
Option B: Test with a manual trigger first
- Merge this PR to
main - Go to https://github.com/pvliesdonk/mcp-devbench/actions/workflows/release.yml
- Click "Run workflow"
- Select branch:
main - Click "Run workflow"
- Monitor the workflow run in the Actions tab
After the workflow runs successfully, verify:
- Version updated: Check
pyproject.toml- version should be bumped - CHANGELOG updated: Check
CHANGELOG.md- new version entry added - Git tag created: Check https://github.com/pvliesdonk/mcp-devbench/tags
- GitHub release: Check https://github.com/pvliesdonk/mcp-devbench/releases
- PyPI package (if configured): Check https://pypi.org/project/mcp-devbench/
# Make your changes
git add .
# Commit with conventional format
git commit -m "feat: add support for custom networks"
# Push to main (after PR approval)
git push origin main
# Semantic release will automatically:
# 1. Detect this is a "feat" commit → minor version bump
# 2. Update version in pyproject.toml (e.g., 0.1.0 → 0.2.0)
# 3. Update CHANGELOG.md
# 4. Create git tag v0.2.0
# 5. Create GitHub release
# 6. Publish to PyPI# Multiple commits are analyzed together
git commit -m "feat: add new feature A"
git commit -m "feat: add new feature B"
git commit -m "fix: correct bug in feature A"
git push origin main
# Result: One release with version bump based on highest priority change
# In this case: minor bump (0.1.0 → 0.2.0) due to "feat" commits
# CHANGELOG will include all changesgit commit -m "feat!: redesign API
BREAKING CHANGE: API endpoints have been redesigned.
Old endpoints are no longer available."
git push origin main
# Result: Major version bump (0.1.0 → 1.0.0)Possible causes:
- Commits don't include
feat:,fix:, or breaking changes - All commits are
docs:,chore:,test:, etc. (which don't trigger releases) - Commits don't follow conventional commit format
Solution: Check commit messages and ensure at least one uses feat: or fix:
Possible causes:
PYPI_API_TOKENsecret not configured- Token expired or invalid
- Package name already taken (first release)
Solution:
- Verify token is correctly set in GitHub secrets
- For first release, you may need to manually upload once:
uv build && uv run twine upload dist/* - Then regenerate token scoped to the project
Check:
- Was the workflow run on the
mainbranch? - Did the workflow complete successfully?
- Check workflow logs in Actions tab
Check:
- Ensure
CHANGELOG.mdexists (it should from previous setup) - Check workflow logs for errors
- Verify semantic-release configuration in
pyproject.toml
- Python Semantic Release Docs: https://python-semantic-release.readthedocs.io/
- Conventional Commits: https://www.conventionalcommits.org/
- Semantic Versioning: https://semver.org/
- GitHub Actions Workflow Syntax: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
If you encounter issues:
- Check the Actions tab logs: https://github.com/pvliesdonk/mcp-devbench/actions
- Verify all secrets are configured correctly
- Review the SEMANTIC_RELEASE_SETUP.md file for more details
- Check if the issue is related to commit format or configuration
- ✅ Configure PyPI API token (Step 1)
- ✅ Enable GitHub Actions write permissions (Step 2)
- ✅ Start using conventional commits (Step 3)
- ✅ Test the workflow (Step 4)
- ✅ Verify first release (Step 5)
Good luck! 🚀