vsn_transform
Erlang parse transform to add -vsn
attributes from (e.g.) git.
Motivation
By default, an Erlang module has a vsn
attribute that's the MD5 checksum of the module. You'd probably prefer
something easier to read, such as 1.0.2
. You can control this version by adding a -vsn
module attribute, for
example:
-module(foo).
-vsn("1.0.2").
% ...
But that's tedious. So we wrote a parse transform that allows you to set the version attribute at build time.
Using it with rebar3
Add it to your rebar.config
file, as follows:
{deps, [
{vsn_transform, ".*",
{git, "https://github.com/electricimp/vsn_transform.git"}}
]}.
{erl_opts, [
{parse_transform, vsn_transform},
{vsn_command, "git describe --tags"}
]}.
Obviously, you can change the command as needed. You might want to use git rev-parse --short HEAD
, for example.
Setting it explicitly
Note that the parse transform runs the command once for each file being compiled, which can sometimes be slow. If you'd prefer, you can set the version explicitly:
{vsn, "1.0.2"}
You lose some flexibility, because the value's now hard-coded in rebar.config
. If you'd prefer to use an environment
variable, create a rebar.config.script
file. See examples/rebar_script_example
.
Did it work?
You can check it with the following:
lists:map(
fun({Mod, Path}) ->
Vsn = proplists:get_value(vsn, Mod:module_info(attributes)),
{Mod, Vsn}
end, code:all_loaded()).
Or with:
beam_lib:version("path/to/some.beam").
License
Apache 2.0