Current section
Files
Jump to
Current section
Files
mix.exs
defmodule FlowStone.MixProject do
use Mix.Project
@version "0.2.0"
@source_url "https://github.com/nshkrdotcom/flowstone"
def project do
[
app: :flowstone,
version: @version,
elixir: "~> 1.15",
start_permanent: Mix.env() == :prod,
deps: deps(),
aliases: aliases(),
elixirc_paths: elixirc_paths(Mix.env()),
# Hex.pm
name: "FlowStone",
description: description(),
package: package(),
docs: docs(),
# Testing
test_coverage: [tool: ExCoveralls],
preferred_cli_env: [
coveralls: :test,
"coveralls.detail": :test,
"coveralls.post": :test,
"coveralls.html": :test
],
# Dialyzer
dialyzer: [
plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
plt_add_apps: [:mix, :ex_unit]
]
]
end
def application do
[
extra_applications: [:logger],
mod: {FlowStone.Application, []}
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
# Core dependencies
{:ecto_sql, "~> 3.11"},
{:postgrex, "~> 0.17"},
{:oban, "~> 2.18"},
{:jason, "~> 1.4"},
# Phoenix / LiveView (optional for UI)
{:phoenix, "~> 1.7", optional: true},
{:phoenix_live_view, "~> 1.0", optional: true},
{:phoenix_pubsub, "~> 2.1"},
# HTTP client for integrations
{:req, "~> 0.5"},
# Rate limiting
{:hammer, "~> 6.2"},
# Telemetry
{:telemetry, "~> 1.2"},
{:telemetry_metrics, "~> 1.0"},
{:telemetry_poller, "~> 1.1"},
# Data formats
{:explorer, "~> 0.9", optional: true},
# AWS/S3 support
{:ex_aws, "~> 2.5", optional: true},
{:ex_aws_s3, "~> 2.5", optional: true},
# Testing
{:supertester, "~> 0.3", only: :test},
{:mox, "~> 1.1", only: :test},
{:stream_data, "~> 1.1", only: [:dev, :test]},
{:excoveralls, "~> 0.18", only: :test},
{:crontab, "~> 1.1"},
# Development
{:ex_doc, "~> 0.31", only: :dev, runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false}
]
end
defp aliases do
[
setup: ["deps.get"],
test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"],
quality: ["format --check-formatted", "credo --strict", "dialyzer"]
]
end
defp description do
"""
Asset-first data orchestration framework for Elixir/BEAM.
"""
end
defp package do
[
name: "flowstone",
files: ~w(lib priv assets .formatter.exs mix.exs README.md LICENSE CHANGELOG.md),
licenses: ["MIT"],
links: %{
"GitHub" => @source_url,
"Changelog" => "#{@source_url}/blob/main/CHANGELOG.md",
"Documentation" => "https://hexdocs.pm/flowstone"
},
maintainers: ["nshkrdotcom"]
]
end
defp docs do
[
main: "readme",
name: "FlowStone",
source_ref: "v#{@version}",
source_url: @source_url,
assets: %{"assets" => "assets"},
extras: [
{"README.md", [filename: "readme"]},
"CHANGELOG.md",
"LICENSE",
"docs/design/OVERVIEW.md",
{"docs/adr/README.md", [filename: "adr-overview"]},
"docs/adr/0001-asset-first-orchestration.md",
"docs/adr/0002-dag-engine-persistence.md",
"docs/adr/0003-partitioning-isolation.md",
"docs/adr/0004-io-manager-abstraction.md",
"docs/adr/0005-checkpoint-approval-gates.md",
"docs/adr/0006-oban-job-execution.md",
"docs/adr/0007-scheduling-sensors.md",
"docs/adr/0008-resource-injection.md",
"docs/adr/0009-error-handling.md",
"docs/adr/0010-elixir-dsl-not-yaml.md",
"docs/adr/0011-observability-telemetry.md",
"docs/adr/0012-liveview-ui.md",
"docs/adr/0013-testing-strategies.md",
"docs/adr/0014-lineage-reporting.md",
"docs/adr/0015-external-integrations.md"
],
groups_for_extras: [
"Architecture Decision Records": Path.wildcard("docs/adr/*.md"),
Design: ["docs/design/OVERVIEW.md"]
],
groups_for_modules: [
Core: [
FlowStone,
FlowStone.Asset,
FlowStone.Pipeline,
FlowStone.Context,
FlowStone.Materialization
],
DAG: [
FlowStone.DAG,
FlowStone.DAG.Builder
],
Execution: [
FlowStone.Materializer,
FlowStone.Workers.AssetWorker,
FlowStone.Workers.CheckpointTimeout
],
"I/O Managers": [
FlowStone.IO,
FlowStone.IO.Manager,
FlowStone.IO.Memory,
FlowStone.IO.Postgres,
FlowStone.IO.S3,
FlowStone.IO.Parquet
],
Scheduling: [
FlowStone.Schedule,
FlowStone.Sensor,
FlowStone.Sensors.S3FileArrival,
FlowStone.Sensors.DatabaseChange
],
Checkpoints: [
FlowStone.Checkpoint,
FlowStone.Checkpoint.Notifier
],
Resources: [
FlowStone.Resource,
FlowStone.Resources
],
Lineage: [
FlowStone.Lineage,
FlowStone.Lineage.Recorder,
FlowStone.Lineage.Invalidation
],
Observability: [
FlowStone.Telemetry,
FlowStone.Logger,
FlowStone.AuditLog
],
Errors: [
FlowStone.Error,
FlowStone.Error.Formatter
],
Testing: [
FlowStone.AssetCase,
FlowStone.Test.Fixtures
]
]
]
end
end