Semantic Versioning task for boot-clj.
- Provides
version
task - Parses a
version.properties
file to read the current project version. Example content:VERSION=0.1.1-SNAPSHOT
- Writes a new (if changed) Maven compatible version string to
version.properties
. - Optionally includes the
version.properties
file in target output. - Optionally generates a namespace containing version information.
The following outlines basic usage of the task, extensive testing has not been done. Please submit issues and pull requests!
Add boot-semver
to your build.boot
dependencies and require
the namespace:
(set-env! :dependencies '[[degree9/boot-semver "X.Y.Z" :scope "test"]])
(require '[degree9.boot-semver :refer :all])
Get the current project version:
boot version
Use the version
task when pushing to clojars:
boot version -y inc build-jar push-release
Or use the version
task in a deployment process:
(deftask deploy
"Build boot-semver and deploy to clojars."
[]
(comp
(version :minor 'inc)
(build-jar)
(push-release)))
The version
task exposes a bunch of options for modifying the project version during a build pipeline.
Each option takes a quoted symbol (ex. 'inc
) which should resolve to an available function. This function will be applied to the current value of the project version component.
x major MAJ sym "Symbol of fn to apply to Major version."
y minor MIN sym "Symbol of fn to apply to Minor version."
z patch PAT sym "Symbol of fn to apply to Patch version."
r pre-release PRE sym "Symbol of fn to apply to Pre-Release version."
b build BLD sym "Symbol of fn to apply to Build version."
d develop bool "Prevents writing to version.properties file."
i include bool "Includes version.properties file in out-files."
g generate GEN sym "Generate a namespace with version information."
The :develop
option is provided for development tasks. These tasks will modify the project version number however, this version number will not be written back to the filesystem.
(deftask dev
"Build boot-semver for development."
[]
(comp
(version :develop true
:minor 'inc
:pre-release 'snapshot)
(watch)
(build-jar)))
The :include
option is provided for adding the version.properties
file to the output directory.
(deftask dev
"Build boot-semver for development."
[]
(comp
(version :develop true
:minor 'inc
:pre-release 'snapshot
:include true)
(watch)
(build-jar)))
The :generate
option is provided for building a namespace containing a single variable version
which will contain the the current version, it takes the namespace to be generated as input.
(deftask dev
"Build boot-semver for development."
[]
(comp
(version :develop true
:minor 'inc
:pre-release 'snapshot
:generate 'degree9.boot-semver.version)
(watch)
(build-jar)))
(ns degree9.boot-semver.version)
(def version "1.4.3")
The latest version of boot-semver
now supports continuous versioning and deployment. This allows you to place the version
task after the watch
task to support updating the project version each time the files are changed. Additionally build-jar
, push-snapshot
and push-release
are provided which support the new version
task.
(deftask dev
"Continuously build and deploy snapshot."
[]
(comp
(watch)
(version :develop true
:pre-release 'snapshot
:generate 'degree9.boot-semver.version)
(build-jar)
(push-snapshot)))
A few helper functions are provided to be used with the version task.
;; Generic
'zero 'one 'two ... 'nine
;; Pre-Release version helpers
'alpha ;; "alpha"
'beta ;; "beta"
'snapshot ;; "SNAPSHOT"
;; Build version helpers
'semver-date ;; "yyyyMMdd"
'semver-time ;; "hhmmss"
'semver-date-time ;; "yyyyMMdd-hhmmss"
'semver-date-dot-time ;; "yyyyMMdd.hhmmss"
'git-sha1-full ;; full git commit string
'git-sha1 ;; short git commit string (7 chars)