@@ -126,9 +126,7 @@ jobs:
126126 - uses : actions/cache@v4
127127 name : Setup pnpm cache
128128 with :
129- path : |
130- ${{ env.STORE_PATH }}
131- .nx/cache
129+ path : ${{ env.STORE_PATH }}
132130 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
133131 restore-keys : |
134132 ${{ runner.os }}-pnpm-store
@@ -139,14 +137,28 @@ jobs:
139137 - name : DevExtreme - Build
140138 if : needs.determine-framework-tests-scope.outputs.framework-tests-scope == 'none'
141139 shell : bash
142- run : pnpx nx build devextreme
140+ run : |
141+ pnpx nx build devextreme-scss
142+ pnpx nx build devextreme
143143
144144 - name : DevExtreme - Build-all
145145 if : needs.determine-framework-tests-scope.outputs.framework-tests-scope != 'none'
146146 env :
147147 BUILD_TEST_INTERNAL_PACKAGE : true
148148 run : pnpm run all:build-dev
149149
150+ - name : Zip artifacts (for jQuery tests)
151+ working-directory : ./packages/devextreme
152+ run : |
153+ 7z a -tzip -mx3 -mmt2 artifacts.zip artifacts ../devextreme-scss/scss/bundles
154+
155+ - name : Upload build artifacts (for jQuery tests)
156+ uses : actions/upload-artifact@v4
157+ with :
158+ name : devextreme-artifacts-jquery
159+ path : ./packages/devextreme/artifacts.zip
160+ retention-days : 1
161+
150162 - name : Move packages
151163 if : needs.determine-framework-tests-scope.outputs.framework-tests-scope != 'none'
152164 run : |
@@ -201,12 +213,10 @@ jobs:
201213 run : |
202214 echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
203215
204- - uses : actions/cache@v4
205- name : Setup pnpm cache
216+ - uses : actions/cache/restore @v4
217+ name : Restore pnpm cache
206218 with :
207- path : |
208- ${{ env.STORE_PATH }}
209- .nx/cache
219+ path : ${{ env.STORE_PATH }}
210220 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
211221 restore-keys : |
212222 ${{ runner.os }}-pnpm-store
@@ -270,12 +280,10 @@ jobs:
270280 run : |
271281 echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
272282
273- - uses : actions/cache@v4
274- name : Setup pnpm cache
283+ - uses : actions/cache/restore @v4
284+ name : Restore pnpm cache
275285 with :
276- path : |
277- ${{ env.STORE_PATH }}
278- .nx/cache
286+ path : ${{ env.STORE_PATH }}
279287 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
280288 restore-keys : |
281289 ${{ runner.os }}-pnpm-store
@@ -337,12 +345,10 @@ jobs:
337345 run : |
338346 echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
339347
340- - uses : actions/cache@v4
341- name : Setup pnpm cache
348+ - uses : actions/cache/restore @v4
349+ name : Restore pnpm cache
342350 with :
343- path : |
344- ${{ env.STORE_PATH }}
345- .nx/cache
351+ path : ${{ env.STORE_PATH }}
346352 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
347353 restore-keys : |
348354 ${{ runner.os }}-pnpm-store
@@ -426,12 +432,10 @@ jobs:
426432 run : |
427433 echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
428434
429- - uses : actions/cache@v4
430- name : Setup pnpm cache
435+ - uses : actions/cache/restore @v4
436+ name : Restore pnpm cache
431437 with :
432- path : |
433- ${{ env.STORE_PATH }}
434- .nx/cache
438+ path : ${{ env.STORE_PATH }}
435439 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
436440 restore-keys : |
437441 ${{ runner.os }}-pnpm-store
@@ -490,18 +494,15 @@ jobs:
490494 fail-fast : false
491495 matrix :
492496 STRATEGY : [screenshots, accessibility]
493- # THEME: ['material.blue.light', 'fluent.blue.light']
494- THEME : ['fluent.blue.light']
495- CONSTEL : [jquery(1/4), jquery(2/4), jquery(3/4), jquery(4/4), jquery]
497+ THEME : ['material.blue.light', 'fluent.blue.light']
498+ CONSTEL : [jquery(1/3), jquery(2/3), jquery(3/3), jquery]
496499 exclude :
497500 - STRATEGY : accessibility
498- CONSTEL : jquery(1/4)
499- - STRATEGY : accessibility
500- CONSTEL : jquery(2/4)
501+ CONSTEL : jquery(1/3)
501502 - STRATEGY : accessibility
502- CONSTEL : jquery(3/4 )
503+ CONSTEL : jquery(2/3 )
503504 - STRATEGY : accessibility
504- CONSTEL : jquery(4/4 )
505+ CONSTEL : jquery(3/3 )
505506 - STRATEGY : screenshots
506507 CONSTEL : jquery
507508 env :
@@ -515,6 +516,16 @@ jobs:
515516 - name : Get sources
516517 uses : actions/checkout@v4
517518
519+ - name : Download artifacts
520+ uses : actions/download-artifact@v4
521+ with :
522+ name : devextreme-artifacts-jquery
523+ path : ./packages/devextreme
524+
525+ - name : Unpack artifacts
526+ working-directory : ./packages/devextreme
527+ run : 7z x artifacts.zip -aoa
528+
518529 - name : Setup Chrome
519530 uses : ./.github/actions/setup-chrome
520531 with :
@@ -535,36 +546,57 @@ jobs:
535546 run : |
536547 echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
537548
538- - uses : actions/cache@v4
539- name : Setup pnpm cache
549+ - uses : actions/cache/restore @v4
550+ name : Restore pnpm cache
540551 with :
541- path : |
542- ${{ env.STORE_PATH }}
543- .nx/cache
552+ path : ${{ env.STORE_PATH }}
544553 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
545554 restore-keys : |
546555 ${{ runner.os }}-pnpm-store
547556
548557 - name : Install dependencies
549558 run : pnpm install --frozen-lockfile
550559
551- - name : DevExtreme - Build
552- run : pnpx nx build devextreme
560+ - name : Cache Roboto font
561+ if : contains(matrix.THEME, 'material')
562+ id : cache-roboto
563+ uses : actions/cache@v4
564+ with :
565+ path : /usr/share/fonts/truetype/roboto
566+ key : roboto-font-${{ runner.os }}
567+
568+ - name : Install Roboto font for Material theme
569+ if : contains(matrix.THEME, 'material') && steps.cache-roboto.outputs.cache-hit != 'true'
570+ run : |
571+ echo "Installing Roboto font..."
572+ sudo apt-get update -qq
573+ sudo apt-get install -y -qq fonts-roboto fonts-roboto-unhinted
574+ sudo fc-cache -f -v > /dev/null 2>&1 || true
575+ echo "Roboto font installed"
553576
554577 - name : Run Web Server
578+ run : python -m http.server 8080 &
579+
580+ - name : Set Chrome flags
581+ id : chrome-flags
555582 run : |
556- python -m http.server 8080 &
557- python -m http.server 8081 &
558- python -m http.server 8082 &
559- python -m http.server 8083 &
583+ BASE_FLAGS="chrome:headless --window-size=1200,800 --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl=swiftshader --disable-features=PaintHolding --js-flags=--random-seed=2147483647"
584+
585+ # For Material theme, enable better font rendering to avoid instability
586+ if [[ "${{ matrix.THEME }}" != *"material"* ]]; then
587+ BASE_FLAGS="$BASE_FLAGS --font-render-hinting=none --disable-font-subpixel-positioning"
588+ fi
589+
590+ echo "flags=$BASE_FLAGS" >> $GITHUB_OUTPUT
560591
561- - name : Run TestCafe tests
592+ - name : Run TestCafe tests (jQuery)
562593 shell : bash
563594 working-directory : apps/demos
564595 env :
596+ NODE_OPTIONS : --max-old-space-size=8192
565597 STRATEGY : ${{ matrix.STRATEGY }}
566598 CHANGEDFILEINFOSPATH : changed-files.json
567- BROWSERS : chrome:headless --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl="swiftshader" --disable-features=PaintHolding --js- flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning
599+ BROWSERS : ${{ steps.chrome- flags.outputs.flags }}
568600 # DEBUG: hammerhead:*,testcafe:*
569601 CONCURRENCY : 4
570602 TCQUARANTINE : true
@@ -609,7 +641,26 @@ jobs:
609641 strategy :
610642 fail-fast : false
611643 matrix :
612- CONSTEL : [react(1/4), react(2/4), react(3/4), react(4/4), vue(1/4), vue(2/4), vue(3/4), vue(4/4), angular(1/4), angular(2/4), angular(3/4), angular(4/4)]
644+ CONSTEL : [
645+ react(1/3),
646+ react(2/3),
647+ react(3/3),
648+ vue(1/5),
649+ vue(2/5),
650+ vue(3/5),
651+ vue(4/5),
652+ vue(5/5),
653+ angular(1/10),
654+ angular(2/10),
655+ angular(3/10),
656+ angular(4/10),
657+ angular(5/10),
658+ angular(6/10),
659+ angular(7/10),
660+ angular(8/10),
661+ angular(9/10),
662+ angular(10/10),
663+ ]
613664 THEME : ['fluent.blue.light']
614665
615666 runs-on : devextreme-shr2
@@ -645,12 +696,10 @@ jobs:
645696 run : |
646697 echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
647698
648- - uses : actions/cache@v4
649- name : Setup pnpm cache
699+ - uses : actions/cache/restore @v4
700+ name : Restore pnpm cache
650701 with :
651- path : |
652- ${{ env.STORE_PATH }}
653- .nx/cache
702+ path : ${{ env.STORE_PATH }}
654703 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
655704 restore-keys : |
656705 ${{ runner.os }}-pnpm-store
@@ -682,17 +731,26 @@ jobs:
682731 - name : Run Web Server
683732 run : |
684733 python -m http.server 8080 &
685- python -m http.server 8081 &
686- python -m http.server 8082 &
687- python -m http.server 8083 &
734+
735+ - name : Set concurrency based on framework
736+ id : set-concurrency
737+ run : |
738+ if [[ "${{ matrix.CONSTEL }}" == react* ]]; then
739+ echo "concurrency=3" >> $GITHUB_OUTPUT
740+ elif [[ "${{ matrix.CONSTEL }}" == angular* ]]; then
741+ echo "concurrency=2" >> $GITHUB_OUTPUT
742+ else
743+ echo "concurrency=2" >> $GITHUB_OUTPUT
744+ fi
688745
689746 - name : Run TestCafe tests
690747 shell : bash
691748 working-directory : apps/demos
692749 env :
693- BROWSERS : chrome:headless --window-size=1200,800 --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl="swiftshader" --disable-features=PaintHolding --js-flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning
750+ NODE_OPTIONS : --max-old-space-size=8192
751+ BROWSERS : chrome:headless --window-size=1200,800 --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl=swiftshader --disable-features=PaintHolding --js-flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning
694752 # DEBUG: hammerhead:*,testcafe:*
695- CONCURRENCY : 4
753+ CONCURRENCY : ${{ steps.set-concurrency.outputs.concurrency }}
696754 TCQUARANTINE : true
697755 CONSTEL : ${{ matrix.CONSTEL }}
698756 THEME : ${{ matrix.THEME }}
@@ -763,12 +821,10 @@ jobs:
763821 run : |
764822 echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
765823
766- - uses : actions/cache@v4
767- name : Setup pnpm cache
824+ - uses : actions/cache/restore @v4
825+ name : Restore pnpm cache
768826 with :
769- path : |
770- ${{ env.STORE_PATH }}
771- .nx/cache
827+ path : ${{ env.STORE_PATH }}
772828 key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
773829 restore-keys : |
774830 ${{ runner.os }}-pnpm-store
@@ -815,7 +871,7 @@ jobs:
815871 working-directory : apps/demos
816872 env :
817873 CHANGEDFILEINFOSPATH : changed-files.json
818- BROWSERS : chrome:headless --window-size=1200,800 --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl=" swiftshader" --disable-features=PaintHolding --js-flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning
874+ BROWSERS : chrome:headless --window-size=1200,800 --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl=swiftshader --disable-features=PaintHolding --js-flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning
819875 # DEBUG: hammerhead:*,testcafe:*
820876 CONCURRENCY : 1
821877 TCQUARANTINE : true
0 commit comments