Current section

Files

Jump to
dspace_ex mix.exs
Raw

mix.exs

defmodule DSpace.MixProject do
  use Mix.Project

  @version "0.2.1"
  @description "DSpace client library for Elixir"
  @source_url "https://github.com/moefuerst/dspace_ex"

  def project do
    [
      app: :dspace_ex,
      version: @version,
      elixir: "~> 1.18",
      elixirc_options: elixirc_options(),
      elixirc_paths: elixirc_paths(Mix.env()),
      consolidate_protocols: Mix.env() != :test,
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      hex: hex(),
      description: @description,
      package: package(),
      docs: docs(),
      aliases: aliases(),
      dialyzer: dialyzer(),
      source_url: @source_url
    ]
  end

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

  def cli do
    [
      preferred_envs: [precommit: :test, check: :test, "test.ci": :test, dialyzer: :test]
    ]
  end

  defp elixirc_options do
    [
      no_warn_undefined: [Req]
    ]
  end

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

  defp deps do
    [
      {:req, "~> 0.5 or ~> 0.6 or ~> 0.7", optional: true},

      # Development and Testing
      {:ex_doc, ">= 0.0.0", only: :dev, runtime: false},
      {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
      {:ex_slop, "~> 0.4", only: [:dev, :test], runtime: false},
      {:jump_credo_checks, "~> 0.4", only: [:dev, :test], runtime: false},
      {:styler, "~> 1.4", only: [:dev, :test], runtime: false},
      {:dialyxir, "~> 1.1", only: [:dev, :test], runtime: false},
      {:muex, "~> 0.11", only: [:dev, :test], runtime: false},
      {:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false},
      {:stream_data, "~> 1.2", only: :test},
      {:sham, "~> 1.0", only: :test},
      {:bandit, "~> 1.0", only: :test}
    ]
  end

  defp aliases do
    [
      precommit: [
        "compile --warnings-as-errors",
        "deps.unlock --unused",
        "format",
        "credo --strict",
        "dialyzer --quiet-with-result",
        "test --warnings-as-errors"
      ],
      check: [
        "deps.unlock --check-unused",
        "format --check-formatted",
        "credo --strict"
      ],
      "deps.audit": [
        "hex.audit",
        "deps.audit"
      ],
      "test.ci": [
        "test --warnings-as-errors",
        "muex --optimize --optimize-level conservative --fail-at 80"
      ]
    ]
  end

  defp docs do
    [
      main: "readme",
      source_ref: "v#{@version}",
      source_url: @source_url,
      extras: extras(),
      groups_for_modules: groups_for_modules(),
      nest_modules_by_prefix: nest_modules_by_prefix(),
      skip_undefined_reference_warnings_on: ["CHANGELOG.md"]
    ]
  end

  defp extras do
    [
      "README.md",
      "CHANGELOG.md",
      "LICENSE"
    ]
  end

  defp groups_for_modules do
    [
      Client: [
        DSpace.API,
        DSpace.API.Error,
        DSpace.API.HTTP.Error,
        DSpace.API.Operation.Error,
        DSpace.API.Resource
      ],
      "Data Structures": [
        ~r{DSpace\.API\.Model\.}
      ],
      "Core Resources": [
        DSpace.API.Collection,
        DSpace.API.Community,
        DSpace.API.File,
        DSpace.API.Item,
        DSpace.API.User
      ],
      Access: [
        DSpace.API.Auth
      ],
      Search: [
        DSpace.API.Search,
        DSpace.API.PID
      ],
      Integrations: [
        DSpace.API.Source
      ],
      "Repository Management": [
        DSpace.API.File.FormatRegistry,
        DSpace.API.Metadata,
        DSpace.API.Monitor
      ],
      "Advanced Customization": [
        ~r{DSpace\.API\.HTTP},
        ~r{DSpace\.API\.Operation},
        DSpace.API.StreamBuilder,
        DSpace.API.Transform,
        DSpace.API.Version
      ]
    ]
  end

  defp nest_modules_by_prefix do
    [
      DSpace.API.Model
    ]
  end

  defp dialyzer do
    [
      ignore_warnings: ".dialyzer_ignore.exs",
      plt_core_path: "priv/plts",
      plt_file: {:no_warn, "priv/plts/project.plt"},
      plt_add_apps: [:ex_unit]
    ]
  end

  defp hex do
    [
      cooldown: "10d"
    ]
  end

  defp package do
    [
      name: :dspace_ex,
      files: ~w(lib .formatter.exs mix.exs README* LICENSE* CHANGELOG*),
      maintainers: ["Moritz F. Fürst"],
      licenses: ["AGPL-3.0-only"],
      source_url: @source_url,
      links: %{
        "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md",
        "Source Code" => @source_url
      }
    ]
  end
end