Current section

Files

Jump to
catalyst mix.exs
Raw

mix.exs

defmodule Catalyst.MixProject do
  use Mix.Project

  @app :catalyst
  @name "Catalyst"
  @version "1.0.0-beta.2"
  @github "https://github.com/catalyst-ex/#{@app}"

  def project do
    [
      # Project
      app: @app,
      version: @version,
      elixir: "~> 1.19",
      description: description(),
      package: package(),
      deps: deps(),
      compilers: Mix.compilers() ++ [:archive_deps],
      aliases: aliases(),
      elixirc_paths: elixirc_paths(Mix.env()),

      # ExDoc
      name: @name,
      source_url: @github,
      homepage_url: @github,
      docs: [
        main: @name,
        canonical: "https://hexdocs.pm/#{@app}",
        extras: ["README.md"]
      ]
    ]
  end

  # BEAM Application
  def application do
    [extra_applications: [:logger]]
  end

  # Dependencies
  defp deps do
    [
      {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
      {:ex_doc, ">= 0.0.0", only: :dev},
      {:sobelow, "~> 0.14", only: [:dev, :test], runtime: false},
      {:sourceror, "~> 1.0"},
      {:ucwidth, "~> 0.2"}
    ]
  end

  # Mix Aliases
  defp aliases do
    [
      quality: ["format", "credo", "sobelow --exit low"]
    ]
  end

  # Compilation Paths
  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_env), do: ["lib"]

  # Package Description
  defp description do
    "Codemod, generation and scaffolding for Elixir"
  end

  # Package Information
  defp package do
    [
      name: @app,
      maintainers: ["Sheharyar Naseer", "Mudassar Ali", "Rana Tallal Ahmad"],
      licenses: ~w[MIT],
      files: ~w(mix.exs lib README.md),
      links: %{"GitHub" => @github}
    ]
  end
end

defmodule Mix.Tasks.Compile.ArchiveDeps do
  @moduledoc false
  use Mix.Task.Compiler

  @runtime_deps [:sourceror, :ucwidth]

  @impl true
  def run(_args) do
    compile_path = Mix.Project.compile_path()
    build_path = Mix.Project.build_path()

    Enum.each(@runtime_deps, fn dependency ->
      build_path
      |> Path.join("lib/#{dependency}/ebin/*.beam")
      |> Path.wildcard()
      |> Enum.each(&File.cp!(&1, Path.join(compile_path, Path.basename(&1))))
    end)

    {:ok, []}
  end
end