| defmodule Plausible.MixProject do |
| use Mix.Project |
|
|
| def project do |
| [ |
| name: "Plausible", |
| source_url: "https://github.com/plausible/analytics", |
| docs: docs(), |
| app: :plausible, |
| version: System.get_env("APP_VERSION", "0.0.1"), |
| elixir: "~> 1.18", |
| elixirc_paths: elixirc_paths(Mix.env()), |
| start_permanent: Mix.env() in [:prod, :ce, :load], |
| aliases: aliases(), |
| deps: deps(), |
| test_coverage: [ |
| tool: ExCoveralls |
| ], |
| listeners: [Phoenix.CodeReloader], |
| releases: [ |
| plausible: [ |
| include_executables_for: [:unix], |
| config_providers: [ |
| {Config.Reader, |
| path: {:system, "RELEASE_ROOT", "/import_extra_config.exs"}, imports: []} |
| ] |
| ] |
| ], |
| dialyzer: [ |
| plt_file: {:no_warn, "priv/plts/dialyzer.plt"}, |
| plt_add_apps: [:mix, :ex_unit] |
| ] |
| ] |
| end |
|
|
| |
| |
| |
| def application do |
| [ |
| mod: {Plausible.Application, []}, |
| extra_applications: |
| [ |
| :logger, |
| :runtime_tools, |
| :tls_certificate_check, |
| :opentelemetry_exporter |
| ] ++ if(Mix.env() in [:dev, :load], do: [:tools, :observer, :wx], else: []) |
| ] |
| end |
|
|
| def cli do |
| [ |
| preferred_envs: [ |
| "test.e2e": :e2e_test, |
| "test.e2e.ui": :e2e_test |
| ] |
| ] |
| end |
|
|
| |
| defp elixirc_paths(env) when env in [:test, :e2e_test, :dev], |
| do: ["lib", "test/support", "extra/lib"] |
|
|
| defp elixirc_paths(env) when env in [:ce_test, :ce_dev], |
| do: ["lib", "test/support"] |
|
|
| defp elixirc_paths(:ce), do: ["lib"] |
| defp elixirc_paths(_), do: ["lib", "extra/lib"] |
|
|
| |
| |
| |
| defp deps do |
| [ |
| {:bamboo, "~> 2.3", override: true}, |
| {:bamboo_postmark, git: "https://github.com/plausible/bamboo_postmark.git", branch: "main"}, |
| {:bamboo_mua, "~> 0.2.0"}, |
| {:bcrypt_elixir, "~> 3.3"}, |
| {:bypass, "~> 2.1", only: [:dev, :test, :ce_test, :e2e_test]}, |
| {:ecto_ch, "~> 0.8.6"}, |
| {:cloak, "~> 1.1"}, |
| {:cloak_ecto, "~> 1.2"}, |
| {:combination, "~> 0.0.3"}, |
| {:cors_plug, "~> 3.0"}, |
| {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, |
| {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, |
| {:double, "~> 0.8.0", only: [:dev, :test, :ce_test, :ce_dev, :e2e_test]}, |
| {:ecto, "~> 3.13.5"}, |
| {:ecto_sql, "~> 3.13.2"}, |
| {:envy, "~> 1.1.1"}, |
| {:eqrcode, "~> 0.2.1"}, |
| {:ex_machina, "~> 2.3", only: [:dev, :test, :ce_dev, :ce_test, :e2e_test]}, |
| {:excoveralls, "~> 0.10", only: :test}, |
| {:finch, "~> 0.23"}, |
| {:lazy_html, "~> 0.1.8"}, |
| {:fun_with_flags, "~> 1.13.0"}, |
| {:fun_with_flags_ui, "~> 1.0"}, |
| {:locus, "~> 2.3"}, |
| {:gen_cycle, "~> 1.0.4"}, |
| {:hackney, "~> 1.8"}, |
| {:jason, "~> 1.3"}, |
| {:location, git: "https://github.com/plausible/location.git"}, |
| {:mox, "~> 1.0", only: [:test, :ce_test, :e2e_test]}, |
| {:nanoid, "~> 2.1.0"}, |
| {:nimble_totp, "~> 1.0"}, |
| {:oban, "~> 2.20.1"}, |
| {:observer_cli, "~> 1.7"}, |
| {:opentelemetry, "~> 1.7"}, |
| {:opentelemetry_api, "~> 1.5"}, |
| {:opentelemetry_api_experimental, |
| git: "https://github.com/open-telemetry/opentelemetry-erlang.git", |
| ref: "b241ebf4feb7558738d009583bae8602b3c49fd0", |
| sparse: "apps/opentelemetry_api_experimental", |
| override: true}, |
| {:opentelemetry_ecto, "~> 1.2"}, |
| {:opentelemetry_exporter, "~> 1.10"}, |
| {:opentelemetry_experimental, |
| git: "https://github.com/open-telemetry/opentelemetry-erlang.git", |
| ref: "b241ebf4feb7558738d009583bae8602b3c49fd0", |
| sparse: "apps/opentelemetry_experimental", |
| override: true}, |
| {:opentelemetry_phoenix, "~> 2.0.1"}, |
| {:opentelemetry_oban, "~> 1.1"}, |
| {:opentelemetry_cowboy, "~> 1.0"}, |
| |
| {:opentelemetry_semantic_conventions, "~> 1.27", override: true}, |
| {:phoenix, "~> 1.8.2"}, |
| {:phoenix_view, "~> 2.0"}, |
| {:phoenix_ecto, "~> 4.5"}, |
| {:phoenix_html, "~> 4.1"}, |
| {:phoenix_live_reload, "~> 1.2", only: [:dev, :ce_dev]}, |
| {:phoenix_pubsub, "~> 2.0"}, |
| {:phoenix_live_view, "~> 1.1.17"}, |
| {:php_serializer, "~> 2.0"}, |
| {:plug, "~> 1.13", override: true}, |
| {:prima, "~> 0.2.6"}, |
| {:plug_cowboy, "~> 2.3"}, |
| {:polymorphic_embed, "~> 5.0"}, |
| {:postgrex, "~> 0.22.2"}, |
| {:prom_ex, "~> 1.8"}, |
| {:peep, "~> 3.0"}, |
| {:public_suffix, git: "https://github.com/axelson/publicsuffix-elixir"}, |
| {:recon, "~> 2.5"}, |
| {:ref_inspector, "~> 2.0"}, |
| {:referrer_blocklist, git: "https://github.com/plausible/referrer-blocklist.git"}, |
| {:sentry, "~> 11.0.4"}, |
| {:simple_saml, "~> 1.2"}, |
| {:xml_builder, "~> 2.1"}, |
| {:siphash, "~> 3.2"}, |
| {:timex, "~> 3.7"}, |
| {:ua_inspector, "~> 3.12"}, |
| {:ex_doc, "~> 0.28", only: :dev, runtime: false}, |
| {:ex_money, "~> 5.24.2"}, |
| {:mjml_eex, "~> 0.12.0"}, |
| {:mjml, "~> 4.0.0"}, |
| {:heroicons, "~> 0.5.0"}, |
| {:zxcvbn, git: "https://github.com/techgaun/zxcvbn-elixir.git"}, |
| {:open_api_spex, "~> 3.22.1"}, |
| {:joken, "~> 2.5"}, |
| {:paginator, git: "https://github.com/duffelhq/paginator.git"}, |
| {:esbuild, "~> 0.7", runtime: Mix.env() in [:dev, :ce_dev]}, |
| {:tailwind, "~> 0.4.0", runtime: Mix.env() in [:dev, :ce_dev]}, |
| {:ex_json_logger, "~> 1.4.0"}, |
| {:ecto_network, "~> 1.6.0"}, |
| {:ex_aws, "~> 2.5"}, |
| {:ex_aws_s3, "~> 2.5"}, |
| {:sweet_xml, "~> 0.7.4"}, |
| {:zstream, "~> 0.6.4"}, |
| {:con_cache, |
| git: "https://github.com/aerosol/con_cache", branch: "ensure-dirty-ops-emit-telemetry"}, |
| {:req, "~> 0.6"}, |
| {:opentelemetry_req, "~> 1.0"}, |
| {:happy_tcp, github: "ruslandoga/happy_tcp", only: [:ce, :ce_dev, :ce_test, :e2e_test]}, |
| {:ex_json_schema, "~> 0.11.1"}, |
| {:odgn_json_pointer, "~> 3.1.0"}, |
| {:phoenix_bakery, "~> 0.1.2", only: [:ce, :ce_dev, :ce_test, :e2e_test]}, |
| {:site_encrypt, github: "sasa1977/site_encrypt", only: [:ce, :ce_dev, :ce_test, :e2e_test]}, |
| {:phoenix_html_helpers, "~> 1.0"}, |
| {:libcluster, "~> 3.5"}, |
| {:decimal, "~> 3.0", override: true}, |
| {:logger_backends, "~> 1.0.0"} |
| ] |
| end |
|
|
| defp aliases do |
| [ |
| setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"], |
| "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"], |
| "ecto.reset": ["ecto.drop", "ecto.setup"], |
| test: ["ecto.create --quiet", "ecto.migrate", "test", "clean_clickhouse"], |
| "e2e.setup": [ |
| "cmd npm install --prefix ./e2e", |
| "cmd npm exec playwright install --with-deps chromium --prefix ./e2e" |
| ], |
| |
| |
| |
| "test.e2e": [ |
| "esbuild default", |
| "ecto.create --quiet", |
| "ecto.migrate", |
| "clean_postgres", |
| "clean_clickhouse", |
| "cmd npm run --prefix ./e2e test -- " |
| ], |
| "assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"], |
| "assets.typecheck": ["cmd npm --prefix assets run typecheck"], |
| "assets.build": [ |
| "tailwind default", |
| "esbuild default" |
| ], |
| "assets.deploy": [ |
| "tailwind default --minify", |
| "esbuild default --minify", |
| "phx.digest" |
| ] |
| ] |
| end |
|
|
| defp docs do |
| [ |
| main: "readme", |
| logo: "priv/static/images/ee/favicon-32x32.png", |
| extras: |
| Path.wildcard("guides/**/*.md") ++ |
| [ |
| "README.md": [filename: "readme", title: "Introduction"], |
| "CONTRIBUTING.md": [filename: "contributing", title: "Contributing"] |
| ], |
| groups_for_extras: [ |
| Features: Path.wildcard("guides/features/*.md") |
| ], |
| before_closing_body_tag: fn |
| :html -> |
| """ |
| <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script> |
| <script>mermaid.initialize({startOnLoad: true})</script> |
| """ |
|
|
| _ -> |
| "" |
| end |
| ] |
| end |
| end |
|
|