Packages

Versioce provides a mix task for version bumping of your project.

Current section

Files

Jump to
versioce lib Bumper bumper.ex
Raw

lib/Bumper/bumper.ex

defmodule Versioce.Bumper do
@options [pre: :string, build: :string]
def current_version do
case Mix.Project.get() do
nil -> {:error, "No project configured"}
_ -> {:ok, Mix.Project.config()[:version]}
end
end
defp add_build_pre(version, options) do
build =
case Keyword.get(options, :build) do
nil -> nil
build -> [build]
end
pre =
case Keyword.get(options, :pre) do
nil -> []
pre -> [pre]
end
Map.merge(version, %{
build: build,
pre: pre
})
end
defp do_bump({[], []}, from) do
IO.puts("Nothing to do")
from
end
defp do_bump({options, ["patch"]}, from) do
from_v = Version.parse!(from)
new_version =
Map.merge(from_v, %{
patch: from_v.patch + 1
})
|> add_build_pre(options)
|> to_string
Versioce.Bumper.Files.update_version_files(from, new_version)
new_version
end
defp do_bump({options, ["minor"]}, from) do
from_v = Version.parse!(from)
new_version =
Map.merge(from_v, %{
minor: from_v.minor + 1,
patch: 0
})
|> add_build_pre(options)
|> to_string
Versioce.Bumper.Files.update_version_files(from, new_version)
new_version
end
defp do_bump({options, ["major"]}, from) do
from_v = Version.parse!(from)
new_version =
Map.merge(from_v, %{
major: from_v.major + 1,
minor: 0,
patch: 0
})
|> add_build_pre(options)
|> to_string
Versioce.Bumper.Files.update_version_files(from, new_version)
new_version
end
defp do_bump({_, [version]}, from) do
new_version = Version.parse!(version) |> to_string
Versioce.Bumper.Files.update_version_files(from, new_version)
new_version
end
defp do_bump({options, []}, from) do
from_v = Version.parse!(from)
new_version =
from_v
|> add_build_pre(options)
|> to_string
Versioce.Bumper.Files.update_version_files(from, new_version)
new_version
end
def bump(options, from) do
OptionParser.parse!(options, strict: @options)
|> do_bump(from)
end
end