Ctrl K
ComunidadGuías…

elixir/mix.exs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
defmodule Portal.MixProject do
  use Mix.Project

  def cli do
    [
      preferred_envs: [
        coveralls: :test,
        "coveralls.detail": :test,
        "coveralls.post": :test,
        "coveralls.html": :test
      ]
    ]
  end

  def project do
    [
      app: :portal,
      version: version(),
      elixir: "~> 1.15",
      elixirc_paths: elixirc_paths(Mix.env()),
      start_permanent: Mix.env() == :prod,
      test_coverage: [tool: ExCoveralls],
      test_ignore_filters: [~r"^test/fixtures/"],
      listeners: listeners(),
      docs: [
        logo: "assets/static/images/logo.svg",
        extras: ["docs/README.md", "docs/SECURITY.md", "docs/CONTRIBUTING.md"]
      ],
      deps: deps(),
      dialyzer: [
        plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
        plt_add_apps: [:mix, :credo],
        ignore_warnings: ".dialyzer_ignore.exs"
      ],
      aliases: aliases(),
      releases: releases()
    ]
  end

  def application do
    [
      mod: {Portal.Application, []},
      extra_applications: [
        :logger,
        :runtime_tools,
        :crypto,
        :os_mon,
        :dialyzer,
        # Ensure Postgrex.SCRAM.LockedCache is started before any database connections
        :postgrex
      ]
    ]
  end

  defp elixirc_paths(:test), do: ["lib", "portal_dev", "test/support", ".credo"]
  defp elixirc_paths(:dev), do: ["lib", "portal_dev", ".credo"]
  defp elixirc_paths(_), do: ["lib"]

  defp listeners do
    System.get_env()
    |> Enum.any?(fn {key, _val} -> String.starts_with?(key, "DEPENDABOT") end)
    |> case do
      true -> []
      false -> [Phoenix.CodeReloader]
    end
  end

  defp deps do
    [
      # Ecto / Database
      {:postgrex, "~> 0.20"},
      {:ecto_sql, "~> 3.7"},
      {:ecto_psql_extras, "~> 0.8"},
      {:phoenix_ecto, "~> 4.4"},

      # Phoenix / Plug
      {:phoenix, "~> 1.8"},
      {:phoenix_pubsub, "~> 2.0"},
      {:phoenix_html, "~> 4.0"},
      {:phoenix_template, "~> 1.1.0"},
      {:phoenix_live_view, "~> 1.1"},
      {:phoenix_live_dashboard, "~> 0.8"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:bandit, "~> 1.3"},
      {:plug, "~> 1.15"},
      {:gettext, "~> 1.0"},
      {:remote_ip, "~> 1.1"},

      # Auth
      {:plug_crypto, "~> 2.0"},
      {:jose, "~> 1.11"},
      {:argon2_elixir, "~> 4.0"},

      # Background jobs
      {:oban, "~> 2.22"},
      {:oban_web, "~> 2.11"},

      # Erlang clustering
      {:libcluster, "~> 3.3"},
      {:tz, "~> 0.28"},
      {:tz_extra, "~> 0.45"},

      # Email
      {:gen_smtp, "~> 1.0"},
      {:swoosh, "~> 1.29.0"},
      {:phoenix_swoosh, "~> 1.0"},

      # IP Geolocation
      {:geolix, "~> 2.0"},
      {:geolix_adapter_mmdb2, "~> 0.6"},

      # API / OpenAPI
      {:open_api_spex, "~> 3.22.0"},
      {:ymlr, "~> 5.0"},
      {:hammer, "~> 7.5.0"},

      # AWS request signing
      {:aws_signature, "~> 0.4"},

      # Observability
      {:telemetry, "~> 1.0"},
      {:telemetry_poller, "~> 1.0"},
      {:telemetry_metrics, "~> 1.0"},
      {:recon, "~> 2.5"},
      {:observer_cli, "~> 2.0"},
      {:opentelemetry, "~> 1.5"},
      {:opentelemetry_logger_metadata, "~> 0.2.0"},
      {:opentelemetry_api_experimental,
       github: "open-telemetry/opentelemetry-erlang",
       sparse: "apps/opentelemetry_api_experimental",
       ref: "98be90e6",
       override: true},
      {:opentelemetry_experimental,
       github: "open-telemetry/opentelemetry-erlang",
       sparse: "apps/opentelemetry_experimental",
       ref: "98be90e6",
       override: true},
      {:opentelemetry_exporter, "~> 1.8"},
      {:opentelemetry_ecto, "~> 1.2"},
      {:opentelemetry_oban, "~> 1.2.0"},
      {:opentelemetry_telemetry, "~> 1.1", override: true},
      {:opentelemetry_bandit, "~> 0.3"},
      {:opentelemetry_phoenix, "~> 2.0"},
      {:nimble_options, "~> 1.0", override: true},

      # TODO: Remove override when this issue is resolved:
      # https://github.com/open-telemetry/opentelemetry-erlang-contrib/issues/428
      {:opentelemetry_semantic_conventions, "~> 1.27", override: true},
      {:sentry, "~> 14.0"},
      {:logger_json, "~> 7.0"},
      {:req, "~> 0.7.2"},

      # Asset pipeline
      {:esbuild, "~> 0.7", runtime: Mix.env() == :dev},
      {:tailwind, "~> 0.5.1", runtime: Mix.env() == :dev},
      {:remixicons,
       github: "Remix-Design/RemixIcon",
       sparse: "icons",
       tag: "v4.9.1",
       app: false,
       compile: false,
       depth: 1},

      # Test deps
      {:floki, "~> 0.38.0", only: :test},
      {:lazy_html, ">= 0.1.0", only: :test},
      {:excoveralls, "~> 0.18", only: :test},
      {:junit_formatter, "~> 3.3", only: :test},

      # Dev/test deps
      {:credo, "~> 1.5", only: [:dev, :test], runtime: false},
      {:dialyxir, "~> 1.1", only: [:dev, :test], runtime: false},
      {:mix_audit, "~> 2.1", only: [:dev, :test]},
      {:sobelow, "~> 0.12", only: [:dev, :test]}
    ]
  end

  defp aliases do
    [
      setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"],
      "ecto.migrate": [
        "ecto.migrate --migrations-path priv/repo/migrations --migrations-path priv/repo/manual_migrations"
      ],
      "ecto.rollback": [
        "ecto.rollback --migrations-path priv/repo/migrations --migrations-path priv/repo/manual_migrations"
      ],
      "ecto.seed": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
      "ecto.setup": ["ecto.create", "ecto.migrate"],
      "ecto.reset": ["ecto.drop", "ecto.setup"],
      reboot: ["ecto.reset", "run priv/repo/seeds.exs", "start"],
      sobelow: [
        "sobelow --skip -i Config.HTTPS,Config.Secrets,Config.CSWH,Config.CSRFRoute,Config.Headers --ignore-files lib/portal/dev/account_population.ex"
      ],
      "assets.setup": [
        "cmd --shell cd assets && CI=true pnpm i",
        "tailwind.install --if-missing",
        "esbuild.install --if-missing"
      ],
      "assets.build": ["tailwind portal", "esbuild portal"],
      "assets.deploy": ["tailwind portal --minify", "esbuild portal --minify", "phx.digest"],
      "phx.server": ["ecto.create --quiet", "ecto.migrate", "phx.server"],
      "openapi.generate": [
        "openapi.spec.json --spec PortalAPI.ApiSpec --pretty=true --vendor-extensions=false --filename priv/static/openapi.json --no-start-app"
      ],
      test: ["ecto.create --quiet", "ecto.migrate", "openapi.generate", "test"],
      start: ["compile --no-validate-compile-env", "phx.server", "run --no-halt"]
    ]
  end

  defp releases do
    [
      portal: [
        include_executables_for: [:unix],
        validate_compile_env: true,
        applications: [
          portal: :permanent,
          opentelemetry_exporter: :permanent,
          opentelemetry_experimental: :permanent,
          opentelemetry: :temporary
        ]
      ]
    ]
  end

  defp version do
    sha = System.get_env("GIT_SHA", "dev") |> String.trim()
    "0.1.0+#{sha}"
  end
end