Skip to main content

Overview

This repository contains several useful components:

  1. A BASH script which determines the version number of a git repository
  2. A python module which contains a function which calls the BASH script and then produces a PEP440 compliant version number.
  3. Scripts to install/uninstall the BASH script, and accompanying libraries, to /usr/local/bin
  4. A setup.py allowing this project to be installed as a pip package
  5. A pyproject.toml which will install prerequisite packages (ShellUtilities) before running the setup.py.
  6. An example Setup.py and example pyproject.toml showing how a function in this python library can be called to version a package automatically as part of another project's setup.py.

Versioning

The version number follows the CalVer versioning scheme. Each version consists of 5 parts:

  • Major - Year of the commit
  • Minor - Month of the commit
  • Micro - Day of the commit
  • Modifier - Branch and either commit hash or build number

The version number will thus be as follows:

<year>.<month>.<day>.<branch_type>.<commit_hash_or_build_number>

Note: For the PEP440 standard compliance, the python function will return a version number as follows (notice the '+'):

<year>.<month>.<day>+<branch_type>.<commit_hash_or_build_number>

The logic to construct the version number assumes the repository is following the Trunk Based Development branching strategy:

Branch Type                                  Branch Flow
==================================================================

release/*                          -------------          ----------
                                 /   \       /          /      / 
patch/*                         /      -----           /      /
                               /             \        /      /
master                    --------------------------------------------
(aka. main, integration)     \ \                 /\          /
                              \ \               /  \        /
feature/*                      \  --------------    \      /
                                \                    \    /
bug/*                             ------------------------

Each commit in the branch flow will be given a version number based on the CalVer versioning strategy.

Integration branches like master and release will use a build number for the suffix. Non-integration branches which can occur in parallel will use the first 7 digits of the commit hash as the suffix.

Examples include:

  • 2023.05.23.master.1
  • 2022.12.01.feature.f3b24e1

Note On Merging

When merging a non-integration branch into an integration branch we must ensure that there is a merge commit. If we allow the branch to simply fast forward, the logic for determining the version number cannot work. This is because a "branch" is simply a version history and if the version histories are identical between two branches, then our logic breaks. To fix this, use the --no-ff to force a merge commit. For example, if merging main up into a release branch, us the --no-ff to ensure a new merge commit is created on the release and guarantee the release number will be incremented properly.

Requirements

  • BASH >= 4.2
  • git >= 1.8
  • diff >= 3.10

Installation

There are two options for installing the utilities in this repository:

  • bash scripts only (no python dependency)
  • python module and bash scipts

The bash scripts can be installed by themselves (i.e. without a python dependency) by running the install.sh found in the scrips/ directory of this repository. This script will copy the scripts from the git repo to the /usr/local/bin and the libraries to /usr/local/<directory-name> paths.

The python package (and the scripts) can be installed by installing the pip package. The setup.py is configured to copy the bash scripts to the same place as the install.sh. It will also install a python module which hosts a function. Once installed, the module can be imported and the function can be run. The function in turn calls the installed bash scripts.

NOTE: If using conda, the bin path will automagically change to a conda env path. As such the paths of the installed scripts may differ depending on whether one used the install.sh or the pip install method.

Usage

Once installed, simply navigate the current working directory to be inside a git repository and run the bash script or call the python function to determine the version number for that repository.

TODO

  • repo-flag: add a flag to allow inspecting repositories by specifying a path rather than manipulating the CWD.

Metadata

Release files for tbd-calver-versioning 2025.2.26.2

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

Built distribution (wheel)

Table of built distributions (wheels) for tbd-calver-versioning 2025.2.26.2
File Interpreter ABI Platform
tbd_calver_versioning-2025.2.26.2-py3-none-any.whl Python 3 none any Details

Release files / tbd_calver_versioning-2025.2.26.2-py3-none-any.whl

Download URL tbd_calver_versioning-2025.2.26.2-py3-none-any.whl
Size 17.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5553505d3628fa6ac473c81e9526bbc91401db6a2539984fd50017cb81749fe0
BLAKE2b-256 checksum
How to use checksums
e85d583b20c55897262b6f5c3ba7e2dd56e66997220d4b8bc949847c74d4c45e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.11
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