Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions lib/mix/tasks/erlang.check_version.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
defmodule Mix.Tasks.Erlang.CheckVersion do
use Mix.Task

@shortdoc "Check the Erlang/OTP version"

@impl true
def run(args) do
config = Mix.Project.config()

check_erlang_version(config, args)
end

defp check_erlang_version(config, _) do
app = ":#{Keyword.get(config, :app)}"
expected_version = Keyword.get(config, :erlang)
actual_version = otp_release_version()

if actual_version != expected_version do
Mix.raise("You're trying to run #{app} on Erlang/OTP #{actual_version} but it has declared in its mix.exs file it supports only Erlang/OTP #{expected_version}")
end
end

defp otp_release_version do
[
:code.root_dir(),
"releases",
:erlang.system_info(:otp_release),
"OTP_VERSION"
]
|> Path.join()
|> File.read()
|> case do
{:ok, version} ->
String.trim(version)

_ ->
nil
end
end
end
8 changes: 8 additions & 0 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ defmodule Dispatch.Mixfile do
app: :dispatch,
version: "1.0.2",
elixir: "1.7.4",
erlang: "21.1.3",
elixirc_paths: elixirc_paths(Mix.env()),
test_paths: ["test"],
test_pattern: "**/*_test.exs",
test_coverage: [tool: ExCoveralls],
preferred_cli_env: [coveralls: :test, "coveralls.detail": :test, "coveralls.post": :test, "coveralls.html": :test],
compilers: [:phoenix] ++ Mix.compilers(),
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps()
]
end
Expand Down Expand Up @@ -69,4 +71,10 @@ defmodule Dispatch.Mixfile do
{:mox, "~> 0.4.0", only: :test}
]
end

defp aliases do
[
"compile.app": ["erlang.check_version", "compile.app"]
]
end
end