defmodule Req.MixProject do use Mix.Project @version "0.7.2" @source_url "https://github.com/wojtekmach/req" def project do [ app: :req, version: @version, elixir: "~> 1.15", start_permanent: Mix.env() == :prod, deps: deps(), package: package(), docs: docs(), aliases: aliases(), elixirc_paths: elixirc_paths(Mix.env()), elixirc_options: [ no_warn_undefined: [ NimbleCSV.RFC4180, Plug.Conn, Plug.HTML, Plug.Test, :brotli, :brotli_encoder, :brotli_decoder, :zstd ] ] ] end def application do [ mod: {Req.Application, []}, extra_applications: extra_applications(Mix.env()) ] end def cli do [ preferred_envs: [ "test.all": :test, "test.adapters": :test, docs: :docs, "hex.publish": :docs ] ] end defp package do [ description: "Req is a batteries-included HTTP client for Elixir.", licenses: ["Apache-2.0"], links: %{ "GitHub" => @source_url, "Changelog" => "https://hexdocs.pm/req/changelog.html" } ] end defp aliases do [ "test.all": &test_all/1, "test.adapters": &test_adapters/1 ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp extra_applications(:test), do: [:logger, :inets] defp extra_applications(_), do: [:logger] defp test_all(args) do test_adapters(["--include", "integration" | args]) end defp test_adapters(args) do adapters = if adapters = System.get_env("REQ_ADAPTERS") do String.split(adapters, ",") else ~w(finch httpc mint plug) end for adapter <- adapters do {_, status} = System.cmd("mix", ["test" | args], env: [{"REQ_ADAPTER", adapter}], into: IO.stream(:stdio, :line) ) if status != 0 do exit({:shutdown, status}) end end end defp deps do [ {:finch, "~> 0.21", finch_opts()}, {:mime, "~> 2.0.6 or ~> 2.1"}, {:jason, "~> 1.0"}, {:nimble_csv, "~> 1.0", optional: true}, {:plug, "~> 1.0", [optional: true] ++ plug_opts()}, {:brotli, "~> 0.3.1", optional: true}, {:aws_signature, "~> 0.3.2", only: :test}, {:bypass, "~> 2.1", only: :test}, {:ex_doc, ">= 0.0.0", only: :docs, warn_if_outdated: true}, {:bandit, "~> 1.0", only: :test} ] end defp finch_opts do cond do path = System.get_env("FINCH_PATH") -> [path: path] ref = System.get_env("FINCH_REF") -> [github: "sneako/finch", ref: ref] true -> [] end end defp plug_opts do cond do path = System.get_env("PLUG_PATH") -> [path: path, override: true] ref = System.get_env("PLUG_REF") -> [github: "elixir-plug/plug", ref: ref, override: true] true -> [] end end defp docs do [ main: "readme", source_url: @source_url, source_ref: "v#{@version}", groups_for_docs: [ Types: &(&1[:kind] == :type), Callbacks: &(&1[:kind] == :callback), "Request Steps": &(&1[:step] == :request), "Response Steps": &(&1[:step] == :response), "Error Steps": &(&1[:step] == :error), Functions: &(&1[:kind] == :function and &1[:type] not in [:request, :mock, :async]), "Functions (Making Requests)": &(&1[:type] == :request), "Functions (Async Response)": &(&1[:type] == :async), "Functions (Mocks & Stubs)": &(&1[:type] == :mock) ], groups_for_modules: [ Adapters: [ Req.Finch, Req.Plug ], Formats: [ Req.Brotli, Req.Gzip, Req.Tar, Req.ZIP, Req.Zstd ] ], extras: [ "README.md", "CHANGELOG.md" ], skip_code_autolink_to: [ "Req.Test.stub/1", "Req.Utils.aws_sigv4_url/1", "Req.update/2" ] ] end def legacy_headers_as_lists? do Application.get_env(:req, :legacy_headers_as_lists, false) end end