Auto Semver Action
A custom GitHub Action written in Python to automatically bump semantic versioning, update changelogs, and create Pull Requests — fully configurable.
Usage
Marketplace install snippets often pin an exact release (for example @1.6.3). Prefer the floating major tag for compatible updates:
- name: Auto Semver Bumper
uses: GuyErreich/Action-Semver-Control@v1
See Pinning policy for the floating v1 tag vs exact semver vs SHA pins.
Quickstart
New to this action? Follow docs/SETUP.md end-to-end (GitHub App, secrets, workflows).
Required: Caller workflows must include a concurrency queue when merging multiple PRs to the same branch.
One-command setup (recommended)
From your consumer repository:
uvx --from git+https://github.com/GuyErreich/Action-Semver-Control auto-semver setup
Add workflows without the CLI
- Register a GitHub App — install it on your repo, set variable
GH_APP_CLIENT_IDand secretGH_APP_PRIVATE_KEY. - Add a caller workflow — copy src/auto_semver/setup/scaffolds/auto-semver.caller.yml to
.github/workflows/auto-semver.yml. - Add config — copy src/auto_semver/setup/scaffolds/auto_semver_config.yml to
auto_semver_config.ymland edit branch suffixes.
Regenerate prefilled “add workflow” links for your repo:
python scripts/generate_onboarding_links.py --owner YOUR_ORG --repo YOUR_REPO --branch master
Pin reusable workflows at the floating major tag v1 (for example .../semver-bump.reusable.yml@v1). See Pinning policy.
Features
- Auto bump
major,minor, orpatchdepending on branch type - Add suffixes (
-dev,-rc) depending on the target branch - Auto-create release branches
- Auto-close old release PRs (single branch mode)
- Label bump PRs automatically (
semver-bump) - 100% typed Python (>=3.12)
- No subprocess for git — uses GitPython and Requests; bump/promote refresh lockfiles with the
uvornpmalready on the runner whenlock_syncis enabled, and otherwise update only the project version inside the existing lock - Published on PyPI as
auto-semver-control. The console script staysauto-semver. The action installs that release when it exists, and this checkout until the first publish - Comprehensive test coverage with pytest and pyfakefs
- Modern Python tooling (ruff, mypy, pre-commit, gitleaks secret scan)
CLI Usage
The action installs auto-semver-control for this checkout's version when that release is on PyPI. Install the stable package locally with uv tool install auto-semver-control.
To try a dev or staging publish before it is production, install that pre-release explicitly:
uv tool install --prerelease explicit "auto-semver-control==1.2.3.dev0"
uv tool install --prerelease explicit "auto-semver-control==1.2.3rc0"
1.2.3-dev is published as 1.2.3.dev0, and 1.2.3-rc as 1.2.3rc0. A plain uv tool install auto-semver-control stays on the stable release. The PyPI name auto-semver is a different project.
Manual Promotion
To manually promote a version from one branch to another (e.g., dev -> staging):
auto-semver --github-token <TOKEN> promote --from-branch dev --to-branch staging
Options:
--dry-run: Validate the promotion without creating a PR.
Configuration (auto_semver_config.yml)
start_version: "0.1.0"
suffixes:
dev: "-dev"
staging: "-rc"
main: ""
files_to_update:
- "version.txt"
- "README.md"
Commit Parsing & Grouping
The action supports three intelligent parsing strategies to organize your changelogs and release notes effectively. Grouping is configured via the commit_groups section in your config file.
1. Sectioned Changes (Type 3 - Highest Priority)
Best for large commits covering multiple areas. Use Markdown headers in your commit body.
Commit Message:
feat: major overhaul of auth system
### ✨ Features
- Added OIDC provider support
- Implemented refresh token rotation
### 🐛 Bug Fixes
- Fixed race condition in login flow
- Resolved session timeout issue
Result:
- The bullet points under
### ✨ Featureswill appear in the "Features" group. - The bullet points under
### 🐛 Bug Fixeswill appear in the "Bug Fixes" group.
2. Bullet Points (Type 2)
Great for listing multiple related changes without specific sections.
Commit Message:
fix: update dependency handling
- Upgrade pydantic to v2
- Remove deprecated validation logic
- Fix circular import in config module
Result:
- Each bullet point is treated as an individual change.
- Each point is matched against your
auto_semver_config.ymlpatterns independently.
3. Header Only (Type 1 - Default)
Standard conventional commit format.
Commit Message:
fix(api): handle missing auth header gracefully
Result:
- The entire header is matched against config patterns.
- Grouped based on the prefix (e.g.,
fix:goes to "Bug Fixes").
Configuration Example
Define how regex patterns map to groups in auto_semver_config.yml:
commit_groups:
- title: "✨ Features"
patterns:
- "^feat:"
- "^add:"
priority: 1
- title: "🐛 Bug Fixes"
patterns:
- "^fix:"
- "^resolve:"
priority: 2
License
MIT — see LICENSE.
Metadata
Release files for auto-semver-control 1.8.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| auto_semver_control-1.8.7.tar.gz | 108.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| auto_semver_control-1.8.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 250.7 kB
Release files / auto_semver_control-1.8.7.tar.gz
| Download URL | auto_semver_control-1.8.7.tar.gz |
|---|---|
| Size | 108.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87c0c7b94e4b4950b96e0330a71050f72e263a223fba084e3728a55b99427e3f
|
|
BLAKE2b-256 checksum How to use checksums |
9266c291e484604c78e632d7f37c78e91fc8d6e4d11e3dd625d5d38c2ca7d4c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / auto_semver_control-1.8.7-py3-none-any.whl
| Download URL | auto_semver_control-1.8.7-py3-none-any.whl |
|---|---|
| Size | 142.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1fb3246b2fd577678f960218a5ad9ae8b1d270b597a6cf39932369a1ad917f34
|
|
BLAKE2b-256 checksum How to use checksums |
bf920080358fb84828b9414dba1c2a1377d15de014071858c28b970e414ed20d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|