Packages
deli
0.2.0-rc.2
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
Current section
Files
Jump to
Current section
Files
lib/deli/beam_versions.ex
defmodule Deli.BeamVersions do
alias Deli.BeamVersions.File
@moduledoc false
@deps ~w(otp elixir rebar3)a
@type dep :: :otp | :elixir | :rebar3
@type version :: String.t()
@type checksum :: String.t()
@type opt :: {dep, version} | {dep, version, checksum}
@type beam_version :: {dep, [{:version, version} | {:checksum, checksum}]}
@type versions :: %{required(dep) => [{version(), checksum()}]}
@versions @deps |> File.versions_from_file()
defguardp is_dep(dep) when dep in @deps
@spec deps() :: [dep, ...]
def deps, do: @deps
@spec versions() :: versions
def versions, do: @versions
@spec fetch([opt]) :: [beam_version]
def fetch(opts \\ []) when is_list(opts) do
deps() |> Enum.map(&fetch_version({&1, opts[&1]}))
end
defp fetch_version({dep, nil}) when is_dep(dep) do
{dep, :latest} |> fetch_version
end
defp fetch_version({dep, :latest}) when is_dep(dep) do
{version, _} =
@versions[dep]
|> Enum.find(fn {v, _} -> not String.contains?(v, "rc") end)
{dep, version} |> fetch_version
end
defp fetch_version({dep, version}) when is_dep(dep) and is_binary(version) do
case @versions[dep] |> Enum.find(fn {v, _} -> v == version end) do
{_, checksum} when is_binary(checksum) ->
{dep, version, checksum} |> fetch_version
_ ->
raise """
Dependency #{dep} does not have version #{version} configured.
Try updating `deli`:
`$ mix deps.update deli`
"""
end
end
defp fetch_version({dep, version, checksum})
when is_dep(dep) and is_binary(version) and is_binary(checksum) do
{dep, version: version, checksum: checksum}
end
end