Просмотр исходного кода

[monorepo] Try to get make install working in copilot (#32800)

* [monorepo] move building of nginx proxy into Makefile

* [v1] add fake-secrets.env

* [github] add copilot-setup-steps.yml workflow

* [make] debug permissions

* [monorepo] use the host uid/gid for monorepo service

* [web] populate DOCKER_USER for test_frontend_ct

* [github] run npm install outside docker in Copilot sandbox

* [monorepo] add comment for building nginx-proxy image locally

* [monorepo] change uid/gid of node user in cypress image

* [monorepo] low-level rewrite of passwd and groups to match host user

GitOrigin-RevId: d74a5801f0318bab7e7f460374255426706002a3
Jakob Ackermann 3 месяцев назад
Родитель
Сommit
78adc2ae18

+ 12 - 0
dockerfiles/cypress/Dockerfile

@@ -0,0 +1,12 @@
+FROM cypress/included:13.13.2
+ARG USER_UID=1000
+ARG USER_GID=1000
+
+WORKDIR /overleaf
+
+RUN sed -i s/node:x:1000:/node:x:${USER_GID}:/ /etc/group \
+&&  sed -i s_node:x:1000:1000::/home/node:/bin/bash_node:x:${USER_UID}:${USER_GID}::/home/node:/bin/bash_ /etc/passwd \
+&&  chown -R node:node /home/node \
+&&  chown node:node /overleaf
+
+USER node

+ 6 - 1
server-ce/test/Makefile

@@ -13,7 +13,8 @@ export IMAGE_TAG_CE ?= sharelatex/sharelatex:main
 export IMAGE_TAG_PRO ?= us-east1-docker.pkg.dev/overleaf-ops/ol-docker/pro:main
 export CYPRESS_SHARD ?=
 export COMPOSE_PROJECT_NAME ?= test
-export DOCKER_USER := $(shell id -u):$(shell id -g)
+export USER_UID=$(shell id -u)
+export USER_GID=$(shell id -g)
 IMAGE_TAG_PRO_BASE := $(shell echo $(IMAGE_TAG_PRO) | sed -E s/:.+//)
 
 test-e2e-native:
@@ -106,4 +107,8 @@ build_mailtrap:
 	git clone https://github.com/dbck/docker-mailtrap.git || true && cd docker-mailtrap && git checkout v1.5.0
 	docker build -t mailtrap docker-mailtrap/build
 
+prefetch_default_compose_build: build_cypress
+build_cypress:
+	docker compose build e2e
+
 .PHONY: test-e2e test-e2e-open

+ 5 - 2
server-ce/test/docker-compose.native.yml

@@ -25,7 +25,11 @@ services:
 
   # For testing "native" on Linux
   cypress:
-    image: cypress/included:13.13.2
+    build:
+      context: ../../dockerfiles/cypress
+      args:
+        - USER_UID
+        - USER_GID
     volumes:
       - ../../:/overleaf
       - /tmp/.X11-unix:/tmp/.X11-unix
@@ -33,7 +37,6 @@ services:
     working_dir: /overleaf/server-ce/test
     entrypoint: npm
     command: run cypress:open
-    user: "${DOCKER_USER:-1000:1000}"
     environment:
       CI:
       VERBOSE_LOGGING:

+ 5 - 2
server-ce/test/docker-compose.yml

@@ -66,7 +66,11 @@ services:
     command: ["/server-pro-start.sh"]
 
   e2e:
-    image: cypress/included:13.13.2
+    build:
+      context: ../../dockerfiles/cypress
+      args:
+        - USER_UID
+        - USER_GID
     stop_grace_period: 0s
     entrypoint: npm
     command: run cypress:run
@@ -76,7 +80,6 @@ services:
       - $PWD:$PWD
       - $MONOREPO/libraries:$MONOREPO/libraries:ro
       - $MONOREPO/node_modules:$MONOREPO/node_modules:ro
-    user: "${DOCKER_USER:-1000:1000}"
     environment:
       MONOREPO:
       CYPRESS_SHARD:

+ 12 - 0
services/web/Makefile

@@ -181,6 +181,17 @@ TEST_FRONTEND_CT_VARIANTS = \
 	test_frontend_ct_editor_other \
 	test_frontend_ct_editor_visual \
 
+TEST_FRONTEND_CT_TARGETS = \
+	$(TEST_FRONTEND_CT_VARIANTS) \
+	build_test_frontend_ct \
+	test_frontend_ct_ui \
+
+$(TEST_FRONTEND_CT_TARGETS): export USER_UID=$(shell id -u)
+$(TEST_FRONTEND_CT_TARGETS): export USER_GID=$(shell id -g)
+
+test_frontend_ct_ui:
+	docker compose -f docker-compose.cypress.yml run --rm cypress run cypress:open-ct -- --browser chrome
+
 #
 # Writefull tests
 #
@@ -192,6 +203,7 @@ test_writefull:
 
 # Note: The below cypress targets are for CI only
 build_test_frontend_ct:
+	$(DOCKER_COMPOSE) build test_frontend_ct
 	docker run --rm --volume /dev/shm:/dev/shm --user root $(IMAGE_CI) bash -ec 'for path in /overleaf/services/web/cypress/results /overleaf/services/web/node_modules/.cache; do mkdir -p $$path; chown -R node:node $$path; done && tar -cC / overleaf | tar -xC /dev/shm'
 
 test_frontend_ct_core_other: export CYPRESS_DOWNLOADS=./cypress/downloads/core

+ 5 - 2
services/web/docker-compose.ci.yml

@@ -87,11 +87,14 @@ services:
       JUNIT_ROOT_SUITE_NAME:
 
   test_frontend_ct:
-    image: cypress/included:13.13.2
+    build:
+      context: ../../dockerfiles/cypress
+      args:
+        - USER_UID
+        - USER_GID
     logging:
       driver: local
     working_dir: /overleaf/services/web
-    user: "${DOCKER_USER:-1000:1000}"
     environment:
       CI:
       CYPRESS_DOWNLOADS:

+ 5 - 2
services/web/docker-compose.cypress.yml

@@ -1,6 +1,10 @@
 services:
   cypress:
-    image: cypress/included:13.13.2
+    build:
+      context: ../../dockerfiles/cypress
+      args:
+        - USER_UID
+        - USER_GID
     volumes:
       - ../../:/overleaf
       - /tmp/.X11-unix:/tmp/.X11-unix
@@ -8,7 +12,6 @@ services:
     working_dir: /overleaf/services/web
     entrypoint: npm
     command: run cypress:open-ct
-    user: "${DOCKER_USER:-1000:1000}"
     environment:
       VERBOSE_LOGGING:
       DISPLAY: ${DISPLAY:-:0}

+ 5 - 2
services/web/docker-compose.yml

@@ -89,11 +89,14 @@ services:
     user: node
 
   test_frontend_ct:
-    image: cypress/included:13.13.2
+    build:
+      context: ../../dockerfiles/cypress
+      args:
+        - USER_UID
+        - USER_GID
     volumes:
       - ../../:/overleaf
     working_dir: /overleaf/services/web
-    user: "${DOCKER_USER:-1000:1000}"
     environment:
       VERBOSE_LOGGING:
       CI:

+ 2 - 2
services/web/package.json

@@ -37,8 +37,8 @@
     "convert-themes": "node frontend/js/features/source-editor/themes/scripts/convert.js",
     "cypress:open-ct": "OVERLEAF_CONFIG=$PWD/config/settings.webpack.js cypress open --component",
     "cypress:run-ct": "OVERLEAF_CONFIG=$PWD/config/settings.webpack.js cypress run --component --browser chrome",
-    "cypress:docker:open-ct": "DOCKER_USER=\"$(id -u):$(id -g)\" docker compose -f docker-compose.cypress.yml run --rm cypress run cypress:open-ct",
-    "cypress:docker:run-ct": "DOCKER_USER=\"$(id -u):$(id -g)\" docker compose -f docker-compose.cypress.yml run --rm cypress run cypress:run-ct --browser chrome",
+    "cypress:docker:open-ct": "USER_UID=$(id -u) USER_GID=$(id -g) docker compose -f docker-compose.cypress.yml run --rm cypress run cypress:open-ct",
+    "cypress:docker:run-ct": "USER_UID=$(id -u) USER_GID=$(id -g) docker compose -f docker-compose.cypress.yml run --rm cypress run cypress:run-ct --browser chrome",
     "lezer-latex:generate": "node scripts/lezer-latex/generate.mjs",
     "lezer-latex:run": "node scripts/lezer-latex/run.mjs",
     "lezer-latex:benchmark": "node scripts/lezer-latex/benchmark.mjs",