66executors :
77 linux-node :
88 docker :
9- - image : cimg/node:18. 20.3
9+ - image : cimg/node:20.15.1
1010 linux-python :
1111 docker :
1212 - image : cimg/python:3.10.7
@@ -55,10 +55,6 @@ commands:
5555 description : " bootstrap"
5656 steps :
5757 - run : ./bootstrap
58- npm-install :
59- description : " npm ci"
60- steps :
61- - run : npm ci
6258 pip-install :
6359 description : " pip install"
6460 parameters :
@@ -115,7 +111,7 @@ commands:
115111 description : " install canary version of node"
116112 steps :
117113 - install-node-version :
118- node_version : " 24.0.0-v8-canary202411045365c9d9be "
114+ node_version : " 24.0.0-v8-canary202501036428a2737e "
119115 canary : true
120116 install-v8 :
121117 description : " install v8 using jsvu"
@@ -164,7 +160,6 @@ commands:
164160 cat ~/emsdk/.emscripten
165161 - emsdk-env
166162 - bootstrap
167- - npm-install
168163 build-libs :
169164 description : " Build all libraries"
170165 steps :
@@ -223,7 +218,6 @@ commands:
223218 command : git submodule update --init
224219 - emsdk-env
225220 - bootstrap
226- - npm-install
227221 - pip-install
228222 upload-test-results :
229223 description : " Upload test results"
@@ -240,6 +234,10 @@ commands:
240234 description : " Name of given test suite"
241235 type : string
242236 default : " "
237+ extra-cflags :
238+ description : " Extra EMCC_CFLAGS"
239+ type : string
240+ default : " "
243241 steps :
244242 - when :
245243 # We only set EMTEST_RETRY_FLAKY on pull requests. When we run
@@ -250,6 +248,8 @@ commands:
250248 - set-retry-flaky-tests
251249 - run :
252250 name : run tests (<< parameters.title >>)
251+ environment :
252+ EMCC_CFLAGS : << parameters.extra-cflags >>
253253 command : |
254254 env
255255 ./test/runner << parameters.test_targets >>
@@ -306,16 +306,18 @@ commands:
306306 - run :
307307 name : run tests (<< parameters.title >>)
308308 environment :
309- EMTEST_LACKS_SOUND_HARDWARE : " 1"
310309 EMTEST_DETECT_TEMPFILE_LEAKS : " 0"
311310 # --no-sandbox because we are running as root and chrome requires
312311 # this flag for now: https://crbug.com/638180
313312 CHROME_FLAGS_BASE : " --no-first-run -start-maximized --no-sandbox --use-gl=swiftshader --user-data-dir=/tmp/chrome-emscripten-profile --enable-experimental-web-platform-features"
314313 CHROME_FLAGS_HEADLESS : " --headless=new --remote-debugging-port=1234"
315- CHROME_FLAGS_WASM : " --enable-experimental-webassembly-features --js-flags=\" --experimental-wasm-memory64 --experimental-wasm- stack-switching --experimental-wasm-type-reflection\" "
314+ CHROME_FLAGS_WASM : " --enable-experimental-webassembly-features --js-flags=\" --experimental-wasm-stack-switching --experimental-wasm-type-reflection\" "
316315 CHROME_FLAGS_NOCACHE : " --disk-cache-dir=/dev/null --disk-cache-size=1 --media-cache-size=1 --disable-application-cache --incognito"
316+ # The runners lack sound hardware so fallback to a dummy device (and
317+ # bypass the user gesture so audio tests work without interaction)
318+ CHROME_FLAGS_AUDIO : " --use-fake-device-for-media-stream --autoplay-policy=no-user-gesture-required"
317319 command : |
318- export EMTEST_BROWSER="/usr/bin/google-chrome $CHROME_FLAGS_BASE $CHROME_FLAGS_HEADLESS $CHROME_FLAGS_WASM $CHROME_FLAGS_NOCACHE"
320+ export EMTEST_BROWSER="/usr/bin/google-chrome $CHROME_FLAGS_BASE $CHROME_FLAGS_HEADLESS $CHROME_FLAGS_WASM $CHROME_FLAGS_NOCACHE $CHROME_FLAGS_AUDIO "
319321 # There are tests in the browser test suite that using libraries
320322 # that are not included by "./embuilder build ALL". For example the
321323 # PIC version of libSDL which is used by test_sdl2_misc_main_module
@@ -351,15 +353,26 @@ commands:
351353 command : |
352354 wget -O ~/ff.tar.bz2 "https://download.mozilla.org/?product=firefox-nightly-latest-ssl&os=linux64&lang=en-US"
353355 tar -C ~ -xf ~/ff.tar.bz2
356+ - run :
357+ name : Add audio dependencies
358+ command : |
359+ # This should add and start PulseAudio's dummy mixer. It will warn
360+ # that "This program is not intended to be run as root" but it can
361+ # be ignored.
362+ apt-get update -y
363+ apt-get install -q -y pulseaudio
364+ pulseaudio --start
354365 - run :
355366 name : configure firefox
356367 command : |
368+ # Note: the autoplay pref allows playback without user interaction
357369 mkdir ~/tmp-firefox-profile/
358370 cat > ~/tmp-firefox-profile/user.js \<<EOF
359371 user_pref("gfx.offscreencanvas.enabled", true);
360372 user_pref("javascript.options.shared_memory", true);
361373 user_pref("javascript.options.wasm_memory64", true);
362374 user_pref("dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled", true);
375+ user_pref("media.autoplay.default", 0);
363376 EOF
364377 - run :
365378 name : run tests (<< parameters.title >>)
@@ -369,7 +382,6 @@ commands:
369382 # support in headless mode) resolves
370383 EMTEST_LACKS_GRAPHICS_HARDWARE : " 1"
371384 EMTEST_LACKS_WEBGPU : " 1"
372- EMTEST_LACKS_SOUND_HARDWARE : " 1"
373385 # OffscreenCanvas support is not yet done in Firefox.
374386 EMTEST_LACKS_OFFSCREEN_CANVAS : " 1"
375387 EMTEST_DETECT_TEMPFILE_LEAKS : " 0"
@@ -402,7 +414,7 @@ commands:
402414 # this flag for now: https://crbug.com/638180
403415 CHROME_FLAGS_BASE : " --no-first-run -start-maximized --no-sandbox --use-gl=swiftshader --user-data-dir=/tmp/chrome-emscripten-profile"
404416 CHROME_FLAGS_HEADLESS : " --headless=new --remote-debugging-port=1234"
405- CHROME_FLAGS_WASM : " --enable-experimental-webassembly-features --js-flags= \" --experimental-wasm-memory64 \" "
417+ CHROME_FLAGS_WASM : " --enable-experimental-webassembly-features"
406418 CHROME_FLAGS_NOCACHE : " --disk-cache-dir=/dev/null --disk-cache-size=1 --media-cache-size=1 --disable-application-cache --incognito"
407419 command : |
408420 export EMTEST_BROWSER="/usr/bin/google-chrome $CHROME_FLAGS_BASE $CHROME_FLAGS_HEADLESS $CHROME_FLAGS_WASM $CHROME_FLAGS_NOCACHE"
@@ -425,8 +437,8 @@ jobs:
425437 - checkout
426438 - pip-install
427439 - run : ruff check
428- # TODO (cclauss): When ruff supports rule E303 without --preview, remove following line
429- - run : ruff check --preview --select=E303
440+ # TODO (cclauss): When ruff supports rules E20,E30 without --preview, remove following line
441+ - run : ruff check --preview --select=E20,E30
430442 mypy :
431443 executor : focal
432444 steps :
@@ -437,7 +449,7 @@ jobs:
437449 executor : linux-node
438450 steps :
439451 - checkout
440- - npm-install
452+ - run : npm ci
441453 - run : |
442454 npm run lint
443455 npm run check
@@ -526,6 +538,7 @@ jobs:
526538 asan.test_externref_emjs_dynlink
527539 asan.test_asyncify_longjmp
528540 asan.test_pthread_run_on_main_thread
541+ asan.test_minimal_runtime_global_initializer
529542 lsan.test_dylink_dso_needed
530543 lsan.test_stdio_locking
531544 lsan.test_dlfcn_basic
@@ -566,6 +579,7 @@ jobs:
566579 core2ss.test_pthread_thread_local_storage
567580 core2s.test_dylink_syslibs_missing_assertions
568581 core2s.test_module_wasm_memory
582+ cores.test_minimal_runtime_safe_heap
569583 wasm2js3.test_memorygrowth_2
570584 wasmfs.test_hello_world
571585 wasmfs.test_unistd_links*
@@ -589,8 +603,6 @@ jobs:
589603 wasmfs.test_fs_write
590604 wasmfs.test_fs_writev
591605 wasmfs.test_fs_writev_rawfs
592- wasmfs.test_fs_writeFile
593- wasmfs.test_fs_writeFile_rawfs
594606 wasmfs.test_fs_readv
595607 wasmfs.test_fs_write
596608 wasmfs.test_fs_readv_rawfs
@@ -642,7 +654,7 @@ jobs:
642654 # version of node (node canary) when running the compiler output (e.g.
643655 # in configure tests.
644656 - run :
645- name : configure node canary
657+ name : configure compiler to use node- canary
646658 command : echo "NODE_JS = NODE_JS_TEST" >> ~/emsdk/.emscripten
647659 - run-tests :
648660 title : " wasm64"
@@ -746,6 +758,18 @@ jobs:
746758 command : git submodule update --init
747759 - pip-install
748760 - install-emsdk
761+ # `install-node-version` only changes the NODE_JS_TEST (the version of
762+ # node used to run test), not NODE_JS (the version of node used to run the
763+ # compiler itself).
764+ # In order to test that the compiler itself can run under the oldest
765+ # supported version of node, we run all the tests in the runner under that
766+ # version.
767+ # Keep this in sync with MINIMUM_NODE_VERSION in tools/shared.py.
768+ - install-node-version :
769+ node_version : " 18.3.0"
770+ - run :
771+ name : configure compiler to use 18.3.0
772+ command : echo "NODE_JS = '$(which node)'" >> ~/emsdk/.emscripten
749773 - install-node-canary
750774 - run-tests :
751775 title : " node (canary)"
@@ -756,23 +780,75 @@ jobs:
756780 other.test_node_unhandled_rejection
757781 core2.test_hello_world
758782 core0.test_pthread_join_and_asyncify
759- core0.test_async_ccall_promise_jspi
760- core0.test_async_ccall_promise_exit_runtime_jspi
783+ core0.test_async_ccall_promise_jspi*
761784 core0.test_cubescript_jspi"
762785 # Run some basic tests with the minimum version of node that we currently
763- # support.
786+ # support in the generated code.
787+ # Keep this in sync with `OLDEST_SUPPORTED_NODE` in `feature_matrix.py`
764788 - install-node-version :
765789 node_version : " 10.19.0"
766790 - run-tests :
767791 title : " node (oldest / 10.19.0)"
792+ extra-cflags : " -sMIN_NODE_VERSION=101900"
793+ # We include most but not all of the nodefs and node rawfs tests here.
794+ # test_fs_nodefs_rw, test_fs_nodefs_statvfs, and test_unistd_io_nodefs_bigint fail.
768795 test_targets : "
769796 other.test_gen_struct_info
770797 other.test_native_call_before_init
771798 other.test_js_optimizer_verbose
772799 other.test_node_unhandled_rejection
773800 other.test_full_js_library*
774801 core2.test_hello_world
775- core2.test_fs_write_rawfs"
802+ core2.test_fcntl_open_nodefs
803+ core2.test_fcntl_open_rawfs
804+ core2.test_fgetc_ungetc_nodefs
805+ core2.test_fgetc_ungetc_rawfs
806+ core2.test_fs_append_rawfs
807+ core2.test_fs_emptyPath_rawfs
808+ core2.test_fs_enotdir_nodefs
809+ core2.test_fs_enotdir_rawfs
810+ core2.test_fs_errorstack_rawfs
811+ core2.test_fs_llseek_rawfs
812+ core2.test_fs_mkdir_dotdot_nodefs
813+ core2.test_fs_mkdir_dotdot_rawfs
814+ core2.test_fs_mmap_nodefs
815+ core2.test_fs_mmap_rawfs
816+ core2.test_fs_nodefs_cloexec
817+ core2.test_fs_nodefs_cloexec_rawfs
818+ core2.test_fs_nodefs_dup
819+ core2.test_fs_nodefs_dup_rawfs
820+ core2.test_fs_nodefs_home
821+ core2.test_fs_nodefs_nofollow
822+ core2.test_fs_nodefs_readdir
823+ core2.test_fs_noderawfs_nofollow
824+ core2.test_fs_readdir_ino_matches_stat_ino_nodefs
825+ core2.test_fs_readdir_ino_matches_stat_ino_rawfs
826+ core2.test_fs_readv_rawfs
827+ core2.test_fs_rename_on_existing_nodefs
828+ core2.test_fs_rename_on_existing_rawfs
829+ core2.test_fs_symlink_resolution_nodefs
830+ core2.test_fs_symlink_resolution_rawfs
831+ core2.test_fs_writeFile*
832+ core2.test_fs_write_rawfs
833+ core2.test_fs_writev_rawfs
834+ core2.test_futimens_rawfs
835+ core2.test_readdir_rawfs
836+ core2.test_stat_chmod_rawfs
837+ core2.test_unistd_access_nodefs
838+ core2.test_unistd_access_rawfs
839+ core2.test_unistd_close_rawfs
840+ core2.test_unistd_dup_rawfs
841+ core2.test_unistd_io_nodefs
842+ core2.test_unistd_links_nodefs
843+ core2.test_unistd_misc_nodefs
844+ core2.test_unistd_pipe_rawfs
845+ core2.test_unistd_symlink_on_nodefs
846+ core2.test_unistd_truncate_nodefs
847+ core2.test_unistd_truncate_rawfs
848+ core2.test_unistd_unlink_nodefs
849+ core2.test_unistd_unlink_rawfs
850+ core2.test_unistd_write_broken_link_rawfs
851+ "
776852 # Run a few test with the most recent version of node
777853 # In particular we have some tests that require node flags on older
778854 # versions of node but not with the most recent version.
@@ -792,7 +868,7 @@ jobs:
792868 core2.test_i64_invoke_bigint
793869 core2.test_sse2
794870 core2.test_source_map
795- core2.test_exceptions_wasm
871+ core2.test_exceptions_wasm_legacy
796872 core2.test_pthread_unhandledrejection"
797873 - upload-test-results
798874 test-other :
@@ -917,7 +993,6 @@ jobs:
917993 EMTEST_SKIP_V8 : " 1"
918994 EMTEST_SKIP_EH : " 1"
919995 EMTEST_SKIP_WASM64 : " 1"
920- EMTEST_SKIP_SIMD : " 1"
921996 EMTEST_SKIP_SCONS : " 1"
922997 EMTEST_SKIP_RUST : " 1"
923998 EMTEST_SKIP_NODE_CANARY : " 1"
0 commit comments