mix.exs

defmodule RedisCluster.MixProject do
  use Mix.Project

  @homepage_url "https://tubitv.hexdocs.pm/redis_cluster"
  @source_url "https://github.com/Tubitv/redis_cluster"
  @version "0.8.0"

  def project do
    [
      app: :redis_cluster,
      version: @version,
      elixir: "~> 1.14",
      start_permanent: Mix.env() == :prod,
      dialyzer: dialyzer_opts(),
      package: package(),
      docs: docs(),
      deps: deps()
    ]
  end

  def application do
    [
      extra_applications: [:logger]
    ]
  end

  defp dialyzer_opts do
    [
      plt_add_deps: :app_tree,
      plt_add_apps: [:eex, :mix, :ex_unit],
      ignore_warnings: "dialyzer_ignore.exs",
      flags: [
        # Default warnings
        :unknown,
        :unmatched_returns,
        :error_handling,
        :no_opaque,
        # Extra warnings
        :underspecs
        # Unused warnings
        # :race_conditions,
        # :overspecs
        # :specdiffs
        # Unused suppressions
        # :no_return,
        # :no_fail_call,
        # :no_contracts,
        # :no_missing_calls,
        # :no_match,
        # :no_fun_app,
        # :no_behaviours,
        # :no_improper_lists,
        # :no_undefined_callbacks,
        # :no_unused,
      ]
    ]
  end

  defp deps do
    [
      {:redix, "~> 1.5"},
      {:crc, "~> 0.10"},
      {:telemetry, "~> 1.0"},
      {:ex_doc, "~> 0.34", only: [:dev], runtime: false},
      {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
      {:mox, "~> 1.0", only: [:test]}
    ]
  end

  def package do
    %{
      description: "Extends Redix with Redis cluster support",
      files: ~w(.formatter.exs mix.exs lib),
      licenses: ["MIT"],
      links: %{"GitHub" => @source_url}
    }
  end

  defp docs do
    [
      extras: ["README.md", "CHANGELOG.md"],
      main: "readme",
      source_url: @source_url,
      homepage_url: @homepage_url,
      source_ref: "v#{@version}",
      formatters: ["html"]
    ]
  end
end