farmbot_os/farmbot_os/mix.exs

112 lines
3.5 KiB
Elixir

defmodule Farmbot.OS.MixProject do
use Mix.Project
@target System.get_env("MIX_TARGET") || "host"
@version Path.join([__DIR__, "..", "VERSION"]) |> File.read!() |> String.trim()
@branch System.cmd("git", ~w"rev-parse --abbrev-ref HEAD") |> elem(0) |> String.trim()
@commit System.cmd("git", ~w"rev-parse --verify HEAD") |> elem(0) |> String.trim()
System.put_env("NERVES_FW_VCS_IDENTIFIER", @commit)
System.put_env("NERVES_FW_MISC", @branch)
@elixir_version Path.join([__DIR__, "..", "ELIXIR_VERSION"]) |> File.read!() |> String.trim()
def project do
[
app: :farmbot_os,
elixir: @elixir_version,
target: @target,
version: @version,
branch: @branch,
commig: @commit,
archives: [nerves_bootstrap: "~> 1.0"],
deps_path: "deps/#{@target}",
build_path: "_build/#{@target}",
lockfile: "mix.lock.#{@target}",
start_permanent: Mix.env() == :prod,
start_embedded: @target == "host",
aliases: [loadconfig: [&bootstrap/1]],
elixirc_paths: elixirc_paths(Mix.env(), @target),
deps: deps()
]
end
# Starting nerves_bootstrap adds the required aliases to Mix.Project.config()
# Aliases are only added if MIX_TARGET is set.
def bootstrap(args) do
Application.start(:nerves_bootstrap)
Mix.Task.run("loadconfig", args)
end
# Run "mix help compile.app" to learn about applications.
def application do
[
mod: {Farmbot.OS, []},
extra_applications: [:logger, :runtime_tools, :eex],
included_applications: [:farmbot_core, :farmbot_ext]
]
end
# Run "mix help deps" to learn about dependencies.
defp deps do
[
# Nerves stuff.
{:nerves, "~> 1.3", runtime: false},
{:nerves_hub_cli, "~> 0.4", runtime: false},
{:shoehorn, "~> 0.4"},
{:logger_backend_sqlite, "~> 2.2"},
{:farmbot_core, path: "../farmbot_core", env: Mix.env()},
{:farmbot_ext, path: "../farmbot_ext", env: Mix.env()},
] ++ deps(@target)
end
# Specify target specific dependencies
defp deps("host"), do: [
{:excoveralls, "~> 0.10", only: [:test]},
{:dialyxir, "~> 1.0.0-rc.3", only: [:dev], runtime: false},
{:ex_doc, "~> 0.19", only: [:dev], runtime: false},
]
defp deps(target) do
[
# Configurator
{:cowboy, "~> 2.5"},
{:plug, "~> 1.6"},
{:cors_plug, "~> 1.5"},
{:phoenix_html, "~> 2.12"},
# AMQP hacks
{:jsx, "~> 2.9", override: true},
{:ranch, "~> 1.6", override: true},
{:ranch_proxy_protocol, "~> 2.1", override: true},
# End hacks
{:nerves_runtime, "~> 0.8"},
{:nerves_network, "~> 0.3"},
{:nerves_wpa_supplicant, "~> 0.3"},
{:nerves_firmware, "~> 0.4"},
{:nerves_time, "~> 0.2"},
{:nerves_hub, "~> 0.2"},
{:dhcp_server, "~> 0.6"},
{:mdns, "~> 1.0"},
{:nerves_firmware_ssh, "~> 0.3"},
{:nerves_init_gadget, "~> 0.5", only: :dev},
{:elixir_ale, "~> 1.1"},
] ++ system(target)
end
defp elixirc_paths(:test, "host") do
["./lib", "./platform/host", "./test/support"]
end
defp elixirc_paths(_, "host") do
["./lib", "./platform/host"]
end
defp elixirc_paths(_env, _target) do
["./lib", "./platform/target"]
end
defp system("rpi3"), do: [{:farmbot_system_rpi3, "1.5.1-farmbot.1", runtime: false}]
defp system("rpi0"), do: [{:farmbot_system_rpi0, "1.5.1-farmbot.0", runtime: false}]
defp system("rpi"), do: [{:farmbot_system_rpi, "1.5.1-farmbot.0", runtime: false}]
defp system(target), do: Mix.raise("Unknown MIX_TARGET: #{target}")
end