lib/tasks/version/next.ex
defmodule Mix.Tasks.Version.Next do
use Mix.Task
require Logger
alias VersionRelease.Changelog
alias VersionRelease.Config
alias VersionRelease.Git
alias VersionRelease.Hex
alias VersionRelease.Version
def run(opts) do
opts
|> Config.create()
|> Changelog.get_release_changes()
|> Git.is_clean()
|> bump_version()
|> Changelog.update()
|> Version.update_mix_file()
|> Git.tag_with_new_version()
|> Hex.publish()
|> Version.next_dev_iteration()
|> Git.merge()
|> Git.push()
end
defp bump_version(
%{
changelog: %{
changes: %{
major: major_changes,
minor: minor_changes,
patch: patch_changes
}
}
} = config
) do
%{
major_count: major_changes |> Enum.count(),
minor_count: minor_changes |> Enum.count(),
patch_count: patch_changes |> Enum.count()
}
|> case do
%{major_count: count} when count > 0 ->
Mix.Tasks.Version.Major.bump_major(config)
%{minor_count: count} when count > 0 ->
Mix.Tasks.Version.Minor.bump_minor(config)
_ ->
Mix.Tasks.Version.Patch.bump_patch(config)
end
end
end