Skip to content

Commit

Permalink
Fix timing CI issues (#13305)
Browse files Browse the repository at this point in the history
  • Loading branch information
josevalim authored Jan 30, 2024
1 parent f48da2c commit d85f86a
Showing 1 changed file with 4 additions and 40 deletions.
44 changes: 4 additions & 40 deletions lib/mix/test/mix/tasks/compile.elixir_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
recompile = fn ->
Mix.ProjectStack.pop()
Mix.Project.push(MixTest.Case.Sample)
ensure_touched("config/config.exs")
ensure_touched("config/config.exs", "_build/dev/lib/sample/.mix/compile.elixir")
Mix.Tasks.Loadconfig.load_compile("config/config.exs")
Mix.Tasks.Compile.Elixir.run(["--verbose"])
end
Expand All @@ -151,37 +151,30 @@ defmodule Mix.Tasks.Compile.ElixirTest do
config :logger, :level, :debug
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Changing config recompiles
File.write!("config/config.exs", """
import Config
config :logger, :level, :info
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Removing config recompiles
File.write!("config/config.exs", """
import Config
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# No-op does not recompile
File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
refute_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
Expand All @@ -192,24 +185,16 @@ defmodule Mix.Tasks.Compile.ElixirTest do
config :sample, :foo, :bar
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Changing an unknown dependency returns :ok but does not recompile
File.write!("config/config.exs", """
import Config
config :sample, :foo, :bar
config :unknown, :unknown, :unknown
""")

# We use ensure_touched because an outdated manifest would recompile anyway.
ensure_touched("config/config.exs", "_build/dev/lib/sample/.mix/compile.elixir")
assert recompile.() == {:ok, []}
refute_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
end)
after
Application.delete_env(:sample, :foo, persistent: true)
Expand Down Expand Up @@ -271,7 +256,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
recompile = fn ->
Mix.ProjectStack.pop()
Mix.Project.push(MixTest.Case.Sample)
ensure_touched("config/config.exs")
ensure_touched("config/config.exs", "_build/dev/lib/sample/.mix/compile.elixir")
Mix.Tasks.Loadconfig.load_compile("config/config.exs")
Mix.Tasks.Compile.Elixir.run(["--verbose"])
end
Expand All @@ -282,37 +267,30 @@ defmodule Mix.Tasks.Compile.ElixirTest do
config :ex_unit, :some, :config
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Changing config recompiles
File.write!("config/config.exs", """
import Config
config :ex_unit, :some, :another
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Removing config recompiles
File.write!("config/config.exs", """
import Config
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# No-op does not recompile
File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
refute_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
Expand Down Expand Up @@ -341,7 +319,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
recompile = fn ->
Mix.ProjectStack.pop()
Mix.Project.push(MixTest.Case.Sample)
ensure_touched("config/config.exs")
ensure_touched("config/config.exs", "_build/dev/lib/sample/.mix/compile.elixir")
Mix.Tasks.Loadconfig.load_compile("config/config.exs")
Mix.Tasks.Compile.Elixir.run(["--verbose"])
end
Expand All @@ -352,19 +330,16 @@ defmodule Mix.Tasks.Compile.ElixirTest do
config :logger, :compile_time_purge_matching, []
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Inserting a bogus config should crash
File.write!("config/config.exs", """
import Config
config :logger, :compile_time_purge_matching, [level_lower_than: :debug]
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
ExUnit.CaptureIO.capture_io(:stderr, fn -> assert {:error, _} = recompile.() end)

# Revering the original config should recompile
Expand All @@ -373,11 +348,9 @@ defmodule Mix.Tasks.Compile.ElixirTest do
config :logger, :compile_time_purge_matching, []
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time
end)
after
Application.put_env(:logger, :compile_time_purge_matching, [])
Expand All @@ -401,7 +374,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
recompile = fn ->
Mix.ProjectStack.pop()
Mix.Project.push(MixTest.Case.Sample)
ensure_touched("config/config.exs")
ensure_touched("config/config.exs", "_build/dev/lib/sample/.mix/compile.elixir")
Mix.Tasks.Loadconfig.load_compile("config/config.exs")
Mix.Tasks.Compile.Elixir.run(["--verbose"])
end
Expand All @@ -412,46 +385,38 @@ defmodule Mix.Tasks.Compile.ElixirTest do
config :logger, :level, :debug
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Changing config recompiles
File.write!("config/config.exs", """
import Config
config :logger, :level, :info
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Removing config recompiles
File.write!("config/config.exs", """
import Config
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Changing self fully recompiles
File.write!("config/config.exs", """
import Config
config :sample, :foo, :bar
""")

File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
assert recompile.() == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time

# Changing an unknown dependency returns :ok but does not recompile
File.write!("config/config.exs", """
Expand All @@ -461,7 +426,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
""")

# We use ensure_touched because an outdated manifest would recompile anyway.
ensure_touched("config/config.exs", "_build/dev/lib/sample/.mix/compile.elixir")
assert recompile.() == {:ok, []}
refute_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
Expand Down

0 comments on commit d85f86a

Please sign in to comment.