This library is a tool to help you maintain date-based versions in your git repository.
Here is how the date-based versioning works:
-
Every commit to master is released.
-
The release version of each commit is stored as a tag.
-
Every commit to master become the source of its own release branch, this allows patching.
-
The version is composed of 4 parts:
- always 1
- date of the release
- release number for this release date
- patch number
A git log command show such versioning strategy.
~/demo $ git log --oneline --decorate --graph --all
* 0dd0a2a (tag: v1.20200512.2.0, release/v1.20200512.2, master) fourth commit
* 39ccfc3 (tag: v1.20200512.1.0, release/v1.20200512.1) third commit
* 8d634ca (tag: v1.20200510.2.0, release/v1.20200510.2) second commit
| * 8b5c451 (tag: v1.20200510.1.1, release/v1.20200510.1) patch for first commit
|/
* 96fedff (tag: v1.20200510.1.0) first commit
Usage:
Call this function from the release pipeline.
- The new version will be calculated based on the previous version, the date and the patch flag.
- The commit will be tagged with the version.
- If the --patch flag is not provided, a release branch will be created.
- When you provide a scope through the --scopeTag argument. It will iterate through all the sub scope until it finds a matching tag. This is particularly useful in a monorepo where you would wand to maintain multiple scope. Example your release pipeline produces the following tag:
release/v1.YearMonthDay.version
and you wish to patch a package using a different tag pattern. You can achieve this by callingnpx date-based-version --patch --scopedBranch=release/<team> --iterateOnScope
and you will get the following tag:release/<team>/v1.YearMonthDay.version.patch
.
# on master
npx date-based-version
# on a release branch
npx date-based-version --patch
# dry run (won't create branch or tag)
npx date-based-version --dry-run
# scope tag by prefix (i.e. scope/v1.20200510.1.0)
npx date-based-version --scopeTag=scope
# scope branch by prefix (i.e. scope/release/v1.20200510.1)
npx date-based-version --scopeBranch=scope