From e99cab51851af35e7afeeb95b53971882af239cb Mon Sep 17 00:00:00 2001 From: Angelika Cathor Date: Tue, 21 Oct 2025 17:48:22 +0200 Subject: [PATCH 1/7] Update to 1.19 --- .github/workflows/elixir_tests.yml | 2 +- .github/workflows/exercism_test_helper_build_test.yml | 2 +- .tool-versions | 4 ++-- Dockerfile | 4 ++-- README.md | 2 +- elixir | 2 +- exercism_test_helper/mix.exs | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/elixir_tests.yml b/.github/workflows/elixir_tests.yml index ef84969..bde1c7c 100644 --- a/.github/workflows/elixir_tests.yml +++ b/.github/workflows/elixir_tests.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-24.04 container: - image: hexpm/elixir:1.18.1-erlang-27.2-debian-bookworm-20241223 + image: hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 steps: - name: Install git diff --git a/.github/workflows/exercism_test_helper_build_test.yml b/.github/workflows/exercism_test_helper_build_test.yml index d9f2cf3..9d7350c 100644 --- a/.github/workflows/exercism_test_helper_build_test.yml +++ b/.github/workflows/exercism_test_helper_build_test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-24.04 container: - image: hexpm/elixir:1.18.1-erlang-27.2-debian-bookworm-20241223 + image: hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 diff --git a/.tool-versions b/.tool-versions index 2254cc0..0c842a1 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -elixir 1.18.1-otp-27 -erlang 27.2 +elixir 1.19.0-otp-28 +erlang 28.1 diff --git a/Dockerfile b/Dockerfile index 32ab2ad..1ebac43 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM hexpm/elixir:1.18.1-erlang-27.2-debian-bookworm-20241223 as builder +FROM hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 as builder # Create appuser RUN useradd -ms /bin/bash appuser @@ -19,7 +19,7 @@ RUN mix local.rebar --force && \ RUN MIX_ENV=prod mix escript.build && \ mv exercism_test_helper /opt/test-runner/bin -FROM hexpm/elixir:1.18.1-erlang-27.2-debian-bookworm-20241223 as runner +FROM hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 as runner COPY --from=builder /etc/passwd /etc/passwd COPY --from=builder /opt/test-runner /opt/test-runner diff --git a/README.md b/README.md index 27751e6..aa0c971 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Exercism Automated Test Runner for Elixir Exercises ## Environment -The test runner currently targets exercises supporting Elixir >= 1.14 and Erlang/OTP >= 25, but is running on Elixir 1.18.0 on hexpm's `elixir:1.18.1-erlang-27.2-debian-bookworm-20241223` image. +The test runner currently targets exercises supporting Elixir >= 1.15 and Erlang/OTP >= 26, but is running on Elixir 1.19.0 on hexpm's `elixir:1.19.0-erlang-28.1-debian-bookworm-20251020` image. The `Dockerfile` also has added `bash`, `jo` and `jq` to the image. diff --git a/elixir b/elixir index a6e44e8..ad095ee 160000 --- a/elixir +++ b/elixir @@ -1 +1 @@ -Subproject commit a6e44e85ad9fcf62562bbc1a469673ddaeb3d62e +Subproject commit ad095ee0e3b0921e41059edc26f9f741b443d661 diff --git a/exercism_test_helper/mix.exs b/exercism_test_helper/mix.exs index ea958d8..249aa00 100644 --- a/exercism_test_helper/mix.exs +++ b/exercism_test_helper/mix.exs @@ -5,7 +5,7 @@ defmodule ExercismTestHelper.MixProject do [ app: :exercism_test_helper, version: "0.1.2", - elixir: "~> 1.18", + elixir: "~> 1.19", start_permanent: Mix.env() == :prod, deps: deps(), escript: escript() From 4a375c527efa86e2c578215d24efd32db4604ff1 Mon Sep 17 00:00:00 2001 From: Angelika Cathor Date: Wed, 12 Nov 2025 17:35:05 +0100 Subject: [PATCH 2/7] Update to 1.19.2 --- .github/workflows/elixir_tests.yml | 2 +- .github/workflows/exercism_test_helper_build_test.yml | 2 +- .tool-versions | 2 +- Dockerfile | 4 ++-- README.md | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/elixir_tests.yml b/.github/workflows/elixir_tests.yml index bde1c7c..b9672be 100644 --- a/.github/workflows/elixir_tests.yml +++ b/.github/workflows/elixir_tests.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-24.04 container: - image: hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 + image: hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 steps: - name: Install git diff --git a/.github/workflows/exercism_test_helper_build_test.yml b/.github/workflows/exercism_test_helper_build_test.yml index 9d7350c..d2800b4 100644 --- a/.github/workflows/exercism_test_helper_build_test.yml +++ b/.github/workflows/exercism_test_helper_build_test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-24.04 container: - image: hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 + image: hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 diff --git a/.tool-versions b/.tool-versions index 0c842a1..3aaa26e 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -elixir 1.19.0-otp-28 +elixir 1.19.2-otp-28 erlang 28.1 diff --git a/Dockerfile b/Dockerfile index 1ebac43..5b7f457 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 as builder +FROM hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 as builder # Create appuser RUN useradd -ms /bin/bash appuser @@ -19,7 +19,7 @@ RUN mix local.rebar --force && \ RUN MIX_ENV=prod mix escript.build && \ mv exercism_test_helper /opt/test-runner/bin -FROM hexpm/elixir:1.19.0-erlang-28.1-debian-bookworm-20251020 as runner +FROM hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 as runner COPY --from=builder /etc/passwd /etc/passwd COPY --from=builder /opt/test-runner /opt/test-runner diff --git a/README.md b/README.md index aa0c971..e68b399 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Exercism Automated Test Runner for Elixir Exercises ## Environment -The test runner currently targets exercises supporting Elixir >= 1.15 and Erlang/OTP >= 26, but is running on Elixir 1.19.0 on hexpm's `elixir:1.19.0-erlang-28.1-debian-bookworm-20251020` image. +The test runner currently targets exercises supporting Elixir >= 1.15 and Erlang/OTP >= 26, but is running on Elixir 1.19.2 on hexpm's `elixir:1.19.2-erlang-28.1-debian-bookworm-20251103` image. The `Dockerfile` also has added `bash`, `jo` and `jq` to the image. From 40bf5b8b1c3898260962ee6bb60ea0c482d677d6 Mon Sep 17 00:00:00 2001 From: Angelika Cathor Date: Sun, 16 Nov 2025 09:24:33 +0100 Subject: [PATCH 3/7] Pull elixir --- elixir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elixir b/elixir index ad095ee..8d533bd 160000 --- a/elixir +++ b/elixir @@ -1 +1 @@ -Subproject commit ad095ee0e3b0921e41059edc26f9f741b443d661 +Subproject commit 8d533bdc2242f61fe76ace126bc1a15595154f2c From 8c6197c174011ffe17de5dcbd12ccbc5d54f6e07 Mon Sep 17 00:00:00 2001 From: Angelika Cathor Date: Wed, 19 Nov 2025 19:18:58 +0100 Subject: [PATCH 4/7] Fix JSON formatter hanging forever --- exercism_test_helper/lib/json_formatter.ex | 16 ++++++++++------ exercism_test_helper/lib/meta/style.ex | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/exercism_test_helper/lib/json_formatter.ex b/exercism_test_helper/lib/json_formatter.ex index bb1fcee..9f4ab06 100644 --- a/exercism_test_helper/lib/json_formatter.ex +++ b/exercism_test_helper/lib/json_formatter.ex @@ -235,12 +235,7 @@ defmodule JSONFormatter do # Colorize Utility Functions -- from ExUnit.CLIFormatter, but can't import d/t being private in source - defp colorize(escape, msg, config) when is_doc(msg) do - msg = Inspect.Algebra.format(msg, 2) - colorize(escape, msg, config) - end - - defp colorize(escape, string, %{colors: colors}) do + defp colorize(escape, string, %{colors: colors}) when is_binary(string) do if colors[:enabled] do [escape, string, :reset] |> IO.ANSI.format_fragment(true) @@ -250,6 +245,15 @@ defmodule JSONFormatter do end end + defp colorize(escape, msg, config) when is_doc(msg) do + msg = + msg + |> Inspect.Algebra.format(2) + |> IO.iodata_to_binary() + + colorize(escape, msg, config) + end + @doc """ Helper function to get the full path of the generated report file. It can be passed 2 configurations via environment variable diff --git a/exercism_test_helper/lib/meta/style.ex b/exercism_test_helper/lib/meta/style.ex index e3fbceb..fe2a744 100644 --- a/exercism_test_helper/lib/meta/style.ex +++ b/exercism_test_helper/lib/meta/style.ex @@ -2,7 +2,7 @@ defmodule Meta.Style do def format(ast) do ast |> Macro.to_string() - |> Code.format_string!([line_length: 120, force_do_end_blocks: true]) + |> Code.format_string!(line_length: 120, force_do_end_blocks: true) |> IO.iodata_to_binary() end end From 22f03981a72738996321adfdd67ec74e1cfc4bce Mon Sep 17 00:00:00 2001 From: Angelika Cathor Date: Fri, 28 Nov 2025 08:25:03 +0100 Subject: [PATCH 5/7] Run on 1.19.4 --- .github/workflows/elixir_tests.yml | 2 +- .github/workflows/exercism_test_helper_build_test.yml | 2 +- .tool-versions | 2 +- Dockerfile | 4 ++-- README.md | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/elixir_tests.yml b/.github/workflows/elixir_tests.yml index b9672be..2971a7b 100644 --- a/.github/workflows/elixir_tests.yml +++ b/.github/workflows/elixir_tests.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-24.04 container: - image: hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 + image: hexpm/elixir:1.19.4-erlang-28.1-debian-bookworm-20251117 steps: - name: Install git diff --git a/.github/workflows/exercism_test_helper_build_test.yml b/.github/workflows/exercism_test_helper_build_test.yml index d2800b4..ad24469 100644 --- a/.github/workflows/exercism_test_helper_build_test.yml +++ b/.github/workflows/exercism_test_helper_build_test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-24.04 container: - image: hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 + image: hexpm/elixir:1.19.4-erlang-28.1-debian-bookworm-20251117 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 diff --git a/.tool-versions b/.tool-versions index 3aaa26e..078af8b 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -elixir 1.19.2-otp-28 +elixir 1.19.4-otp-28 erlang 28.1 diff --git a/Dockerfile b/Dockerfile index 5b7f457..3afdfbc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 as builder +FROM hexpm/elixir:1.19.4-erlang-28.1-debian-bookworm-20251117 as builder # Create appuser RUN useradd -ms /bin/bash appuser @@ -19,7 +19,7 @@ RUN mix local.rebar --force && \ RUN MIX_ENV=prod mix escript.build && \ mv exercism_test_helper /opt/test-runner/bin -FROM hexpm/elixir:1.19.2-erlang-28.1-debian-bookworm-20251103 as runner +FROM hexpm/elixir:1.19.4-erlang-28.1-debian-bookworm-20251117 as runner COPY --from=builder /etc/passwd /etc/passwd COPY --from=builder /opt/test-runner /opt/test-runner diff --git a/README.md b/README.md index e68b399..8b8a3b2 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Exercism Automated Test Runner for Elixir Exercises ## Environment -The test runner currently targets exercises supporting Elixir >= 1.15 and Erlang/OTP >= 26, but is running on Elixir 1.19.2 on hexpm's `elixir:1.19.2-erlang-28.1-debian-bookworm-20251103` image. +The test runner currently targets exercises supporting Elixir >= 1.15 and Erlang/OTP >= 26, but is running on Elixir 1.19.4 on hexpm's `elixir:1.19.4-erlang-28.1-debian-bookworm-20251117` image. The `Dockerfile` also has added `bash`, `jo` and `jq` to the image. From 423db72e52d6b36f76c429f50093007e7014b046 Mon Sep 17 00:00:00 2001 From: Jeremie Gillet Date: Sat, 29 Nov 2025 22:52:31 +0900 Subject: [PATCH 6/7] adjust expected results for community-garden --- test/community-garden/expected_results.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/community-garden/expected_results.json b/test/community-garden/expected_results.json index 2443c95..37cd4c6 100644 --- a/test/community-garden/expected_results.json +++ b/test/community-garden/expected_results.json @@ -1 +1 @@ -{"message":null,"status":"fail","tests":[{"message":null,"name":"test start returns an alive pid","output":"","status":"pass","task_id":1,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert Process.alive?(pid)"},{"message":" 1) test when started, the registry is empty (CommunityGardenTest)\n \u001b[1m\u001b[30mtest/community_garden_test.exs:11\u001b[0m\n \u001b[31mAssertion with == failed\u001b[0m\n \u001b[36mcode: \u001b[0massert [] == CommunityGarden.list_registrations(pid)\n \u001b[36mleft: \u001b[0m\u001b[31m[]\u001b[0m\n \u001b[36mright: \u001b[0m\u001b[32mnil\u001b[0m\n \u001b[36mstacktrace:\u001b[0m\n test/community_garden_test.exs:14: (test)\n","name":"test when started, the registry is empty","output":"","status":"fail","task_id":2,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert [] == CommunityGarden.list_registrations(pid)"},{"message":" 2) test can register a new plot (CommunityGardenTest)\n \u001b[1m\u001b[30mtest/community_garden_test.exs:18\u001b[0m\n \u001b[31mmatch (=) failed\u001b[0m\n \u001b[36mcode: \u001b[0massert %Plot{} = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001b[36mleft: \u001b[0m\u001b[31m%Plot{\n \n}\u001b[0m\n \u001b[36mright: \u001b[0m\u001b[32mnil\u001b[0m\n \u001b[36mstacktrace:\u001b[0m\n test/community_garden_test.exs:21: (test)\n","name":"test can register a new plot","output":"","status":"fail","task_id":3,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = CommunityGarden.register(pid, \"Johnny Appleseed\")"},{"message":" 3) test maintains a registry of plots (CommunityGardenTest)\n \u001b[1m\u001b[30mtest/community_garden_test.exs:25\u001b[0m\n \u001b[31mmatch (=) failed\u001b[0m\n \u001b[36mcode: \u001b[0massert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001b[36mleft: \u001b[0m\u001b[31m%Plot{\n \n}\u001b[0m\n \u001b[36mright: \u001b[0m\u001b[32mnil\u001b[0m\n \u001b[36mstacktrace:\u001b[0m\n test/community_garden_test.exs:28: (test)\n","name":"test maintains a registry of plots","output":"","status":"fail","task_id":3,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\nassert [plot] == CommunityGarden.list_registrations(pid)"},{"message":" 4) test can release a plot (CommunityGardenTest)\n \u001b[1m\u001b[30mtest/community_garden_test.exs:33\u001b[0m\n \u001b[31mmatch (=) failed\u001b[0m\n \u001b[36mcode: \u001b[0massert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001b[36mleft: \u001b[0m\u001b[31m%Plot{\n \n}\u001b[0m\n \u001b[36mright: \u001b[0m\u001b[32mnil\u001b[0m\n \u001b[36mstacktrace:\u001b[0m\n test/community_garden_test.exs:36: (test)\n","name":"test can release a plot","output":"","status":"fail","task_id":4,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\nassert :ok = CommunityGarden.release(pid, plot.plot_id)\nassert [] == CommunityGarden.list_registrations(pid)"},{"message":" 5) test can get registration of a registered plot (CommunityGardenTest)\n \u001b[1m\u001b[30mtest/community_garden_test.exs:42\u001b[0m\n \u001b[31mmatch (=) failed\u001b[0m\n \u001b[36mcode: \u001b[0massert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001b[36mleft: \u001b[0m\u001b[31m%Plot{\n \n}\u001b[0m\n \u001b[36mright: \u001b[0m\u001b[32mnil\u001b[0m\n \u001b[36mstacktrace:\u001b[0m\n test/community_garden_test.exs:45: (test)\n","name":"test can get registration of a registered plot","output":"","status":"fail","task_id":5,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\nassert %Plot{} = registered_plot = CommunityGarden.get_registration(pid, plot.plot_id)\nassert registered_plot.plot_id == plot.plot_id\nassert registered_plot.registered_to == \"Johnny Appleseed\""},{"message":" 6) test return not_found when attempt to get registration of an unregistered plot (CommunityGardenTest)\n \u001b[1m\u001b[30mtest/community_garden_test.exs:52\u001b[0m\n \u001b[31mmatch (=) failed\u001b[0m\n \u001b[36mcode: \u001b[0massert {:not_found, \"plot is unregistered\"} = CommunityGarden.get_registration(pid, 1)\n \u001b[36mleft: \u001b[0m\u001b[31m{\n :not_found,\n \"plot is unregistered\"\n}\u001b[0m\n \u001b[36mright: \u001b[0m\u001b[32mnil\u001b[0m\n \u001b[36mstacktrace:\u001b[0m\n test/community_garden_test.exs:59: (test)\n","name":"test return not_found when attempt to get registration of an unregistered plot","output":"","status":"fail","task_id":5,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert {:not_found, \"plot is unregistered\"} = CommunityGarden.get_registration(pid, 1)"}],"version":3} +{"message":null,"status":"fail","tests":[{"message":null,"name":"test start returns an alive pid","output":"","status":"pass","task_id":1,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert Process.alive?(pid)"},{"message":" 1) test when started, the registry is empty (CommunityGardenTest)\n \u001B[1m\u001B[30mtest/community_garden_test.exs:11\u001B[0m\n \u001B[31mAssertion with == failed\u001B[0m\n \u001B[36mcode: \u001B[0massert [] == CommunityGarden.list_registrations(pid)\n \u001B[36mleft: \u001B[0m\u001B[31m[]\u001B[0m\n \u001B[36mright: \u001B[0m\u001B[32mnil\u001B[0m\n \u001B[36mstacktrace:\u001B[0m\n test/community_garden_test.exs:14: (test)\n","name":"test when started, the registry is empty","output":"","status":"fail","task_id":2,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert [] == CommunityGarden.list_registrations(pid)"},{"message":" 2) test can register a new plot (CommunityGardenTest)\n \u001B[1m\u001B[30mtest/community_garden_test.exs:18\u001B[0m\n \u001B[31mmatch (=) failed\u001B[0m\n \u001B[36mcode: \u001B[0massert %Plot{} = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001B[36mleft: \u001B[0m\u001B[31m%Plot{\n \n}\u001B[0m\n \u001B[36mright: \u001B[0m\u001B[32mnil\u001B[0m\n \u001B[36mstacktrace:\u001B[0m\n test/community_garden_test.exs:21: (test)\n","name":"test can register a new plot","output":"","status":"fail","task_id":3,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = CommunityGarden.register(pid, \"Johnny Appleseed\")"},{"message":" 3) test maintains a registry of plots (CommunityGardenTest)\n \u001B[1m\u001B[30mtest/community_garden_test.exs:25\u001B[0m\n \u001B[31mmatch (=) failed\u001B[0m\n \u001B[36mcode: \u001B[0massert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001B[36mleft: \u001B[0m\u001B[31m%Plot{} = plot\u001B[0m\n \u001B[36mright: \u001B[0m\u001B[32mnil\u001B[0m\n \u001B[36mstacktrace:\u001B[0m\n test/community_garden_test.exs:28: (test)\n","name":"test maintains a registry of plots","output":"","status":"fail","task_id":3,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\nassert [plot] == CommunityGarden.list_registrations(pid)"},{"message":" 4) test can release a plot (CommunityGardenTest)\n \u001B[1m\u001B[30mtest/community_garden_test.exs:33\u001B[0m\n \u001B[31mmatch (=) failed\u001B[0m\n \u001B[36mcode: \u001B[0massert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001B[36mleft: \u001B[0m\u001B[31m%Plot{} = plot\u001B[0m\n \u001B[36mright: \u001B[0m\u001B[32mnil\u001B[0m\n \u001B[36mstacktrace:\u001B[0m\n test/community_garden_test.exs:36: (test)\n","name":"test can release a plot","output":"","status":"fail","task_id":4,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\nassert :ok = CommunityGarden.release(pid, plot.plot_id)\nassert [] == CommunityGarden.list_registrations(pid)"},{"message":" 5) test can get registration of a registered plot (CommunityGardenTest)\n \u001B[1m\u001B[30mtest/community_garden_test.exs:42\u001B[0m\n \u001B[31mmatch (=) failed\u001B[0m\n \u001B[36mcode: \u001B[0massert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\n \u001B[36mleft: \u001B[0m\u001B[31m%Plot{} = plot\u001B[0m\n \u001B[36mright: \u001B[0m\u001B[32mnil\u001B[0m\n \u001B[36mstacktrace:\u001B[0m\n test/community_garden_test.exs:45: (test)\n","name":"test can get registration of a registered plot","output":"","status":"fail","task_id":5,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert %Plot{} = plot = CommunityGarden.register(pid, \"Johnny Appleseed\")\nassert %Plot{} = registered_plot = CommunityGarden.get_registration(pid, plot.plot_id)\nassert registered_plot.plot_id == plot.plot_id\nassert registered_plot.registered_to == \"Johnny Appleseed\""},{"message":" 6) test return not_found when attempt to get registration of an unregistered plot (CommunityGardenTest)\n \u001B[1m\u001B[30mtest/community_garden_test.exs:52\u001B[0m\n \u001B[31mmatch (=) failed\u001B[0m\n \u001B[36mcode: \u001B[0massert {:not_found, \"plot is unregistered\"} = CommunityGarden.get_registration(pid, 1)\n \u001B[36mleft: \u001B[0m\u001B[31m{\n :not_found,\n \"plot is unregistered\"\n}\u001B[0m\n \u001B[36mright: \u001B[0m\u001B[32mnil\u001B[0m\n \u001B[36mstacktrace:\u001B[0m\n test/community_garden_test.exs:59: (test)\n","name":"test return not_found when attempt to get registration of an unregistered plot","output":"","status":"fail","task_id":5,"test_code":"assert {:ok, pid} = CommunityGarden.start()\nassert {:not_found, \"plot is unregistered\"} = CommunityGarden.get_registration(pid, 1)"}],"version":3} \ No newline at end of file From 2c0cccfef8c14cb43e20e6cee5d23d0836d45cdb Mon Sep 17 00:00:00 2001 From: Angelika Cathor Date: Sat, 29 Nov 2025 16:10:26 +0100 Subject: [PATCH 7/7] Document smoke test gotcha in README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8b8a3b2..daeab1c 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,10 @@ The `Dockerfile` also has added `bash`, `jo` and `jq` to the image. --- +## Smoke tests + +There is a gotcha in the smoke test setup: for the tests to work as expected locally, your **global** Elixir and Erlang versions must also be set to the same values as locally via `.tool-versions`. + ## Contributing Guide For an in-depth discussion of how exercism language tracks and exercises work, please see [CONTRIBUTING.md](https://github.com/exercism/elixir-test-runner/blob/master/CONTRIBUTING.md)