defmodule ExWapp.MixProject do use Mix.Project @version "0.1.2" @author "Yuriy Zhar" @source_url "https://github.com/elchemista/ex_wapp" @author_url "https://github.com/elchemista" @issues_url "#{@source_url}/issues" def project do [ app: :ex_wapp, name: "ExWapp", version: @version, elixir: "~> 1.19", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, description: "Runtime-neutral WhatsApp Web client library for Elixir", source_url: @source_url, homepage_url: @source_url, package: package(), docs: docs(), test_coverage: test_coverage(), dialyzer: [ignore_warnings: ".dialyzer_ignore.exs", list_unused_filters: true], deps: deps() ] end def application do [ extra_applications: [:logger, :crypto, :inets, :ssl], mod: {ExWapp.Application, []} ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_env), do: ["lib"] defp deps do [ {:ed25519, "~> 1.4"}, {:protox, "~> 1.7"}, {:phoenix_pubsub, "~> 2.1"}, {:telemetry, "~> 1.2"}, {:websockex, "~> 0.4"}, {:qr_code, "~> 3.2.0"}, {:credo, "~> 1.6", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.3", only: [:dev, :test], runtime: false}, {:ex_doc, "~> 0.38", only: :dev, runtime: false} ] end defp package do [ files: [ ".formatter.exs", "examples", "lib", "mix.exs", "README.md", "docs", "LICENSE" ], licenses: ["Apache-2.0"], links: %{ "Author" => @author_url, "GitHub" => @source_url, "Documentation" => "https://hexdocs.pm/ex_wapp", "Issue tracker" => @issues_url } ] end defp docs do [ main: "readme", authors: [@author], canonical: "https://hexdocs.pm/ex_wapp", source_ref: "v#{@version}", source_url: @source_url, extras: [ "README.md", "docs/architecture.md", "docs/design-decisions.md", "docs/protocol-flow.md", "docs/protocol-reference.md", "docs/strengths-and-limitations.md" ], skip_undefined_reference_warnings_on: &skip_protocol_doc_warning?/1, groups_for_modules: [ "Public client API": [ ExWapp, ExWapp.Call, ExWapp.Chat, ExWapp.Client, ExWapp.Contact, ExWapp.Event, ExWapp.JSON, ExWapp.Media, ExWapp.Message ], "Extension points": [ ExWapp.Client.Transport, ExWapp.Events, ExWapp.JSON.Library, ExWapp.Store ] ] ] end defp skip_protocol_doc_warning?(reference) when is_binary(reference) do reference in ["docs/protocol-flow.md", "docs/protocol-reference.md"] or String.starts_with?(reference, "lib/ex_wapp/") end defp skip_protocol_doc_warning?(_reference), do: false # Protox output is checked by schema, wire-compatibility, and round-trip # tests. Counting each generated module as application code makes the line # coverage number describe the schema size instead of ExWapp's maintained # implementation. defp test_coverage do [ ignore_modules: [~r/^W[A-Z]/], summary: [threshold: 67] ] end end