From a37c9810bfe3f04fe5b8b4247ba0ab7885a3dd75 Mon Sep 17 00:00:00 2001 From: Six <23470032+6ixfalls@users.noreply.github.com> Date: Wed, 17 Jan 2024 00:00:21 -0800 Subject: [PATCH] fix: Pass env variables through app --- apps/client/Dockerfile | 9 ++--- apps/client/env.sh | 76 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 apps/client/env.sh diff --git a/apps/client/Dockerfile b/apps/client/Dockerfile index f8682b82..a267d9b5 100644 --- a/apps/client/Dockerfile +++ b/apps/client/Dockerfile @@ -6,7 +6,8 @@ FROM node:16.18.1 as builder WORKDIR /app -COPY ./dist/apps/client ./yarn.lock ./prisma ./package.json ./ +COPY ./dist/apps/client ./yarn.lock ./prisma ./package.json ./apps/client/env.sh ./ +RUN chmod +x ./env.sh # Install dependencies RUN yarn install --production=false @@ -15,10 +16,10 @@ RUN yarn install --production=false # ------------------------------------------ FROM node:16.18.1-slim as prod -# Used for container health checks -RUN apt-get update && apt-get install curl -y +# Used for container health checks and env handling +RUN apt-get update && apt-get install curl gawk -y WORKDIR /app USER node COPY --from=builder /app . -CMD ["npx", "next", "start"] +CMD ["./env.sh", "npx", "next", "start"] diff --git a/apps/client/env.sh b/apps/client/env.sh new file mode 100644 index 00000000..daa7047b --- /dev/null +++ b/apps/client/env.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# https://github.com/vercel/next.js/discussions/17641#discussioncomment-5919914 + +# Config +ENVSH_ENV="${ENVSH_ENV:-"./.env"}" +ENVSH_PREFIX="${ENVSH_PREFIX:-"NEXT_PUBLIC_"}" +ENVSH_PREFIX_STRIP="${ENVSH_PREFIX_STRIP:-true}" + +# Can be `window.__appenv = {` or `const APPENV = {` or whatever you want +ENVSH_PREPEND="${ENVSH_PREPEND:-"window.__appenv = {"}" +ENVSH_APPEND="${ENVSH_APPEND:-"}"}" +ENVSH_OUTPUT="${ENVSH_OUTPUT:-"./public/__appenv.js"}" + +[ -f "$ENVSH_ENV" ] && INPUT="$ENVSH_ENV" || INPUT=/dev/null + +# Add assignment +echo "$ENVSH_PREPEND" >"$ENVSH_OUTPUT" + +gawk -v PREFIX="$ENVSH_PREFIX" -v STRIP_PREFIX="$ENVSH_PREFIX_STRIP" ' +BEGIN { + OFS=": "; + FS="="; + PATTERN="^" PREFIX; + + for (v in ENVIRON) + if (v ~ PATTERN) + vars[v] = ENVIRON[v] +} + +$0 ~ PATTERN { + v = $2; + + for (i = 3; i <= NF; i++) + v = v FS $i; + + vars[$1] = (vars[$1] ? vars[$1] : v); +} + +END { + for (v in vars) { + val = vars[v]; + switch (val) { + case /^true$/: + break; + + case /^false$/: + break; + + case /^'"'.*'"'$/: + break; + + case /^".*"$/: + break; + + case /^[[:digit:]]+$/: + break; + + default: + val = "\"" val "\""; + break; + } + + val = val "," + + if (STRIP_PREFIX == "true" || STRIP_PREFIX == "1") + v = gensub(PATTERN, "", 1, v) + + print v, val; + } +} +' "$INPUT" >>"$ENVSH_OUTPUT" + +echo "$ENVSH_APPEND" >>"$ENVSH_OUTPUT" + +# Accepting commands (for Docker) +exec "$@" \ No newline at end of file