From 47509ec4d2f119903d89f375a8f936e8e51fce88 Mon Sep 17 00:00:00 2001 From: Matthew Schile Date: Wed, 9 Oct 2024 10:49:31 -0600 Subject: [PATCH] Revert "breaking: Remove support for Node.js 16, Node.js 21, and glibc < 2.28 (#30307)" This reverts commit dab5047756b2aed284ea49dadcc0eef5b38fc7eb. --- .circleci/workflows.yml | 84 ++++++++++++++++++++++++++++++++++++----- cli/package.json | 2 +- 2 files changed, 76 insertions(+), 10 deletions(-) diff --git a/.circleci/workflows.yml b/.circleci/workflows.yml index e524e22e59cd..d5785de9cef3 100644 --- a/.circleci/workflows.yml +++ b/.circleci/workflows.yml @@ -345,6 +345,9 @@ commands: only-cache-for-root-user: type: boolean default: false + build-better-sqlite3: + type: boolean + default: false steps: - install_cache_helpers_dependencies - run: @@ -353,9 +356,18 @@ commands: - run: name: Generate platform key command: node ./scripts/get-platform-key.js > platform_key - - restore_cache: - name: Restore cache state, to check for known modules cache existence - key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }} + - when: + condition: <> + steps: + - restore_cache: + name: Restore cache state, to check for known modules cache existence + key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}-centos7 + - unless: + condition: <> + steps: + - restore_cache: + name: Restore cache state, to check for known modules cache existence + key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }} - run: name: Bail if cache exists command: | @@ -377,6 +389,10 @@ commands: PERCY_POSTINSTALL_BROWSER=true \ yarn --prefer-offline --frozen-lockfile --cache-folder ~/.yarn no_output_timeout: 20m + - when: + condition: <> + steps: + - build-better-sqlite3 - prepare-modules-cache: dont-move: <> # we don't move, so we don't hit any issues unpacking symlinks - when: @@ -399,11 +415,22 @@ commands: paths: - /tmp/node_modules_cache - run: touch node_modules_installed - - save_cache: - name: Saving node-modules cache state key - key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }} - paths: - - node_modules_installed + - when: + condition: <> + steps: + - save_cache: + name: Saving node-modules cache state key + key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}-centos7 + paths: + - node_modules_installed + - unless: + condition: <> + steps: + - save_cache: + name: Saving node-modules cache state key + key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }} + paths: + - node_modules_installed - save_cache: name: Save weekly yarn cache key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-deps-root-weekly-{{ checksum "cache_date" }} @@ -486,6 +513,40 @@ commands: echo "Location of Google Chrome Installation: `which google-chrome-<>`" echo "Google Chrome Version: `google-chrome-<> --version`" + # This code builds better-sqlite3 on CentOS 7. This is necessary because CentOS 7 has the oldest glibc version + # that we support. This job uses the cypress/centos7-builder https://hub.docker.com/repository/docker/cypress/centos7-builder/general + # image to build better-sqlite3 against an older version of glibc (2.17). + # Since this is running Docker remote, we need to copy the project into the container, and copy the built plugin out + # of the container because the host running docker does not have access to the project directory so volume mounts are + # not possible. The built plugin is copied to the project directory so it can be injected into the final binary. + build-better-sqlite3: + description: Build better-sqlite3 for CentOS 7 + steps: + - setup_remote_docker + - run: + name: Build better-sqlite3 for CentOS 7 + command: | + if [[ ! -f better_sqlite3.node ]]; then + set -x + apt update && apt install -y docker.io + docker run -d --name centos7-builder cypress/centos7-builder:latest /bin/bash -c "sleep 1000000000" + docker cp ~/cypress/node_modules/better-sqlite3 centos7-builder:/better-sqlite3 + docker exec -it centos7-builder /bin/bash -c "cd /better-sqlite3 && source /root/.bashrc && chown -R root:root . && npm install --ignore-scripts && npx --no-install prebuild -r electron -t 27.1.3 --include-regex 'better_sqlite3.node$'" + docker cp centos7-builder:/better-sqlite3/build/Release/better_sqlite3.node ~/cypress/node_modules/better-sqlite3/build/Release/better_sqlite3.node + docker rm -f centos7-builder + cp ~/cypress/node_modules/better-sqlite3/build/Release/better_sqlite3.node ~/cypress/better_sqlite3.node + else + cp ~/cypress/better_sqlite3.node ~/cypress/node_modules/better-sqlite3/build/Release/better_sqlite3.node + fi + - save_cache: + key: better-sqlite3-{{ checksum "node_modules/better-sqlite3/package.json" }}-{{ checksum "node_modules/electron/package.json" }}-centos7 + paths: + - better_sqlite3.node + - run: + name: Clean up top level better-sqlite3 file + command: | + rm ~/cypress/better_sqlite3.node + run-driver-integration-tests: parameters: browser: @@ -1289,6 +1350,9 @@ jobs: resource_class: type: string default: medium + build-better-sqlite3: + type: boolean + default: false resource_class: << parameters.resource_class >> steps: - update_known_hosts @@ -1305,6 +1369,7 @@ jobs: - ProgramData/nvm # windows - caching-dependency-installer: only-cache-for-root-user: <> + build-better-sqlite3: <> - store-npm-logs ## restores node_modules from previous step & builds if first step skipped @@ -2647,7 +2712,8 @@ jobs: linux-x64-workflow: &linux-x64-workflow jobs: - - node_modules_install + - node_modules_install: + build-better-sqlite3: true - build: context: test-runner:env-canary requires: diff --git a/cli/package.json b/cli/package.json index 4b0b45a62cf5..498773844011 100644 --- a/cli/package.json +++ b/cli/package.json @@ -126,7 +126,7 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" }, "types": "types", "exports": {