From 9ef2a43de0c4574a6851aae18cf2292df5431741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20Meadows-J=C3=B6nsson?= Date: Sun, 29 Mar 2026 18:28:07 +0200 Subject: [PATCH 1/2] Update Node to 22 and fix flaky TmpDir test Install Node 22 from NodeSource instead of Node 18 from Debian apt since webpack-cli 7 requires Node >= 20.9.0. Fix flaky TmpDir cleanup test by replacing Process.sleep with proper process monitor and GenServer sync. --- Dockerfile | 7 ++++- test/diff/tmp_dir_test.exs | 60 +++++++++++++++++++++++--------------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index af1ee3d..65839fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,12 @@ ENV LANG=C.UTF-8 # install build dependencies RUN apt update && \ apt upgrade -y && \ - apt install -y --no-install-recommends git build-essential nodejs yarnpkg && \ + apt install -y --no-install-recommends git build-essential curl ca-certificates gnupg && \ + mkdir -p /etc/apt/keyrings && \ + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \ + apt update && \ + apt install -y --no-install-recommends nodejs yarnpkg && \ apt clean -y && rm -rf /var/lib/apt/lists/* # prepare build dir diff --git a/test/diff/tmp_dir_test.exs b/test/diff/tmp_dir_test.exs index e95dddd..4943135 100644 --- a/test/diff/tmp_dir_test.exs +++ b/test/diff/tmp_dir_test.exs @@ -15,14 +15,16 @@ defmodule Diff.TmpDirTest do test "cleanup on normal process exit" do test_pid = self() - Task.start(fn -> - file = Diff.TmpDir.tmp_file("test") - dir = Diff.TmpDir.tmp_dir("test") - send(test_pid, {:paths, file, dir}) - end) - + {:ok, task_pid} = + Task.start(fn -> + file = Diff.TmpDir.tmp_file("test") + dir = Diff.TmpDir.tmp_dir("test") + send(test_pid, {:paths, file, dir}) + end) + + ref = Process.monitor(task_pid) assert_receive {:paths, file, dir} - Process.sleep(100) + wait_for_cleanup(task_pid, ref) refute File.exists?(file) refute File.exists?(dir) @@ -32,15 +34,17 @@ defmodule Diff.TmpDirTest do test "cleanup on process crash" do test_pid = self() - Task.start(fn -> - file = Diff.TmpDir.tmp_file("test") - dir = Diff.TmpDir.tmp_dir("test") - send(test_pid, {:paths, file, dir}) - raise "crash" - end) + {:ok, task_pid} = + Task.start(fn -> + file = Diff.TmpDir.tmp_file("test") + dir = Diff.TmpDir.tmp_dir("test") + send(test_pid, {:paths, file, dir}) + raise "crash" + end) + ref = Process.monitor(task_pid) assert_receive {:paths, file, dir} - Process.sleep(100) + wait_for_cleanup(task_pid, ref) refute File.exists?(file) refute File.exists?(dir) @@ -49,19 +53,21 @@ defmodule Diff.TmpDirTest do test "multiple paths for one process" do test_pid = self() - Task.start(fn -> - paths = - for i <- 1..5 do - file = Diff.TmpDir.tmp_file("test-#{i}") - dir = Diff.TmpDir.tmp_dir("test-#{i}") - {file, dir} - end + {:ok, task_pid} = + Task.start(fn -> + paths = + for i <- 1..5 do + file = Diff.TmpDir.tmp_file("test-#{i}") + dir = Diff.TmpDir.tmp_dir("test-#{i}") + {file, dir} + end - send(test_pid, {:paths, paths}) - end) + send(test_pid, {:paths, paths}) + end) + ref = Process.monitor(task_pid) assert_receive {:paths, paths} - Process.sleep(100) + wait_for_cleanup(task_pid, ref) for {file, dir} <- paths do refute File.exists?(file) @@ -76,4 +82,10 @@ defmodule Diff.TmpDirTest do assert File.exists?(file) assert File.dir?(dir) end + + defp wait_for_cleanup(task_pid, ref) do + assert_receive {:DOWN, ^ref, :process, ^task_pid, _}, 5000 + # Sync with the GenServer to ensure the :DOWN cleanup has been processed + :sys.get_state(Diff.TmpDir) + end end From 156837f62fcc9f49a68749da6c60d405fdc8d062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20Meadows-J=C3=B6nsson?= Date: Sun, 29 Mar 2026 18:37:56 +0200 Subject: [PATCH 2/2] Install yarn via npm to fix NodeSource Node 22 conflict with Debian yarnpkg --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 65839fb..2483e99 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,8 +14,9 @@ RUN apt update && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \ apt update && \ - apt install -y --no-install-recommends nodejs yarnpkg && \ - apt clean -y && rm -rf /var/lib/apt/lists/* + apt install -y --no-install-recommends nodejs && \ + apt clean -y && rm -rf /var/lib/apt/lists/* && \ + npm install -g yarn # prepare build dir RUN mkdir /app @@ -36,7 +37,7 @@ RUN mix deps.compile # build assets COPY assets assets -RUN cd assets && yarnpkg install && yarnpkg run webpack --mode production +RUN cd assets && yarn install && yarn run webpack --mode production RUN mix phx.digest # build project