%% -*- mode: erlang -*-
%% rebar3 configuration for hecate_om
{erl_opts, [debug_info, warnings_as_errors]}.
{deps, [
{macula, "~> 4.7"},
{cowboy, "~> 2.12.0"},
{jsx, "~> 3.1.0"},
%% Pulled in so hecate_om_store can wire CMD/PRJ services
%% canonically (reckon_db_sup:start_store +
%% evoq_store_subscription:start_link). Services that don't
%% use a store (e.g. producer-only clients) inherit these
%% deps but pay only image-size cost; nothing starts unless
%% the service module exports store_id/0 + data_dir/0.
{reckon_db, "~> 5.4"},
{evoq, "~> 1.21"},
{reckon_evoq, "~> 2.6"}
]}.
{project_plugins, [
rebar3_hex,
rebar3_ex_doc
]}.
%% The macula + reckon-db stacks ship to hex WITHOUT debug_info (NIF-heavy
%% libs), so dialyzer can't read their Core Erlang ("Could not get Core
%% Erlang code for ...") and hard-fails on OTP 28. Exclude them from the PLT
%% + analysis; keep the well-behaved deps (cowboy/jsx/ranch) so handler +
%% JSON call sites still type-check. hecate_om's own modules are analysed.
{dialyzer, [
%% no_unknown: the excluded deps' functions (macula:*, reckon_db_*, evoq_*)
%% are necessarily "unknown" once their debug_info-less apps are excluded;
%% suppress those notes while still analysing hecate_om's own code.
{warnings, [no_unknown]},
{exclude_apps, [
macula, macula_envy, macula_mdns,
reckon_db, reckon_evoq, reckon_gater, evoq,
khepri, ra, horus, aten, seshat, gen_batch_server,
gproc, msgpack, any
]}
]}.
{shell, [
{apps, [hecate_om]}
]}.
{hex, [
{name, hecate_om},
{doc, #{provider => ex_doc}},
{licenses, ["Apache-2.0"]},
{links, #{
<<"Codeberg">> => <<"https://codeberg.org/hecate-services/hecate-om">>
}},
{description, "Hecate-over-mesh: shared substrate for hecate-services/hecate-* daemons"}
]}.
{ex_doc, [
{source_url, <<"https://codeberg.org/hecate-services/hecate-om">>},
{extras, ["README.md", "CHANGELOG.md", "LICENSE",
"guides/service_anatomy.md",
"guides/identity_model.md",
"guides/container_deployment.md"]},
{main, "README.md"}
]}.