@@ -345,6 +345,9 @@ commands:
345
345
only-cache-for-root-user :
346
346
type : boolean
347
347
default : false
348
+ build-better-sqlite3 :
349
+ type : boolean
350
+ default : false
348
351
steps :
349
352
- install_cache_helpers_dependencies
350
353
- run :
@@ -353,9 +356,18 @@ commands:
353
356
- run :
354
357
name : Generate platform key
355
358
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" }}
359
371
- run :
360
372
name : Bail if cache exists
361
373
command : |
@@ -377,6 +389,10 @@ commands:
377
389
PERCY_POSTINSTALL_BROWSER=true \
378
390
yarn --prefer-offline --frozen-lockfile --cache-folder ~/.yarn
379
391
no_output_timeout : 20m
392
+ - when :
393
+ condition : <<parameters.build-better-sqlite3>>
394
+ steps :
395
+ - build-better-sqlite3
380
396
- prepare-modules-cache :
381
397
dont-move : <<parameters.only-cache-for-root-user>> # we don't move, so we don't hit any issues unpacking symlinks
382
398
- when :
@@ -399,11 +415,22 @@ commands:
399
415
paths :
400
416
- /tmp/node_modules_cache
401
417
- 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
407
434
- save_cache :
408
435
name : Save weekly yarn cache
409
436
key : v{{ checksum ".circleci/cache-version.txt" }}-{{ checksum "platform_key" }}-deps-root-weekly-{{ checksum "cache_date" }}
@@ -486,6 +513,39 @@ commands:
486
513
echo "Location of Google Chrome Installation: `which google-chrome-<<parameters.channel>>`"
487
514
echo "Google Chrome Version: `google-chrome-<<parameters.channel>> --version`"
488
515
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
+
489
549
run-driver-integration-tests :
490
550
parameters :
491
551
browser :
@@ -1289,6 +1349,9 @@ jobs:
1289
1349
resource_class :
1290
1350
type : string
1291
1351
default : medium
1352
+ build-better-sqlite3 :
1353
+ type : boolean
1354
+ default : false
1292
1355
resource_class : << parameters.resource_class >>
1293
1356
steps :
1294
1357
- update_known_hosts
@@ -1305,6 +1368,7 @@ jobs:
1305
1368
- ProgramData/nvm # windows
1306
1369
- caching-dependency-installer :
1307
1370
only-cache-for-root-user : <<parameters.only-cache-for-root-user>>
1371
+ build-better-sqlite3 : <<parameters.build-better-sqlite3>>
1308
1372
- store-npm-logs
1309
1373
1310
1374
# # restores node_modules from previous step & builds if first step skipped
@@ -2671,7 +2735,8 @@ jobs:
2671
2735
2672
2736
linux-x64-workflow : &linux-x64-workflow
2673
2737
jobs :
2674
- - node_modules_install
2738
+ - node_modules_install :
2739
+ build-better-sqlite3 : true
2675
2740
- build :
2676
2741
context : test-runner:env-canary
2677
2742
requires :
0 commit comments