Versioning tools for CI
project-version
Provides version environment variables to CI builds.
Example output
$ git tag
v0.1.3
v0.1.4
v0.2.0
v0.3.0
$ cat VERSION
0.3.0
$ project-version --version-source file --version-source-file VERSION env-vars
VERSION_SEMVER=0.3.0
VERSION_MAJOR=0
VERSION_MINOR=3
VERSION_PATCH=0
VERSION_MAJOR_MINOR=0.3
VERSION_WITHOUT_BUILD_METADATA=0.3.0
VERSION_IS_RELEASE=1
VERSION_IS_LATEST_RELEASE=1
$ git checkout v0.1.4
$ cat VERSION
0.1.4
$ project-version --version-source file --version-source-file VERSION env-vars
VERSION_SEMVER=0.1.4
VERSION_MAJOR=0
VERSION_MINOR=1
VERSION_PATCH=4
VERSION_MAJOR_MINOR=0.1
VERSION_WITHOUT_BUILD_METADATA=0.1.4
VERSION_IS_RELEASE=1
$ project-version --version-source file --version-source-file VERSION --git-tag v0.1.3 env-vars
ERROR:ci_version_tools.project:Project version 0.1.5 in does not match the version 0.1.3 in the Git tag.
$ echo 0.3.0 >VERSION
$ project-version --version-source file --version-source-file VERSION env-vars
ERROR:ci_version_tools.project:Version 0.3.0 has been released on a different commit already. Increment the version to a next pre-release to fix this error.
$ echo 0.2.0-rc.1 >VERSION
$ project-version --version-source file --version-source-file VERSION env-vars
ERROR:ci_version_tools.project:Version 0.2.0-rc.1 targets 0.2.0 which has been released already. Increment the version to fix this error.
$ echo 0.4.0-rc.1+deadbeef >VERSION
$ project-version --version-source file --version-source-file VERSION env-vars
VERSION_SEMVER=0.4.0-rc.1+deadbeef
VERSION_MAJOR=0
VERSION_MINOR=4
VERSION_PATCH=0
VERSION_MAJOR_MINOR=0.4
VERSION_WITHOUT_BUILD_METADATA=0.4.0-rc.1
VERSION_PRE_RELEASE=rc.1
VERSION_IS_PRE_RELEASE=1
VERSION_BUILD_METADATA=deadbeef
$ echo 0.4.0 >VERSION
$ project-version --version-source file --version-source-file VERSION --git-tag v0.4.0 env-vars
ERROR:ci_version_tools.project:Release tag v0.4.0 does not exist in git.
Example application in .gitlab-ci.yml:
version:
image: docker.io/alikov/ci-version-tools:0.2.0
stage: .pre
variables:
GIT_DEPTH: 0
script:
- project-version
--version-source-file ./VERSION
--git-version-tag-prefix v
${CI_COMMIT_TAG:+--git-tag "$CI_COMMIT_TAG"}
env-vars | tee version.env
artifacts:
reports:
dotenv: version.env
.build-image:
stage: build
image: $BUILDAH_CI_IMAGE
script:
- IMAGE="${CI_REGISTRY_IMAGE}:${VERSION_WITHOUT_BUILD_METADATA}"
- buildah build -t "$IMAGE" .
- buildah push "$IMAGE"
- if [ -n "${VERSION_IS_RELEASE:-}" ]; then
buildah push "$IMAGE" "${CI_REGISTRY_IMAGE}:${VERSION_MAJOR}";
buildah push "$IMAGE" "${CI_REGISTRY_IMAGE}:${VERSION_MAJOR_MINOR}";
fi
- if [ -n "${VERSION_IS_LATEST_RELEASE:-}" ]; then
buildah push "$IMAGE" "${CI_REGISTRY_IMAGE}:latest";
fi
needs:
- version
version-env-vars
Parses environment variables containing semantic versions into major/minor variants.
Example output
$ export ALPINE_VERSION=3.20.2
$ export TERRAFORM_VERSION=1.9.3
$ version-env-vars parse ALPINE_VERSION TERRAFORM_VERSION
ALPINE_VERSION_SEMVER=3.20.2
ALPINE_VERSION_MAJOR=3
ALPINE_VERSION_MINOR=20
ALPINE_VERSION_PATCH=2
ALPINE_VERSION_MAJOR_MINOR=3.20
ALPINE_VERSION_WITHOUT_BUILD_METADATA=3.20.2
ALPINE_VERSION_IS_RELEASE=1
TERRAFORM_VERSION_SEMVER=1.9.3
TERRAFORM_VERSION_MAJOR=1
TERRAFORM_VERSION_MINOR=9
TERRAFORM_VERSION_PATCH=3
TERRAFORM_VERSION_MAJOR_MINOR=1.9
TERRAFORM_VERSION_WITHOUT_BUILD_METADATA=1.9.3
TERRAFORM_VERSION_IS_RELEASE=1
Example application in .gitlab-cy.yml:
variables:
ALPINE_VERSION: "3.20.2"
TERRAFORM_VERSION: "1.9.3"
# https://support.gitlab.com/hc/en-us/articles/18085676898588-Dotenv-variables-exceed-default-limit-in-GitLab-pipelinestool-versions:
image: docker.io/alikov/ci-version-tools:0.2.0
stage: .pre
parallel:
matrix:
- VAR_NAME: ALPINE_VERSION
- VAR_NAME: TERRAFORM_VERSION
script:
- version-env-vars parse ALPINE_VERSION TERRAFORM_VERSION | tee "${VAR_NAME}.env"
artifacts:
reports:
dotenv: "${VAR_NAME}.env"
.build-image:
stage: build
image: $BUILDAH_CI_IMAGE
script:
- IMAGE="${CI_REGISTRY_IMAGE}:${VERSION_WITHOUT_BUILD_METADATA}"
- buildah build
--build-arg "BASE_IMAGE=alpine:${ALPINE_VERSION}"
--build-arg "DOWNLOAD_TERRAFORM_VERSION=${TERRAFORM_VERSION}"
-t "$IMAGE"
.
- buildah inspect "$IMAGE"
- buildah push "$IMAGE"
- if [ -n "${VERSION_IS_RELEASE:-}" ]; then
buildah push "$IMAGE" "${CI_REGISTRY_IMAGE}:alpine-${ALPINE_VERSION_MAJOR_MINOR}";
buildah push "$IMAGE" "${CI_REGISTRY_IMAGE}:terraform-${TERRAFORM_VERSION_MAJOR_MINOR}";
fi
needs:
- version
- tool-versions
Developing
See DEVELOPING.md for local development setup instructions.
Metadata
Release files for ci-version-tools 0.2.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ci_version_tools-0.2.8.tar.gz | 6.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ci_version_tools-0.2.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.5 kB
Release files / ci_version_tools-0.2.8.tar.gz
| Download URL | ci_version_tools-0.2.8.tar.gz |
|---|---|
| Size | 6.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
83272bf7bd8e21f8489b125598ca92111b973b103040bbba261972dcbbc0a8f9
|
|
BLAKE2b-256 checksum How to use checksums |
44e079ca5a9ef28f26e3b7e2855a22b91f556bfc2e92aacbb7fb0da53c33d979
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.2 CPython/3.13.12 Linux/6.12.5-100.fc40.x86_64
|
Release files / ci_version_tools-0.2.8-py3-none-any.whl
| Download URL | ci_version_tools-0.2.8-py3-none-any.whl |
|---|---|
| Size | 9.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
216c73932fed1b98782d99d4b45f03270e051d9c8d87367d3566b69561cef090
|
|
BLAKE2b-256 checksum How to use checksums |
af475487dd066dc4507584eeedc5362dc3c1297abb4ebd6b379eddd0ce86572e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.2 CPython/3.13.12 Linux/6.12.5-100.fc40.x86_64
|