From e8a84112e81854ffd1ab6e7299a0517549d0cf09 Mon Sep 17 00:00:00 2001 From: Alex Koutmos Date: Tue, 4 Jun 2024 13:51:12 -0400 Subject: [PATCH 1/7] Fixing Elixir 1.17 issues and so much needed clean up --- .github/workflows/main.yml | 12 +- README.md | 18 +-- VERSION | 1 + coveralls.json | 4 +- lib/mjml_eex/tokenizer.ex | 266 ------------------------------------- lib/utils.ex | 2 +- mix.exs | 16 ++- mix.lock | 28 ++-- 8 files changed, 41 insertions(+), 306 deletions(-) create mode 100644 VERSION delete mode 100644 lib/mjml_eex/tokenizer.ex diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0e4acce..4b77438 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,9 +6,9 @@ env: on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] jobs: static_analysis: @@ -21,8 +21,8 @@ jobs: - name: Set up Elixir uses: erlef/setup-beam@v1 with: - elixir-version: '1.13.3' - otp-version: '24.2' + elixir-version: "1.15.0" + otp-version: "26.2" - name: Restore dependencies cache uses: actions/cache@v2 with: @@ -53,9 +53,9 @@ jobs: strategy: matrix: elixir: - - '1.13.3' + - "1.15.0" otp: - - '24.2' + - "24.2" steps: - name: Checkout code diff --git a/README.md b/README.md index 9906122..b5047b9 100644 --- a/README.md +++ b/README.md @@ -97,9 +97,9 @@ module path): - Hello <%= @first_name %> <%= @last_name %>! + + Hello <%= @first_name %> <%= @last_name %>! + @@ -132,9 +132,9 @@ In conjunction with the following template: - Hello <%= generate_full_name(@first_name, @last_name) %>! + + Hello <%= generate_full_name(@first_name, @last_name) %>! + @@ -183,9 +183,9 @@ And the following template: - Hello <%= generate_full_name(@first_name, @last_name) %>! + + Hello <%= generate_full_name(@first_name, @last_name) %>! + diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..d9df1bb --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.11.0 diff --git a/coveralls.json b/coveralls.json index d8a1653..3d77127 100644 --- a/coveralls.json +++ b/coveralls.json @@ -1,3 +1,5 @@ { - "skip_files": ["test", "lib/mjml_eex/tokenizer.ex"] + "skip_files": [ + "test" + ] } diff --git a/lib/mjml_eex/tokenizer.ex b/lib/mjml_eex/tokenizer.ex deleted file mode 100644 index d6681b0..0000000 --- a/lib/mjml_eex/tokenizer.ex +++ /dev/null @@ -1,266 +0,0 @@ -defmodule MjmlEEx.Tokenizer do - # Taken from until Elixir 1.14.0 comes out: https://github.com/elixir-lang/elixir/blob/main/lib/eex/lib/eex/compiler.ex - @moduledoc false - - @h_spaces [?\s, ?\t] - - @doc false - def tokenize(contents, opts) when is_binary(contents) do - tokenize(String.to_charlist(contents), opts) - end - - def tokenize(contents, opts) when is_list(contents) do - file = opts[:file] || "nofile" - line = opts[:line] || 1 - trim = opts[:trim] || false - indentation = opts[:indentation] || 0 - column = indentation + (opts[:column] || 1) - - state = %{trim: trim, indentation: indentation, file: file} - - {contents, line, column} = (trim && trim_init(contents, line, column, state)) || {contents, line, column} - - tokenize(contents, line, column, state, [{line, column}], []) - end - - defp tokenize('<%%' ++ t, line, column, state, buffer, acc) do - tokenize(t, line, column + 3, state, [?%, ?< | buffer], acc) - end - - defp tokenize('<%!--' ++ t, line, column, state, buffer, acc) do - case comment(t, line, column + 5, state, []) do - {:error, line, column, message} -> - {:error, message, %{line: line, column: column}} - - {:ok, new_line, new_column, rest, comments} -> - token = {:comment, Enum.reverse(comments), %{line: line, column: column}} - trim_and_tokenize(rest, new_line, new_column, state, buffer, acc, &[token | &1]) - end - end - - defp tokenize('<%#' ++ t, line, column, state, buffer, acc) do - case expr(t, line, column + 3, state, []) do - {:error, line, column, message} -> - {:error, message, %{line: line, column: column}} - - {:ok, _, new_line, new_column, rest} -> - trim_and_tokenize(rest, new_line, new_column, state, buffer, acc, & &1) - end - end - - defp tokenize('<%' ++ t, line, column, state, buffer, acc) do - {marker, t} = retrieve_marker(t) - - case expr(t, line, column + 2 + length(marker), state, []) do - {:error, line, column, message} -> - {:error, message, %{line: line, column: column}} - - {:ok, expr, new_line, new_column, rest} -> - {key, expr} = - case :elixir_tokenizer.tokenize(expr, 1, file: "eex", check_terminators: false) do - {:ok, _line, _column, warnings, tokens} -> - Enum.each(Enum.reverse(warnings), fn {location, file, msg} -> - :elixir_errors.erl_warn(location, file, msg) - end) - - token_key(tokens, expr) - - {:error, _, _, _, _} -> - {:expr, expr} - end - - marker = - if key in [:middle_expr, :end_expr] and marker != '' do - message = """ - unexpected beginning of EEx tag \"<%#{marker}\" on \"<%#{marker}#{expr}%>\", please remove \"#{marker}\" - """ - - :elixir_errors.erl_warn({line, column}, state.file, message) - '' - else - marker - end - - token = {key, marker, expr, %{line: line, column: column}} - trim_and_tokenize(rest, new_line, new_column, state, buffer, acc, &[token | &1]) - end - end - - defp tokenize('\n' ++ t, line, _column, state, buffer, acc) do - tokenize(t, line + 1, state.indentation + 1, state, [?\n | buffer], acc) - end - - defp tokenize([h | t], line, column, state, buffer, acc) do - tokenize(t, line, column + 1, state, [h | buffer], acc) - end - - defp tokenize([], line, column, _state, buffer, acc) do - eof = {:eof, %{line: line, column: column}} - {:ok, Enum.reverse([eof | tokenize_text(buffer, acc)])} - end - - defp trim_and_tokenize(rest, line, column, state, buffer, acc, fun) do - {rest, line, column, buffer} = trim_if_needed(rest, line, column, state, buffer) - - acc = tokenize_text(buffer, acc) - tokenize(rest, line, column, state, [{line, column}], fun.(acc)) - end - - # Retrieve marker for <% - - defp retrieve_marker([marker | t]) when marker in [?=, ?/, ?|] do - {[marker], t} - end - - defp retrieve_marker(t) do - {'', t} - end - - # Tokenize a multi-line comment until we find --%> - - defp comment([?-, ?-, ?%, ?> | t], line, column, _state, buffer) do - {:ok, line, column + 4, t, buffer} - end - - defp comment('\n' ++ t, line, _column, state, buffer) do - comment(t, line + 1, state.indentation + 1, state, '\n' ++ buffer) - end - - defp comment([head | t], line, column, state, buffer) do - comment(t, line, column + 1, state, [head | buffer]) - end - - defp comment([], line, column, _state, _buffer) do - {:error, line, column, "missing token '--%>'"} - end - - # Tokenize an expression until we find %> - - defp expr([?%, ?> | t], line, column, _state, buffer) do - {:ok, Enum.reverse(buffer), line, column + 2, t} - end - - defp expr('\n' ++ t, line, _column, state, buffer) do - expr(t, line + 1, state.indentation + 1, state, [?\n | buffer]) - end - - defp expr([h | t], line, column, state, buffer) do - expr(t, line, column + 1, state, [h | buffer]) - end - - defp expr([], line, column, _state, _buffer) do - {:error, line, column, "missing token '%>'"} - end - - # Receives tokens and check if it is a start, middle or an end token. - defp token_key(tokens, expr) do - case {tokens, tokens |> Enum.reverse() |> drop_eol()} do - {[{:end, _} | _], [{:do, _} | _]} -> - {:middle_expr, expr} - - {_, [{:do, _} | _]} -> - {:start_expr, maybe_append_space(expr)} - - {_, [{:block_identifier, _, _} | _]} -> - {:middle_expr, maybe_append_space(expr)} - - {[{:end, _} | _], [{:stab_op, _, _} | _]} -> - {:middle_expr, expr} - - {_, [{:stab_op, _, _} | reverse_tokens]} -> - fn_index = Enum.find_index(reverse_tokens, &match?({:fn, _}, &1)) || :infinity - end_index = Enum.find_index(reverse_tokens, &match?({:end, _}, &1)) || :infinity - - if end_index > fn_index do - {:start_expr, expr} - else - {:middle_expr, expr} - end - - {tokens, _} -> - case Enum.drop_while(tokens, &closing_bracket?/1) do - [{:end, _} | _] -> {:end_expr, expr} - _ -> {:expr, expr} - end - end - end - - defp drop_eol([{:eol, _} | rest]), do: drop_eol(rest) - defp drop_eol(rest), do: rest - - defp maybe_append_space([?\s]), do: [?\s] - defp maybe_append_space([h]), do: [h, ?\s] - defp maybe_append_space([h | t]), do: [h | maybe_append_space(t)] - - defp closing_bracket?({closing, _}) when closing in ~w"( [ {"a, do: true - defp closing_bracket?(_), do: false - - # Tokenize the buffered text by appending - # it to the given accumulator. - - defp tokenize_text([{_line, _column}], acc) do - acc - end - - defp tokenize_text(buffer, acc) do - [{line, column} | buffer] = Enum.reverse(buffer) - [{:text, buffer, %{line: line, column: column}} | acc] - end - - ## Trim - - defp trim_if_needed(rest, line, column, state, buffer) do - if state.trim do - buffer = trim_left(buffer, 0) - {rest, line, column} = trim_right(rest, line, column, 0, state) - {rest, line, column, buffer} - else - {rest, line, column, buffer} - end - end - - defp trim_init([h | t], line, column, state) when h in @h_spaces, - do: trim_init(t, line, column + 1, state) - - defp trim_init([?\r, ?\n | t], line, _column, state), - do: trim_init(t, line + 1, state.indentation + 1, state) - - defp trim_init([?\n | t], line, _column, state), - do: trim_init(t, line + 1, state.indentation + 1, state) - - defp trim_init([?<, ?% | _] = rest, line, column, _state), - do: {rest, line, column} - - defp trim_init(_, _, _, _), do: false - - defp trim_left(buffer, count) do - case trim_whitespace(buffer, 0) do - {[?\n, ?\r | rest], _} -> trim_left(rest, count + 1) - {[?\n | rest], _} -> trim_left(rest, count + 1) - _ when count > 0 -> [?\n | buffer] - _ -> buffer - end - end - - defp trim_right(rest, line, column, last_column, state) do - case trim_whitespace(rest, column) do - {[?\r, ?\n | rest], column} -> - trim_right(rest, line + 1, state.indentation + 1, column + 1, state) - - {[?\n | rest], column} -> - trim_right(rest, line + 1, state.indentation + 1, column, state) - - {[], column} -> - {[], line, column} - - _ when last_column > 0 -> - {[?\n | rest], line - 1, last_column} - - _ -> - {rest, line, column} - end - end - - defp trim_whitespace([h | t], column) when h in @h_spaces, do: trim_whitespace(t, column + 1) - defp trim_whitespace(list, column), do: {list, column} -end diff --git a/lib/utils.ex b/lib/utils.ex index 2dfd267..42fa2fe 100644 --- a/lib/utils.ex +++ b/lib/utils.ex @@ -43,7 +43,7 @@ defmodule MjmlEEx.Utils do """ def escape_eex_expressions(template) do template - |> MjmlEEx.Tokenizer.tokenize([]) + |> EEx.Compiler.tokenize([]) |> case do {:ok, tokens} -> reduce_tokens(tokens) diff --git a/mix.exs b/mix.exs index cc6dc12..5e8f95e 100644 --- a/mix.exs +++ b/mix.exs @@ -4,8 +4,8 @@ defmodule MjmlEEx.MixProject do def project do [ app: :mjml_eex, - version: "0.10.0", - elixir: ">= 1.13.0", + version: project_version(), + elixir: ">= 1.15.0", elixirc_paths: elixirc_paths(Mix.env()), name: "MJML EEx", source_url: "https://github.com/akoutmos/mjml_eex", @@ -70,11 +70,11 @@ defmodule MjmlEEx.MixProject do {:erlexec, "~> 2.0", optional: true}, # Development deps - {:ex_doc, "~> 0.31", only: :dev}, + {:ex_doc, "~> 0.34", only: :dev}, {:excoveralls, "~> 0.18", only: [:test, :dev], runtime: false}, - {:doctor, "~> 0.21.0", only: :dev}, + {:doctor, "~> 0.21", only: :dev}, {:credo, "~> 1.7", only: :dev}, - {:git_hooks, "~> 0.7.3", only: [:test, :dev], runtime: false} + {:git_hooks, "~> 0.7", only: [:test, :dev], runtime: false} ] end @@ -84,6 +84,12 @@ defmodule MjmlEEx.MixProject do ] end + defp project_version do + "VERSION" + |> File.read!() + |> String.trim() + end + defp copy_files(_) do # Set up directory structure File.mkdir_p!("./doc/guides/images") diff --git a/mix.lock b/mix.lock index 25ec246..0b2700c 100644 --- a/mix.lock +++ b/mix.lock @@ -1,32 +1,24 @@ %{ "blankable": {:hex, :blankable, "1.0.0", "89ab564a63c55af117e115144e3b3b57eb53ad43ba0f15553357eb283e0ed425", [:mix], [], "hexpm", "7cf11aac0e44f4eedbee0c15c1d37d94c090cb72a8d9fddf9f7aec30f9278899"}, "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, - "castore": {:hex, :castore, "1.0.5", "9eeebb394cc9a0f3ae56b813459f990abb0a3dedee1be6b27fdb50301930502f", [:mix], [], "hexpm", "8d7c597c3e4a64c395980882d4bca3cebb8d74197c590dc272cfd3b6a6310578"}, - "certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"}, - "credo": {:hex, :credo, "1.7.4", "68ca5cf89071511c12fd9919eb84e388d231121988f6932756596195ccf7fd35", [: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", "9cf776d062c78bbe0f0de1ecaee183f18f2c3ec591326107989b054b7dddefc2"}, + "castore": {:hex, :castore, "1.0.7", "b651241514e5f6956028147fe6637f7ac13802537e895a724f90bf3e36ddd1dd", [:mix], [], "hexpm", "da7785a4b0d2a021cd1292a60875a784b6caef71e76bf4917bdee1f390455cf5"}, + "credo": {:hex, :credo, "1.7.6", "b8f14011a5443f2839b04def0b252300842ce7388f3af177157c86da18dfbeea", [: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", "146f347fb9f8cbc5f7e39e3f22f70acbef51d441baa6d10169dd604bfbc55296"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "doctor": {:hex, :doctor, "0.21.0", "20ef89355c67778e206225fe74913e96141c4d001cb04efdeba1a2a9704f1ab5", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "a227831daa79784eb24cdeedfa403c46a4cb7d0eab0e31232ec654314447e4e0"}, "earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"}, - "erlexec": {:hex, :erlexec, "2.0.3", "61d5eee44a514236e6bc779729010467a990f2dc9bda2373c4d1b2c0a11b2bc8", [:rebar3], [], "hexpm", "e6e364bd4cbed2a7862f4dcfcfa9f2a50eaf4f7937e261cf2e326ee3a9ab0f9a"}, - "ex_doc": {:hex, :ex_doc, "0.31.1", "8a2355ac42b1cc7b2379da9e40243f2670143721dd50748bf6c3b1184dae2089", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.1", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "3178c3a407c557d8343479e1ff117a96fd31bafe52a039079593fb0524ef61b0"}, - "excoveralls": {:hex, :excoveralls, "0.18.0", "b92497e69465dc51bc37a6422226ee690ab437e4c06877e836f1c18daeb35da9", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1109bb911f3cb583401760be49c02cbbd16aed66ea9509fc5479335d284da60b"}, + "erlexec": {:hex, :erlexec, "2.0.6", "b7443121cfb8add8bc25e3db9c1fd79d14613bbc406984264a0bbc62f121f377", [:rebar3], [], "hexpm", "8c4ebc02449f838648d9854d1c4dc7257e57d4ea2098a7e6386348372085ab21"}, + "ex_doc": {:hex, :ex_doc, "0.34.0", "ab95e0775db3df71d30cf8d78728dd9261c355c81382bcd4cefdc74610bef13e", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "60734fb4c1353f270c3286df4a0d51e65a2c1d9fba66af3940847cc65a8066d7"}, + "excoveralls": {:hex, :excoveralls, "0.18.1", "a6f547570c6b24ec13f122a5634833a063aec49218f6fff27de9df693a15588c", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d65f79db146bb20399f23046015974de0079668b9abb2f5aac074d078da60b8d"}, "file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"}, "git_hooks": {:hex, :git_hooks, "0.7.3", "09489e94d88dfc767662e22aff2b6208bd7cf555a19dd0e1477cca4683ce0701", [:mix], [{:blankable, "~> 1.0.0", [hex: :blankable, repo: "hexpm", optional: false]}, {:recase, "~> 0.7.0", [hex: :recase, repo: "hexpm", optional: false]}], "hexpm", "d6ddedeb4d3a8602bc3f84e087a38f6150a86d9e790628ed8bc70e6d90681659"}, - "hackney": {:hex, :hackney, "1.20.1", "8d97aec62ddddd757d128bfd1df6c5861093419f8f7a4223823537bad5d064e2", [:rebar3], [{:certifi, "~> 2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fe9094e5f1a2a2c0a7d10918fee36bfec0ec2a979994cff8cfe8058cd9af38e3"}, - "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"}, - "makeup": {:hex, :makeup, "1.1.1", "fa0bc768698053b2b3869fa8a62616501ff9d11a562f3ce39580d60860c3a55e", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5dc62fbdd0de44de194898b6710692490be74baa02d9d108bc29f007783b0b48"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"}, - "makeup_erlang": {:hex, :makeup_erlang, "0.1.4", "29563475afa9b8a2add1b7a9c8fb68d06ca7737648f28398e04461f008b69521", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f4ed47ecda66de70dd817698a703f8816daa91272e7e45812469498614ae8b29"}, - "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mjml": {:hex, :mjml, "3.0.0", "44334338ead5707418ee8c1f53116027f1addfde267b61a193aff24cc4d689e7", [:mix], [{:rustler, ">= 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.7.0", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "709910481e038f1f5cd9df6a88a434ccd13b8cf5a7a16e47677667a33487287e"}, + "makeup": {:hex, :makeup, "1.1.2", "9ba8837913bdf757787e71c1581c21f9d2455f4dd04cfca785c70bbfff1a76a3", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cce1566b81fbcbd21eca8ffe808f33b221f9eee2cbc7a1706fc3da9ff18e6cac"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"}, + "makeup_erlang": {:hex, :makeup_erlang, "1.0.0", "6f0eff9c9c489f26b69b61440bf1b238d95badae49adac77973cbacae87e3c2e", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "ea7a9307de9d1548d2a72d299058d1fd2339e3d398560a0e46c27dab4891e4d2"}, + "mjml": {:hex, :mjml, "3.1.0", "549e985bc03be1af563c62a34c8e62bdb8d0baaa6b31af705a5bdf67e20f22b7", [:mix], [{:rustler, ">= 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.7.0", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "987674d296b14b628e5e5d2d8b910e6501cdfafa0239527d8b633880dc595344"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, - "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, - "phoenix_html": {:hex, :phoenix_html, "4.0.0", "4857ec2edaccd0934a923c2b0ba526c44a173c86b847e8db725172e9e51d11d6", [:mix], [], "hexpm", "cee794a052f243291d92fa3ccabcb4c29bb8d236f655fb03bcbdc3a8214b8d13"}, + "phoenix_html": {:hex, :phoenix_html, "4.1.1", "4c064fd3873d12ebb1388425a8f2a19348cef56e7289e1998e2d2fa758aa982e", [:mix], [], "hexpm", "f2f2df5a72bc9a2f510b21497fd7d2b86d932ec0598f0210fed4114adc546c6f"}, "recase": {:hex, :recase, "0.7.0", "3f2f719f0886c7a3b7fe469058ec539cb7bbe0023604ae3bce920e186305e5ae", [:mix], [], "hexpm", "36f5756a9f552f4a94b54a695870e32f4e72d5fad9c25e61bc4a3151c08a4e0c"}, "rustler_precompiled": {:hex, :rustler_precompiled, "0.7.1", "ecadf02cc59a0eccbaed6c1937303a5827fbcf60010c541595e6d3747d3d0f9f", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, "~> 0.23", [hex: :rustler, repo: "hexpm", optional: true]}], "hexpm", "b9e4657b99a1483ea31502e1d58c464bedebe9028808eda45c3a429af4550c66"}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, } From 13bb56a6dee7742f11b8849456ee0cc300fa5e27 Mon Sep 17 00:00:00 2001 From: Alex Koutmos Date: Tue, 4 Jun 2024 13:54:12 -0400 Subject: [PATCH 2/7] Updating CI matrix --- .github/workflows/main.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4b77438..0eb7e44 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,10 +52,8 @@ jobs: strategy: matrix: - elixir: - - "1.15.0" - otp: - - "24.2" + otp: ["25", "26", "27"] + elixir: ["15", "16", "17"] steps: - name: Checkout code From 4953a7a0e0687854a80e024009e7012dc580f636 Mon Sep 17 00:00:00 2001 From: Alex Koutmos Date: Tue, 4 Jun 2024 13:57:42 -0400 Subject: [PATCH 3/7] Updating CI matrix --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0eb7e44..4ad4e2f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,8 +52,8 @@ jobs: strategy: matrix: - otp: ["25", "26", "27"] - elixir: ["15", "16", "17"] + otp: ["26.2", "27.0"] + elixir: ["1.15.8", "1.16.3", "1.17.0-rc.1"] steps: - name: Checkout code From bc4ca77bf20ff09862bc00f6fd4029dea1eff3f7 Mon Sep 17 00:00:00 2001 From: Alex Koutmos Date: Tue, 4 Jun 2024 15:47:18 -0400 Subject: [PATCH 4/7] Updating CI matrix --- .github/workflows/main.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4ad4e2f..4333923 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,9 +51,12 @@ jobs: runs-on: ubuntu-latest strategy: - matrix: - otp: ["26.2", "27.0"] - elixir: ["1.15.8", "1.16.3", "1.17.0-rc.1"] + - matrix.otp: 26.2 + matrix.elixir: 1.15.8 + - matrix.otp: 26.2 + matrix.elixir: 1.16.3 + - matrix.otp: 27.0 + matrix.elixir: 1.17.0-rc.1 steps: - name: Checkout code From c5a896a52aec5a11bf12e4fda608c02a84d0a0a4 Mon Sep 17 00:00:00 2001 From: Alex Koutmos Date: Tue, 4 Jun 2024 15:51:29 -0400 Subject: [PATCH 5/7] Updating CI matrix --- .github/workflows/main.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4333923..a2327f1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,12 +51,14 @@ jobs: runs-on: ubuntu-latest strategy: - - matrix.otp: 26.2 - matrix.elixir: 1.15.8 - - matrix.otp: 26.2 - matrix.elixir: 1.16.3 - - matrix.otp: 27.0 - matrix.elixir: 1.17.0-rc.1 + matrix: + version: + - otp: 26.2 + elixir: 1.15.8 + - otp: 26.2 + elixir: 1.16.3 + - otp: 27.0 + elixir: 1.17.0-rc.1 steps: - name: Checkout code @@ -64,8 +66,8 @@ jobs: - name: Set up Elixir uses: erlef/setup-beam@v1 with: - elixir-version: ${{ matrix.elixir }} - otp-version: ${{ matrix.otp }} + elixir-version: ${{ matrix.version.elixir }} + otp-version: ${{ matrix.version.otp }} - name: Set up Node uses: actions/setup-node@v3 with: From e3685be0e1982ed6be351efeb0418aecfc41262f Mon Sep 17 00:00:00 2001 From: Alex Koutmos Date: Tue, 4 Jun 2024 15:55:57 -0400 Subject: [PATCH 6/7] Updating CI matrix --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a2327f1..4a215f1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,11 +17,11 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Elixir uses: erlef/setup-beam@v1 with: - elixir-version: "1.15.0" + elixir-version: "1.16.3" otp-version: "26.2" - name: Restore dependencies cache uses: actions/cache@v2 @@ -62,7 +62,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Elixir uses: erlef/setup-beam@v1 with: @@ -71,7 +71,7 @@ jobs: - name: Set up Node uses: actions/setup-node@v3 with: - node-version: 15 + node-version: 22 - name: Restore dependencies cache uses: actions/cache@v2 with: From c51eaeb5538bb7490daf201c07c0de1e00ce8cde Mon Sep 17 00:00:00 2001 From: Alex Koutmos Date: Tue, 4 Jun 2024 15:59:25 -0400 Subject: [PATCH 7/7] Updating CI matrix --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4a215f1..bd60241 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -71,7 +71,7 @@ jobs: - name: Set up Node uses: actions/setup-node@v3 with: - node-version: 22 + node-version: 18 - name: Restore dependencies cache uses: actions/cache@v2 with: