Skip to content

Commit 1b0ad67

Browse files
authored
chore: build better-sqlite3 with glibc 2.28 (#30390)
1 parent 6d25010 commit 1b0ad67

File tree

1 file changed

+74
-9
lines changed

1 file changed

+74
-9
lines changed

.circleci/workflows.yml

+74-9
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,9 @@ commands:
345345
only-cache-for-root-user:
346346
type: boolean
347347
default: false
348+
build-better-sqlite3:
349+
type: boolean
350+
default: false
348351
steps:
349352
- install_cache_helpers_dependencies
350353
- run:
@@ -353,9 +356,18 @@ commands:
353356
- run:
354357
name: Generate platform key
355358
command: node ./scripts/get-platform-key.js > platform_key
356-
- restore_cache:
357-
name: Restore cache state, to check for known modules cache existence
358-
key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}
359+
- when:
360+
condition: <<parameters.build-better-sqlite3>>
361+
steps:
362+
- restore_cache:
363+
name: Restore cache state, to check for known modules cache existence
364+
key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}-better-sqlite3
365+
- unless:
366+
condition: <<parameters.build-better-sqlite3>>
367+
steps:
368+
- restore_cache:
369+
name: Restore cache state, to check for known modules cache existence
370+
key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}
359371
- run:
360372
name: Bail if cache exists
361373
command: |
@@ -377,6 +389,10 @@ commands:
377389
PERCY_POSTINSTALL_BROWSER=true \
378390
yarn --prefer-offline --frozen-lockfile --cache-folder ~/.yarn
379391
no_output_timeout: 20m
392+
- when:
393+
condition: <<parameters.build-better-sqlite3>>
394+
steps:
395+
- build-better-sqlite3
380396
- prepare-modules-cache:
381397
dont-move: <<parameters.only-cache-for-root-user>> # we don't move, so we don't hit any issues unpacking symlinks
382398
- when:
@@ -399,11 +415,22 @@ commands:
399415
paths:
400416
- /tmp/node_modules_cache
401417
- run: touch node_modules_installed
402-
- save_cache:
403-
name: Saving node-modules cache state key
404-
key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}
405-
paths:
406-
- node_modules_installed
418+
- when:
419+
condition: <<parameters.build-better-sqlite3>>
420+
steps:
421+
- save_cache:
422+
name: Saving node-modules cache state key
423+
key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}-better-sqlite3
424+
paths:
425+
- node_modules_installed
426+
- unless:
427+
condition: <<parameters.build-better-sqlite3>>
428+
steps:
429+
- save_cache:
430+
name: Saving node-modules cache state key
431+
key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-state-of-node-modules-cache-{{ checksum "circle_cache_key" }}
432+
paths:
433+
- node_modules_installed
407434
- save_cache:
408435
name: Save weekly yarn cache
409436
key: v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-deps-root-weekly-{{ checksum "cache_date" }}
@@ -486,6 +513,39 @@ commands:
486513
echo "Location of Google Chrome Installation: `which google-chrome-<<parameters.channel>>`"
487514
echo "Google Chrome Version: `google-chrome-<<parameters.channel>> --version`"
488515
516+
# This code builds better-sqlite3 on Debian 10 (Buster). This is necessary because Debian 10 has the oldest glibc version (2.28) that we support.
517+
#
518+
# Since this is running Docker remote (because the job running the command may not be using an executor with the appropriate glibc version), we need to
519+
# 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
520+
# 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.
521+
build-better-sqlite3:
522+
description: Build better-sqlite3 for glibc 2.28
523+
steps:
524+
- setup_remote_docker
525+
- run:
526+
name: Build better-sqlite3 for glibc 2.28
527+
command: |
528+
if [[ ! -f better_sqlite3.node ]]; then
529+
set -x
530+
apt update && apt install -y docker.io
531+
docker run -d --name better-sqlite3-builder cypress/base-internal:20.15.0-buster /bin/bash -c "sleep 1000000000"
532+
docker cp ~/cypress/node_modules/better-sqlite3 better-sqlite3-builder:/better-sqlite3
533+
docker exec -it better-sqlite3-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$'"
534+
docker cp better-sqlite3-builder:/better-sqlite3/build/Release/better_sqlite3.node ~/cypress/node_modules/better-sqlite3/build/Release/better_sqlite3.node
535+
docker rm -f better-sqlite3-builder
536+
cp ~/cypress/node_modules/better-sqlite3/build/Release/better_sqlite3.node ~/cypress/better_sqlite3.node
537+
else
538+
cp ~/cypress/better_sqlite3.node ~/cypress/node_modules/better-sqlite3/build/Release/better_sqlite3.node
539+
fi
540+
- save_cache:
541+
key: better-sqlite3-{{ checksum "node_modules/better-sqlite3/package.json" }}-{{ checksum "node_modules/electron/package.json" }}
542+
paths:
543+
- better_sqlite3.node
544+
- run:
545+
name: Clean up top level better-sqlite3 file
546+
command: |
547+
rm ~/cypress/better_sqlite3.node
548+
489549
run-driver-integration-tests:
490550
parameters:
491551
browser:
@@ -1289,6 +1349,9 @@ jobs:
12891349
resource_class:
12901350
type: string
12911351
default: medium
1352+
build-better-sqlite3:
1353+
type: boolean
1354+
default: false
12921355
resource_class: << parameters.resource_class >>
12931356
steps:
12941357
- update_known_hosts
@@ -1305,6 +1368,7 @@ jobs:
13051368
- ProgramData/nvm # windows
13061369
- caching-dependency-installer:
13071370
only-cache-for-root-user: <<parameters.only-cache-for-root-user>>
1371+
build-better-sqlite3: <<parameters.build-better-sqlite3>>
13081372
- store-npm-logs
13091373

13101374
## restores node_modules from previous step & builds if first step skipped
@@ -2671,7 +2735,8 @@ jobs:
26712735

26722736
linux-x64-workflow: &linux-x64-workflow
26732737
jobs:
2674-
- node_modules_install
2738+
- node_modules_install:
2739+
build-better-sqlite3: true
26752740
- build:
26762741
context: test-runner:env-canary
26772742
requires:

0 commit comments

Comments
 (0)