Packages
A Config.Provider that loads app config from a CASC file (via Cooper) at release boot, replacing Mix's compile-time config.exs/runtime.exs for the settings that need to come from CASC instead.
Current section
Files
Jump to
Current section
Files
cooper_config
mix.exs
mix.exs
defmodule CooperConfig.MixProject do
use Mix.Project
@version "0.1.0"
# `mix precommit` includes `test` as a step; without this, Mix runs
# the whole alias chain (including `mix test`) in :dev, and `mix test`
# itself refuses to run outside :test when invoked as a sub-task
# rather than the top-level command.
def cli do
[preferred_envs: [precommit: :test]]
end
def project do
[
app: :cooper_config,
version: @version,
elixir: "~> 1.19",
start_permanent: Mix.env() == :prod,
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
description: description(),
package: package(),
name: "CooperConfig",
docs: docs(),
aliases: aliases(),
test_coverage: [tool: ExCoveralls],
dialyzer: [plt_add_apps: [:mix]]
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
def application do
[
extra_applications: [:logger]
]
end
defp deps do
[
# === CODE QUALITY & STATIC ANALYSIS ===
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:sobelow, "~> 0.14", only: [:dev, :test], runtime: false},
{:excoveralls, "~> 0.18", only: [:dev, :test], runtime: false},
# Credo is invoked via `mix credo`
# Dialyzer is invoked via `mix dialyzer`
# Sobelow is invoked via `mix sobelow`
# === TESTING ===
{:stream_data, "~> 1.4", only: [:test]},
# === DEVELOPMENT TOOLING ===
# Mix, and Hex are built-in (no deps needed)
{:ex_doc, "~> 0.40", only: [:dev], runtime: false},
# ExDoc is invoked via `mix docs`
# === RUNTIME ===
{:cooper, "~> 0.2.0"}
]
end
# Fast/cheap checks first so a broken commit fails quickly; dialyzer
# (slowest, especially its first PLT build) runs last.
defp aliases do
[
precommit: [
"format",
"compile --warnings-as-errors",
"credo --strict",
"sobelow",
"test",
"dialyzer"
]
]
end
defp description do
"A Config.Provider that loads app config from a CASC file (via Cooper) at " <>
"release boot, replacing Mix's compile-time config.exs/runtime.exs for the " <>
"settings that need to come from CASC instead."
end
defp package do
[
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/joetjen/cooper_config"},
files: ~w(lib .formatter.exs mix.exs README.md CHANGELOG.md LICENSE)
]
end
defp docs do
[
main: "readme",
source_url: "https://github.com/joetjen/cooper_config",
source_ref: "v#{@version}",
extras: ["README.md", "CHANGELOG.md", "LICENSE"],
groups_for_modules: groups_for_modules()
]
end
defp groups_for_modules do
[
"Public API": [
CooperConfig,
CooperConfig.Provider,
CooperConfig.Convert
]
]
end
end