defmodule Palisade.MixProject do
use Mix.Project
@version "0.1.0"
@source_url "https://code.carverauto.dev/carverauto/serviceradar/src/branch/main/elixir/palisade"
def project do
[
app: :palisade,
version: @version,
# ~> 1.15 keeps the door open for CRM (1.19) and ServiceRadar
# (also recent) to both consume without version-pinning churn.
elixir: "~> 1.15",
start_permanent: Mix.env() == :prod,
deps: deps(),
description: description(),
package: package(),
source_url: @source_url,
aliases: aliases()
]
end
def application do
# No supervision tree in v0.1 — everything's pure / per-call.
# OIDC discovery + JWKS caching will need a GenServer-owned ETS
# in a later version; we'll add an `Application` module then.
[extra_applications: [:logger]]
end
defp description do
"""
Shared trust-boundary primitives for CarverAutomation services
(currently CRM + ServiceRadar). Outbound URL / network address
policy (SSRF defense), HTTP fetch with resolved-IP binding to
defeat DNS rebinding, and — in later versions — OIDC + SAML
primitives needed to make federated identity safe.
"""
end
defp package do
[
maintainers: ["CarverAutomation"],
licenses: ["Apache-2.0"],
links: %{
"Source" =>
"https://code.carverauto.dev/carverauto/serviceradar/src/branch/main/elixir/palisade"
},
# Hex publish uploads these files (relative to the project
# root). Excluded by default: _build, deps, .git, etc.
files: ~w(lib mix.exs README.md LICENSE .formatter.exs)
]
end
defp deps do
[
# HTTP client for OutboundFetch. Both CRM and ServiceRadar
# already pull Req in transitively; pinning here so palisade
# builds standalone.
{:req, "~> 0.5"},
# Dev / test tooling.
{:credo, "~> 1.7", only: [:dev, :test], runtime: false}
]
end
defp aliases do
[
precommit: [
"compile --warnings-as-errors",
"format",
"credo",
"test"
]
]
end
end