From 78adc2ae18228d78f71a1da9adb5436004ca86bc Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Fri, 17 Apr 2026 11:03:28 +0200 Subject: [PATCH] [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 --- dockerfiles/cypress/Dockerfile | 12 ++++++++++++ server-ce/test/Makefile | 7 ++++++- server-ce/test/docker-compose.native.yml | 7 +++++-- server-ce/test/docker-compose.yml | 7 +++++-- services/web/Makefile | 12 ++++++++++++ services/web/docker-compose.ci.yml | 7 +++++-- services/web/docker-compose.cypress.yml | 7 +++++-- services/web/docker-compose.yml | 7 +++++-- services/web/package.json | 4 ++-- 9 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 dockerfiles/cypress/Dockerfile diff --git a/dockerfiles/cypress/Dockerfile b/dockerfiles/cypress/Dockerfile new file mode 100644 index 0000000000..f649b6f30e --- /dev/null +++ b/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 diff --git a/server-ce/test/Makefile b/server-ce/test/Makefile index a5180d4129..438d65af05 100644 --- a/server-ce/test/Makefile +++ b/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 diff --git a/server-ce/test/docker-compose.native.yml b/server-ce/test/docker-compose.native.yml index c4d545c3f8..879dc37da7 100644 --- a/server-ce/test/docker-compose.native.yml +++ b/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: diff --git a/server-ce/test/docker-compose.yml b/server-ce/test/docker-compose.yml index c7237fa4f8..aa8f1b0aa2 100644 --- a/server-ce/test/docker-compose.yml +++ b/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: diff --git a/services/web/Makefile b/services/web/Makefile index e8bf0d3272..7695ed7427 100644 --- a/services/web/Makefile +++ b/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 diff --git a/services/web/docker-compose.ci.yml b/services/web/docker-compose.ci.yml index 76c63bc0ec..2ef30e2613 100644 --- a/services/web/docker-compose.ci.yml +++ b/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: diff --git a/services/web/docker-compose.cypress.yml b/services/web/docker-compose.cypress.yml index 9568fef98f..3234e977cb 100644 --- a/services/web/docker-compose.cypress.yml +++ b/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} diff --git a/services/web/docker-compose.yml b/services/web/docker-compose.yml index f5caa0b555..b53f2d07ab 100644 --- a/services/web/docker-compose.yml +++ b/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: diff --git a/services/web/package.json b/services/web/package.json index 2380657b96..b4907ab5cb 100644 --- a/services/web/package.json +++ b/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",