From 7a2a667aaff6103c05dc47297f6706d02ae6aef0 Mon Sep 17 00:00:00 2001 From: Darren Clarke Date: Wed, 21 Jun 2023 07:32:00 +0000 Subject: [PATCH] Metamigo CI updates --- .gitlab-ci.yml | 11 ++++ apps/leafcutter/.gitlab-ci.yml | 27 ---------- apps/link/.gitlab-ci.yml | 27 ---------- apps/metamigo-cli/.gitlab-ci.yml | 27 ---------- apps/metamigo-cli/docker-entrypoint.sh | 4 +- apps/metamigo-frontend/.eslintrc.js | 2 +- apps/metamigo-frontend/Dockerfile | 52 +++++++++++++++++++ apps/metamigo-frontend/docker-entrypoint.sh | 5 ++ docker-compose.yml | 17 +++--- .../src/controllers/nextauth-adapter.ts | 6 +-- 10 files changed, 82 insertions(+), 96 deletions(-) delete mode 100644 apps/leafcutter/.gitlab-ci.yml delete mode 100644 apps/link/.gitlab-ci.yml delete mode 100644 apps/metamigo-cli/.gitlab-ci.yml create mode 100644 apps/metamigo-frontend/Dockerfile create mode 100644 apps/metamigo-frontend/docker-entrypoint.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ae97426..1df352f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -83,6 +83,17 @@ metamigo-docker-release: variables: DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/metamigo +metamigo-frontend-docker-build: + extends: .docker-build + variables: + DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/metamigo-frontend + DOCKERFILE_PATH: ./apps/metamigo-frontend/Dockerfile + +metamigo-frontend-docker-release: + extends: .docker-release + variables: + DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/metamigo-frontend + elasticsearch-docker-build: extends: .docker-build variables: diff --git a/apps/leafcutter/.gitlab-ci.yml b/apps/leafcutter/.gitlab-ci.yml deleted file mode 100644 index b7bbe8f..0000000 --- a/apps/leafcutter/.gitlab-ci.yml +++ /dev/null @@ -1,27 +0,0 @@ -leafcutter-docker-build: - image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest - services: - - docker:dind - stage: docker-build - variables: - DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/leafcutter - DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} - script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - cd apps/leafcutter && make docker/build-fresh-push - -leafcutter-docker-release: - image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest - services: - - docker:dind - stage: docker-release - variables: - DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/leafcutter - DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} - DOCKER_TAG_NEW: ${CI_COMMIT_REF_NAME} - only: - - main - - develop - script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - cd apps/leafcutter && make docker/add-tag diff --git a/apps/link/.gitlab-ci.yml b/apps/link/.gitlab-ci.yml deleted file mode 100644 index 4be9f1a..0000000 --- a/apps/link/.gitlab-ci.yml +++ /dev/null @@ -1,27 +0,0 @@ -link-docker-build: - image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest - services: - - docker:dind - stage: docker-build - variables: - DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/link - DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} - script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - cd apps/link && make docker/build-fresh-push - -link-docker-release: - image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest - services: - - docker:dind - stage: docker-release - variables: - DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/link - DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} - DOCKER_TAG_NEW: ${CI_COMMIT_REF_NAME} - only: - - main - - develop - script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - cd apps/link && make docker/add-tag diff --git a/apps/metamigo-cli/.gitlab-ci.yml b/apps/metamigo-cli/.gitlab-ci.yml deleted file mode 100644 index c4d41ed..0000000 --- a/apps/metamigo-cli/.gitlab-ci.yml +++ /dev/null @@ -1,27 +0,0 @@ -metamigo-docker-build: - image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest - services: - - docker:dind - stage: docker-build - variables: - DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/metamigo - DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} - script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - cd apps/metamigo-cli && make docker/build-fresh-push - -metamigo-docker-release: - image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest - services: - - docker:dind - stage: docker-release - variables: - DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/metamigo - DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} - DOCKER_TAG_NEW: ${CI_COMMIT_REF_NAME} - only: - - main - - develop - script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - cd apps/metamigo-cli && make docker/add-tag diff --git a/apps/metamigo-cli/docker-entrypoint.sh b/apps/metamigo-cli/docker-entrypoint.sh index 13f558f..33a963a 100644 --- a/apps/metamigo-cli/docker-entrypoint.sh +++ b/apps/metamigo-cli/docker-entrypoint.sh @@ -9,10 +9,10 @@ elif [[ "$1" == "worker" ]]; then echo "docker-entrypoint: starting worker" exec dumb-init ./cli worker elif [[ "$1" == "cli" ]]; then - echo "docker-entrypoint: starting frontend" + echo "docker-entrypoint: starting cli" shift 1 exec ./cli "$@" else - echo "docker-entrypoint: missing argument, one of: api, worker, frontend, cli" + echo "docker-entrypoint: missing argument, one of: api, worker, cli" exit 1 fi diff --git a/apps/metamigo-frontend/.eslintrc.js b/apps/metamigo-frontend/.eslintrc.js index 91fb9e1..103c9e7 100644 --- a/apps/metamigo-frontend/.eslintrc.js +++ b/apps/metamigo-frontend/.eslintrc.js @@ -5,7 +5,7 @@ module.exports = { "eslint-config-link/profile/node", "eslint-config-link/profile/typescript", "eslint-config-link/profile/jest", - "next", + "eslint-config-next", ], parserOptions: { tsconfigRootDir: __dirname }, }; diff --git a/apps/metamigo-frontend/Dockerfile b/apps/metamigo-frontend/Dockerfile new file mode 100644 index 0000000..e73d083 --- /dev/null +++ b/apps/metamigo-frontend/Dockerfile @@ -0,0 +1,52 @@ +FROM node:20 as base + +FROM base AS builder +ARG APP_DIR=/opt/metamigo-frontend +RUN mkdir -p ${APP_DIR}/ +RUN npm i -g turbo +WORKDIR ${APP_DIR} +COPY . . +RUN turbo prune --scope=@digiresilience/metamigo-frontend --docker + + +FROM base AS installer +ARG APP_DIR=/opt/metamigo-frontend +WORKDIR ${APP_DIR} +COPY .gitignore .gitignore +COPY --from=builder ${APP_DIR}/out/json/ . +COPY --from=builder ${APP_DIR}/out/package-lock.json ./package-lock.json +RUN npm ci --omit=dev + +COPY --from=builder ${APP_DIR}/out/full/ . +RUN npm i -g turbo +RUN turbo run build --filter=metamigo-frontend + +FROM base AS runner +ARG APP_DIR=/opt/metamigo-frontend +WORKDIR ${APP_DIR}/ +ARG BUILD_DATE +ARG VERSION +LABEL maintainer="Darren Clarke " +LABEL org.label-schema.build-date=$BUILD_DATE +LABEL org.label-schema.version=$VERSION +ENV APP_DIR ${APP_DIR} +RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ + apt-get install -y --no-install-recommends \ + dumb-init +RUN mkdir -p ${APP_DIR} +RUN chown -R node ${APP_DIR}/ + +USER node +WORKDIR ${APP_DIR} +COPY --from=installer ${APP_DIR}/node_modules/ ./node_modules/ +COPY --from=installer ${APP_DIR}/packages/ ./packages/ +COPY --from=installer ${APP_DIR}/apps/metamigo-frontend/ ./apps/metamigo-frontend/ +COPY --from=installer ${APP_DIR}/package.json ./package.json +USER root +WORKDIR ${APP_DIR}/apps/metamigo-frontend/ +RUN chmod +x docker-entrypoint.sh +USER node +EXPOSE 3000 +ENV PORT 3000 +ENV NODE_ENV production +ENTRYPOINT ["/opt/metamigo-frontend/apps/metamigo-frontend/docker-entrypoint.sh"] diff --git a/apps/metamigo-frontend/docker-entrypoint.sh b/apps/metamigo-frontend/docker-entrypoint.sh new file mode 100644 index 0000000..669df4b --- /dev/null +++ b/apps/metamigo-frontend/docker-entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e +echo "starting metamigo-frontend" +exec dumb-init npm run start diff --git a/docker-compose.yml b/docker-compose.yml index d1ea798..7ca0f82 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -197,18 +197,18 @@ services: POSTGRES_USER: "root" POSTGRES_DB: "metamigo" ports: - - 127.0.0.1:5433:5432 + - 127.0.0.1:5435:5432 metamigo-api: build: context: . dockerfile: ./apps/metamigo-cli/Dockerfile - image: registry.gitlab.com/digiresilience/link/link-stack/metamigo-cli + image: registry.gitlab.com/digiresilience/link/link-stack/metamigo container_name: metamigo-api restart: ${RESTART} command: [ "api" ] ports: - - 127.0.0.1:8004:3001 + - 127.0.0.1:8003:3001 environment: *common-metamigo-variables volumes: - ./signald-state:/signald @@ -223,13 +223,12 @@ services: image: registry.gitlab.com/digiresilience/link/link-stack/metamigo-frontend container_name: metamigo-frontend restart: ${RESTART} - command: [ "frontend" ] expose: - "3000" ports: - 127.0.0.1:8002:3000 - depends_on: - - metamigo-api + # depends_on: + # - metamigo-api environment: <<: *common-metamigo-variables VIRTUAL_HOST: ${METAMIGO_VIRTUAL_HOST} @@ -239,7 +238,7 @@ services: build: context: . dockerfile: ./apps/metamigo-cli/Dockerfile - image: registry.gitlab.com/digiresilience/link/link-stack/metamigo-cli + image: registry.gitlab.com/digiresilience/link/link-stack/metamigo container_name: metamigo-worker restart: ${RESTART} command: [ "worker" ] @@ -276,7 +275,7 @@ services: expose: - "3000" ports: - - "8003:3000" + - "8004:3000" environment: ZAMMAD_PROXY_URL: ${ZAMMAD_PROXY_URL} ZAMMAD_API_TOKEN: ${ZAMMAD_API_TOKEN} @@ -302,7 +301,7 @@ services: expose: - "3000" ports: - - "8004:3000" + - "8005:3000" environment: LINK_EMBEDDED: "true" NEXTAUTH_URL: ${LINK_URL} diff --git a/packages/metamigo-common/src/controllers/nextauth-adapter.ts b/packages/metamigo-common/src/controllers/nextauth-adapter.ts index 8e3f07d..46c6705 100644 --- a/packages/metamigo-common/src/controllers/nextauth-adapter.ts +++ b/packages/metamigo-common/src/controllers/nextauth-adapter.ts @@ -29,10 +29,10 @@ export class NextAuthAdapter { private repos: TRepositories, private readonly sessionMaxAge = defaultSessionMaxAge, private readonly sessionUpdateAge = defaulteSessionUpdateAge - ) {} + ) { } async createUser(profile: UnsavedUser): Promise { - // @ts-expect-error Typescript doesn't like lodash's omit() + // @ts-ignore Typescript doesn't like lodash's omit() return this.repos.users.upsert(omit(profile, ["isActive", "id"])); } @@ -142,7 +142,7 @@ export class NextAuthAdapter { async getSessionAndUser( sessionToken: string - ): Promise<{ session: AdapterSession; user: any } | null> { + ): Promise<{ session: AdapterSession; user: any; } | null> { const session = await this.repos.sessions.findBy({ sessionToken }); if (!session) return null; if (session && session.expires && new Date() > session.expires) {