Packages

Process-scoped value overrides for Elixir – a per-test config layer, a frozen clock, a seeded RNG and overridable env vars that survive across process boundaries, never leak between async tests, and compile out of production builds.

Current section

Files

Jump to
ambient mix.exs
Raw

mix.exs

defmodule Ambient.MixProject do
use Mix.Project
@version "0.1.0"
@source_url "https://github.com/mariuszzak/ambient"
def project do
[
app: :ambient,
version: @version,
elixir: "~> 1.15",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
deps: deps(),
aliases: aliases(),
name: "Ambient",
description: description(),
package: package(),
docs: docs(),
source_url: @source_url,
# :credo is optional and `runtime: false`, but the bundled checks reference
# it, so the PLT needs it or dialyzer reports unknown functions.
dialyzer: [
plt_add_apps: [:ex_unit, :mix, :credo],
ignore_warnings: ".dialyzer_ignore.exs"
],
test_coverage: [summary: [threshold: 90]],
# `test/fixtures/*.exs` are scripts run by a test, not test files
# themselves. (Elixir 1.19+; ignored on older versions.)
test_ignore_filters: [~r"^test/fixtures/"]
]
end
def application do
# `:crypto` backs the production path of `Ambient.Random.bytes/1`.
[extra_applications: [:logger, :crypto]]
end
def cli do
[preferred_envs: [check: :test]]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp aliases do
[
# dialyzer last: it's the slow one, and the first PLT build is minutes.
check: ["format --check-formatted", "credo --strict", "test", "dialyzer"]
]
end
defp description do
"Process-scoped value overrides for Elixir – a per-test config layer, a " <>
"frozen clock, a seeded RNG and overridable env vars that survive across " <>
"process boundaries, never leak between async tests, and compile out of " <>
"production builds."
end
defp package do
[
licenses: ["MIT"],
links: %{
"GitHub" => @source_url,
"Changelog" => "#{@source_url}/blob/main/CHANGELOG.md"
},
files: ~w(lib mix.exs README.md LICENSE CHANGELOG.md .formatter.exs)
]
end
defp docs do
[
main: "readme",
extras: ["README.md", "CHANGELOG.md"],
source_ref: "v#{@version}",
source_url: @source_url,
groups_for_modules: [
Core: [
Ambient,
Ambient.Value,
Ambient.Error,
Ambient.ProcessOverride,
Ambient.ProcessOverride.Server,
Ambient.Supervisor,
Ambient.Facade
],
"Built-in values": [Ambient.Config, Ambient.Clock, Ambient.Random, Ambient.Env],
"Credo checks": [
Ambient.Credo.NoDirectClock,
Ambient.Credo.NoDirectEnv,
Ambient.Credo.NoDirectRandom,
Ambient.Credo.NoDirectConfig
]
]
]
end
defp deps do
[
{:ex_doc, "~> 0.34", only: :dev, runtime: false},
# Optional: only needed if you enable the bundled `Ambient.Credo.*` checks.
# Consumers who don't use Credo pull nothing and the checks aren't compiled.
{:credo, "~> 1.7", optional: true, runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:stream_data, "~> 1.1", only: [:dev, :test]}
]
end
end