From a469e27e2ef8284b06eb6687a213a5a72c670416 Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:58:42 +0200 Subject: [PATCH 1/2] Dockerfile for the Next.js service --- frontends/main/Dockerfile | 72 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 frontends/main/Dockerfile diff --git a/frontends/main/Dockerfile b/frontends/main/Dockerfile new file mode 100644 index 0000000000..42bc0544a8 --- /dev/null +++ b/frontends/main/Dockerfile @@ -0,0 +1,72 @@ +# Build: \ +# docker build \ +# -f frontends/main/Dockerfile \ +# --build-arg NEXT_PUBLIC_ORIGIN=http://api.open.odl.local:8062 \ +# --build-arg NEXT_PUBLIC_MITOL_API_BASE_URL=http://open.odl.local:8063 \ +# --build-arg NEXT_PUBLIC_SITE_NAME="MIT Learn" \ +# --build-arg NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=mitlearn-support@mit.edu \ +# --build-arg NEXT_PUBLIC_EMBEDLY_KEY= \ +# --build-arg NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=true \ +# --build-arg NEXT_PUBLIC_CSRF_COOKIE_NAME=csrftoken-local \ +# -t mitodl/mit-learn-frontend:latest . + +# Run: +# docker run -p 8062:8062 -e PORT=8062 mit-learn-frontend:latest + + +FROM node:22-alpine + +RUN apk update +RUN apk add --no-cache libc6-compat + +WORKDIR /app + +COPY .yarnrc.yml /app +COPY .yarn/releases/yarn-4.4.1.cjs /app/.yarn/releases/yarn-4.4.1.cjs +COPY yarn.lock /app +COPY package.json /app +COPY frontends /app/frontends + +RUN yarn install --immutable + +WORKDIR /app/frontends/main + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line in case you want to disable telemetry during the build. +# ENV NEXT_TELEMETRY_DISABLED=1 + +ENV NODE_ENV=production + +ARG NEXT_PUBLIC_ORIGIN +ENV NEXT_PUBLIC_ORIGIN=$NEXT_PUBLIC_ORIGIN + +ARG NEXT_PUBLIC_MITOL_API_BASE_URL +ENV NEXT_PUBLIC_MITOL_API_BASE_URL=$NEXT_PUBLIC_MITOL_API_BASE_URL + +ARG NEXT_PUBLIC_SITE_NAME +ENV NEXT_PUBLIC_SITE_NAME=$NEXT_PUBLIC_SITE_NAME + +ARG NEXT_PUBLIC_MITOL_SUPPORT_EMAIL +ENV NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$NEXT_PUBLIC_MITOL_SUPPORT_EMAIL + +ARG NEXT_PUBLIC_EMBEDLY_KEY +ENV NEXT_PUBLIC_EMBEDLY_KEY=$NEXT_PUBLIC_EMBEDLY_KEY + +ARG NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS +ENV NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS + +ARG NEXT_PUBLIC_CSRF_COOKIE_NAME +ENV NEXT_PUBLIC_CSRF_COOKIE_NAME=$NEXT_PUBLIC_CSRF_COOKIE_NAME + + +RUN echo $NEXT_PUBLIC_ORIGIN +RUN yarn build + +EXPOSE 3000 + +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +# CMD ["node", "/app/frontends/main/.next/standalone/frontends/main/server.js"] +CMD ["yarn", "start"] From 7a7bb78224342b1f50efc646995f45d16dba25cf Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:59:50 +0200 Subject: [PATCH 2/2] Build/publish job --- .github/workflows/ci.yml | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ccb7b5058c..671698127b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -148,6 +148,47 @@ jobs: with: file: coverage/lcov.info + build-publish-frontend: + needs: javascript-tests + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + + - name: Get short commit hash + run: | + SHORT_SHA=$(git rev-parse --short ${{ github.sha }}) + echo "COMMIT_SHORT_SHA=$SHORT_SHA" >> $GITHUB_ENV + - name: Build the Docker image + env: + ORIGIN: https://next.rc.learn.mit.edu + MITOL_API_BASE_URL: https://api.rc.learn.mit.edu + SITE_NAME: MIT Learn + MITOL_SUPPORT_EMAIL: mitlearn-support@mit.edu + EMBEDLY_KEY: ${{ secrets.EMBEDLY_KEY_RC }} + MITOL_AXIOS_WITH_CREDENTIALS: true + CSRF_COOKIE_NAME: ${{ secrets.CSRF_COOKIE_NAME_RC }} + run: | + docker build \ + -t mitodl/mit-learn-frontend:$COMMIT_SHORT_SHA \ + --build-arg NEXT_PUBLIC_ORIGIN="$ORIGIN" \ + --build-arg NEXT_PUBLIC_MITOL_API_BASE_URL="$MITOL_API_BASE_URL" \ + --build-arg NEXT_PUBLIC_SITE_NAME="$SITE_NAME" \ + --build-arg NEXT_PUBLIC_MITOL_SUPPORT_EMAIL="$MITOL_SUPPORT_EMAIL" \ + --build-arg NEXT_PUBLIC_EMBEDLY_KEY="$EMBEDLY_KEY" \ + --build-arg NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS="$MITOL_AXIOS_WITH_CREDENTIALS" \ + --build-arg NEXT_PUBLIC_CSRF_COOKIE_NAME="$CSRF_COOKIE_NAME" \ + -f frontends/main/Dockerfile \ + . + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.MITOL_LEARN_DOCKERHUB_USER }} + password: ${{ secrets.MITOL_LEARN_DOCKERHUB_PASSWORD }} + + - name: Push the Docker image to Dockerhub + run: docker push mitodl/mit-learn-frontend:$COMMIT_SHORT_SHA + build-storybook: runs-on: ubuntu-latest steps: