From 8b53666134051e2b839f1a82acf39a83bd6919e7 Mon Sep 17 00:00:00 2001 From: Pascal Schmid Date: Sat, 15 Jul 2023 23:52:46 +0200 Subject: [PATCH] Fix build brod dependency snappyer didn't built anymore --- .dockerignore | 49 +++++++++++++++++++++++++++++++--------- .tool-versions | 6 +++-- Dockerfile | 35 ++++++++++++++++++---------- config/prod.exs | 4 ++-- kafkaex_lag_exporter.iml | 13 +++++++++++ mix.exs | 2 +- mix.lock | 6 ++--- 7 files changed, 84 insertions(+), 31 deletions(-) diff --git a/.dockerignore b/.dockerignore index a03cecf..61a7393 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,18 +1,45 @@ +# This file excludes paths from the Docker build context. +# +# By default, Docker's build context includes all files (and folders) in the +# current directory. Even if a file isn't copied into the container it is still sent to +# the Docker daemon. +# +# There are multiple reasons to exclude files from the build context: +# +# 1. Prevent nested folders from being copied into the container (ex: exclude +# /assets/node_modules when copying /assets) +# 2. Reduce the size of the build context and improve build time (ex. /build, /deps, /doc) +# 3. Avoid sending files containing sensitive information +# +# More information on using .dockerignore is available here: +# https://docs.docker.com/engine/reference/builder/#dockerignore-file + .dockerignore -# there are valid reasons to keep the .git, namely so that you can get the -# current commit hash -#.git -.log -tmp + +# Ignore git, but keep git HEAD and refs to access current commit hash if needed: +# +# $ cat .git/HEAD | awk '{print ".git/"$2}' | xargs cat +# d0b8727759e1e0e7aa3d41707d12376e373d5ecc +.git +!.git/HEAD +!.git/refs + +# Common development/test artifacts +/cover/ +/doc/ +/test/ +/tmp/ +.elixir_ls # Mix artifacts -_build -deps +/_build/ +/deps/ *.ez -releases -# Generate on crash by the VM +# Generated on crash by the VM erl_crash.dump -# Static artifacts -node_modules +# Static artifacts - These should be fetched and built inside the Docker image +/assets/node_modules/ +/priv/static/assets/ +/priv/static/cache_manifest.json diff --git a/.tool-versions b/.tool-versions index 8facea2..39c4202 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,4 @@ -elixir 1.14.4-otp-24 -erlang 24.3.1 +elixir 1.15.2-otp-26 +erlang 26.0.2 +tilt 0.32.3 +kind 0.19.0 diff --git a/Dockerfile b/Dockerfile index f181e44..5db4361 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,16 +8,21 @@ # This file is based on these images: # # - https://hub.docker.com/r/hexpm/elixir/tags - for the build image -# - https://hub.docker.com/_/debian?tab=tags&page=1&name=bullseye-20210902-slim - for the release image +# - https://hub.docker.com/_/debian?tab=tags&page=1&name=bullseye-20230612-slim - for the release image # - https://pkgs.org/ - resource for finding needed packages -# - Ex: hexpm/elixir:1.13.3-erlang-23.2.3-debian-bullseye-20210902-slim +# - Ex: hexpm/elixir:1.15.2-erlang-26.0.2-debian-bullseye-20230612-slim # -ARG DOCKER_IMAGE="hexpm/elixir:1.14.4-erlang-24.3.1-alpine-3.18.0" +ARG ELIXIR_VERSION=1.15.2 +ARG OTP_VERSION=26.0.2 +ARG ALPINE_VERSION=3.18.2 -FROM ${DOCKER_IMAGE} as builder +ARG BUILDER_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-alpine-${ALPINE_VERSION}" +ARG RUNNER_IMAGE="alpine:${ALPINE_VERSION}" + +FROM ${BUILDER_IMAGE} as builder # install build dependencies -RUN apk add g++ +RUN apk add g++ git # prepare build dir WORKDIR /app @@ -31,7 +36,6 @@ ENV MIX_ENV="prod" # install mix dependencies COPY mix.exs mix.lock ./ - RUN mix deps.get --only $MIX_ENV RUN mkdir config @@ -41,9 +45,9 @@ RUN mkdir config COPY config/config.exs config/${MIX_ENV}.exs config/ RUN mix deps.compile -# Compile the release COPY lib lib +# Compile the release RUN mix compile # Changes to config/runtime.exs don't require recompiling the code @@ -54,20 +58,27 @@ RUN mix release # start a new build stage so that the final image will only contain # the compiled release and other runtime necessities -FROM ${DOCKER_IMAGE} +FROM ${RUNNER_IMAGE} + +#RUN apt-get update -y && apt-get install -y libstdc++6 openssl libncurses5 locales \ +# && apt-get clean && rm -f /var/lib/apt/lists/*_* +RUN apk add g++ ncurses # Set the locale #RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen -#ENV LANG en_US.UTF-8 -#ENV LANGUAGE en_US:en -#ENV LC_ALL en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 WORKDIR "/app" RUN chown nobody /app +# set runner ENV +ENV MIX_ENV="prod" + # Only copy the final release from the build stage -COPY --from=builder --chown=nobody:root /app/_build/prod/rel/kafkaex_lag_exporter ./ +COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/kafkaex_lag_exporter ./ USER nobody diff --git a/config/prod.exs b/config/prod.exs index a63203a..9a7d300 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -9,8 +9,8 @@ import Config # manifest is generated by the `mix phx.digest` task, # which you should run after static files are built and # before starting your production server. -config :kafkaex_lag_exporter, KafkaexLagExporterWeb.Endpoint, - cache_static_manifest: "priv/static/cache_manifest.json" +#config :kafkaex_lag_exporter, KafkaexLagExporterWeb.Endpoint, +# cache_static_manifest: "priv/static/cache_manifest.json" # Do not print debug messages in production config :logger, level: :info diff --git a/kafkaex_lag_exporter.iml b/kafkaex_lag_exporter.iml index 60834cd..1b8ddbe 100644 --- a/kafkaex_lag_exporter.iml +++ b/kafkaex_lag_exporter.iml @@ -85,6 +85,8 @@ + + @@ -150,5 +152,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/mix.exs b/mix.exs index bd329e5..915912b 100644 --- a/mix.exs +++ b/mix.exs @@ -39,7 +39,7 @@ defmodule KafkaexLagExporter.MixProject do {:plug_cowboy, "~> 2.6.1"}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.0", only: [:dev], runtime: false}, - {:brod, "~> 3.16.1"}, + {:brod, git: "https://github.com/kafka4beam/brod", ref: "0582dbbe1a619f8356caeb7a4c03e92650ac69ac"}, {:prom_ex, "~> 1.8.0"} ] end diff --git a/mix.lock b/mix.lock index 81e3ff1..fcb2350 100644 --- a/mix.lock +++ b/mix.lock @@ -1,5 +1,5 @@ %{ - "brod": {:hex, :brod, "3.16.5", "c1ef9264bdc8d72e8f5b82234f1ad7f05c82f769851ed85393376a0d4b430812", [:rebar3], [{:kafka_protocol, "4.1.0", [hex: :kafka_protocol, repo: "hexpm", optional: false]}, {:snappyer, "1.2.8", [hex: :snappyer, repo: "hexpm", optional: false]}, {:supervisor3, "1.1.11", [hex: :supervisor3, repo: "hexpm", optional: false]}], "hexpm", "fad2d9c644ccdc6cda25dd96cee78376261f053e28ca0403f787338f4b20cc40"}, + "brod": {:git, "https://github.com/kafka4beam/brod", "0582dbbe1a619f8356caeb7a4c03e92650ac69ac", [ref: "0582dbbe1a619f8356caeb7a4c03e92650ac69ac"]}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "castore": {:hex, :castore, "1.0.1", "240b9edb4e9e94f8f56ab39d8d2d0a57f49e46c56aced8f873892df8ff64ff5a", [:mix], [], "hexpm", "b4951de93c224d44fac71614beabd88b71932d0b1dea80d2f80fb9044e01bbb3"}, "cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"}, @@ -13,7 +13,7 @@ "finch": {:hex, :finch, "0.16.0", "40733f02c89f94a112518071c0a91fe86069560f5dbdb39f9150042f44dcfb1a", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [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 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f660174c4d519e5fec629016054d60edd822cdfe2b7270836739ac2f97735ec5"}, "hpax": {:hex, :hpax, "0.1.2", "09a75600d9d8bbd064cdd741f21fc06fc1f4cf3d0fcc335e5aa19be1a7235c84", [:mix], [], "hexpm", "2c87843d5a23f5f16748ebe77969880e29809580efdaccd615cd3bed628a8c13"}, "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, - "kafka_protocol": {:hex, :kafka_protocol, "4.1.0", "53fac8866969484f783bff204bd4e41e62a97ce9753c83f802a08d5bfc0e0c4c", [:rebar3], [{:crc32cer, "0.1.8", [hex: :crc32cer, repo: "hexpm", optional: false]}], "hexpm", "61cb8b80199bf95122cf8073e0f4c0ad62f82515b4d44c54f946a5972c3f5fa5"}, + "kafka_protocol": {:hex, :kafka_protocol, "4.1.2", "ee45db88bd83526b1d3079de19d5331ad7d755e549c00ec6f2caa47c591e9588", [:rebar3], [{:crc32cer, "0.1.8", [hex: :crc32cer, repo: "hexpm", optional: false]}], "hexpm", "04ad1a8cd2a57479907aa049489149febccddad247338718a1a77e64f50e4b07"}, "mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"}, "mint": {:hex, :mint, "1.5.1", "8db5239e56738552d85af398798c80648db0e90f343c8469f6c6d8898944fb6f", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "4a63e1e76a7c3956abd2c72f370a0d0aecddc3976dea5c27eccbecfa5e7d5b1e"}, "nimble_options": {:hex, :nimble_options, "1.0.2", "92098a74df0072ff37d0c12ace58574d26880e522c22801437151a159392270e", [:mix], [], "hexpm", "fd12a8db2021036ce12a309f26f564ec367373265b53e25403f0ee697380f1b8"}, @@ -28,7 +28,7 @@ "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "prom_ex": {:hex, :prom_ex, "1.8.0", "662615e1d2f2ab3e0dc13a51c92ad0ccfcab24336a90cb9b114ee1bce9ef88aa", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.15", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.3", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "3eea763dfa941e25de50decbf17a6a94dbd2270e7b32f88279aa6e9bbb8e23e7"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, - "snappyer": {:hex, :snappyer, "1.2.8", "201ce9067a33c71a6a5087c0c3a49a010b17112d461e6df696c722dcb6d0934a", [:rebar3], [], "hexpm", "35518e79a28548b56d8fd6aee2f565f12f51c2d3d053f9cfa817c83be88c4f3d"}, + "snappyer": {:hex, :snappyer, "1.2.9", "9cc58470798648ce34c662ca0aa6daae31367667714c9a543384430a3586e5d3", [:rebar3], [], "hexpm", "18d00ca218ae613416e6eecafe1078db86342a66f86277bd45c95f05bf1c8b29"}, "supervisor3": {:hex, :supervisor3, "1.1.11", "d81cdec31d102fde407423e1d05b569572850deebed86b951d5233c387cba80b", [:rebar3], [], "hexpm", "e6c2dedbcabcba24995a218aca12db5e208b80d3252692b22ef0f1a266104b50"}, "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},