Skip to main content

Generate and process semantic version numbers

Project description

VerNum

Configurable GitLab CI/CD-powered version numbering for project releases

Logo by Freepik/Flaticon

(Similar to GitVersion)

Python module/CLI installation

The VerNum Python module is distributed as a PyPI module and can be installed like any other.

Install with system-level Python

pip3 install vernum

Install with pipx to avoid dependency collisions

pipx install vernum

Install with a venv (depends on venv location)

.venv/bin/pip install vernum

... or install as a Poetry dev dependency

Commands

The vernum max command

Takes a list of version numbers and based on the configued numbering scheme, returns the highest value in the list.

echo "1.4.0\n1.4.1\n1.5.0" | vernum max

The vernum next command

Takes a single version number and, based on the configured numbering scheme and the selected increment, outputs the next version number.

echo "3.4.5" | vernum next patch

The vernum limit command

Takes a single version number and, based on the onfigured numbering scheme and provided limits, triggers an error if the version number falls outside the limit. Only a minimum limit is currently supported (see configuration below).

Schemes

VerNum supports multiple "schemes" for version numbering.

Scheme Description Increments Example
major Just a single version number major 4
minor Major, dot, minor major minor 4.2
patch Major, dot, minor, dot patch major minor patch 4.2.1
minor-alpha-beta Major, dot, minor, dot, and either a patch, alpha, or beta major, minor, patch, alpha, beta 4.3.alpha2

Schemes support an optional "v" before the version number for inputs, including from Git, but output the result without a "v".

The default scheme is patch.

Schemes with prerelease versions

Some schemes have prerelease versions (alpha, beta) with varying syntax. The basic approach to incrementing is to assume a preference for starting with alpha, then going to beta. So, for example, if the current version is at 1.2.3 and the operator requests a patch update, the version becomes, for example, 1.2.4-alpha (depending on the scheme itself).

Increments only go forward, so avoid attempting to move from beta to alpha.

FOr the minor-alpha-beta scheme:

  • major changes e.g. 5.6.2 to 6.0.alpha1
  • major-zero changes e.g. 5.6.2 to 6.0.0
  • minor changes e.g. 5.6.2 to 5.7.alpha1
  • minor-zero changes e.g. 5.6.2 to 5.7.0
  • beta changes e.g. 5.7.beta3 to 5.7.beta4
  • alpha changes e.g. 5.7.alpha8 to 5.7.alpha9
  • patch changes e.g. 5.6.beta6 to 5.6.0
  • patch changes e.g. 5.6.2 to 5.6.3

For the patch-hyphen-al-be scheme:

  • major changes e.g. 5.6.2 to 6.0.0-alpha
  • major-zero changes e.g. 5.6.2 to 6.0.0
  • minor changes e.g. 5.6.2 to 5.7.0-alpha
  • minor-zero changes e.g. 5.6.2 to 5.7.0
  • patch changes e.g. 5.6.2 to 5.6.3-alpha
  • patch-zero changes e.g. 5.6.2 to 5.6.3
  • beta changes e.g. 5.7.3-alpha to 5.7.3-beta
  • patch changes e.g. 5.7.3-alpha to 5.7.3
  • patch-zero changes e.g. 5.7.3-beta to 5.7.3
  • The major, major-zero, minor, and minor-zero increments work as expected

Use with Git tags

We designed VerNum to use with Git tags, and recommend using the history of tags in the default branch as the source of truth for version numbers.

The example below demonstrates one way to use VerNum with Git tags.

git tag --list --merged HEAD | vernum max | vernum next patch > .version
git tag -a "$(cat .version)" -m "$(cat .version)"

Keep the following pointers in mind when using VerNum with Git.

  • CD to the root of the project before running it
  • Be on the branch that you use for releases (i.e. master)
  • Be fully up-to-date in git (i.e. merged, committed, and pushed)

Configuration and input

VerNum uses the WizLib framework for configuration and input control.

  • Input to commands can come through stdin
  • Alternatively, use the vernum --input <filename> to pull input from a file
  • The scheme can be selected with an environment variable $VERNUM_SCHEME
  • Alternatively, the scheme can be set in a YAML configuration file; the application will try, in order:
    • A config file location designated with vernum --config <filename>
    • A config file location designated with a $VERNUM_CONFIG environment variable
    • .vernum.yml in the local directory
    • .vernum.yml in the user's home directory

We recommend placing a .vernum.yml file in the project directory and committing it to the project's Git repository, so different environments use the same scheme.

The format for the YAML file is simple (allowing for other forms of configuration in the future):

vernum:
  scheme: minor
  limit:
    min: '4.2'

Usage (GitLab CICD)

See the ProCICD documentation for usage within GitLab CICD.

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

vernum-7.3.1.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

vernum-7.3.1-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file vernum-7.3.1.tar.gz.

File metadata

  • Download URL: vernum-7.3.1.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.11.11 Linux/5.15.154+

File hashes

Hashes for vernum-7.3.1.tar.gz
Algorithm Hash digest
SHA256 3aa85abdc64b10bb440a8d9bbe13ab28ee49f05bf5a39aa69910a93ac30ac878
MD5 bc5a77b4c0988fc26762b8c6cb91f3cf
BLAKE2b-256 57698852f80a6d788cab4cb82648122497e2774dab62e13a8e459f470e0698fb

See more details on using hashes here.

File details

Details for the file vernum-7.3.1-py3-none-any.whl.

File metadata

  • Download URL: vernum-7.3.1-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.11.11 Linux/5.15.154+

File hashes

Hashes for vernum-7.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7d83a6649e125a5f563ad62f50f2b100aa0810ec3179854c7a130fc0b3f64256
MD5 1607a5cdb67f81d348b0722d9c99d385
BLAKE2b-256 9d05c07be823e5a7873d0dd6dbb28e863cd4b7a7aa78567513d8cd9a825fa45f

See more details on using hashes here.

Supported by

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