A tiny gem for managing project version numbers.
Heavily inspired by the semver
gem, this is a tiny utility for managing version numbers,
which includes support for multiple version format stores:
- The
semver
gem's.semver
file - node.js
package.json
files - bower
bower.json
files - ruby
.gemspec
files
With planned support for:
- Python distutils package
- Possibly gem
::Version
Exhaustive usage patterns can be found at version help
# Install
$ gem install yavm
# In a language/framework without a supported versioning system:
$ version init
$ version # => 0.0.0
# In an existing project with supported versioning:
version # => 0.2.0
# Basic Usage
$ version inc minor # => 0.3.0
$ version inc major # => 1.0.0
$ version special pre4 # => 1.0.0-pre4
$ version special # => 1.0.0
$ version meta 20141113 # => 1.0.0 (meta not displayed by default)
$ version tag # => v1.0.0+20141113 (useful for version control)
$ version format "%M.%m" # => 1.0
Add to Gemfile or install by hand, and use like so:
require 'yavm'
if YAVM.version
puts "The version is #{YAVM.version.tag}"
# ...
end
Tag | Meaning |
---|---|
%M | Major |
%m | Minor |
%p | Patch |
%s | Special |
%t | Meta |
%% | Literal % Character |
Add a dash to %s
and %t
(%-s
/%-t
) to prefix with the appropriate character.
If your project contains multiple supported version "stores", YAVM will keep them in sync. If they go out of sync outside of YAVM, you will be prompted to pick the canonical/authoritative version, and all other stores will be updated.
$ version
Multiple version stores are in use, and aren't consistent.
Please select the authoritative version:
WARNING: File munging is dangerous. A manual resolution might be safer.
1: 1.0.0 [.semver file]
2: 1.0.3 [bower.json file]
3: 0.0.0 [gemspec: ./yavm.gemspec]
Selection: 2
Now on 1.0.3
The following (horrible) aliases can be put in a .gitconfig
file.
semtag = !git tag -a $(version tag) -m \"Version $(version)\"
semcommit = !git add $(version files) && git commit -m \"Version `version`\" && git semtag
Issuing git semcommit
will add all files in your project with version information,
do a commit with the version number and create a tag with the version number.
- show version
- increment
- set special
- set meta
- formatting
- tags
- help
- package.json support
- bower.json support
- when changing version, show new one
- programmatic interface
- tests. inprogress
- handle invalid version info (see Version#parse)
- 'version init'
- quick mode (when finding versions - short circuit once one is found)
- raise sensible exceptions
- output a list of files which contain version info (for the
semcommit
git alias) - javascript programmatic interface (current fix is to dump the output of the version command to a file somewhere)