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: GPL-3.0-or-later 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

GPL-3.0-or-later — see LICENSE.

Metadata

Release files for auto-semver-control 1.8.10rc0

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.10rc0
File Size Uploaded
auto_semver_control-1.8.10rc0.tar.gz 110.4 kB Details

Built distribution (wheel)

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

Total release size: 253.6 kB

Release files / auto_semver_control-1.8.10rc0.tar.gz

Download URL auto_semver_control-1.8.10rc0.tar.gz
Size 110.4 kB
Tags Source
SHA-256 checksum
How to use checksums
907ab6a165f250d1c08c9670409d1b064cea6aa98dc7cdc455e580917103117e
BLAKE2b-256 checksum
How to use checksums
91315c23cc4e97c6cc98dbfe680af6cfc4341287031a2a7025e100bf16a9766c
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.10rc0-py3-none-any.whl

Download URL auto_semver_control-1.8.10rc0-py3-none-any.whl
Size 143.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9671dbd6ef87ca60612a4402147879154c2ff7b40c1f396d80cb343df12c3951
BLAKE2b-256 checksum
How to use checksums
88e1ca695fc745fa7629dfef1e58b24ea21df8c05aaa1f65426e03cee292d4c4
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