defmodule ElixirMpesa.MixProject do use Mix.Project @version "0.2.0" @source_url "https://github.com/jamesnjovu/elixir_mpesa" @description "Vodacom M-Pesa OpenAPI client for Elixir — C2B, B2C, B2B, reversals, direct " <> "debit and transaction queries across Tanzania, Lesotho, Ghana and the DRC." def project do [ app: :elixir_mpesa, version: @version, elixir: "~> 1.15", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, description: @description, package: package(), deps: deps(), docs: docs(), aliases: aliases(), name: "ElixirMpesa", source_url: @source_url, homepage_url: "https://hexdocs.pm/elixir_mpesa", test_coverage: [summary: [threshold: 0]], dialyzer: [ plt_local_path: "priv/plts", plt_core_path: "priv/plts", flags: [:error_handling, :extra_return, :missing_return, :underspecs] ] ] end def application do [ extra_applications: [:logger, :public_key], mod: {ElixirMpesa.Application, []} ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp deps do [ {:req, "~> 0.5"}, {:jason, "~> 1.2"}, {:plug, "~> 1.15", only: :test}, {:ex_doc, "~> 0.34", only: :dev, runtime: false}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false} ] end defp package do [ name: "elixir_mpesa", maintainers: ["James Njovu"], files: ~w(lib guides .formatter.exs mix.exs README.md CHANGELOG.md LICENSE), licenses: ["MIT"], links: %{ "GitHub" => @source_url, "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md", "Docs" => "https://hexdocs.pm/elixir_mpesa", "M-Pesa OpenAPI Portal" => "https://openapiportal.m-pesa.com" } ] end defp docs do [ main: "readme", source_url: @source_url, source_ref: "v#{@version}", formatters: ["html"], extras: [ "README.md", "guides/getting-started.md", "guides/markets.md", "guides/authentication.md", "guides/payments.md", "guides/direct-debit.md", "guides/error-codes.md", "guides/testing.md", "guides/upgrading.md", "CHANGELOG.md", "LICENSE" ], groups_for_extras: [ Guides: ~r/guides\/(getting-started|markets|authentication)/, Operations: ~r/guides\/(payments|direct-debit)/, Reference: ~r/guides\/(error-codes|testing|upgrading)/ ], groups_for_modules: [ Core: [ElixirMpesa, ElixirMpesa.Transactions], Configuration: [ElixirMpesa.Config], Results: [ElixirMpesa.Response, ElixirMpesa.Error], Internals: [ElixirMpesa.Client, ElixirMpesa.Crypto, ElixirMpesa.Session], Deprecated: [ElixirMpesa.GenerateSessionKey] ], groups_for_docs: [ Payments: &(&1[:group] == :payments), Queries: &(&1[:group] == :queries), "Direct debit": &(&1[:group] == :direct_debit), Session: &(&1[:group] == :session) ] ] end defp aliases do [ docs: ["docs", &llms_txt/1], lint: ["format --check-formatted", "credo --strict", "dialyzer"], ci: ["lint", "test"] ] end # Writes doc/llms.txt so hexdocs.pm/elixir_mpesa/llms.txt serves a condensed, # machine-readable summary for coding assistants. Kept out of lib/ so it never # ships in the Hex package. defp llms_txt(_args) do source = "llms.txt" if File.exists?(source) do File.mkdir_p!("doc") File.cp!(source, "doc/llms.txt") Mix.shell().info([:green, "* copied ", :reset, "doc/llms.txt"]) end end end