Packages
Elixir library for safely using any external service or API using automatic retry with rate limiting and circuit breakers. Calls to external services can be synchronous, asynchronous background tasks, or multiple calls can be made in parallel for MapReduce style processing.
Current section
Files
Jump to
Current section
Files
external_service
mix.exs
mix.exs
defmodule ExternalService.Mixfile do
use Mix.Project
@version "3.0.0"
@source_url "https://github.com/jvoegele/external_service"
def project do
[
app: :external_service,
version: @version,
elixir: "~> 1.15",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
deps: deps(),
# Dialyzer: keep PLTs in a stable, cacheable location for CI
dialyzer: [
plt_local_path: "priv/plts",
plt_core_path: "priv/plts"
],
# Hex
description:
"Elixir library for safely using any external service or API using automatic retry with rate limiting and circuit breakers. Calls to external services can be synchronous, asynchronous background tasks, or multiple calls can be made in parallel for MapReduce style processing.",
package: package(),
# Docs
name: "ExternalService",
source_url: @source_url,
docs: docs()
]
end
# Run "mix help compile.app" to learn about applications.
def application do
[
extra_applications: [:logger]
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
# Run "mix help deps" to learn about dependencies.
defp deps do
[
{:fuse, "~> 2.5"},
{:decorator, "~> 1.4", optional: true},
{:errata, "~> 1.5"},
{:flow, "~> 1.2", optional: true},
{:nimble_options, "~> 1.1"},
{:telemetry, "~> 1.0"},
# Only used to verify the ExternalService.RateLimiter.Hammer adapter against
# the real library; the adapter itself calls `hit/3` on a module you supply,
# so Hammer is not a dependency of this library at runtime.
{:hammer, "~> 7.0", only: :test},
{:ex_doc, "~> 0.31", only: :dev, runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
# Property-based tests only, and only for sequences — orderings of events over
# time, which the exhaustive grids elsewhere in the suite cannot enumerate.
# `only: [:dev, :test]` rather than `optional: true`: this library does not
# ship generators, so nothing downstream ever needs it.
{:stream_data, "~> 1.0", only: [:dev, :test]},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false}
]
end
defp package do
[
name: :external_service,
# `guides` is included because the README links into it: hex.pm renders the
# README out of this tarball, so without the guides those links 404 on the
# package page. (HexDocs is unaffected — ExDoc rewrites them at build time.)
files: [
"lib",
"guides",
"mix.exs",
# Shipped so `import_deps: [:external_service]` finds the
# `locals_without_parens` rules for the paren-free `call fn -> ... end`
# idiom the guides use; without it in the tarball the export block is
# invisible to everyone installing from Hex.
".formatter.exs",
"README.md",
"LICENSE",
"CHANGELOG.md"
],
maintainers: ["Jason Voegele"],
licenses: ["Apache-2.0"],
links: %{"GitHub" => @source_url}
]
end
defp docs do
[
main: "getting-started",
extras: [
"guides/getting-started.md",
"guides/the-front-door.md",
"guides/circuit-breakers.md",
"guides/retries.md",
"guides/rate-limiting.md",
"guides/concurrency.md",
"guides/tuning.md",
"guides/error-handling.md",
"guides/errata.md",
"guides/telemetry.md",
"guides/testing.md",
"guides/distributed.md",
"guides/flow.md",
"guides/cheatsheet.cheatmd",
"guides/migrating-to-2.0.md",
"guides/migrating-to-3.0.md",
"guides/about.md",
"README.md": [title: "Overview"],
"CHANGELOG.md": [title: "Changelog"],
LICENSE: [title: "License"]
],
groups_for_extras: [
Guides: [
"guides/getting-started.md",
"guides/the-front-door.md",
"guides/circuit-breakers.md",
"guides/retries.md",
"guides/rate-limiting.md",
"guides/concurrency.md",
"guides/tuning.md",
"guides/error-handling.md",
"guides/errata.md",
"guides/telemetry.md",
"guides/testing.md",
"guides/distributed.md",
"guides/flow.md"
],
Reference: [
"guides/cheatsheet.cheatmd",
"guides/migrating-to-2.0.md",
"guides/migrating-to-3.0.md",
"guides/about.md"
]
],
filter_modules: fn _module, meta ->
# Tag modules with `@moduledoc internal: true` to exclude them from docs.
not Map.get(meta, :internal, false)
end
]
end
end