From 400d134655e88de4cb70347116e6482b17139ac6 Mon Sep 17 00:00:00 2001 From: Dan McGuire Date: Mon, 23 May 2022 17:14:56 -0500 Subject: [PATCH] replaces mojito(deprecated) with finch default http client (#6) * replaces mojito(deprecated) with finch default http client * update readme and changelog * circleci not used anymore Co-authored-by: Dan McGuire Co-authored-by: James Dalton <5264856+tarpdalton@users.noreply.github.com> --- .circleci/config.yml | 49 ----------------------------------- CHANGELOG.md | 34 ++++++++++++++++-------- README.md | 32 +++++++++++++---------- config/config.exs | 2 +- lib/client/finch.ex | 28 ++++++++++++++++++++ lib/client/mojito.ex | 22 ---------------- lib/consul_config_provider.ex | 6 ++--- mix.exs | 16 ++++++------ mix.lock | 32 ++++++++++++----------- 9 files changed, 99 insertions(+), 122 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 lib/client/finch.ex delete mode 100644 lib/client/mojito.ex diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 46c6bbc..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,49 +0,0 @@ -version: 2 # use CircleCI 2.0 instead of CircleCI Classic -jobs: # basic units of work in a run - build: # runs not using Workflows must have a `build` job as entry point - parallelism: 1 # run only one instance of this job in parallel - docker: # run the steps with Docker - - image: circleci/elixir:1.9.1 # ...with this image as the primary container; this is where all `steps` will run - environment: # environment variables for primary container - MIX_ENV: test - - working_directory: ~/app # directory where steps will run - - steps: # commands that comprise the `build` job - - checkout # check out source code to working directory - - - run: mix local.hex --force # install Hex locally (without prompt) - - run: mix local.rebar --force # fetch a copy of rebar (without prompt) - - - restore_cache: # restores saved mix cache - # Read about caching dependencies: https://circleci.com/docs/2.0/caching/ - keys: # list of cache keys, in decreasing specificity - - v1-mix-cache-{{ .Branch }}-{{ checksum "mix.lock" }} - - v1-mix-cache-{{ .Branch }} - - v1-mix-cache - - restore_cache: # restores saved build cache - keys: - - v1-build-cache-{{ .Branch }} - - v1-build-cache - - run: mix do deps.get, compile # get updated dependencies & compile them - - save_cache: # generate and store mix cache - key: v1-mix-cache-{{ .Branch }}-{{ checksum "mix.lock" }} - paths: "deps" - - save_cache: # make another, less specific cache - key: v1-mix-cache-{{ .Branch }} - paths: "deps" - - save_cache: # you should really save one more cache (just in case) - key: v1-mix-cache - paths: "deps" - - save_cache: # don't forget to save a *build* cache, too - key: v1-build-cache-{{ .Branch }} - paths: "_build" - - save_cache: # and one more build cache for good measure - key: v1-build-cache - paths: "_build" - - - run: mix test # run all tests in project - - - store_test_results: # upload junit test results for display in Test Summary - # Read more: https://circleci.com/docs/2.0/collect-test-data/ - path: _build/test/lib/consul_config_provider # Replace with the name of your \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e64f475..49eaf5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,36 +1,48 @@ -### Changelog: +# Changelog -#### v0.2.2 +## v0.2.4 (2022-05-23) + +- Switch from mojito to finch since mojito is deprecated +- bump lib versions + - jason + - ex_doc + - stream_data + - yaml_elixir + - telemetry + - mox + +## v0.2.2 - hex release -#### v0.2.1 +## v0.2.1 - allow dry run -#### v0.2.0 +## v0.2.0 - Support for CONSUL_PREFIX - Breaking changes - Changes how tranforms are done -#### v0.1.4 +## v0.1.4 -- Namespace modules by `ConsulConfigProvider` (https://github.com/blueshift-labs/consul_config_provider/pull/1) -- Do not force compiling the request function (https://github.com/blueshift-labs/consul_config_provider/pull/2) +- Namespace modules by `ConsulConfigProvider` [#1](https://github.com/blueshift-labs/consul_config_provider/pull/1) +- Do not force compiling the request function [#2](https://github.com/blueshift-labs/consul_config_provider/pull/2) - README.md updates -#### v0.1.3 +## v0.1.3 - Adding in ConsulConfigProvider.Transformer behaviour -#### v0.1.2 +## v0.1.2 - Updating README.md and recursive string_atoms -#### v0.1.1 +## v0.1.1 - Upgrading mojito version to 0.6.0 and refactoring -#### v0.1.0 +## v0.1.0 + - Initial implementation diff --git a/README.md b/README.md index 77cfec9..7e52ab0 100644 --- a/README.md +++ b/README.md @@ -12,17 +12,19 @@ The package can be installed by adding `consul_config_provider` to your list of def deps do [ {:consul_config_provider, "~> 0.2"}, - {:mojito, "~> 0.7"}, # default implmentation for http client + {:finch, "~> 0.12"}, # default implementation for http client ] end ``` -* Only add in mojito if you want to use the default http behaviour and not define your own client + +- Only add in finch if you want to use the default http behaviour and not define your own client The docs can be found at [https://hexdocs.pm/consul_config_provider](https://hexdocs.pm/consul_config_provider). -### Sample Usage +## Sample Usage + +- In `mix.exs` -* In mix.exs ```elixir releases: [ release_name: [ @@ -40,8 +42,9 @@ releases: [ ``` ### Transformer -- You can also implement an optional transformer behaviour to change the form of your configs. -- This is helpful for interopt with erlang modules that might have different opinions about things + +- You can also implement an optional transformer behaviour to change the form of your configs +- This is helpful for interop with erlang modules that might have different opinions about things ```elixir defmodule Example.Config do @@ -71,20 +74,23 @@ end ``` Then in your configs: + ```elixir config :consul_config_provider, transformer_module: Example.Config ``` -### Information -* This provider assumes the config name has a file extension which is either `.json`, `.yml`, or `.yaml` no other extensions are supported although PRs would be welcomed. If you do not follow this naming convention the provider will not work and throw. -* In the above the `prefix` is used for the keys path and can also be set with `CONSUL_PREFIX` (provide an empty string to the prefix if you wish to just use the env var) -* The `CONSUL_HOST` env var is used for the host to talk to consul and defaults to localhost -* The `CONSUL_PORT` env var is used for the port to talk to consul and defaults to 8500 -* The http_module is dynamic and you can specify your own if you choose to do so. Just implement the HTTP behaviour and make your implementation return an `{:ok, json_body_binary_string}` as per the mojito example which will be the fallback. You might have to deal with coercing the input keyword list for the mojito arguments to support the client you are using, as well. You also need to set `config :consul_config_provider, :http_module, Client.YourClient` pointing to your client in your configs. -* Dependency-related configs are namespaced with their own application name while other configs use the input app_name for their namespace +## Information + +- This provider assumes the config name has a file extension which is either `.json`, `.yml`, or `.yaml` no other extensions are supported although PRs would be welcomed. If you do not follow this naming convention the provider will not work and throw. +- In the above the `prefix` is used for the keys path and can also be set with `CONSUL_PREFIX` (provide an empty string to the prefix if you wish to just use the env var) +- The `CONSUL_HOST` env var is used for the host to talk to consul and defaults to localhost +- The `CONSUL_PORT` env var is used for the port to talk to consul and defaults to 8500 +- The http_module is dynamic and you can specify your own if you choose to do so. Just implement the HTTP behaviour and make your implementation return an `{:ok, json_body_binary_string}` as per the finch example which will be the fallback. You might have to deal with coercing the input keyword list for the finch arguments to support the client you are using, as well. You also need to set `config :consul_config_provider, :http_module, Client.YourClient` pointing to your client in your configs. +- Dependency-related configs are namespaced with their own application name while other configs use the input app_name for their namespace ## Release - Increment [mix.exs project version](https://github.com/blueshift-labs/consul_config_provider/blob/master/mix.exs#L7) +- Update CHANGELOG.md - Create a release in the [github ui](https://github.com/blueshift-labs/consul_config_provider/releases/new) - Github actions will create a hex release and upload it diff --git a/config/config.exs b/config/config.exs index 5c6f9c6..8688cb3 100644 --- a/config/config.exs +++ b/config/config.exs @@ -1,7 +1,7 @@ # General application configuration import Config -config :consul_config_provider, :http_module, ConsulConfigProvider.Client.Mojito +config :consul_config_provider, :http_module, ConsulConfigProvider.Client.Finch # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. diff --git a/lib/client/finch.ex b/lib/client/finch.ex new file mode 100644 index 0000000..c46a000 --- /dev/null +++ b/lib/client/finch.ex @@ -0,0 +1,28 @@ +defmodule ConsulConfigProvider.Client.Finch do + @moduledoc "Http client using finch" + @behaviour ConsulConfigProvider.Http + @compile {:inline, request: 1} + + if match?({:module, _}, Code.ensure_compiled(Finch)) do + @impl true + def request(method: method, url: url) do + {:ok, _} = Application.ensure_all_started(:telemetry) + pid = Process.whereis(ConsulConfigDefaultHTTPClient) + + if pid == nil do + Finch.start_link(name: ConsulConfigDefaultHTTPClient) + end + + headers = [{"Content-Type", "application/json"}] + pool_opts = %{default: [max_idle_time: 60_000, size: 10, count: 1]} + finch_req = Finch.build(method, url, headers, nil, [pools: pool_opts]) + {:ok, %Finch.Response{body: body}} = Finch.request(finch_req, ConsulConfigDefaultHTTPClient) + {:ok, body} + end + else + @impl true + def request(_request_opts) do + {:error, :finch_not_compiled} + end + end +end diff --git a/lib/client/mojito.ex b/lib/client/mojito.ex deleted file mode 100644 index 1686f54..0000000 --- a/lib/client/mojito.ex +++ /dev/null @@ -1,22 +0,0 @@ -defmodule ConsulConfigProvider.Client.Mojito do - @moduledoc "Http client using mojito" - @behaviour ConsulConfigProvider.Http - @compile {:inline, request: 1} - - if match?({:module, _}, Code.ensure_compiled(Mojito)) do - @impl true - def request(request_opts) do - {:ok, _} = Application.ensure_all_started(:telemetry) - - case Mojito.request(request_opts) do - {:ok, %Mojito.Response{body: body}} -> {:ok, body} - {:error, any} -> {:error, any} - end - end - else - @impl true - def request(_request_opts) do - {:error, :mojito_not_compiled} - end - end -end diff --git a/lib/consul_config_provider.ex b/lib/consul_config_provider.ex index 90db766..50f96d8 100644 --- a/lib/consul_config_provider.ex +++ b/lib/consul_config_provider.ex @@ -18,13 +18,13 @@ defmodule ConsulConfigProvider do http_module = get_in(config, [:consul_config_provider, :http_module]) |> case do - nil -> ConsulConfigProvider.Client.Mojito + nil -> ConsulConfigProvider.Client.Finch mod -> mod end transformer_module = get_in(config, [:consul_config_provider, :transformer_module]) - {:ok, body} = http_module.request(method: :get, url: keys_url, opts: [pool: false]) + {:ok, body} = http_module.request(method: :get, url: keys_url) consul_configs = body @@ -59,7 +59,7 @@ defmodule ConsulConfigProvider do defp get_consul_key(http_module, host, port, prefix, key_name) do url = "http://#{host}:#{port}/v1/kv/#{prefix}/#{key_name}" - {:ok, body} = http_module.request(method: :get, url: url, opts: [pool: false]) + {:ok, body} = http_module.request(method: :get, url: url) key_val = body diff --git a/mix.exs b/mix.exs index 31f6f10..ccb6267 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule ConsulConfigProvider.MixProject do def project do [ app: :consul_config_provider, - version: "0.2.3", + version: "0.2.4", elixir: "~> 1.9", start_permanent: Mix.env() == :prod, deps: deps(), @@ -34,13 +34,13 @@ defmodule ConsulConfigProvider.MixProject do # Run "mix help deps" to learn about dependencies. defp deps do [ - {:telemetry, "~> 0.4"}, - {:ex_doc, "~> 0.24", only: :dev, runtime: false}, - {:jason, "~> 1.2"}, - {:mojito, "~> 0.7", optional: true}, - {:mox, "~> 0.5", only: :test}, - {:stream_data, "~> 0.1", only: :test}, - {:yaml_elixir, "~> 2.6"} + {:telemetry, "~> 1.1"}, + {:ex_doc, "~> 0.28", only: :dev, runtime: false}, + {:jason, "~> 1.3"}, + {:mox, "~> 1.0", only: :test}, + {:stream_data, "~> 0.5", only: :test}, + {:yaml_elixir, "~> 2.9"}, + {:finch, "~> 0.12", optional: true} ] end diff --git a/mix.lock b/mix.lock index 0745d51..9006921 100644 --- a/mix.lock +++ b/mix.lock @@ -1,19 +1,21 @@ %{ - "castore": {:hex, :castore, "0.1.9", "eb08a94c12ebff92a92d844c6ccd90728dc7662aab9bdc8b3b785ba653c499d5", [:mix], [], "hexpm", "99c3a38ad9c0bab03fee1418c98390da1a31f3b85e317db5840d51a1443d26c8"}, - "earmark": {:hex, :earmark, "1.3.4", "52aba89c60529284df5fc18adc4c808b7346e72668bc2fb2b68d7394996c4af8", [:mix], [], "hexpm", "ed3afe716cee24d65bcdd432857d3388693a944171a13144059b70a6924a044d"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.12", "b245e875ec0a311a342320da0551da407d9d2b65d98f7a9597ae078615af3449", [:mix], [], "hexpm", "711e2cc4d64abb7d566d43f54b78f7dc129308a63bc103fbd88550d2174b3160"}, - "ex_doc": {:hex, :ex_doc, "0.24.1", "15673de99154f93ca7f05900e4e4155ced1ee0cd34e0caeee567900a616871a4", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "07972f17bdf7dc7b5bd76ec97b556b26178ed3f056e7ec9288eb7cea7f91cce2"}, - "jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"}, - "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.15.1", "b5888c880d17d1cc3e598f05cdb5b5a91b7b17ac4eaf5f297cb697663a1094dd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "db68c173234b07ab2a07f645a5acdc117b9f99d69ebf521821d89690ae6c6ec8"}, + "castore": {:hex, :castore, "0.1.17", "ba672681de4e51ed8ec1f74ed624d104c0db72742ea1a5e74edbc770c815182f", [:mix], [], "hexpm", "d9844227ed52d26e7519224525cb6868650c272d4a3d327ce3ca5570c12163f9"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.25", "2024618731c55ebfcc5439d756852ec4e85978a39d0d58593763924d9a15916f", [:mix], [], "hexpm", "56749c5e1c59447f7b7a23ddb235e4b3defe276afc220a6227237f3efe83f51e"}, + "ex_doc": {:hex, :ex_doc, "0.28.4", "001a0ea6beac2f810f1abc3dbf4b123e9593eaa5f00dd13ded024eae7c523298", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bf85d003dd34911d89c8ddb8bda1a958af3471a274a4c2150a9c01c78ac3f8ed"}, + "finch": {:hex, :finch, "0.12.0", "6bbb3e0bb62dd91cd1217d9682a30f5bfc9b0b74950bf10a0b4d4399c2076892", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "320da3f32459e7dcb77f4271b4f2445ba6c5d32cc3c7cca8e2cff599e24be5a6"}, + "hpax": {:hex, :hpax, "0.1.1", "2396c313683ada39e98c20a75a82911592b47e5c24391363343bde74f82396ca", [:mix], [], "hexpm", "0ae7d5a0b04a8a60caf7a39fcf3ec476f35cc2cc16c05abea730d3ce6ac6c826"}, + "jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"}, + "makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"}, "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, - "mint": {:hex, :mint, "1.2.1", "369cc8fecc54afd170e11740aa7efd066709e5ef3b5a2c63f0a47d1542cbd56a", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "053fe2f48c965f31878a16272478d9299fa412bc4df86dee2678986f2e40e018"}, - "mojito": {:hex, :mojito, "0.7.7", "23fc76342227d554405628877c883ad8a42ef32a47dabefb632048d83b67e03f", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 1.1", [hex: :mint, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b95592a52606709f040cf5ee91fa9d96da2a6763f5381f284043cbc2b6777653"}, - "mox": {:hex, :mox, "0.5.2", "55a0a5ba9ccc671518d068c8dddd20eeb436909ea79d1799e2209df7eaa98b6c", [:mix], [], "hexpm", "df4310628cd628ee181df93f50ddfd07be3e5ecc30232d3b6aadf30bdfe6092b"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"}, - "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, + "mime": {:hex, :mime, "2.0.2", "0b9e1a4c840eafb68d820b0e2158ef5c49385d17fb36855ac6e7e087d4b1dcc5", [:mix], [], "hexpm", "e6a3f76b4c277739e36c2e21a2c640778ba4c3846189d5ab19f97f126df5f9b7"}, + "mint": {:hex, :mint, "1.4.1", "49b3b6ea35a9a38836d2ad745251b01ca9ec062f7cb66f546bf22e6699137126", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "cd261766e61011a9079cccf8fa9d826e7a397c24fbedf0e11b49312bea629b58"}, + "mox": {:hex, :mox, "1.0.1", "b651bf0113265cda0ba3a827fcb691f848b683c373b77e7d7439910a8d754d6e", [:mix], [], "hexpm", "35bc0dea5499d18db4ef7fe4360067a59b06c74376eb6ab3bd67e6295b133469"}, + "nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, + "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "stream_data": {:hex, :stream_data, "0.5.0", "b27641e58941685c75b353577dc602c9d2c12292dd84babf506c2033cd97893e", [:mix], [], "hexpm", "012bd2eec069ada4db3411f9115ccafa38540a3c78c4c0349f151fc761b9e271"}, - "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, - "yamerl": {:hex, :yamerl, "0.8.1", "07da13ffa1d8e13948943789665c62ccd679dfa7b324a4a2ed3149df17f453a4", [:rebar3], [], "hexpm", "96cb30f9d64344fed0ef8a92e9f16f207de6c04dfff4f366752ca79f5bceb23f"}, - "yaml_elixir": {:hex, :yaml_elixir, "2.6.0", "1f469e4e7b006df44539685feb0a9d0d58c98230cef4ecd264ea116eb18e5d09", [:mix], [{:yamerl, "~> 0.8", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm", "e40abb99a65e98020929d3e9b310c9f0f62aa76c3be7c0ada2aa440e12b258d9"}, + "telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"}, + "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"}, + "yaml_elixir": {:hex, :yaml_elixir, "2.9.0", "9a256da867b37b8d2c1ffd5d9de373a4fda77a32a45b452f1708508ba7bbcb53", [:mix], [{:yamerl, "~> 0.10", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm", "0cb0e7d4c56f5e99a6253ed1a670ed0e39c13fc45a6da054033928607ac08dfc"}, }