Skip to main content

rebar.config

%% -*- 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"}
]}.