defmodule YogEx.MixProject do use Mix.Project @version "0.99.0" @source_url "https://github.com/code-shoily/yog_ex" def project do [ app: :yog_ex, version: @version, elixir: "~> 1.18", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), deps: deps(), dialyzer: [plt_add_apps: [:mix], flags: [:no_opaque]], # Hex description: "A comprehensive pure Elixir graph algorithm library", package: package(), # Docs name: "YogEx", source_url: @source_url, docs: docs(), # Test Coverage test_coverage: [tool: ExCoveralls, summary: [threshold: 85]], # Suppress warnings for Erlang modules elixirc_options: [ no_warn_undefined: [ # Erlang stdlib modules (xmerl) :xmerl_scan, :xmerl_xpath ] ] ] end # Specifies which paths to compile per environment. defp elixirc_paths(:test), do: ["lib", "test/support", "test/oracle"] defp elixirc_paths(_), do: ["lib"] def cli do [ preferred_envs: [ coveralls: :test, "coveralls.detail": :test, "coveralls.post": :test, "coveralls.html": :test, "coveralls.github": :test ] ] end def application do [extra_applications: [:logger, :xmerl]] end defp deps do [ {:saxy, "~> 1.5", optional: true}, {:jason, "~> 1.4", optional: true}, {:libgraph, "~> 0.16", optional: true}, {:ex_doc, "~> 0.40", only: :dev, runtime: false}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:stream_data, "~> 1.1", only: [:dev, :test]}, {:benchee, "~> 1.3", only: :dev}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, {:excoveralls, "~> 0.18", only: :test}, {:jump_credo_checks, "~> 0.4", only: [:dev], runtime: false} ] end defp package do [ name: "yog_ex", files: ~w(lib .formatter.exs mix.exs README.md ALGORITHMS.md PROPERTIES.md LICENSE CHANGELOG.md livebooks), licenses: ["Apache-2.0"], links: %{ "GitHub" => @source_url, "Changelog" => @source_url <> "/blob/main/CHANGELOG.md", "Examples" => @source_url <> "/blob/main/examples/README.md", "Livebook Guides" => @source_url <> "/blob/main/livebooks/README.md" } ] end defp docs do [ main: "readme", extras: [ {"README.md", [title: "Overview", filename: "readme"]}, {"lib/yog/CHEATSHEET.cheatmd", [title: "Cheat Sheet", filename: "cheat_sheet"]}, {"examples/README.md", [filename: "examples_readme", title: "Examples"]}, {"lib/yog/functional/README.md", [filename: "functional_readme", title: "Inductive Graphs (Experimental)"]}, {"livebooks/guides/01_getting_started.livemd", [filename: "getting_started", title: "Getting Started"]}, {"livebooks/how_to/maze_generation.livemd", [filename: "maze_generation", title: "Maze Generation"]}, {"livebooks/guides/02_traversals_and_pathfinding.livemd", [filename: "traversals_and_pathfinding", title: "Traversals & Pathfinding"]}, {"livebooks/guides/05_network_analysis.livemd", [filename: "network_analysis", title: "Network Analysis"]}, {"livebooks/guides/06_network_flow.livemd", [filename: "network_flow", title: "Network Flow"]}, {"livebooks/guides/03_graph_properties.livemd", [filename: "graph_properties", title: "Graph Properties"]}, {"livebooks/guides/04_dag_analysis.livemd", [filename: "dag_analysis", title: "DAG Analysis"]}, {"livebooks/gallery/graph_catalog.livemd", [filename: "graph_catalog", title: "Graph Gallery"]}, {"livebooks/gallery/maze_gallery.livemd", [filename: "maze_gallery", title: "Maze Gallery"]}, {"livebooks/how_to/dot_complete_guide.livemd", [filename: "dot_complete_guide", title: "DOT Complete Guide"]}, {"livebooks/how_to/import_export.livemd", [filename: "import_export", title: "Importing & Exporting"]}, {"livebooks/how_to/multigraphs_and_collapsing.livemd", [filename: "multigraphs_and_collapsing", title: "Multigraphs & Collapsing"]}, {"livebooks/how_to/mermaid_complete_guide.livemd", [filename: "mermaid_complete_guide", title: "Mermaid Complete Guide"]}, {"livebooks/how_to/layout_guide.livemd", [filename: "layout_guide", title: "Layout Guide"]}, "ALGORITHMS.md", "PROPERTIES.md", {"test/oracle/README.md", [filename: "oracle_readme", title: "Oracle Tests"]}, "CHANGELOG.md" ], source_ref: "v#{@version}", source_url: @source_url, mermaid: true, before_closing_body_tag: &before_closing_body_tag/1, groups_for_modules: [ Core: [ Yog, Yog.Model, Yog.Graph ], "Transformers & Operations": [ Yog.Transform, Yog.Operation ], Builder: [ ~r/Yog\.Builder/ ], "Pathfinding & Traversal": [ ~r/Yog\.(Pathfinding|Traversal)/ ], "Network Algorithms": [ ~r/Yog\.(MST|Flow|Connectivity|Matching)/ ], "Network Analysis": [ ~r/Yog\.(Community|Centrality|Approximate)/, Yog.Health ], Multi: [ ~r/Yog\.Multi/ ], Functional: [ ~r/Yog\.Functional/ ], "Directed Acyclic Graphs (DAG)": [ ~r/Yog\.DAG/ ], Properties: [ ~r/Yog\.Property/ ], Generators: [ ~r/Yog\.Generator/ ], "I/O & Rendering": [ ~r/Yog\.IO/, ~r/Yog\.Render/, ~r/Yog\.Layout/ ], "Data Structures & Utils": [ ~r/Yog\.(PriorityQueue|DisjointSet|PairingHeap)/, Yog.Utils ] ], groups_for_extras: [ "Cheat Sheets": [ "lib/yog/CHEATSHEET.cheatmd" ], Guides: [ "README.md", "examples/README.md", "lib/yog/functional/README.md" ], LIVEBOOK: [ "livebooks/guides/01_getting_started.livemd", "livebooks/guides/02_traversals_and_pathfinding.livemd", "livebooks/guides/03_graph_properties.livemd", "livebooks/guides/04_dag_analysis.livemd", "livebooks/guides/05_network_analysis.livemd", "livebooks/guides/06_network_flow.livemd", "livebooks/how_to/maze_generation.livemd", "livebooks/how_to/layout_guide.livemd", "livebooks/how_to/import_export.livemd", "livebooks/how_to/multigraphs_and_collapsing.livemd", "livebooks/how_to/mermaid_complete_guide.livemd", "livebooks/gallery/graph_catalog.livemd", "livebooks/gallery/maze_gallery.livemd" ], Reference: [ "ALGORITHMS.md", "PROPERTIES.md" ], "Testing & Verification": [ "test/oracle/README.md" ], Resources: [ "CHANGELOG.md" ] ] ] end defp before_closing_body_tag(:html) do File.read!("priv/docs/graphviz.html") end defp before_closing_body_tag(_), do: "" end