Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Auto Semver Action

A custom GitHub Action written in Python to automatically bump semantic versioning, update changelogs, and create Pull Requests — fully configurable.

GitHub Marketplace License: MIT Python 3.12+ Pin major v1 tag CI

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.

From your consumer repository:

uvx --from git+https://github.com/GuyErreich/Action-Semver-Control auto-semver setup

Add workflows without the CLI

  1. Register a GitHub App — install it on your repo, set variable GH_APP_CLIENT_ID and secret GH_APP_PRIVATE_KEY.
  2. Add a caller workflow — copy src/auto_semver/setup/scaffolds/auto-semver.caller.yml to .github/workflows/auto-semver.yml.
  3. Add config — copy src/auto_semver/setup/scaffolds/auto_semver_config.yml to auto_semver_config.yml and 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, or patch depending 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 uv or npm already on the runner when lock_sync is enabled, and otherwise update only the project version inside the existing lock
  • Published on PyPI as auto-semver-control. The console script stays auto-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 ### ✨ Features will appear in the "Features" group.
  • The bullet points under ### 🐛 Bug Fixes will 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.yml patterns 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.dev0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for auto-semver-control 1.8.7.dev0
File Size Uploaded
auto_semver_control-1.8.7.dev0.tar.gz 108.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for auto-semver-control 1.8.7.dev0
File Interpreter ABI Platform
auto_semver_control-1.8.7.dev0-py3-none-any.whl Python 3 none any Details

Total release size: 250.8 kB

Release files / auto_semver_control-1.8.7.dev0.tar.gz

Download URL auto_semver_control-1.8.7.dev0.tar.gz
Size 108.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2bd3f93cb7ad205ab87f405c802aaca20d1703cfe83557c776bf0e9fc9f46fe5
BLAKE2b-256 checksum
How to use checksums
29bacad2a3a2d00059f67b65df52e91db8c4e9cdb19a6f2ae2938a00592189df
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.dev0-py3-none-any.whl

Download URL auto_semver_control-1.8.7.dev0-py3-none-any.whl
Size 142.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b1bf92f0828cf86706b5652b1209ccac82663199d545258b420121db1e9e6144
BLAKE2b-256 checksum
How to use checksums
d2dbea26ad05bdbf7b86d3f02078ba0f1159eb0fda3aaccb387a4b872e32502b
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}
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page