defmodule Nerves.MixProject do use Mix.Project @version "1.14.1" @source_url "https://github.com/nerves-project/nerves" # Fail quickly on OTP 25 and earlier rather than letting them fail at runtime @otp_release :erlang.system_info(:otp_release) |> List.to_integer() if @otp_release < 26 do raise "nerves requires OTP 26 or later. Current OTP version: #{@otp_release}" end def project do [ app: :nerves, version: @version, elixir: "~> 1.15.1 or ~> 1.16.0 or ~> 1.17.0 or ~> 1.18.0 or ~> 1.19.0", archives: [nerves_bootstrap: "~> 1.15.1 or ~> 1.16"], elixirc_paths: elixirc_paths(Mix.env()), deps: deps(), description: description(), package: package(), compilers: [:elixir_make | Mix.compilers()], make_targets: ["all"], make_clean: ["clean"], docs: docs(), dialyzer: dialyzer(), aliases: ["archive.build": &raise_on_archive_build/1], test_ignore_filters: [~r/test.fixtures.*/] ] end def application do # Remove :nerves_bootstrap after allowing time for everyone to upgrade to # 1.15.1 or later. [extra_applications: [:ssl, :inets, :public_key, :eex, :nerves_bootstrap]] end defp elixirc_paths(:test), do: ["lib", "compat", "test/support"] defp elixirc_paths(_), do: ["lib", "compat"] def cli do [preferred_envs: %{docs: :docs, credo: :dev, "hex.publish": :docs, "hex.build": :docs}] end defp deps do [ {:elixir_make, "~> 0.6", runtime: false}, {:interactive_cmd, "~> 0.1.4"}, {:jason, "~> 1.2"}, {:nerves_discovery, "~> 0.1.2"}, {:tablet, "~> 0.3.1"}, {:credo, "~> 1.6", only: :dev, runtime: false}, {:ex_doc, "~> 0.22", only: :docs, runtime: false}, {:dialyxir, "~> 1.0", only: :dev, runtime: false}, {:bandit, "~> 1.0", only: :test}, {:mimic, "~> 2.3", only: :test}, {:plug, "~> 1.10", only: :test} ] end defp dialyzer do [ flags: [:missing_return, :extra_return, :unmatched_returns, :error_handling, :underspecs], plt_add_apps: [:mix] ] end defp docs do [ main: "getting-started", source_ref: "v#{@version}", source_url: @source_url, extra_section: "GUIDES", assets: %{"resources" => "assets"}, logo: "resources/logo-color.png", groups_for_extras: [ Introduction: ~r/guides\/introduction\/.?/, Core: ~r/guides\/core\/.?/, Advanced: ~r/guides\/advanced\/.?/, Cheatsheets: ~r/guides\/cheatsheets\/.?/ ], extras: ["CHANGELOG.md"] ++ Path.wildcard("guides/*/*.{md,cheatmd}"), skip_undefined_reference_warnings_on: [ "guides/advanced/updating-projects.md", "CHANGELOG.md" ] ] end defp description do "Craft and deploy bulletproof embedded software" end defp package do [ files: [ "CHANGELOG.md", "lib", "LICENSES/*", "Makefile", "mix.exs", "NOTICE", "README.md", "REUSE.toml", "scripts", "src" ], licenses: ["Apache-2.0"], links: %{ "Home page" => "https://www.nerves-project.org/", "GitHub" => @source_url, "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md", "REUSE Compliance" => "https://api.reuse.software/info/github.com/nerves-project/nerves" } ] end defp raise_on_archive_build(_) do Mix.raise(""" You are trying to install "nerves" as an archive, which is not supported. \ You probably meant to install "nerves_bootstrap" instead. """) end end