defmodule Mix.Tasks.Version.Major 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()
|> Git.is_clean()
|> bump_major()
|> Changelog.update()
|> Version.update_mix_file()
|> Git.tag_with_new_version()
|> Hex.publish()
|> Version.next_dev_iteration()
|> Git.merge()
|> Git.push()
end
def bump_major(
%{
current_version:
%{
major: major,
pre_release: _
} = current_version
} = params
) do
new_version =
%{
major: major,
minor: minor,
patch: patch
} =
current_version
|> Map.put(:major, major + 1)
|> Map.put(:minor, 0)
|> Map.put(:patch, 0)
|> Map.delete(:pre_release)
Logger.info("Next version of #{Mix.Project.config()[:app]} will be #{major}.#{minor}.#{patch}")
params |> Map.put(:new_version, new_version)
end
def bump_major(
%{
current_version:
%{
major: major
} = current_version
} = params
) do
new_version =
%{
major: major,
minor: minor,
patch: patch
} =
current_version
|> Map.put(:major, major + 1)
|> Map.put(:minor, 0)
|> Map.put(:patch, 0)
Logger.info("Next version of #{Mix.Project.config()[:app]} will be #{major}.#{minor}.#{patch}")
params |> Map.put(:new_version, new_version)
end
end