diff --git a/apps/app/.env.example b/.env.example similarity index 66% rename from apps/app/.env.example rename to .env.example index 9e41ba88d..118a94883 100644 --- a/apps/app/.env.example +++ b/.env.example @@ -1,5 +1,4 @@ # Replace with your instance Public IP -# NEXT_PUBLIC_API_BASE_URL = "http://localhost" NEXT_PUBLIC_EXTRA_IMAGE_DOMAINS= NEXT_PUBLIC_GOOGLE_CLIENTID="" NEXT_PUBLIC_GITHUB_APP_NAME="" @@ -10,3 +9,12 @@ NEXT_PUBLIC_ENABLE_SENTRY=0 NEXT_PUBLIC_ENABLE_SESSION_RECORDER=0 NEXT_PUBLIC_TRACK_EVENTS=0 NEXT_PUBLIC_SLACK_CLIENT_ID="" +EMAIL_HOST="" +EMAIL_HOST_USER="" +EMAIL_HOST_PASSWORD="" +AWS_REGION="" +AWS_ACCESS_KEY_ID="" +AWS_SECRET_ACCESS_KEY="" +AWS_S3_BUCKET_NAME="" +OPENAI_API_KEY="" +GPT_ENGINE="" \ No newline at end of file diff --git a/.github/workflows/push-image-backend.yml b/.github/workflows/push-image-backend.yml index abb833922..95d93f813 100644 --- a/.github/workflows/push-image-backend.yml +++ b/.github/workflows/push-image-backend.yml @@ -1,4 +1,4 @@ -name: Build Api Server Docker Image +name: Build and Push Backend Docker Image on: push: @@ -10,11 +10,8 @@ on: jobs: build_push_backend: - name: Build Api Server Docker Image + name: Build and Push Api Server Docker Image runs-on: ubuntu-20.04 - permissions: - contents: read - packages: write steps: - name: Check out the repo @@ -28,20 +25,33 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2.5.0 - - name: Login to Github Container Registry + - name: Login to GitHub Container Registry uses: docker/login-action@v2.1.0 with: registry: "ghcr.io" username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract metadata (tags, labels) for Docker - id: meta + - name: Login to Docker Hub + uses: docker/login-action@v2.1.0 + with: + registry: "registry.hub.docker.com" + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Extract metadata (tags, labels) for Docker (Docker Hub) + id: ghmeta + uses: docker/metadata-action@v4.3.0 + with: + images: makeplane/plane-backend + + - name: Extract metadata (tags, labels) for Docker (Github) + id: dkrmeta uses: docker/metadata-action@v4.3.0 with: images: ghcr.io/${{ github.repository }}-backend - - name: Build Api Server + - name: Build and Push to GitHub Container Registry uses: docker/build-push-action@v4.0.0 with: context: ./apiserver @@ -50,5 +60,18 @@ jobs: push: true cache-from: type=gha cache-to: type=gha - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + tags: ${{ steps.ghmeta.outputs.tags }} + labels: ${{ steps.ghmeta.outputs.labels }} + + - name: Build and Push to Docker Hub + uses: docker/build-push-action@v4.0.0 + with: + context: ./apiserver + file: ./apiserver/Dockerfile.api + platforms: linux/arm64,linux/amd64 + push: true + cache-from: type=gha + cache-to: type=gha + tags: ${{ steps.dkrmeta.outputs.tags }} + labels: ${{ steps.dkrmeta.outputs.labels }} + diff --git a/.github/workflows/push-image-frontend.yml b/.github/workflows/push-image-frontend.yml index c6a3bf1b8..cbd742511 100644 --- a/.github/workflows/push-image-frontend.yml +++ b/.github/workflows/push-image-frontend.yml @@ -1,4 +1,4 @@ -name: Build Frontend Docker Image +name: Build and Push Frontend Docker Image on: push: @@ -12,9 +12,6 @@ jobs: build_push_frontend: name: Build Frontend Docker Image runs-on: ubuntu-20.04 - permissions: - contents: read - packages: write steps: - name: Check out the repo @@ -35,13 +32,26 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract metadata (tags, labels) for Docker + - name: Login to Docker Hub + uses: docker/login-action@v2.1.0 + with: + registry: "registry.hub.docker.com" + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Extract metadata (tags, labels) for Docker (Docker Hub) + id: ghmeta + uses: docker/metadata-action@v4.3.0 + with: + images: makeplane/plane-frontend + + - name: Extract metadata (tags, labels) for Docker (Github) id: meta uses: docker/metadata-action@v4.3.0 with: images: ghcr.io/${{ github.repository }}-frontend - - name: Build Frontend Server + - name: Build and Push to GitHub Container Registry uses: docker/build-push-action@v4.0.0 with: context: . @@ -50,5 +60,18 @@ jobs: push: true cache-from: type=gha cache-to: type=gha - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + tags: ${{ steps.ghmeta.outputs.tags }} + labels: ${{ steps.ghmeta.outputs.labels }} + + - name: Build and Push to Docker Container Registry + uses: docker/build-push-action@v4.0.0 + with: + context: . + file: ./apps/app/Dockerfile.web + platforms: linux/arm64,linux/amd64 + push: true + cache-from: type=gha + cache-to: type=gha + tags: ${{ steps.dkrmeta.outputs.tags }} + labels: ${{ steps.dkrmeta.outputs.labels }} + diff --git a/Dockerfile b/Dockerfile index 094d628e3..9d0ff559d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,7 @@ RUN apk add --no-cache libc6-compat RUN apk update # Set working directory WORKDIR /app +ENV NEXT_PUBLIC_API_BASE_URL=http://NEXT_PUBLIC_API_BASE_URL_PLACEHOLDER RUN yarn global add turbo COPY . . @@ -16,7 +17,7 @@ FROM node:18-alpine AS installer RUN apk add --no-cache libc6-compat RUN apk update WORKDIR /app - +ARG NEXT_PUBLIC_API_BASE_URL=http://localhost:8000 # First install the dependencies (as they change less often) COPY .gitignore .gitignore COPY --from=builder /app/out/json/ . @@ -26,9 +27,16 @@ RUN yarn install # Build the project COPY --from=builder /app/out/full/ . COPY turbo.json turbo.json +COPY replace-env-vars.sh /usr/local/bin/ +USER root +RUN chmod +x /usr/local/bin/replace-env-vars.sh RUN yarn turbo run build --filter=app +ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \ + BUILT_NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL + +RUN /usr/local/bin/replace-env-vars.sh http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER ${NEXT_PUBLIC_WEBAPP_URL} FROM python:3.11.1-alpine3.17 AS backend @@ -108,6 +116,16 @@ COPY nginx/nginx-single-docker-image.conf /etc/nginx/http.d/default.conf COPY nginx/supervisor.conf /code/supervisor.conf +ARG NEXT_PUBLIC_API_BASE_URL=http://localhost:8000 +ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \ + BUILT_NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL + +USER root +COPY replace-env-vars.sh /usr/local/bin/ +COPY start.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/replace-env-vars.sh +RUN chmod +x /usr/local/bin/start.sh + CMD ["supervisord","-c","/code/supervisor.conf"] diff --git a/apiserver/.env.example b/apiserver/.env.example deleted file mode 100644 index 8a7c76ffa..000000000 --- a/apiserver/.env.example +++ /dev/null @@ -1,28 +0,0 @@ -DJANGO_SETTINGS_MODULE="plane.settings.production" -# Database -DATABASE_URL=postgres://plane:xyzzyspoon@db:5432/plane -# Cache -REDIS_URL=redis://redis:6379/ -# SMTP -EMAIL_HOST="" -EMAIL_HOST_USER="" -EMAIL_HOST_PASSWORD="" -EMAIL_PORT="587" -EMAIL_USE_TLS="1" -EMAIL_FROM="Team Plane " -# AWS -AWS_REGION="" -AWS_ACCESS_KEY_ID="" -AWS_SECRET_ACCESS_KEY="" -AWS_S3_BUCKET_NAME="" -AWS_S3_ENDPOINT_URL="" -# FE -WEB_URL="localhost/" -# OAUTH -GITHUB_CLIENT_SECRET="" -# Flags -DISABLE_COLLECTSTATIC=1 -DOCKERIZED=1 -# GPT Envs -OPENAI_API_KEY=0 -GPT_ENGINE=0 diff --git a/apps/app/Dockerfile.web b/apps/app/Dockerfile.web index 11bf98bd4..57654a4e9 100644 --- a/apps/app/Dockerfile.web +++ b/apps/app/Dockerfile.web @@ -3,6 +3,7 @@ RUN apk add --no-cache libc6-compat RUN apk update # Set working directory WORKDIR /app +ENV NEXT_PUBLIC_API_BASE_URL=http://NEXT_PUBLIC_API_BASE_URL_PLACEHOLDER RUN yarn global add turbo COPY . . @@ -12,10 +13,10 @@ RUN turbo prune --scope=app --docker # Add lockfile and package.json's of isolated subworkspace FROM node:18-alpine AS installer - RUN apk add --no-cache libc6-compat RUN apk update WORKDIR /app +ARG NEXT_PUBLIC_API_BASE_URL=http://localhost:8000 # First install the dependencies (as they change less often) COPY .gitignore .gitignore @@ -26,9 +27,17 @@ RUN yarn install # Build the project COPY --from=builder /app/out/full/ . COPY turbo.json turbo.json +COPY replace-env-vars.sh /usr/local/bin/ +USER root +RUN chmod +x /usr/local/bin/replace-env-vars.sh RUN yarn turbo run build --filter=app +ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \ + BUILT_NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL + +RUN /usr/local/bin/replace-env-vars.sh http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER ${NEXT_PUBLIC_WEBAPP_URL} + FROM node:18-alpine AS runner WORKDIR /app @@ -43,8 +52,20 @@ COPY --from=installer /app/apps/app/package.json . # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing COPY --from=installer --chown=captain:plane /app/apps/app/.next/standalone ./ -# COPY --from=installer --chown=captain:plane /app/apps/app/.next/standalone/node_modules ./apps/app/node_modules -COPY --from=installer --chown=captain:plane /app/apps/app/.next/static ./apps/app/.next/static + +COPY --from=installer --chown=captain:plane /app/apps/app/.next ./apps/app/.next + +ARG NEXT_PUBLIC_API_BASE_URL=http://localhost:8000 +ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \ + BUILT_NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL + +USER root +COPY replace-env-vars.sh /usr/local/bin/ +COPY start.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/replace-env-vars.sh +RUN chmod +x /usr/local/bin/start.sh + +USER captain ENV NEXT_TELEMETRY_DISABLED 1 diff --git a/apps/app/next.config.js b/apps/app/next.config.js index b3c67eedd..876694142 100644 --- a/apps/app/next.config.js +++ b/apps/app/next.config.js @@ -1,6 +1,10 @@ +require("dotenv").config({ path: ".env" }); + const { withSentryConfig } = require("@sentry/nextjs"); const path = require("path"); -const extraImageDomains = (process.env.NEXT_PUBLIC_EXTRA_IMAGE_DOMAINS ?? "").split(",").filter((domain) => domain.length > 0); +const extraImageDomains = (process.env.NEXT_PUBLIC_EXTRA_IMAGE_DOMAINS ?? "") + .split(",") + .filter((domain) => domain.length > 0); const nextConfig = { reactStrictMode: false, diff --git a/apps/app/package.json b/apps/app/package.json index d3c414210..187e356ff 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -23,6 +23,7 @@ "@types/react-datepicker": "^4.8.0", "axios": "^1.1.3", "cmdk": "^0.2.0", + "dotenv": "^16.0.3", "js-cookie": "^3.0.1", "lodash.debounce": "^4.0.8", "next": "12.3.2", diff --git a/apps/app/pages/signin.tsx b/apps/app/pages/signin.tsx index 3dee9a9e6..ee2469b86 100644 --- a/apps/app/pages/signin.tsx +++ b/apps/app/pages/signin.tsx @@ -1,8 +1,6 @@ import React, { useCallback, useState } from "react"; - import { useRouter } from "next/router"; import Image from "next/image"; - // hooks import useUser from "hooks/use-user"; import useToast from "hooks/use-toast"; diff --git a/docker-compose-hub.yml b/docker-compose-hub.yml index 3f67ef48b..b36d50267 100644 --- a/docker-compose-hub.yml +++ b/docker-compose-hub.yml @@ -35,24 +35,46 @@ services: - redisdata:/data plane-web: container_name: planefrontend - image: makeplane/plane-frontend:0.5-dev + image: makeplane/plane-frontend:0.6 restart: always - command: node apps/app/server.js - env_file: - - ./apps/app/.env + command: [ "/usr/local/bin/start.sh" ] + environment: + NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL} + NEXT_PUBLIC_GOOGLE_CLIENTID: 0 + NEXT_PUBLIC_GITHUB_APP_NAME: 0 + NEXT_PUBLIC_GITHUB_ID: 0 + NEXT_PUBLIC_SENTRY_DSN: 0 + NEXT_PUBLIC_ENABLE_OAUTH: 0 + NEXT_PUBLIC_ENABLE_SENTRY: 0 ports: - 3000:3000 plane-api: container_name: planebackend - image: makeplane/plane-backend:0.5-dev + image: makeplane/plane-backend:0.6 build: context: ./apiserver dockerfile: Dockerfile.api restart: always ports: - 8000:8000 - env_file: - - ./apiserver/.env + environment: + DJANGO_SETTINGS_MODULE: plane.settings.production + DATABASE_URL: postgres://plane:xyzzyspoon@db:5432/plane + REDIS_URL: redis://redis:6379/ + EMAIL_HOST: ${EMAIL_HOST} + EMAIL_HOST_USER: ${EMAIL_HOST_USER} + EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD} + AWS_REGION: ${AWS_REGION} + AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} + AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} + AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME} + WEB_URL: localhost/ + GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET} + DISABLE_COLLECTSTATIC: 1 + DOCKERIZED: 1 + OPENAI_API_KEY: 0 + GPT_ENGINE: 0 + SECRET_KEY: ${SECRET_KEY} depends_on: - db - redis @@ -62,7 +84,7 @@ services: - redis:redis plane-worker: container_name: planerqworker - image: makeplane/plane-worker:0.5-dev + image: makeplane/plane-worker:0.6 depends_on: - redis - db @@ -71,8 +93,24 @@ services: links: - redis:redis - db:db - env_file: - - ./apiserver/.env + environment: + DJANGO_SETTINGS_MODULE: plane.settings.production + DATABASE_URL: postgres://plane:xyzzyspoon@db:5432/plane + REDIS_URL: redis://redis:6379/ + EMAIL_HOST: ${EMAIL_HOST} + EMAIL_HOST_USER: ${EMAIL_HOST_USER} + EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD} + AWS_REGION: ${AWS_REGION} + AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} + AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} + AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME} + WEB_URL: localhost/ + GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET} + DISABLE_COLLECTSTATIC: 1 + DOCKERIZED: 1 + OPENAI_API_KEY: 0 + GPT_ENGINE: 0 + SECRET_KEY: ${SECRET_KEY} volumes: pgdata: redisdata: diff --git a/docker-compose.yml b/docker-compose.yml index 8d05e03cd..7adcdd54a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,12 +38,21 @@ services: build: context: . dockerfile: ./apps/app/Dockerfile.web - restart: always - command: node apps/app/server.js - env_file: - - ./apps/app/.env + args: + NEXT_PUBLIC_API_BASE_URL: http://localhost:8000 + command: [ "/usr/local/bin/start.sh" ] ports: - 3000:3000 + environment: + NEXT_PUBLIC_API_BASE_URL: http://localhost1234 + NEXT_PUBLIC_GOOGLE_CLIENTID: "0" + NEXT_PUBLIC_GITHUB_APP_NAME: "0" + NEXT_PUBLIC_GITHUB_ID: "0" + NEXT_PUBLIC_SENTRY_DSN: "0" + NEXT_PUBLIC_ENABLE_OAUTH: "0" + NEXT_PUBLIC_ENABLE_SENTRY: "0" + NEXT_PUBLIC_ENABLE_SESSION_RECORDER: "0" + NEXT_PUBLIC_TRACK_EVENTS: "0" plane-api: container_name: planebackend build: @@ -52,8 +61,24 @@ services: restart: always ports: - 8000:8000 - env_file: - - ./apiserver/.env + environment: + DJANGO_SETTINGS_MODULE: plane.settings.production + DATABASE_URL: postgres://plane:xyzzyspoon@db:5432/plane + REDIS_URL: redis://redis:6379/ + EMAIL_HOST: + EMAIL_HOST_USER: + EMAIL_HOST_PASSWORD: + AWS_REGION: + AWS_ACCESS_KEY_ID: + AWS_SECRET_ACCESS_KEY: + AWS_S3_BUCKET_NAME: + WEB_URL: localhost/ + GITHUB_CLIENT_SECRET: + DISABLE_COLLECTSTATIC: 1 + DOCKERIZED: 1 + OPENAI_API_KEY: 0 + GPT_ENGINE: 0 + SECRET_KEY: ${SECRET_KEY} depends_on: - db - redis @@ -74,8 +99,24 @@ services: links: - redis:redis - db:db - env_file: - - ./apiserver/.env + environment: + DJANGO_SETTINGS_MODULE: plane.settings.production + DATABASE_URL: postgres://plane:xyzzyspoon@db:5432/plane + REDIS_URL: redis://redis:6379/ + EMAIL_HOST: + EMAIL_HOST_USER: + EMAIL_HOST_PASSWORD: + AWS_REGION: + AWS_ACCESS_KEY_ID: + AWS_SECRET_ACCESS_KEY: + AWS_S3_BUCKET_NAME: + WEB_URL: localhost/ + GITHUB_CLIENT_SECRET: + DISABLE_COLLECTSTATIC: 1 + DOCKERIZED: 1 + OPENAI_API_KEY: 0 + GPT_ENGINE: 0 + SECRET_KEY: asdasdasdsd volumes: pgdata: redisdata: diff --git a/nginx/supervisor.conf b/nginx/supervisor.conf index db615812e..54b4ca04d 100644 --- a/nginx/supervisor.conf +++ b/nginx/supervisor.conf @@ -2,7 +2,7 @@ nodaemon=true [program:node] -command=node /app/apps/app/server.js +command=sh /usr/local/bin/start.sh autostart=true autorestart=true stderr_logfile=/var/log/node.err.log @@ -21,4 +21,12 @@ command=nginx -g "daemon off;" autostart=true autorestart=true stderr_logfile=/var/log/nginx.err.log -stdout_logfile=/var/log/nginx.out.log \ No newline at end of file +stdout_logfile=/var/log/nginx.out.log + +[program:worker] +directory=/code +command=sh bin/worker +autostart=true +autorestart=true +stderr_logfile=/var/log/worker.err.log +stdout_logfile=/var/log/worker.out.log \ No newline at end of file diff --git a/replace-env-vars.sh b/replace-env-vars.sh new file mode 100644 index 000000000..fe7acc698 --- /dev/null +++ b/replace-env-vars.sh @@ -0,0 +1,17 @@ +#!/bin/sh +FROM=$1 +TO=$2 + +if [ "${FROM}" = "${TO}" ]; then + echo "Nothing to replace, the value is already set to ${TO}." + + exit 0 +fi + +# Only peform action if $FROM and $TO are different. +echo "Replacing all statically built instances of $FROM with this string $TO ." + +find apps/app/.next -type f | +while read file; do + sed -i "s|$FROM|$TO|g" "$file" +done \ No newline at end of file diff --git a/setup.sh b/setup.sh index de95db2f8..e7f9a52dd 100755 --- a/setup.sh +++ b/setup.sh @@ -1,9 +1,7 @@ #!/bin/bash -cp ./apiserver/.env.example ./apiserver/.env -# Generating App environmental variables -cp ./apps/app/.env.example ./apps/app/.env +cp ./.env.example ./.env -echo -e "\nNEXT_PUBLIC_API_BASE_URL=http://$1" >> ./apps/app/.env +echo -e "\nNEXT_PUBLIC_API_BASE_URL=http://$1" >> ./.env export LC_ALL=C export LC_CTYPE=C -echo -e "\nSECRET_KEY=\"$(tr -dc 'a-z0-9!@#$%^&*(-_=+)' < /dev/urandom | head -c50)\"" >> ./apiserver/.env +echo -e "\nSECRET_KEY=\"$(tr -dc 'a-z0-9!@#$%^&*(-_=+)' < /dev/urandom | head -c50)\"" >> ./.env diff --git a/start.sh b/start.sh new file mode 100644 index 000000000..b8ef2736b --- /dev/null +++ b/start.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -x + +# Replace the statically built BUILT_NEXT_PUBLIC_WEBAPP_URL with run-time NEXT_PUBLIC_WEBAPP_URL +# NOTE: if these values are the same, this will be skipped. +/usr/local/bin/replace-env-vars.sh "$BUILT_NEXT_PUBLIC_API_BASE_URL" "$NEXT_PUBLIC_API_BASE_URL" + +echo "Starting Plane Frontend.." +node apps/app/server.js \ No newline at end of file diff --git a/turbo.json b/turbo.json index 12476ceb9..1eba6fc9a 100644 --- a/turbo.json +++ b/turbo.json @@ -4,6 +4,7 @@ "NEXT_PUBLIC_GITHUB_ID", "NEXT_PUBLIC_GOOGLE_CLIENTID", "NEXT_PUBLIC_API_BASE_URL", + "API_BASE_URL", "NEXT_PUBLIC_SENTRY_DSN", "SENTRY_AUTH_TOKEN", "NEXT_PUBLIC_SENTRY_ENVIRONMENT", @@ -17,6 +18,7 @@ "NEXT_PUBLIC_CRISP_ID", "NEXT_PUBLIC_ENABLE_SESSION_RECORDER", "NEXT_PUBLIC_SESSION_RECORDER_KEY", + "NEXT_PUBLIC_EXTRA_IMAGE_DOMAINS", "NEXT_PUBLIC_SLACK_CLIENT_ID", "NEXT_PUBLIC_SLACK_CLIENT_SECRET" ], diff --git a/yarn.lock b/yarn.lock index a81d16621..65c491ddc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4229,6 +4229,11 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + ejs@^3.1.6: version "3.1.8" resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz"