mix.exs

defmodule HuggingfaceClient.MixProject do
  use Mix.Project

  @version "0.1.0"
  @source_url "https://github.com/huggingface/huggingface_client"

  def project do
    [
      app: :huggingface_client,
      version: @version,
      elixir: "~> 1.18",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      aliases: aliases(),
      description: description(),
      package: package(),
      docs: docs(),
      test_coverage: [tool: ExCoveralls],
      preferred_cli_env: [
        coveralls: :test,
        "coveralls.detail": :test,
        "coveralls.post": :test,
        "coveralls.html": :test
      ]
    ]
  end

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

  defp deps do
    [
      # HTTP client
      {:req, "~> 0.5"},
      {:finch, "~> 0.18"},
      # JSON
      {:jason, "~> 1.4"},
      # Options validation
      {:nimble_options, "~> 1.0"},
      # Telemetry
      {:telemetry, "~> 1.0"},
      # Testing
      {:bypass, "~> 2.1", only: :test},
      {:mox, "~> 1.0", only: :test},
      {:excoveralls, "~> 0.18", only: :test},
      # Dev
      {:ex_doc, "~> 0.31", only: :dev, runtime: false},
      {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
      {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
      # Optional: Phoenix Plug integration
      {:plug, "~> 1.15", optional: true}
    ]
  end

  defp description do
    """
    Production-grade Elixir client for the full HuggingFace platform: Inference, Hub, Jobs, Buckets, AutoTrain, Endpoints, Datasets, Spaces, Webhooks, Orgs, Papers, Leaderboards, Evaluate, Discussions/PRs, MCP agents, and more.
    """
  end

  defp package do
    [
      name: "huggingface_client",
      maintainers: ["HuggingFace Elixir Community"],
      licenses: ["MIT"],
      links: %{
        "GitHub" => @source_url,
        "HuggingFace" => "https://huggingface.co",
        "Documentation" => "https://huggingface.co/docs"
      },
      files: ~w(
        lib config .formatter.exs mix.exs
        README.md LICENSE CHANGELOG.md
      )
    ]
  end

  defp docs do
    [
      main: "readme",
      source_url: @source_url,
      source_ref: "v#{@version}",
      extras: ["README.md", "CHANGELOG.md"],
      groups_for_modules: [
        "Inference — Core": [~r/HuggingfaceClient\.Inference(?!\.)/],
        "Inference — Providers": [~r/HuggingfaceClient\.Inference\.Provider/],
        "Inference — Tasks": [~r/HuggingfaceClient\.Inference\.Task/],
        "Inference — TGI": [HuggingfaceClient.Inference.TGI],
        "Hub — Core": [HuggingfaceClient.Hub, HuggingfaceClient.Hub.Client, HuggingfaceClient.Hub.Auth],
        "Hub — Repositories": [~r/HuggingfaceClient\.Hub\.Repos|Commits|Files|Snapshots|Tags/],
        "Hub — Models": [HuggingfaceClient.Hub.Models],
        "Hub — Datasets": [HuggingfaceClient.Hub.Datasets, HuggingfaceClient.Hub.DatasetViewer],
        "Hub — Spaces": [HuggingfaceClient.Hub.Spaces],
        "Hub — Discovery": [~r/HuggingfaceClient\.Hub\.Search|Collections|Papers/],
        "Hub — Collaboration": [~r/HuggingfaceClient\.Hub\.Discussions|Webhooks/],
        "Hub — Storage": [~r/HuggingfaceClient\.Hub\.Buckets|Cache|FileSystem/],
        "Hub — Compute": [~r/HuggingfaceClient\.Hub\.Jobs|AutoTrain/],
        "Hub — Deployment": [HuggingfaceClient.Hub.Endpoints],
        "Hub — Enterprise": [~r/HuggingfaceClient\.Hub\.Organizations|GatedRepos|OAuth/],
        "Hub — Evaluation": [~r/HuggingfaceClient\.Hub\.Evaluate|Leaderboards/],
        Utilities: [
          HuggingfaceClient.Config,
          HuggingfaceClient.Error,
          HuggingfaceClient.Jinja,
          HuggingfaceClient.Agent,
          HuggingfaceClient.Telemetry
        ]
      ]
    ]
  end

  defp aliases do
    [
      "test.all": ["test --include integration"],
      check: ["credo --strict", "dialyzer"]
    ]
  end
end