defmodule AshDispatch.MixProject do
use Mix.Project
@version "0.1.1"
@description "Event-driven notification system for Ash Framework with multiple transport types"
@source_url "https://github.com/Vulcora/ash_dispatch"
def project do
[
app: :ash_dispatch,
version: @version,
elixir: "~> 1.15",
elixirc_paths: elixirc_paths(Mix.env()),
compilers: Mix.compilers() ++ [:ash_dispatch],
start_permanent: Mix.env() == :prod,
description: @description,
package: package(),
deps: deps(),
docs: docs(),
source_url: @source_url,
homepage_url: @source_url,
name: "AshDispatch",
consolidate_protocols: Mix.env() != :dev
]
end
def application do
[
extra_applications: [:logger]
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
# Core dependencies
{:ash, "~> 3.0"},
{:ash_state_machine, "~> 0.2"},
{:oban, "~> 2.0"},
# Data layer (Postgres for persistent storage)
{:ash_postgres, "~> 2.0"},
# SAT solver for Ash policy validation
{:picosat_elixir, "~> 0.2"},
# Optional transport dependencies
{:swoosh, "~> 1.16", optional: true},
{:hackney, "~> 1.9", optional: true},
{:req, "~> 0.5", optional: true},
{:ash_typescript, "~> 0.2", optional: true},
# Development and testing
{:ex_doc, "~> 0.34", only: [:dev, :test], runtime: false},
{:jason, "~> 1.2"},
{:smokestack, "~> 0.8", only: [:test]},
{:faker, "~> 0.18", only: [:test]}
]
end
defp package do
[
name: "ash_dispatch",
licenses: ["MIT"],
links: %{
"GitHub" => @source_url
},
files: ~w(lib .formatter.exs mix.exs README.md LICENSE CHANGELOG.md)
]
end
defp docs do
[
main: "readme",
source_ref: "v#{@version}",
source_url: @source_url,
formatters: ["html"],
extras: [
"README.md",
"CHANGELOG.md",
# Tutorials
"lib/documentation/tutorials/getting-started.md",
"lib/documentation/tutorials/manual-dispatch-and-events.md",
# Topics
"lib/documentation/topics/what-is-ash-dispatch.md",
"lib/documentation/topics/app-integration.md",
"lib/documentation/topics/phoenix-integration.md",
"lib/documentation/topics/counter-broadcasting.md",
"lib/documentation/topics/configuration.md",
"lib/documentation/topics/code-generation.md",
"lib/documentation/topics/generator.md",
"lib/documentation/topics/recipient-resolution.md",
"lib/documentation/topics/recipient-extractor.md",
"lib/documentation/topics/user-preferences.md",
"lib/documentation/topics/oban-configuration.md",
# DSL Reference
"lib/documentation/dsls/DSL-AshDispatch-Resource.md"
],
groups_for_extras: [
Tutorials: ~r/documentation\/tutorials\/.*/,
Topics: ~r/documentation\/topics\/.*/,
"DSL Reference": ~r/documentation\/dsls\/.*/
],
groups_for_modules: [
Core: [
AshDispatch,
AshDispatch.Event,
AshDispatch.Event.RecipientExtractor,
AshDispatch.Dispatcher,
AshDispatch.Context,
AshDispatch.Channel
],
Transports: [
AshDispatch.Transports,
AshDispatch.Transports.Email,
AshDispatch.Transports.InApp,
AshDispatch.Transports.SMS,
AshDispatch.Transports.Webhook,
AshDispatch.Transports.Discord,
AshDispatch.Transports.Slack
],
"Email Backend": [
AshDispatch.EmailBackend,
AshDispatch.EmailBackend.Mock,
AshDispatch.EmailBackend.Swoosh
],
Workers: [
AshDispatch.Workers.SendEmail,
AshDispatch.Workers.SendWebhook,
AshDispatch.Workers.RetryFailedDeliveries
],
Resources: [
AshDispatch.Resources.DeliveryReceipt,
AshDispatch.Resources.Notification
],
"Behaviours & Plugins": [
AshDispatch.RecipientResolver,
AshDispatch.UserPreference,
AshDispatch.Event.Interpolation
],
"DSL & Extensions": [
AshDispatch.Resource,
AshDispatch.Resource.Dsl,
AshDispatch.Dsl.Sections
],
Testing: [
AshDispatch.Test.RecipientResolver,
AshDispatch.Test.UserPreference
]
],
before_closing_head_tag: &before_closing_head_tag/1,
before_closing_body_tag: &before_closing_body_tag/1
]
end
# Inject custom CSS for better docs appearance
defp before_closing_head_tag(:html) do
"""
"""
end
defp before_closing_head_tag(_), do: ""
defp before_closing_body_tag(:html) do
"""
"""
end
defp before_closing_body_tag(_), do: ""
end