defmodule Mix.Tasks.Version.Alpha 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() |> Git.is_able_to_merge() |> Git.current_tag(:alpha) |> bump_alpha() |> Changelog.pre_release_update() |> Version.update_mix_file() |> Git.tag_with_new_version() |> Hex.publish() |> Git.merge() |> Git.push() end def bump_alpha( %{ current_git_tag: %{ pre_release: %{ extension: "alpha", version: alpha_version } }, current_version: current_version } = params ) do new_version = %{ major: major, minor: minor, patch: patch, pre_release: %{ version: pre_ver } } = current_version |> Map.put(:pre_release, %{ extension: "alpha", version: alpha_version + 1 }) Logger.info( "Next version of #{Mix.Project.config()[:app]} will be #{major}.#{minor}.#{patch}-alpha.#{pre_ver}" ) params |> Map.put(:new_version, new_version) end def bump_alpha( %{ current_version: %{ pre_release: %{ extension: "alpha", version: alpha_version } } = current_version } = params ) do new_version = %{ major: major, minor: minor, patch: patch, pre_release: %{ version: pre_ver } } = current_version |> Map.put(:pre_release, %{ extension: "alpha", version: alpha_version + 1 }) Logger.info( "Next version of #{Mix.Project.config()[:app]} will be #{major}.#{minor}.#{patch}-alpha.#{pre_ver}" ) params |> Map.put(:new_version, new_version) end def bump_alpha( %{ current_version: %{ pre_release: %{ extension: _, version: _ } } = current_version } = params ) do new_version = %{ major: major, minor: minor, patch: patch, pre_release: %{ version: pre_ver } } = current_version |> Map.put(:pre_release, %{ extension: "alpha", version: 0 }) Logger.info( "Next version of #{Mix.Project.config()[:app]} will be #{major}.#{minor}.#{patch}-alpha.#{pre_ver}" ) params |> Map.put(:new_version, new_version) end def bump_alpha( %{ current_version: %{ patch: patch } = current_version } = params ) do new_version = %{ major: major, minor: minor, patch: patch, pre_release: %{ version: pre_ver } } = current_version |> Map.put(:patch, patch + 1) |> Map.put(:pre_release, %{ extension: "alpha", version: 0 }) Logger.info( "Next version of #{Mix.Project.config()[:app]} will be #{major}.#{minor}.#{patch}-alpha.#{pre_ver}" ) params |> Map.put(:new_version, new_version) end end