Skip to main content

Commit-based semantic versioning - highly configurable and tag-free.

Project description

comver

Commit-based semantic versioning - highly configurable and tag-free.

Features 🚀 Quick start 📚 Documentation 🤝 Contribute 👍 Adopters 📜 Legal


Features

comver is a tool for calculating semantic versioning of your project using only commit messages - no tags required!

  • Separation of concerns: versioning focuses on technical aspects, not marketing. You can now use tags solely for communication.
  • Highly configurable: include only relevant commits by filtering via message, author, email, or even commit path.
  • Immutable: version is calculated directly from the commit history. Tags can now be used more meaningfully (e.g., to mark a major milestone or release).
  • Batteries-included: integrate with pdm, Hatch or uv.
  • Verifiable: verify that a specific version was generated from a given commit chain - more resistant to tampering like dependency substitution attacks

Why?

Semantic versioning based on Git tags has a few limitations:

  • Teams may avoid bumping the major version due to the perceived weight of the change. Double versioning scheme; one version for technical changes, another for public releases is a viable mitigation.
  • Tag creation by bots (e.g. during automated releases) lead to problems with branch protection (see here).
  • Not all commits are relevant for release versions (e.g., CI changes, bot updates, or tooling config), yet many schemes count them in. With filtering, comver can exclude such noise.
  • Tags are mutable by default and can be re-pointed. By calculating the version based on commits, and combining it with the commit sha and a config checksum, you get verifiable and reproducible results.

Quick start

[!NOTE] You can jump straight into the action and check comver tutorials.

Installation

> pip install comver

Calculate version

[!IMPORTANT] Although written in Python, comver can be used with any programming language.

If your commits follow the Conventional Commits format, run:

> comver calculate

This will output a version string in the MAJOR.MINOR.PATCH format:

23.1.3 # Output

[!IMPORTANT] You can use plugins to integrate this versioning scheme with pdm or hatch. More below!

Configuration

Configuration can be done either in pyproject.toml (recommended for Python-first project) or in a separate .comver.toml file (recommended for non-python projects):

pyproject.toml .comver.toml
[tool.comver]
# Only commits to these paths are considered
path_includes = [
  "src/*",
  "pyproject.toml",
]

# Commits done by GitHub Actions bot are discarded
author_name_excludes = [
  "github-actions[bot]",
]
# No [tool.comver] needed here
# Source only commits considered
path_includes = [
  "src/*",
]

# Commits messages with [no version] are discarded
message_excludes = [
  ".*\[no version\].*",
  ".*\[skipversion\].*",
]

[!TIP] See suggested configuration examples here

Integrations

[!NOTE] You can use comver with uv by selecting the appropriate build backend, such as hatchling.

To integrate comver with pdm or hatch add the following to your pyproject.toml:

PDM Hatch
# Register comver for the build process
[build-system]
build-backend = "pdm.backend"

requires = [
  "pdm-backend",
  "comver>=0.1.0",
]

# Setup versioning for PDM
[tool.pdm.version]
source = "call"
getter = "comver.plugin:pdm"

# Comver-specific settings
[tool.comver]
...
# Register comver for the build process
[build-system]
build-backend = "hatchling.build"

requires = [
  "comver>=0.1.0",
  "hatchling",
]

# Setup versioning for Hatchling
[tool.hatch.version]
source = "comver"


# Comver-specific settings
[tool.comver]
...

[!TIP] See more in the documentation

Verification

To verify that a version was produced from the same Git tree and configuration, first use the calculate command with additional flags:

comver calculate --sha --checksum

This outputs three space-separated values:

<VERSION> <SHA> <CHECKSUM>

[!TIP] Append --format=json for machine-friendly output

Before the next release provide these values to the comver verify to ensure the version was previously generated from the same codebase and config:

comver verify <VERSION> <SHA> <CHECKSUM>

If inconsistencies are found, you'll receive feedback, for example:

Provided checksum and the checksum of configuration do not match.

[!TIP] Explore verification workflows in the tutorials

Contribute

We welcome your contributions! Start here:

Legal

  • This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
  • This project is copyrighted by open-nudge - the appropriate copyright notice is included in each file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

comver-0.2.0.tar.gz (25.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

comver-0.2.0-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file comver-0.2.0.tar.gz.

File metadata

  • Download URL: comver-0.2.0.tar.gz
  • Upload date:
  • Size: 25.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for comver-0.2.0.tar.gz
Algorithm Hash digest
SHA256 be04cf36c568e84276cb81ebf3a541c276e70fc09ca37111b77e96de173c2883
MD5 f860916efeabf49381b05b63c3ba480f
BLAKE2b-256 2b049b9d2ad8b62e901e6c23fa8c9d84ca522b4279e6c96bd7a92905bad889ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for comver-0.2.0.tar.gz:

Publisher: release.yml on open-nudge/comver

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file comver-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: comver-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for comver-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0dc3e2a43b1cd0cc57e95770b20eac3537398e1c8eec179ab73becffbc9a44b9
MD5 ff1cab50567e3fee91dbaa4c812ec065
BLAKE2b-256 de52490ae0ae247f5cbb97733593c0b116651756a5069f5408f011195524a27d

See more details on using hashes here.

Provenance

The following attestation bundles were made for comver-0.2.0-py3-none-any.whl:

Publisher: release.yml on open-nudge/comver

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page