defmodule Snakepit.MixProject do use Mix.Project @version "0.6.4" @source_url "https://github.com/nshkrdotcom/snakepit" def project do [ app: :snakepit, version: @version, elixir: "~> 1.18", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), description: description(), package: package(), deps: deps(), dialyzer: dialyzer(), docs: docs(), aliases: aliases(), name: "Snakepit", source_url: @source_url, homepage_url: @source_url ] end # Run "mix help compile.app" to learn about applications. def application do [ extra_applications: [:logger], mod: {Snakepit.Application, []} ] end # Run "mix help deps" to learn about dependencies. defp deps do [ {:jason, "~> 1.0"}, {:grpc, "~> 0.10.2"}, {:protobuf, "~> 0.14.1"}, {:telemetry_metrics, "~> 1.0"}, {:telemetry_poller, "~> 1.0"}, {:telemetry_metrics_prometheus, "~> 1.1"}, {:opentelemetry, "~> 1.3"}, {:opentelemetry_exporter, "~> 1.6"}, {:opentelemetry_telemetry, "~> 1.0"}, {:stream_data, "~> 1.0", only: [:test]}, {:supertester, "~> 0.2.0", only: :test}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, {:ex_doc, "~> 0.34", only: :dev, runtime: false} ] end defp description do """ High-performance pooler and session manager for external language integrations. Supports Python, Node.js, Ruby, and more with gRPC streaming, session management, and production-ready process cleanup. """ end defp package do [ name: "snakepit", description: description(), licenses: ["MIT"], maintainers: ["nshkrdotcom"], links: %{ "GitHub" => @source_url, "Online documentation" => "https://hexdocs.pm/snakepit", "Architecture Guide" => "https://hexdocs.pm/snakepit/ARCHITECTURE.html", "gRPC Streaming Guide" => "https://hexdocs.pm/snakepit/README_GRPC.html", "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md" }, files: [ "lib", "priv/proto", "priv/python/*.py", "priv/python/requirements*.txt", "priv/python/setup.py", "priv/python/snakepit_bridge", "assets", "guides", # Current documentation "docs/GRPC_QUICK_REFERENCE.md", "docs/TEST_AND_EXAMPLE_STATUS.md", "docs/EXAMPLE_TEST_RESULTS.md", "docs/ECOSYSTEM_ARCHITECTURE.md", "docs/DSPEX_PRODUCTION_STRATEGY.md", "docs/code-standards", "docs/architecture", # Build configuration ".formatter.exs", "mix.exs", # Root documentation "README.md", "README_GRPC.md", "README_BIDIRECTIONAL_TOOL_BRIDGE.md", "README_PROCESS_MANAGEMENT.md", "README_TESTING.md", "README_UNIFIED_GRPC_BRIDGE.md", "ARCHITECTURE.md", "DIAGS.md", "DIAGS2.md", "LICENSE*", "CHANGELOG.md" ], exclude_patterns: [ "**/__pycache__", "**/*.pyc", "**/*.egg-info", "**/*.bak", "priv/plts", "priv/data", "docs/archive", "priv/python/snakepit_bridge/__pycache__", "priv/python/snakepit_bridge/adapters/__pycache__", "priv/python/snakepit_bridge/adapters/showcase/__pycache__", "priv/python/snakepit_bridge/adapters/showcase/handlers/__pycache__" ] ] end defp dialyzer do [ plt_add_apps: [:mix], plt_core_path: "priv/plts", plt_file: {:no_warn, "priv/plts/dialyzer.plt"} ] end defp docs do [ main: "readme", name: "Snakepit", source_ref: "v#{@version}", source_url: @source_url, homepage_url: @source_url, assets: %{"assets" => "assets"}, logo: "assets/snakepit-logo.svg", extras: [ # Main documentation "README.md", "CHANGELOG.md", # Getting started {"guides/INSTALLATION.md", title: "Installation Guide"}, # Core documentation {"ARCHITECTURE.md", title: "System Architecture"}, {"DIAGS.md", title: "Performance Architecture"}, {"DIAGS2.md", title: "Architecture Diagrams"}, # Feature documentation {"README_GRPC.md", title: "gRPC Streaming Guide"}, {"README_BIDIRECTIONAL_TOOL_BRIDGE.md", title: "Bidirectional Tool Bridge"}, {"README_PROCESS_MANAGEMENT.md", title: "Process Management"}, {"README_UNIFIED_GRPC_BRIDGE.md", title: "Unified gRPC Bridge"}, {"README_TESTING.md", title: "Testing Guide"}, # Reference documentation {"docs/GRPC_QUICK_REFERENCE.md", title: "gRPC Quick Reference"}, {"docs/TEST_AND_EXAMPLE_STATUS.md", title: "Test & Example Status"}, {"docs/EXAMPLE_TEST_RESULTS.md", title: "Example Test Results"}, {"docs/ECOSYSTEM_ARCHITECTURE.md", title: "Ecosystem Architecture"}, {"docs/DSPEX_PRODUCTION_STRATEGY.md", title: "DSPex Production Strategy"}, # v0.6.0 Documentation {"docs/migration_v0.5_to_v0.6.md", title: "Migration Guide (v0.5 to v0.6)"}, {"docs/performance_benchmarks.md", title: "Performance Benchmarks"}, {"docs/telemetry_events.md", title: "Telemetry Events Reference"}, {"docs/guides/writing_thread_safe_adapters.md", title: "Writing Thread-Safe Adapters"}, {"priv/python/README_THREADING.md", title: "Python Threading Guide"}, # Advanced topics {"docs/code-standards/test-architecture-supertester.md", title: "Test Architecture"}, {"docs/architecture/adr-001-worker-starter-supervision-pattern.md", title: "ADR-001: Worker Starter Pattern"} ], groups_for_extras: [ "Getting Started": [ "guides/INSTALLATION.md", "docs/migration_v0.5_to_v0.6.md" ], Guides: [ "README.md", "docs/guides/writing_thread_safe_adapters.md", "priv/python/README_THREADING.md" ], Features: [ "README_GRPC.md", "README_BIDIRECTIONAL_TOOL_BRIDGE.md", "README_PROCESS_MANAGEMENT.md", "README_UNIFIED_GRPC_BRIDGE.md" ], Architecture: [ "ARCHITECTURE.md", "DIAGS.md", "DIAGS2.md" ], Testing: [ "README_TESTING.md", "docs/TEST_AND_EXAMPLE_STATUS.md", "docs/EXAMPLE_TEST_RESULTS.md", "docs/code-standards/test-architecture-supertester.md" ], Reference: [ "docs/GRPC_QUICK_REFERENCE.md", "docs/telemetry_events.md", "docs/performance_benchmarks.md", "docs/ECOSYSTEM_ARCHITECTURE.md", "docs/DSPEX_PRODUCTION_STRATEGY.md" ], Advanced: [ "docs/architecture/adr-001-worker-starter-supervision-pattern.md" ], "Release Notes": [ "CHANGELOG.md" ] ], groups_for_modules: [ "Core API": [ Snakepit, Snakepit.Adapter, Snakepit.SessionHelpers ], "Pool Management": [ Snakepit.Pool, Snakepit.Pool.WorkerSupervisor, Snakepit.Pool.Worker.Starter ], Workers: [ Snakepit.GRPCWorker ], "Session & State": [ Snakepit.Bridge.SessionStore, Snakepit.Bridge.Session ], Adapters: [ Snakepit.Adapters.GRPCPython ], "Process Management": [ Snakepit.Pool.ProcessRegistry, Snakepit.Pool.ApplicationCleanup, Snakepit.ProcessKiller ], Registry: [ Snakepit.Pool.Registry, Snakepit.Pool.Worker.StarterRegistry ], "gRPC & Bridge": [ Snakepit.GRPC.BridgeServer, Snakepit.GRPC.Client, Snakepit.GRPC.Endpoint, Snakepit.Bridge.ToolRegistry ], Utilities: [ Snakepit.Telemetry, Snakepit.Utils, Snakepit.RunID ] ], before_closing_head_tag: &docs_before_closing_head_tag/1, before_closing_body_tag: &docs_before_closing_body_tag/1 ] end defp docs_before_closing_head_tag(:html) do """ """ end defp docs_before_closing_head_tag(_), do: "" defp docs_before_closing_body_tag(:html) do """ """ end defp docs_before_closing_body_tag(_), do: "" defp aliases do [ "grpc.gen": [ "cmd mkdir -p lib/snakepit/grpc/generated", "cmd protoc --elixir_out=plugins=grpc:./lib/snakepit/grpc/generated --proto_path=priv/proto priv/proto/snakepit_bridge.proto" ] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] end