defmodule ExCodeView.MixProject do use Mix.Project @version "0.2.0" @source_url "https://github.com/ShawnMcCool/ex_code_view" def project do [ app: :ex_code_view, version: @version, elixir: "~> 1.15", deps: deps(), package: package(), description: "Interactive code visualizations for Elixir projects — 3D software city and Ecto ERD, rendered as self-contained HTML.", source_url: @source_url, homepage_url: @source_url, docs: docs(), test_paths: ["test"], test_pattern: "*_test.exs", aliases: aliases() ] end def cli do [preferred_envs: ["test.all": :test]] end def application do [extra_applications: [:logger]] end defp deps do [ {:jason, "~> 1.0"}, {:ex_doc, "~> 0.34", only: :dev, runtime: false} ] end defp aliases do [ "test.all": [ "test", fn _ -> js_tests = [ "priv/views/city/js/lib.test.js", "priv/views/erd/js/lib.test.js", "priv/shell/js/tooltip.test.js", "priv/shell/js/controls.test.js", "priv/shell/js/shell.test.js" ] for test_file <- js_tests do case System.cmd("node", ["--test", test_file], into: IO.stream(:stdio, :line), stderr_to_stdout: true ) do {_, 0} -> :ok {_, _} -> Mix.raise("JS tests failed: #{test_file}") end end end ], lint: ["format --check-formatted"] ] end defp package do [ files: ~w(lib priv mix.exs README.md LICENSE CHANGELOG.md usage-rules.md usage-rules), licenses: ["MIT"], links: %{ "GitHub" => @source_url, "Changelog" => @source_url <> "/blob/main/CHANGELOG.md" } ] end defp docs do [ main: "readme", source_url: @source_url, source_ref: "v#{@version}", extras: [ "README.md", "CHANGELOG.md", "DESIGN.md", "LICENSE" ] ] end end