Packages

An HTTP server for Durable Streams, KV, or both, on SlateDB.

Current section

Files

Jump to
slap mix.exs
Raw

mix.exs

defmodule Slap.MixProject do
  use Mix.Project

  @version "0.2.0"
  @source_url "https://github.com/mjrusso/slap"

  def project do
    [
      app: :slap,
      version: @version,
      elixir: "~> 1.18",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      aliases: aliases(),
      dialyzer: [plt_add_apps: [:mix, :iex]],
      usage_rules: [file: "AGENTS.md", usage_rules: [:usage_rules]],
      description: "An HTTP server for Durable Streams, KV, or both, on SlateDB.",
      source_url: @source_url,
      package: [licenses: ["Apache-2.0"], links: %{"GitHub" => @source_url}],
      docs: [
        main: "readme",
        extras: ["README.md", "CHANGELOG.md", "LICENSE"],
        source_url_pattern: "#{@source_url}/blob/slap-v#{@version}/slap/%{path}#L%{line}"
      ]
    ]
  end

  def application do
    [mod: {Slap.Application, []}, extra_applications: [:logger]]
  end

  def cli do
    [preferred_envs: [check: :test]]
  end

  defp deps do
    [
      slap_dep(:slap_streams, "~> 0.2.0"),
      slap_dep(:slap_kv, "~> 0.2.0"),
      slap_dep(:slap_cluster, "~> 0.2.0"),
      slap_dep(:slap_slatedb, "~> 0.2.0"),
      {:bandit, "~> 1.12"},
      {:rustler, "~> 0.38", optional: true, runtime: false},
      {:credo, "~> 1.7.19", only: [:dev, :test], runtime: false},
      {:ex_slop, "~> 0.4.5", only: [:dev, :test], runtime: false},
      {:ex_dna, "~> 1.5.4", only: [:dev, :test], runtime: false},
      {:reach, "~> 2.8.4", only: [:dev, :test], runtime: false},
      {:dialyxir, "~> 1.4.8", only: [:dev, :test], runtime: false},
      {:ex_doc, "~> 0.40", only: :dev, runtime: false},
      {:usage_rules, "~> 1.2.8", only: :dev},
      {:igniter, "~> 0.8.4", only: :dev}
    ]
  end

  defp slap_dep(app, requirement) do
    case System.get_env("SLAP_LOCAL_DEPS") do
      "1" -> {app, requirement, path: "../#{app}"}
      _ -> {app, requirement}
    end
  end

  defp aliases do
    [
      check: [
        "compile --warnings-as-errors --force",
        "format --check-formatted",
        "deps.unlock --check-unused",
        "credo",
        "reach.check --arch",
        # The PLT's up-to-date check hashes only the lockfile, which path
        # dependencies are not in: --force-check updates their changed modules.
        "dialyzer --format short --force-check",
        "xref graph --format cycles --label compile-connected --fail-above 0",
        "test"
      ]
    ]
  end
end