Skip to main content

mix.exs

defmodule Oi.MixProject do
  use Mix.Project

  @version "0.6.3"

  def project do
    [
      app: :oi,
      version: @version,
      elixir: "~> 1.17",
      start_permanent: Mix.env() == :prod,
      elixirc_paths: elixirc_paths(Mix.env()),
      deps: deps(),
      package: package(),
      docs: [
        main: "readme",
        extras: ["README.md", "CHANGELOG.md"],
        groups_for_modules: [
          Core: [Oi, Oi.Compiled, Oi.Result],
          DSL: [Oi.Flowgraph, Oi.Step],
          Compile: [Oi.Compile.Bundle, Oi.Compile.Planning],
          Dispatch: [
            Oi.Dispatch.Config,
            Oi.Dispatch.Drafting,
            Oi.Dispatch.Orchestrator,
            Oi.Dispatch.Worker
          ],
          Topology: [
            Oi.Topology.Cluster,
            Oi.Topology.Graph,
            Oi.Topology.Graph.Node,
            Oi.Topology.Graph.Edge,
            Oi.Topology.Graph.PortRef
          ],
          Executors: [Oi.Executor, Oi.Executor.Sync, Oi.Executor.TaskSup],
          Adapters: [Oi.Adapters],
          Runtime: [
            Oi.Runtime.Session,
            Oi.Runtime.Session.Instances,
            Oi.Runtime.Registry
          ]
        ]
      ],
      description: "Lightweight Orchid integration layer with pluggable execution strategies",
      test_coverage: [
        ignore_modules: [
          ~r/.*Test.*/
        ]
      ]
    ]
  end

  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_), do: ["lib"]

  def application do
    observer = if Mix.env() == :dev, do: [:observer, :wx], else: []

    [
      extra_applications: [:logger] ++ observer,
      mod: {Oi.Application, []}
    ]
  end

  defp deps do
    [
      # Orchid related.

      {:orchid, "~> 0.6"},
      {:orchid_symbiont, "~> 0.2", optional: true},
      {:orchid_intervention, "~> 0.2", optional: true},
      {:orchid_stratum, "~> 0.2", optional: true},

      # Package

      {:ex_doc, "~> 0.34", only: :dev, runtime: false},
      {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
      {:credo, "~> 1.7", only: [:dev, :test], runtime: false}
    ]
  end

  defp package do
    [
      maintainers: ["awachestnut"],
      licenses: ["MIT"],
      links: %{"GitHub" => "https://github.com/SynapticStrings/Oi"},
      source_ref: @version,
      files: ~w(lib .formatter.exs mix.exs README.md CHANGELOG.md)
    ]
  end
end