comver

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

https://github.com/open-nudge/comver

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.7%) to scientific vocabulary
Last synced: 7 months ago · JSON representation ·

Repository

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

Basic Info
Statistics
  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • Open Issues: 0
  • Releases: 1
Created 9 months ago · Last pushed 8 months ago
Metadata Files
Readme Changelog Contributing License Code of conduct Citation Codeowners Security Support Governance Roadmap

README.md

comver

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

![PyPI - Python Version](https://img.shields.io/pypi/v/comver?style=for-the-badge&label=release&labelColor=grey&color=blue) ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fopen-nudge%2Fcomver%2Fmain%2Fpyproject.toml&style=for-the-badge&label=python&labelColor=grey&color=blue) ![License](https://img.shields.io/badge/License-Apache_2.0-blue?style=for-the-badge) ![Coverage Hardcoded](https://img.shields.io/badge/coverage-100%25-green?style=for-the-badge) ![OSSF-Scorecard Score](https://img.shields.io/ossf-scorecard/github.com/open-nudge/comver?style=for-the-badge&label=OSSF)

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

```sh

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:

```sh

comver calculate ```

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

sh 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
```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]", ] ``` ```toml # 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
```toml # 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] ... ``` ```toml # 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:

sh comver calculate --sha --checksum

This outputs three space-separated values:

sh <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:

sh 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.

Owner

  • Name: opennudge
  • Login: open-nudge
  • Kind: organization
  • Email: opensource@opennudge.com

Citation (CITATION.cff)

# SPDX-FileCopyrightText: © 2024 open-nudge <https://github.com/open-nudge>
# SPDX-FileContributor: szymonmaszke <github@maszke.co>
#
# SPDX-License-Identifier: Apache-2.0

---
cff-version: "1.2.0"
abstract: >-
  Commit-based semantic versioning — verifiable, immutable, and tag-free.
message: "If you use this software, please cite it as below."
authors:
  - family-names: "open-nudge"
url: "https://github.com/open-nudge/comver"
repository-code: "https://github.com/open-nudge/comver"
title: "comver"
license: "Apache-2.0"
keywords:
  - "python"

GitHub Events

Total
  • Create event: 5
  • Release event: 2
  • Issues event: 4
  • Push event: 2
  • Pull request event: 1
Last Year
  • Create event: 5
  • Release event: 2
  • Issues event: 4
  • Push event: 2
  • Pull request event: 1

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 1
  • Total maintainers: 1
pypi.org: comver

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

  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 8.8%
Average: 29.0%
Dependent repos count: 49.3%
Maintainers (1)
Last synced: 8 months ago

Dependencies

.github/actions/git-setup/action.yml actions
.github/actions/pdm-compatibility/action.yml actions
.github/actions/pdm-setup/action.yml actions
  • open-nudge/opentemplate/.github/actions/pdm-compatibility main composite
  • pdm-project/setup-pdm 94a823180e06fcde4ad29308721954a521c96ed0 composite
.github/actions/pull-request/action.yml actions
.github/actions/release-sbom-setup/action.yml actions
.github/actions/sarif-upload/action.yml actions
  • actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
  • github/codeql-action/upload-sarif fca7ace96b7d713c7035871441bd52efbe39e27e composite
.github/actions/template-setup/action.yml actions
  • pdm-project/setup-pdm 94a823180e06fcde4ad29308721954a521c96ed0 composite
.github/workflows/cache-item-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • open-nudge/opentemplate/.github/actions/pdm-setup main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/cache-reusable.yml actions
.github/workflows/cache-test.yml actions
.github/workflows/cache.yml actions
.github/workflows/citation-renovate.yml actions
.github/workflows/citation-reusable.yml actions
.github/workflows/citation.yml actions
.github/workflows/code-renovate.yml actions
.github/workflows/code-reusable.yml actions
.github/workflows/code.yml actions
.github/workflows/commit-renovate.yml actions
.github/workflows/commit-reusable.yml actions
.github/workflows/commit.yml actions
.github/workflows/docs-renovate.yml actions
.github/workflows/docs-reusable.yml actions
.github/workflows/docs.yml actions
.github/workflows/generation-renovate.yml actions
.github/workflows/generation-reusable.yml actions
.github/workflows/generation-update-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • open-nudge/opentemplate/.github/actions/git-setup main composite
  • open-nudge/opentemplate/.github/actions/pdm-setup main composite
  • open-nudge/opentemplate/.github/actions/pull-request main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/generation-update-test.yml actions
.github/workflows/generation-update.yml actions
.github/workflows/generation.yml actions
.github/workflows/github-actionlint.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • docker://rhysd/actionlint 1.7.1 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/github-actions-reusable.yml actions
.github/workflows/github-actions.yml actions
.github/workflows/github-all-renovate.yml actions
.github/workflows/github-renovate-reusable.yml actions
.github/workflows/github-renovate.yml actions
.github/workflows/github-reusable.yml actions
.github/workflows/github-workflows-reusable.yml actions
.github/workflows/github-workflows.yml actions
.github/workflows/github.yml actions
.github/workflows/harden.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/ini-renovate.yml actions
.github/workflows/ini-reusable.yml actions
.github/workflows/ini.yml actions
.github/workflows/labeler.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • actions/labeler 8558fd74291d67161a8a78ce36a881fa63b766a9 composite
  • github/issue-labeler c1b0f9f52a63158c4adc09425e858e87b32e9685 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/legal-renovate.yml actions
.github/workflows/legal-reusable.yml actions
.github/workflows/legal.yml actions
.github/workflows/markdown-renovate.yml actions
.github/workflows/markdown-reusable.yml actions
.github/workflows/markdown.yml actions
.github/workflows/policy.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • siderolabs/conform 43d9fb6d85d5f01b391245805eefd258db160197 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/pre-commit-config.yml actions
.github/workflows/pre-commit-hooks.yml actions
.github/workflows/pre-commit-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • open-nudge/opentemplate/.github/actions/git-setup main composite
  • open-nudge/opentemplate/.github/actions/pdm-setup main composite
  • open-nudge/opentemplate/.github/actions/pull-request main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/pre-commit-update.yml actions
.github/workflows/pre-commit.yml actions
.github/workflows/prose.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
.github/workflows/pull-request.yml actions
  • amannn/action-semantic-pull-request 0723387faaf9b38adef4775cd42cfd5155ed6017 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/pyproject-renovate.yml actions
.github/workflows/pyproject-reusable.yml actions
.github/workflows/pyproject.yml actions
.github/workflows/python-renovate.yml actions
.github/workflows/python-reusable.yml actions
.github/workflows/python.yml actions
.github/workflows/release-check-renovate.yml actions
.github/workflows/release-check-reusable.yml actions
.github/workflows/release-check.yml actions
.github/workflows/release-sarifs-reusable.yml actions
.github/workflows/release-sbom-attest-reusable.yml actions
  • actions/attest-sbom 115c3be05ff3974bcbd596578934b3f9ce39bf68 composite
  • actions/download-artifact d3f86a106a0bac45b974a628896c90dbdf5c8093 composite
  • actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/release-sbom-run-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
  • open-nudge/opentemplate/.github/actions/git-setup main composite
  • open-nudge/opentemplate/.github/actions/pdm-compatibility main composite
  • open-nudge/opentemplate/.github/actions/pdm-setup main composite
  • open-nudge/opentemplate/.github/actions/release-sbom-setup main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/release-sboms-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
  • open-nudge/opentemplate/.github/actions/release-sbom-setup main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/release-sboms-test.yml actions
.github/workflows/release-slsa-provenance-reusable.yml actions
  • actions/download-artifact d3f86a106a0bac45b974a628896c90dbdf5c8093 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/release-slsa-provenance-test.yml actions
.github/workflows/release-upload.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • actions/download-artifact d3f86a106a0bac45b974a628896c90dbdf5c8093 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/release.yml actions
  • actions/download-artifact d3f86a106a0bac45b974a628896c90dbdf5c8093 composite
  • actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
  • pypa/gh-action-pypi-publish 76f52bc884231f62b9a034ebfe128415bbaabdfc composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/renovate.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
  • suzuki-shunsuke/github-action-renovate-config-validator c22827f47f4f4a5364bdba19e1fe36907ef1318e composite
.github/workflows/run-check-reusable.yml actions
.github/workflows/run-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • actions/download-artifact d3f86a106a0bac45b974a628896c90dbdf5c8093 composite
  • actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
  • open-nudge/opentemplate/.github/actions/git-setup main composite
  • open-nudge/opentemplate/.github/actions/pdm-compatibility main composite
  • open-nudge/opentemplate/.github/actions/pdm-setup main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/security-osv-scanner-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • google/osv-scanner/actions/scanner a2a23858b9650035f019219937f91ae615474b4d composite
  • open-nudge/opentemplate/.github/actions/sarif-upload main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/security-osv-scanner-update.yml actions
.github/workflows/security-osv-scanner.yml actions
.github/workflows/security-scorecard-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
  • github/codeql-action/upload-sarif fca7ace96b7d713c7035871441bd52efbe39e27e composite
  • ossf/scorecard-action 05b42c624433fc40578a4040d5cf5e36ddca8cde composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/security-scorecard-test.yml actions
.github/workflows/security-scorecard-update.yml actions
.github/workflows/security-secrets.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
  • trufflesecurity/trufflehog 90694bf9af66e7536abc5824e7a87246dbf933cb composite
.github/workflows/security-semgrep-renovate.yml actions
.github/workflows/security-semgrep-reusable.yml actions
  • actions/checkout 11bd71901bbe5b1630ceea73d27597364c9af683 composite
  • open-nudge/opentemplate/.github/actions/pdm-compatibility main composite
  • open-nudge/opentemplate/.github/actions/pdm-setup main composite
  • open-nudge/opentemplate/.github/actions/sarif-upload main composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/security-semgrep-update.yml actions
.github/workflows/security-semgrep.yml actions
.github/workflows/shell-renovate.yml actions
.github/workflows/shell-reusable.yml actions
.github/workflows/shell.yml actions
.github/workflows/stale.yml actions
  • actions/stale 5bef64f19d7facfb25b37b414482c7164d639639 composite
  • step-security/harden-runner 0634a2670c59f64b4a01f0f96f84700a4088b9f0 composite
.github/workflows/template-update-reusable.yml actions
.github/workflows/template-update.yml actions
.github/workflows/tests-renovate.yml actions
.github/workflows/tests-reusable.yml actions
.github/workflows/tests.yml actions
.github/workflows/typing-renovate.yml actions