Skip to main content

mix.exs

defmodule ExCrap.MixProject do
  use Mix.Project

  @version "0.1.0"
  @source_url "https://github.com/germsvel/ex_crap"

  def project do
    [
      app: :ex_crap,
      version: @version,
      elixir: "~> 1.18",
      description: description(),
      package: package(),
      source_url: @source_url,
      homepage_url: @source_url,
      docs: docs(),
      start_permanent: Mix.env() == :prod,
      test_ignore_filters: [~r{^test/fixtures/}],
      compilers: [:boundary] ++ Mix.compilers(),
      aliases: [
        doc: "docs",
        "test.crap": [
          "test --cover --export-coverage default",
          "test.coverage",
          "crap"
        ],
        precommit: [
          "format",
          "test.crap",
          "boundary.spec.check",
          "credo --strict",
          "sobelow --skip"
        ],
        mutate:
          "muex --mutators arithmetic,boolean,comparison,conditional,function_call,literal,return_value",
        "mutate.fast":
          "muex --mutators arithmetic,boolean,comparison,conditional,function_call,literal,return_value --optimize-level aggressive --max-per-function 5"
      ],
      deps: [
        {:stream_data, "~> 1.3", only: :test},
        {:ex_doc, "~> 0.34", only: :dev, runtime: false},
        {:muex, "~> 0.6", only: [:dev, :test], runtime: false},
        {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
        {:quokka, "~> 2.13", only: [:dev, :test], runtime: false},
        {:boundary, "~> 0.10", runtime: false},
        {:sobelow, "~> 0.14", only: [:dev, :test], runtime: false}
      ]
    ]
  end

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

  def cli do
    [
      preferred_envs: [
        precommit: :test,
        "test.crap": :test,
        "boundary.spec.check": :test,
        credo: :test,
        sobelow: :test
      ]
    ]
  end

  defp description do
    "Calculate Change Risk Anti-Patterns scores from cyclomatic complexity and test coverage."
  end

  defp package do
    [
      files: [
        "lib/ex_crap.ex",
        "lib/ex_crap/complexity.ex",
        "lib/ex_crap/coverage.ex",
        "lib/ex_crap/mix.ex",
        "lib/ex_crap/report.ex",
        "lib/ex_crap/scanner.ex",
        "lib/ex_crap/score.ex",
        "lib/mix/tasks/crap.ex",
        "mix.exs",
        "README.md",
        "CHANGELOG.md",
        "LICENSE.md"
      ],
      licenses: ["MIT"],
      links: %{"GitHub" => @source_url}
    ]
  end

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