Packages
deli
0.1.3
0.2.0-rc.6
0.2.0-rc.5
0.2.0-rc.4
0.2.0-rc.3
0.2.0-rc.2
0.2.0-rc.1
0.1.28
0.1.27
0.1.26
0.1.25
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
retired
0.1.7
retired
0.1.6
retired
0.1.5
retired
0.1.4
retired
0.1.3
retired
0.1.2
retired
0.1.1
retired
0.1.0
retired
Easy deployment for Elixir apps
Retired package: Release invalid - has bugs
Current section
Files
Jump to
Current section
Files
lib/deli/versioning.ex
defmodule Deli.Versioning do
import Deli.Shell
@moduledoc "Provides version git tag enforcing"
def fetch_version_tag(options) when is_list(options) do
options
|> Keyword.get(:version)
|> fetch_version_tag
end
def fetch_version_tag(nil) do
version = Mix.Project.get().project[:version] |> Version.parse!()
tag = git_tags() |> List.last()
action = if tag, do: {:compare, version, tag}, else: {:create, version}
action |> fetch_version_tag
end
def fetch_version_tag("v" <> version), do: version |> fetch_version_tag
def fetch_version_tag(version) when is_binary(version) do
sanitized_version = version |> Version.parse!() |> to_string
"v#{sanitized_version}"
end
def fetch_version_tag({:compare, version, tag}) do
case version |> Version.compare(tag) do
:lt ->
error!("Remove tag #{tag}, or adapt Mixfile version")
:gt ->
{:create, version} |> fetch_version_tag
:eq ->
current_sha = "HEAD" |> git_sha
tag_sha = "v#{tag}" |> git_sha
if current_sha == tag_sha do
"v#{tag}"
else
error!("""
Mix version equals latest tag, but they have different revisions.
Bump version in `mix.exs` before continue.
""")
end
end
end
def fetch_version_tag({:create, version}) do
version |> create_version_tag
end
defp create_version_tag(version) do
tag = "v#{version}"
cmd("git tag #{tag}")
cmd("git push origin #{tag}")
tag
end
defp git_sha(sha_selector) do
"git rev-list -n 1 #{sha_selector}" |> cmd_result
end
defp git_tags do
cmd("git fetch --tags")
"git tag -l --sort version:refname"
|> cmd_result
|> String.split("\n")
|> Enum.filter(&(&1 != ""))
|> Enum.map(fn "v" <> n -> n |> Version.parse!() end)
end
end