From c5c0eee159940bade812b7f359bffd59ce782528 Mon Sep 17 00:00:00 2001 From: takasehideki Date: Mon, 8 Jun 2026 16:02:09 +0900 Subject: [PATCH 1/3] chore: apply `mix deps.update --all` --- mix.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mix.lock b/mix.lock index 4da16fd..59ea15d 100644 --- a/mix.lock +++ b/mix.lock @@ -1,10 +1,10 @@ %{ "blankable": {:hex, :blankable, "1.0.0", "89ab564a63c55af117e115144e3b3b57eb53ad43ba0f15553357eb283e0ed425", [:mix], [], "hexpm", "7cf11aac0e44f4eedbee0c15c1d37d94c090cb72a8d9fddf9f7aec30f9278899"}, "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, - "credo": {:hex, :credo, "1.7.13", "126a0697df6b7b71cd18c81bc92335297839a806b6f62b61d417500d1070ff4e", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "47641e6d2bbff1e241e87695b29f617f1a8f912adea34296fb10ecc3d7e9e84f"}, + "credo": {:hex, :credo, "1.7.19", "cc52129665fc7c15143d47838fda0f9cd6dac9ceced7bf4da6f85fcbfe64b12a", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2d8bc95d5a7bb99dd2613621d4f08c6a3575c3fd4b62e6a2b48a100352a557b8"}, "file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"}, "git_hooks": {:hex, :git_hooks, "0.8.1", "1f6a1b065638e07ed89a49804dac6c24d8ac8d27c8f9fd0e9620d5bef8c30f41", [:mix], [{:recase, "~> 0.8.0", [hex: :recase, repo: "hexpm", optional: false]}], "hexpm", "267d8b82615ad439177b2a4bc2efadb7491ec1c8520dacc67ddc38c251448cbc"}, - "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, - "mix_test_watch": {:hex, :mix_test_watch, "1.3.0", "2ffc9f72b0d1f4ecf0ce97b044e0e3c607c3b4dc21d6228365e8bc7c2856dc77", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "f9e5edca976857ffac78632e635750d158df14ee2d6185a15013844af7570ffe"}, + "jason": {:hex, :jason, "1.4.5", "2e3a008590b0b8d7388c20293e9dcc9cf3e5d642fd2a114e4cbbb52e595d940a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b0c823996102bcd0239b3c2444eb00409b72f6a140c1950bc8b457d836b30684"}, + "mix_test_watch": {:hex, :mix_test_watch, "1.4.0", "d88bcc4fbe3198871266e9d2f00cd8ae350938efbb11d3fa1da091586345adbb", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "2b4693e17c8ead2ef56d4f48a0329891e8c2d0d73752c0f09272a2b17dc38d1b"}, "recase": {:hex, :recase, "0.8.1", "ab98cd35857a86fa5ca99036f575241d71d77d9c2ab0c39aacf1c9b61f6f7d1d", [:mix], [], "hexpm", "9fd8d63e7e43bd9ea385b12364e305778b2bbd92537e95c4b2e26fc507d5e4c2"}, } From d8e70935ab64f139c5956c5f1aee35923ced7123 Mon Sep 17 00:00:00 2001 From: takasehideki Date: Mon, 8 Jun 2026 16:14:35 +0900 Subject: [PATCH 2/3] bump: listed available versions along with .tool-versions --- .tool-versions | 4 ++-- README.md | 14 +++++++++----- lib/mix/tasks/rclex_docker.ex | 20 ++++++++++++-------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/.tool-versions b/.tool-versions index 5c46c3b..b8cca83 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -erlang 27.3.4.3 -elixir 1.18.4-otp-27 +erlang 28.5 +elixir 1.19.5-otp-28 diff --git a/README.md b/README.md index 1e48082..a05e85d 100644 --- a/README.md +++ b/README.md @@ -29,13 +29,13 @@ They are associated with the ext of each Dockerfile on [GitHub repository](https Only this tag (including past) provides multi-platform, `linux/amd64` and `linux/arm64`. - Jazzy Jalisco (**LTS rosdistro until May 2029**) - - jazzy-ex1.19.0-otp28.1 + - jazzy-ex1.20.0-otp29.0.1 + - jazzy-ex1.19.5-otp28.5 - jazzy-ex1.18.4-otp27.3.4.3 - - jazzy-ex1.17.3-otp27.2.4 - Humble Hawksbill (**LTS rosdistro until May 2027**) - - humble-ex1.19.0-otp28.1 - - humble-ex1.18.4-otp27.3.4.3 **[latest]** - - humble-ex1.17.3-otp27.2.4 + - humble-ex1.20.0-otp29.0.1 + - humble-ex1.19.5-otp28.5 **[latest]** + - humble-ex1.18.4-otp27.3.4.3 We highly recommend using Humble version because the previous ROS 2 distributions have already reached EOL. In particular, we have decided to stop supporting Dashing due to compatibility with Rclex code. @@ -71,13 +71,17 @@ The following versions are not yet sufficiently supported and are not used as CI The following versions were used in the past and are still available on Docker Hub, but are no longer used for the operation test of Rclex. - Jazzy Jalisco (**LTS rosdistro until May 2029**) + - jazzy-ex1.19.0-otp28.1 - jazzy-ex1.18.2-otp27.2.4 + - jazzy-ex1.17.3-otp27.2.4 - jazzy-ex1.17.3-otp27.2 - jazzy-ex1.16.3-otp26.2.5 - Iron Irwini (_EOL!_) - iron-ex1.15.5-otp26.0.2 - Humble Hawksbill (**LTS rosdistro until May 2027**) + - humble-ex1.19.0-otp28.1 - humble-ex1.18.2-otp27.2.4 + - humble-ex1.17.3-otp27.2.4 - humble-ex1.16.3-otp26.2.5 - humble-ex1.16.2-otp26.2.2 - humble-ex1.15.7-otp26.2.2 (past latest) diff --git a/lib/mix/tasks/rclex_docker.ex b/lib/mix/tasks/rclex_docker.ex index faa6141..2dd013d 100644 --- a/lib/mix/tasks/rclex_docker.ex +++ b/lib/mix/tasks/rclex_docker.ex @@ -20,31 +20,35 @@ defmodule Mix.Tasks.RclexDocker do end def latest_target_tuple() do - {"hexpm/elixir:1.18.4-erlang-27.3.4.3-ubuntu-jammy-20251001", "humble"} + {"hexpm/elixir:1.19.5-erlang-28.5-ubuntu-jammy-20260509", "humble"} end def list_target_tuples() do [ ### Jazzy - {"hexpm/elixir:1.19.0-erlang-28.1-ubuntu-noble-20251001", "jazzy"}, - {"hexpm/elixir:1.18.4-erlang-27.3.4.3-ubuntu-noble-20251001", "jazzy"}, - {"hexpm/elixir:1.17.3-erlang-27.2.4-ubuntu-noble-20251001", "jazzy"}, + {"hexpm/elixir:1.20.0-erlang-29.0.1-ubuntu-noble-20260509.1", "jazzy"}, + {"hexpm/elixir:1.19.5-erlang-28.5-ubuntu-noble-20260509.1", "jazzy"}, + {"hexpm/elixir:1.18.4-erlang-27.3.4.3-ubuntu-noble-20260509.1", "jazzy"}, ### Humble - {"hexpm/elixir:1.19.0-erlang-28.1-ubuntu-jammy-20251001", "humble"}, - {"hexpm/elixir:1.18.4-erlang-27.3.4.3-ubuntu-jammy-20251001", "humble"}, - {"hexpm/elixir:1.17.3-erlang-27.2.4-ubuntu-jammy-20251001", "humble"}, + {"hexpm/elixir:1.20.0-erlang-29.0.1-ubuntu-jammy-20260509", "humble"}, + {"hexpm/elixir:1.19.5-erlang-28.5-ubuntu-jammy-20260509", "humble"}, + {"hexpm/elixir:1.18.4-erlang-27.3.4.3-ubuntu-jammy-20260509", "humble"}, ##### The below are experimental versions ### Kilted - {"hexpm/elixir:1.18.4-erlang-27.3.4.3-ubuntu-noble-20251001", "kilted"} + {"hexpm/elixir:1.18.4-erlang-27.3.4.3-ubuntu-noble-20260509.1", "kilted"} ##### The below are already deprecated versions ### Jazzy + # {"hexpm/elixir:1.19.0-erlang-28.1-ubuntu-noble-20251001", "jazzy"}, # {"hexpm/elixir:1.18.2-erlang-27.2.4-ubuntu-noble-20250127", "jazzy"}, + # {"hexpm/elixir:1.17.3-erlang-27.2.4-ubuntu-noble-20251001", "jazzy"}, # {"hexpm/elixir:1.17.3-erlang-27.2-ubuntu-noble-20250127", "jazzy"}, # {"hexpm/elixir:1.16.3-erlang-26.2.5-ubuntu-noble-20240530", "jazzy"}, ### Iron # {"hexpm/elixir:1.15.5-erlang-26.0.2-ubuntu-jammy-20230126", "iron"}, ### Humble + # {"hexpm/elixir:1.19.0-erlang-28.1-ubuntu-jammy-20251001", "humble"}, # {"hexpm/elixir:1.18.2-erlang-27.2.4-ubuntu-jammy-20250126", "humble"}, + # {"hexpm/elixir:1.17.3-erlang-27.2.4-ubuntu-jammy-20251001", "humble"}, # {"hexpm/elixir:1.16.3-erlang-26.2.5-ubuntu-jammy-20240530", "humble"} # {"hexpm/elixir:1.16.2-erlang-26.2.2-ubuntu-jammy-20240125", "humble"}, # {"hexpm/elixir:1.15.7-erlang-26.2.2-ubuntu-jammy-20240125", "humble"}, From 92cc5bc829065b02b026940f2f8dc433532c0113 Mon Sep 17 00:00:00 2001 From: takasehideki Date: Mon, 8 Jun 2026 16:21:55 +0900 Subject: [PATCH 3/3] fix: ensure correct pattern matching in parse_args function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``` $ mix compile Compiling 2 files (.ex) warning: a struct for Mix.Tasks.RclexDocker.Build.Options is expected on struct update: %Mix.Tasks.RclexDocker.Build.Options{acc | dry_run: true} but got type: dynamic() where "acc" was given the type: # type: dynamic() # from: lib/mix/tasks/rclex_docker/build.ex:139:43 acc when defining the variable "acc", you must also pattern match on "%Mix.Tasks.RclexDocker.Build.Options{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 141 │ "--dry-run" -> %Options{acc | dry_run: true} │ ~ │ └─ lib/mix/tasks/rclex_docker/build.ex:141:24: Mix.Tasks.RclexDocker.Build.parse_args/1 warning: a struct for Mix.Tasks.RclexDocker.Push.Options is expected on struct update: %Mix.Tasks.RclexDocker.Push.Options{acc | dry_run: true} but got type: dynamic() where "acc" was given the type: # type: dynamic() # from: lib/mix/tasks/rclex_docker/push.ex:118:43 acc when defining the variable "acc", you must also pattern match on "%Mix.Tasks.RclexDocker.Push.Options{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 120 │ "--dry-run" -> %Options{acc | dry_run: true} │ ~ │ └─ lib/mix/tasks/rclex_docker/push.ex:120:24: Mix.Tasks.RclexDocker.Push.parse_args/1 warning: a struct for Mix.Tasks.RclexDocker.Build.Options is expected on struct update: %Mix.Tasks.RclexDocker.Build.Options{acc | latest: true} but got type: dynamic() where "acc" was given the type: # type: dynamic() # from: lib/mix/tasks/rclex_docker/build.ex:139:43 acc when defining the variable "acc", you must also pattern match on "%Mix.Tasks.RclexDocker.Build.Options{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 142 │ "--latest" -> %Options{acc | latest: true} │ ~ │ └─ lib/mix/tasks/rclex_docker/build.ex:142:23: Mix.Tasks.RclexDocker.Build.parse_args/1 warning: a struct for Mix.Tasks.RclexDocker.Build.Options is expected on struct update: %Mix.Tasks.RclexDocker.Build.Options{acc | multi: true} but got type: dynamic() where "acc" was given the type: # type: dynamic() # from: lib/mix/tasks/rclex_docker/build.ex:139:43 acc when defining the variable "acc", you must also pattern match on "%Mix.Tasks.RclexDocker.Build.Options{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 143 │ "--multi" -> %Options{acc | multi: true} │ ~ │ └─ lib/mix/tasks/rclex_docker/build.ex:143:22: Mix.Tasks.RclexDocker.Build.parse_args/1 warning: a struct for Mix.Tasks.RclexDocker.Push.Options is expected on struct update: %Mix.Tasks.RclexDocker.Push.Options{acc | latest: true} but got type: dynamic() where "acc" was given the type: # type: dynamic() # from: lib/mix/tasks/rclex_docker/push.ex:118:43 acc when defining the variable "acc", you must also pattern match on "%Mix.Tasks.RclexDocker.Push.Options{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 121 │ "--latest" -> %Options{acc | latest: true} │ ~ │ └─ lib/mix/tasks/rclex_docker/push.ex:121:23: Mix.Tasks.RclexDocker.Push.parse_args/1 warning: a struct for Mix.Tasks.RclexDocker.Push.Options is expected on struct update: %Mix.Tasks.RclexDocker.Push.Options{acc | multi: true} but got type: dynamic() where "acc" was given the type: # type: dynamic() # from: lib/mix/tasks/rclex_docker/push.ex:118:43 acc when defining the variable "acc", you must also pattern match on "%Mix.Tasks.RclexDocker.Push.Options{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 122 │ "--multi" -> %Options{acc | multi: true} │ ~ │ └─ lib/mix/tasks/rclex_docker/push.ex:122:22: Mix.Tasks.RclexDocker.Push.parse_args/1 Generated rclex_docker app ``` --- lib/mix/tasks/rclex_docker/build.ex | 2 +- lib/mix/tasks/rclex_docker/push.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mix/tasks/rclex_docker/build.ex b/lib/mix/tasks/rclex_docker/build.ex index 08abe35..ed20dc4 100644 --- a/lib/mix/tasks/rclex_docker/build.ex +++ b/lib/mix/tasks/rclex_docker/build.ex @@ -136,7 +136,7 @@ defmodule Mix.Tasks.RclexDocker.Build do """ @spec parse_args([String.t()]) :: Options.t() def(parse_args(args)) do - Enum.reduce(args, %Options{}, fn arg, acc -> + Enum.reduce(args, %Options{}, fn arg, %Options{} = acc -> case arg do "--dry-run" -> %Options{acc | dry_run: true} "--latest" -> %Options{acc | latest: true} diff --git a/lib/mix/tasks/rclex_docker/push.ex b/lib/mix/tasks/rclex_docker/push.ex index c51efbf..dc357b1 100644 --- a/lib/mix/tasks/rclex_docker/push.ex +++ b/lib/mix/tasks/rclex_docker/push.ex @@ -115,7 +115,7 @@ defmodule Mix.Tasks.RclexDocker.Push do """ @spec parse_args([String.t()]) :: Options.t() def(parse_args(args)) do - Enum.reduce(args, %Options{}, fn arg, acc -> + Enum.reduce(args, %Options{}, fn arg, %Options{} = acc -> case arg do "--dry-run" -> %Options{acc | dry_run: true} "--latest" -> %Options{acc | latest: true}