From 56e0cae8cee1932a81bc942de503a5de04001257 Mon Sep 17 00:00:00 2001
From: Alen Zubic <alen.zubic@relaymonkey.com>
Date: Sun, 6 Aug 2023 18:38:56 +0200
Subject: [PATCH] feat: Docker multi-stage build and CI/CD push

---
 .gitlab-ci.yml | 133 ++++---------------------------------------------
 Dockerfile     |  20 +++++---
 2 files changed, 22 insertions(+), 131 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f2eb1bd3c..4868ca4a1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,124 +1,9 @@
-stages:
-  - prepare
-  - test
-  - build
-  - dockerize
-  - deploy
-
-default:
-  image: nikolaik/python-nodejs:python3.11-nodejs19-alpine
-  cache: &cache
-    key:
-      files:
-        - pnpm-lock.yaml
-    paths:
-      - .pnpm-store
-      - ./node_modules/
-      - ./apps/web/node_modules/
-      - ./libs/shared/node_modules/
-    policy: pull
-
-before_script:
-  - npm i -g pnpm
-  - pnpm config set store-dir .pnpm-store
-  - apk add --no-cache --virtual .build-deps build-base g++ cairo-dev jpeg-dev pango-dev giflib-dev
-  - apk add --no-cache --virtual .runtime-deps cairo jpeg pango giflib
-
-install:js:
-  stage: prepare
-  interruptible: true
-  cache:
-    <<: *cache
-    policy: push
-  script:
-    - pnpm install
-#  only:
-#    changes:
-#      - pnpm-lock.yaml
-#      - .gitlab-ci.yml
-#      - apps/**/*
-#      - libs/**/*
-    # refs:
-    #   - main
-    #   - merge_requests
-
-.distributed:
-  interruptible: true
-  cache:
-    <<: *cache
-  before_script:
-    - npm i -g pnpm
-    - apk add --update git
-  artifacts:
-      paths:
-      - .pnpm-store
-  rules:
-    # - if: $CI_COMMIT_BRANCH == "main"
-    # - if: $CI_COMMIT_BRANCH == "merge_requests"
-    - changes:
-        - apps/**/*
-        - libs/**/*
-        - .gitlab-ci.yml
-
-lint:
-  stage: test
-  extends: .distributed
-  script:
-    - pnpm lint
-
-test:
-  stage: test
-  extends: .distributed
-  script:
-    - pnpm test
-
-build-prod:
-  stage: build
-  extends: .distributed
-  rules:
-    # - if: $CI_COMMIT_BRANCH == "main"
-    - changes:
-        - apps/**/*
-        - libs/**/*
-        - .gitlab-ci.yml
-  artifacts:
-    paths:
-      - .pnpm-store
-      - dist/apps/web
-  script:
-    - pnpm build
-
-build-docker:
-  image: docker:latest
-  services:
-   - name: docker:dind
-     alias: dockerdaemon
-  before_script:
-   - ''
-  stage: dockerize
-  tags:
-    - docker
-  # only:
-  #   - main
-  script:
-    - echo "$CI_REGISTRY_PASSWORD" | docker login https://$CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin
-    - cd ./apps/web
-    - docker build --progress plain -t $CI_REGISTRY/graphpolaris/frontend:latest .
-    - docker push $CI_REGISTRY/graphpolaris/frontend:latest
-  dependencies:
-    - build-prod
-  variables:
-    # Tell docker CLI how to talk to Docker daemon.
-    DOCKER_HOST: tcp://dockerdaemon:2375/
-    # Use the overlayfs driver for improved performance.
-    DOCKER_DRIVER: overlay2
-    # Disable TLS since we're running inside local network.
-    DOCKER_TLS_CERTDIR: ""
-
-# deploy:
-#   stage: deploy
-#   script:
-#     - ./deploy.sh
-#   # only:
-#   #   - main
-#   environment: production
+variables:
+  CONTAINER_IMAGE: "graphpolaris/frontend"
+  IMAGE_TAG_HELM_FILE: "helm/staging/graphpolaris-frontend/values.yaml"
+  IMAGE_TAG_HELM_FILE_VARIABLE: "image.tag"
+
+include:
+  - project: 'graphpolaris/pipelines'
+    ref: main
+    file: 'docker-build-push.yml'
diff --git a/Dockerfile b/Dockerfile
index b9ba18921..85f1344cf 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,12 +1,18 @@
-# Prepare nginx
-FROM nginx:1.19-alpine
+FROM node:lts-slim AS base
+ENV PNPM_HOME="/pnpm"
+ENV PATH="$PNPM_HOME:$PATH"
+RUN corepack enable
+COPY . /app
 WORKDIR /app
 
-COPY ./apps/web/dist /usr/share/nginx/html
+FROM base AS build
+RUN pnpm install --frozen-lockfile
+# Fixes: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
+ENV NODE_OPTIONS="--max-old-space-size=4096"
+RUN pnpm run build
 
-RUN rm /etc/nginx/conf.d/default.conf
-COPY nginx/nginx.conf /etc/nginx/conf.d
-
-# Fire up nginx
+FROM nginx:1.25-alpine
+COPY --from=build /app/apps/web/dist /usr/share/nginx/html
+COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
 EXPOSE 80
 CMD ["nginx", "-g", "daemon off;"]
-- 
GitLab