Skip to content

Commit 3a8a7ef

Browse files
committed
Ensure structs can be in release configs, closes #11364
1 parent 3d03868 commit 3a8a7ef

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

lib/mix/lib/mix/release.ex

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -457,13 +457,12 @@ defmodule Mix.Release do
457457
end
458458
end
459459

460-
defp valid_config?(n) when is_number(n), do: true
461-
defp valid_config?(a) when is_atom(a), do: true
462-
defp valid_config?(b) when is_binary(b), do: true
460+
defp valid_config?(m) when is_map(m),
461+
do: Enum.all?(Map.delete(m, :__struct__), &valid_config?/1)
462+
463463
defp valid_config?(l) when is_list(l), do: Enum.all?(l, &valid_config?/1)
464-
defp valid_config?(m) when is_map(m), do: Enum.all?(m, &valid_config?/1)
465464
defp valid_config?(t) when is_tuple(t), do: Enum.all?(Tuple.to_list(t), &valid_config?/1)
466-
defp valid_config?(_), do: false
465+
defp valid_config?(o), do: is_number(o) or is_atom(o) or is_binary(o)
467466

468467
defp merge_provider_config(%{config_providers: []}, sys_config, _), do: {sys_config, false}
469468

lib/mix/test/mix/release_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,11 @@ defmodule Mix.ReleaseTest do
585585
test "errors on bad config" do
586586
assert {:error, "Could not read configuration file." <> _} =
587587
make_sys_config(release([]), [foo: [bar: self()]], "unused/runtime/path")
588+
589+
env = %{__ENV__ | lexical_tracker: self()}
590+
591+
assert {:error, "Could not read configuration file." <> _} =
592+
make_sys_config(release([]), [foo: [bar: env]], "unused/runtime/path")
588593
end
589594
end
590595

0 commit comments

Comments
 (0)