prop/mix.exs
Graham McIntire ca0a0eaa50
Unblock CI: pull igniter into :prod for live_table compile
Since da6b312 (Add live_table dep), every main-branch CI build has
silently failed on `mix deps.compile` inside the Docker builder. The
failure is that live_table ships two unguarded mix tasks —
lib/mix/tasks/live_table.install.ex and
lib/mix/tasks/live_table.gen.live.ex — both of which do
`use Igniter.Mix.Task` at the top level without wrapping it in a
`Code.ensure_loaded?(Igniter.Mix.Task)` check. When Igniter isn't
available, compiling the live_table dep blows up with
`module Igniter.Mix.Task is not loaded`.

I had declared igniter as `only: [:dev, :test], runtime: false`
which meant it was only fetched in those envs, so the prod Docker
build never had it and failed there. The blast radius is every
commit from da6b312 through 263c1bb (14 commits) none of which ever
made it to prod:

  - /users, /beacons, /contacts, /admin/contact-edits live_table
    conversions
  - Admin nav dropdown
  - Cap "Contacts I'm in" at 100
  - Contact detail path-calc link + 10 ft AGL assumption
  - Path calculator callsign tooltip
  - Drop gridmap.org and do QRZ + Google geocoding locally
  - Feed Loss (×) HEEx escape fix
  - Path forecast line chart and refractivity gradient unit fix
  - Float.round/2 crash fix on clear-terrain diffraction loss

Drop the env restriction on igniter so it's available to the prod
build as well. `runtime: false` keeps it out of the release bundle
so there's no runtime bloat, it's strictly a compile-time build
tool for the live_table dep.

Verified locally with a clean `_build/prod` + `MIX_ENV=prod mix
deps.compile` (all 54 deps including live_table now build) and the
full test suite still passes.
2026-04-12 17:58:13 -05:00

119 lines
4.2 KiB
Elixir

defmodule Microwaveprop.MixProject do
use Mix.Project
def project do
[
app: :microwaveprop,
version: "0.1.0",
elixir: "~> 1.15",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
compilers: [:phoenix_live_view] ++ Mix.compilers(),
listeners: [Phoenix.CodeReloader],
dialyzer: [
plt_add_apps: [:mix, :ex_unit],
plt_file: {:no_warn, "priv/plts/project.plt"}
]
]
end
# Configuration for the OTP application.
#
# Type `mix help compile.app` for more information.
def application do
[
mod: {Microwaveprop.Application, []},
extra_applications: [:logger, :runtime_tools, :os_mon, :xmerl]
]
end
def cli do
[
preferred_envs: [precommit: :test]
]
end
# Specifies which paths to compile per environment.
defp elixirc_paths(:test), do: ["lib", "lib_ml", "test/support"]
defp elixirc_paths(:dev), do: ["lib", "lib_ml"]
defp elixirc_paths(_), do: ["lib"]
# Specifies your project dependencies.
#
# Type `mix help deps` for examples and options.
defp deps do
[
{:bcrypt_elixir, "~> 3.0"},
{:phoenix, "~> 1.8.3"},
{:phoenix_ecto, "~> 4.5"},
{:ecto_sql, "~> 3.13"},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, "~> 4.1"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 1.1.0"},
{:lazy_html, ">= 0.1.0", only: :test},
{:stream_data, "~> 1.0", only: :test},
{:live_stash, "~> 0.1"},
{:phoenix_live_dashboard, "~> 0.8.3"},
{:esbuild, "~> 0.10", runtime: Mix.env() == :dev},
{:tailwind, "~> 0.3", runtime: Mix.env() == :dev},
{:heroicons,
github: "tailwindlabs/heroicons", tag: "v2.2.0", sparse: "optimized", app: false, compile: false, depth: 1},
{:swoosh, "~> 1.16"},
{:gen_smtp, "~> 1.2"},
{:req, "~> 0.5"},
{:telemetry_metrics, "~> 1.0"},
{:telemetry_poller, "~> 1.0"},
{:gettext, "~> 0.26"},
{:jason, "~> 1.2"},
{:bandit, "~> 1.5"},
{:styler, "~> 1.11", only: [:dev, :test], runtime: false},
{:oban, "~> 2.21"},
{:oban_met, "~> 1.0", path: "vendor/oban_met", override: true},
{:oban_pro, "~> 1.6", path: "vendor/oban_pro"},
{:oban_web, "~> 2.12", path: "vendor/oban_web", override: true},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:nx, "~> 0.9", only: [:dev, :test]},
{:axon, "~> 0.7", only: [:dev, :test]},
{:exla, "~> 0.9", only: [:dev, :test]},
{:polaris, "~> 0.1", only: [:dev, :test]},
{:tidewave, "~> 0.5", only: :dev},
{:libcluster, "~> 3.4"},
{:ecto_psql_extras, "~> 0.8"},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:live_table, "~> 0.4.1"},
{:sutra_ui, "~> 0.3.0"},
# Required as a compile-time build dependency for live_table; its mix
# tasks (lib/mix/tasks/live_table.gen.live.ex, live_table.install.ex)
# unconditionally `use Igniter.Mix.Task` so the dep has to exist in
# every env live_table is compiled in, not just dev/test. runtime: false
# keeps it out of the release bundle.
{:igniter, "~> 0.7", runtime: false}
]
end
# Aliases are shortcuts or tasks specific to the current project.
# For example, to install project dependencies and perform other setup tasks, run:
#
# $ mix setup
#
# See the documentation for `Mix` for more info on aliases.
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 --quiet", "test"],
"assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"],
"assets.build": ["compile", "tailwind microwaveprop", "esbuild microwaveprop"],
"assets.deploy": [
"tailwind microwaveprop --minify",
"esbuild microwaveprop --minify",
"phx.digest"
],
precommit: ["compile --warnings-as-errors", "deps.unlock --unused", "format", "test"]
]
end
end