chore: Improve CI time#2661
Conversation
|
pkg.pr.new packages benchmark commit |
Bundle size comparison (
|
| 🟢 Decreased | ➖ Unchanged | 🔴 Increased | ❔ Unknown |
|---|---|---|---|
| 0 | 320 | 0 | 0 |
import { ... } in PR vs import * as ... in PR (is the library tree-Shakeable?):
Click to reveal the results table (297 entries).
| Test | tsdown |
|---|---|
| d_Void.ts | 87.41 kB ( |
| d_sampler.ts | 87.41 kB ( |
| d_isPtr.ts | 87.41 kB ( |
| d_comparisonSampler.ts | 87.42 kB ( |
| d_isSizeAttrib.ts | 87.42 kB ( |
| d_isWgslArray.ts | 87.42 kB ( |
| d_isAlignAttrib.ts | 87.42 kB ( |
| d_isWgslStruct.ts | 87.42 kB ( |
| d_isAtomic.ts | 87.41 kB ( |
| d_isBuiltinAttrib.ts | 87.42 kB ( |
| d_isLocationAttrib.ts | 87.42 kB ( |
| d_isDecorated.ts | 87.42 kB ( |
| d_isInterpolateAttrib.ts | 87.42 kB ( |
| d_atomic.ts | 87.41 kB ( |
| d_ptrHandle.ts | 87.41 kB ( |
| d_ptrUniform.ts | 87.41 kB ( |
| d_ptrStorage.ts | 87.41 kB ( |
| d_ptrPrivate.ts | 87.41 kB ( |
| d_ptrFn.ts | 87.41 kB ( |
| d_ptrWorkgroup.ts | 87.42 kB ( |
| d_textureExternal.ts | 87.42 kB ( |
| d_textureStorage1d.ts | 87.42 kB ( |
| d_textureStorage2d.ts | 87.42 kB ( |
| d_textureStorage3d.ts | 87.42 kB ( |
| d_textureStorage2dArray.ts | 87.42 kB ( |
| d_isDisarray.ts | 87.41 kB ( |
| d_isUnstruct.ts | 87.41 kB ( |
| d_isLooseDecorated.ts | 87.42 kB ( |
| d_isLooseData.ts | 87.42 kB ( |
| d_isWgslData.ts | 87.41 kB ( |
| d_unstruct.ts | 87.41 kB ( |
| d_isData.ts | 87.41 kB ( |
| d_deepEqual.ts | 87.41 kB ( |
| d_struct.ts | 87.41 kB ( |
| d_ref.ts | 87.41 kB ( |
| std_discard.ts | 103.15 kB ( |
| std_copy.ts | 103.14 kB ( |
| std_arrayLength.ts | 103.15 kB ( |
| std_isBeingTranspiled.ts | 103.16 kB ( |
| std_getTargetShaderLanguage.ts | 103.16 kB ( |
| std_extensionEnabled.ts | 103.16 kB ( |
| std_range.ts | 103.14 kB ( |
| std_dpdx.ts | 103.14 kB ( |
| std_fwidthCoarse.ts | 103.15 kB ( |
| std_dpdxCoarse.ts | 103.15 kB ( |
| std_dpdyCoarse.ts | 103.15 kB ( |
| std_fwidthFine.ts | 103.15 kB ( |
| std_dpdxFine.ts | 103.15 kB ( |
| std_dpdyFine.ts | 103.15 kB ( |
| std_fwidth.ts | 103.15 kB ( |
| std_dpdy.ts | 103.14 kB ( |
| d_bool.ts | 87.41 kB ( |
| d_f16.ts | 87.41 kB ( |
| d_f32.ts | 87.41 kB ( |
| d_i32.ts | 87.41 kB ( |
| d_u32.ts | 87.41 kB ( |
| d_u16.ts | 87.41 kB ( |
| std_atomicLoad.ts | 103.15 kB ( |
| std_textureBarrier.ts | 103.15 kB ( |
| std_atomicStore.ts | 103.15 kB ( |
| std_workgroupBarrier.ts | 103.16 kB ( |
| std_storageBarrier.ts | 103.15 kB ( |
| std_atomicAdd.ts | 103.15 kB ( |
| std_atomicAnd.ts | 103.15 kB ( |
| std_atomicMax.ts | 103.15 kB ( |
| std_atomicMin.ts | 103.15 kB ( |
| std_atomicSub.ts | 103.15 kB ( |
| std_atomicXor.ts | 103.15 kB ( |
| std_atomicOr.ts | 103.15 kB ( |
| d_textureDepth2d.ts | 87.42 kB ( |
| d_textureDepthCube.ts | 87.42 kB ( |
| d_texture1d.ts | 87.41 kB ( |
| d_texture2d.ts | 87.41 kB ( |
| d_texture3d.ts | 87.41 kB ( |
| d_textureDepth2dArray.ts | 87.42 kB ( |
| d_textureCube.ts | 87.42 kB ( |
| d_textureDepthCubeArray.ts | 87.42 kB ( |
| d_textureDepthMultisampled2d.ts | 87.43 kB ( |
| d_texture2dArray.ts | 87.42 kB ( |
| d_textureCubeArray.ts | 87.42 kB ( |
| d_textureMultisampled2d.ts | 87.42 kB ( |
| d_disarrayOf.ts | 87.41 kB ( |
| d_vec2b.ts | 87.41 kB ( |
| d_vec2f.ts | 87.41 kB ( |
| d_vec2h.ts | 87.41 kB ( |
| d_vec2i.ts | 87.41 kB ( |
| d_vec2u.ts | 87.41 kB ( |
| d_vec3b.ts | 87.41 kB ( |
| d_vec3f.ts | 87.41 kB ( |
| d_vec3h.ts | 87.41 kB ( |
| d_vec3i.ts | 87.41 kB ( |
| d_vec3u.ts | 87.41 kB ( |
| d_vec4b.ts | 87.41 kB ( |
| d_vec4f.ts | 87.41 kB ( |
| d_vec4h.ts | 87.41 kB ( |
| d_vec4i.ts | 87.41 kB ( |
| d_vec4u.ts | 87.41 kB ( |
| std_subgroupAdd.ts | 103.15 kB ( |
| std_subgroupBroadcastFirst.ts | 103.16 kB ( |
| std_subgroupExclusiveAdd.ts | 103.16 kB ( |
| std_subgroupExclusiveMul.ts | 103.16 kB ( |
| std_subgroupInclusiveAdd.ts | 103.16 kB ( |
| std_subgroupInclusiveMul.ts | 103.16 kB ( |
| std_subgroupShuffleDown.ts | 103.16 kB ( |
| std_subgroupShuffleXor.ts | 103.16 kB ( |
| std_subgroupBroadcast.ts | 103.16 kB ( |
| std_subgroupShuffleUp.ts | 103.16 kB ( |
| std_subgroupShuffle.ts | 103.15 kB ( |
| std_subgroupBallot.ts | 103.15 kB ( |
| std_subgroupElect.ts | 103.15 kB ( |
| std_subgroupAll.ts | 103.15 kB ( |
| std_subgroupAnd.ts | 103.15 kB ( |
| std_subgroupAny.ts | 103.15 kB ( |
| std_subgroupMax.ts | 103.15 kB ( |
| std_subgroupMin.ts | 103.15 kB ( |
| std_subgroupMul.ts | 103.15 kB ( |
| std_subgroupXor.ts | 103.15 kB ( |
| std_subgroupOr.ts | 103.15 kB ( |
| d_formatToWGSLType.ts | 87.42 kB ( |
| d_uint8.ts | 87.41 kB ( |
| d_unorm10_10_10_2.ts | 87.42 kB ( |
| d_unorm8x4_bgra.ts | 87.42 kB ( |
| d_float16x2.ts | 87.41 kB ( |
| d_float16x4.ts | 87.41 kB ( |
| d_float32x2.ts | 87.41 kB ( |
| d_float32x3.ts | 87.41 kB ( |
| d_float32x4.ts | 87.41 kB ( |
| d_snorm16x2.ts | 87.41 kB ( |
| d_snorm16x4.ts | 87.41 kB ( |
| d_unorm16x2.ts | 87.41 kB ( |
| d_unorm16x4.ts | 87.41 kB ( |
| d_sint16x2.ts | 87.41 kB ( |
| d_sint16x4.ts | 87.41 kB ( |
| d_sint32x2.ts | 87.41 kB ( |
| d_sint32x3.ts | 87.41 kB ( |
| d_sint32x4.ts | 87.41 kB ( |
| d_snorm8x2.ts | 87.41 kB ( |
| d_snorm8x4.ts | 87.41 kB ( |
| d_uint16x2.ts | 87.41 kB ( |
| d_uint16x4.ts | 87.41 kB ( |
| d_uint32x2.ts | 87.41 kB ( |
| d_uint32x3.ts | 87.41 kB ( |
| d_uint32x4.ts | 87.41 kB ( |
| d_unorm8x2.ts | 87.41 kB ( |
| d_unorm8x4.ts | 87.41 kB ( |
| d_float16.ts | 87.41 kB ( |
| d_float32.ts | 87.41 kB ( |
| d_sint8x2.ts | 87.41 kB ( |
| d_sint8x4.ts | 87.41 kB ( |
| d_snorm16.ts | 87.41 kB ( |
| d_uint8x2.ts | 87.41 kB ( |
| d_uint8x4.ts | 87.41 kB ( |
| d_unorm16.ts | 87.41 kB ( |
| d_sint16.ts | 87.41 kB ( |
| d_sint32.ts | 87.41 kB ( |
| d_snorm8.ts | 87.41 kB ( |
| d_uint16.ts | 87.41 kB ( |
| d_uint32.ts | 87.41 kB ( |
| d_unorm8.ts | 87.41 kB ( |
| d_sint8.ts | 87.41 kB ( |
| d_packedFormats.ts | 87.42 kB ( |
| d_isPackedData.ts | 87.42 kB ( |
| std_textureDimensions.ts | 103.16 kB ( |
| std_textureGather.ts | 103.15 kB ( |
| std_textureSampleBaseClampToEdge.ts | 103.17 kB ( |
| std_textureSampleCompareLevel.ts | 103.16 kB ( |
| std_textureSampleCompare.ts | 103.16 kB ( |
| std_textureSampleLevel.ts | 103.16 kB ( |
| std_textureSampleBias.ts | 103.16 kB ( |
| std_textureSampleGrad.ts | 103.16 kB ( |
| std_textureSample.ts | 103.15 kB ( |
| std_textureStore.ts | 103.15 kB ( |
| std_textureLoad.ts | 103.15 kB ( |
| d_alignmentOf.ts | 87.42 kB ( |
| std_translation4.ts | 103.15 kB ( |
| std_rotationX4.ts | 103.15 kB ( |
| std_rotationY4.ts | 103.15 kB ( |
| std_rotationZ4.ts | 103.15 kB ( |
| std_identity2.ts | 103.15 kB ( |
| std_identity3.ts | 103.15 kB ( |
| std_identity4.ts | 103.15 kB ( |
| std_scaling4.ts | 103.15 kB ( |
| d_isBuiltin.ts | 87.41 kB ( |
| d_sizeOf.ts | 87.41 kB ( |
| d_isContiguous.ts | 87.42 kB ( |
| d_getLongestContiguousPrefix.ts | 87.43 kB ( |
| d_arrayOf.ts | 87.41 kB ( |
| d_size.ts | 87.41 kB ( |
| d_align.ts | 87.41 kB ( |
| d_location.ts | 87.41 kB ( |
| d_interpolate.ts | 87.42 kB ( |
| d_invariant.ts | 87.41 kB ( |
| d_mat4x4f.ts | 87.41 kB ( |
| d_mat2x2f.ts | 87.41 kB ( |
| d_mat3x3f.ts | 87.41 kB ( |
| d_matToArray.ts | 87.41 kB ( |
| d_builtin.ts | 87.41 kB ( |
| std_unpack2x16float.ts | 103.15 kB ( |
| std_unpack4x8unorm.ts | 103.15 kB ( |
| std_pack2x16float.ts | 103.15 kB ( |
| std_pack4x8unorm.ts | 103.15 kB ( |
| std_bitcastU32toF32.ts | 103.15 kB ( |
| std_bitcastU32toI32.ts | 103.15 kB ( |
| std_neg.ts | 103.14 kB ( |
| std_bitShiftRight.ts | 103.15 kB ( |
| std_bitShiftLeft.ts | 103.15 kB ( |
| std_add.ts | 103.14 kB ( |
| std_div.ts | 103.14 kB ( |
| std_mod.ts | 103.14 kB ( |
| std_mul.ts | 103.14 kB ( |
| std_sub.ts | 103.14 kB ( |
| std_translate4.ts | 103.15 kB ( |
| std_rotateX4.ts | 103.15 kB ( |
| std_scale4.ts | 103.15 kB ( |
| std_rotateY4.ts | 103.15 kB ( |
| std_rotateZ4.ts | 103.15 kB ( |
| d_memoryLayoutOf.ts | 87.42 kB ( |
| std_and.ts | 103.14 kB ( |
| std_or.ts | 103.14 kB ( |
| std_select.ts | 103.15 kB ( |
| std_allEq.ts | 103.14 kB ( |
| std_all.ts | 103.14 kB ( |
| std_not.ts | 103.14 kB ( |
| std_eq.ts | 103.14 kB ( |
| std_lt.ts | 103.14 kB ( |
| std_ne.ts | 103.14 kB ( |
| std_isCloseTo.ts | 103.15 kB ( |
| std_any.ts | 103.14 kB ( |
| std_ge.ts | 103.14 kB ( |
| std_gt.ts | 103.14 kB ( |
| std_le.ts | 103.14 kB ( |
| std_dot4U8Packed.ts | 103.15 kB ( |
| std_length.ts | 103.15 kB ( |
| std_countTrailingZeros.ts | 103.16 kB ( |
| std_distance.ts | 103.15 kB ( |
| std_dot.ts | 103.14 kB ( |
| std_countLeadingZeros.ts | 103.16 kB ( |
| std_firstTrailingBit.ts | 103.16 kB ( |
| std_firstLeadingBit.ts | 103.15 kB ( |
| std_fract.ts | 103.14 kB ( |
| std_frexp.ts | 103.14 kB ( |
| std_modf.ts | 103.14 kB ( |
| std_quantizeToF16.ts | 103.15 kB ( |
| std_mix.ts | 103.14 kB ( |
| std_countOneBits.ts | 103.15 kB ( |
| std_dot4I8Packed.ts | 103.15 kB ( |
| std_determinant.ts | 103.15 kB ( |
| std_extractBits.ts | 103.15 kB ( |
| std_faceForward.ts | 103.15 kB ( |
| std_inverseSqrt.ts | 103.15 kB ( |
| std_reverseBits.ts | 103.15 kB ( |
| std_insertBits.ts | 103.15 kB ( |
| std_smoothstep.ts | 103.15 kB ( |
| std_normalize.ts | 103.15 kB ( |
| std_transpose.ts | 103.15 kB ( |
| std_saturate.ts | 103.15 kB ( |
| std_degrees.ts | 103.15 kB ( |
| std_radians.ts | 103.15 kB ( |
| std_reflect.ts | 103.15 kB ( |
| std_refract.ts | 103.15 kB ( |
| std_acosh.ts | 103.14 kB ( |
| std_asinh.ts | 103.14 kB ( |
| std_atan2.ts | 103.14 kB ( |
| std_atanh.ts | 103.14 kB ( |
| std_clamp.ts | 103.14 kB ( |
| std_cross.ts | 103.14 kB ( |
| std_floor.ts | 103.14 kB ( |
| std_ldexp.ts | 103.14 kB ( |
| std_round.ts | 103.14 kB ( |
| std_trunc.ts | 103.14 kB ( |
| std_acos.ts | 103.14 kB ( |
| std_asin.ts | 103.14 kB ( |
| std_atan.ts | 103.14 kB ( |
| std_ceil.ts | 103.14 kB ( |
| std_cosh.ts | 103.14 kB ( |
| std_exp2.ts | 103.14 kB ( |
| std_log2.ts | 103.14 kB ( |
| std_sign.ts | 103.14 kB ( |
| std_sinh.ts | 103.14 kB ( |
| std_sqrt.ts | 103.14 kB ( |
| std_step.ts | 103.14 kB ( |
| std_tanh.ts | 103.14 kB ( |
| std_abs.ts | 103.14 kB ( |
| std_cos.ts | 103.14 kB ( |
| std_exp.ts | 103.14 kB ( |
| std_fma.ts | 103.14 kB ( |
| std_log.ts | 103.14 kB ( |
| std_max.ts | 103.14 kB ( |
| std_min.ts | 103.14 kB ( |
| std_pow.ts | 103.14 kB ( |
| std_sin.ts | 103.14 kB ( |
| std_tan.ts | 103.14 kB ( |
| common_fullScreenTriangle.ts | 57.18 kB ( |
| common_writeSoA.ts | 57.17 kB ( |
| STATIC_allImports.ts | 287.21 kB ( |
| STATIC_d.ts | 87.40 kB ( |
| STATIC_std.ts | 103.14 kB ( |
If you wish to run a comparison for other, slower bundlers, run the 'Tree-shake test' from the GitHub Actions menu.
Resolution Time Benchmark---
config:
themeVariables:
xyChart:
plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
title "Random Branching (🔴 PR | 🔵 main | 🟢 release)"
x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
y-axis "time (ms)"
line [0.92, 1.81, 4.01, 6.06, 7.79, 10.82, 21.42, 25.73]
line [0.89, 1.91, 4.33, 5.77, 6.88, 11.68, 20.81, 21.07]
line [0.97, 1.95, 4.05, 6.28, 7.36, 11.47, 21.46, 22.57]
---
config:
themeVariables:
xyChart:
plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
title "Linear Recursion (🔴 PR | 🔵 main | 🟢 release)"
x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
y-axis "time (ms)"
line [0.26, 0.57, 0.71, 0.80, 1.10, 1.12, 1.37, 1.57]
line [0.32, 0.58, 0.68, 0.80, 1.20, 1.19, 1.43, 1.56]
line [0.28, 0.54, 0.65, 0.83, 1.15, 1.25, 1.47, 1.66]
---
config:
themeVariables:
xyChart:
plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
title "Full Tree (🔴 PR | 🔵 main | 🟢 release)"
x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
y-axis "time (ms)"
line [0.83, 2.02, 3.77, 6.17, 12.22, 25.39, 55.09, 113.34]
line [0.78, 2.09, 4.29, 6.16, 11.72, 25.27, 54.54, 109.79]
line [0.75, 1.94, 3.67, 6.08, 12.17, 25.64, 55.91, 112.07]
|
48bcc00 to
29ab46e
Compare
29ab46e to
cd0ad83
Compare
There was a problem hiding this comment.
Pull request overview
This PR aims to cut CI runtime by reducing unnecessary TypeScript scope and splitting the previous monolithic CI work into smaller, more focused GitHub Actions workflows.
Changes:
- Split CI into dedicated workflows for unit (source), unit (built), miscellaneous checks (style/types/circular deps), and docs build.
- Reduce TypeScript project scope via expanded
excludein the roottsconfig.json, and add an app-specifictsconfig.jsonforapps/infra-benchmarks. - Disable Vitest per-file isolation for select test projects to speed up execution.
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tsconfig.json | Excludes more paths (node_modules/apps) from the root TS program to reduce type-aware workload. |
| packages/typegpu/vitest.config.mts | Turns off Vitest isolation for the typegpu package test project. |
| apps/typegpu-docs/vitest.config.mts | Turns off Vitest isolation for the docs “individual-example-tests” project. |
| apps/infra-benchmarks/tsconfig.json | Adds a local TS config for the infra-benchmarks app. |
| .github/workflows/test-unit.yml | New workflow to run unit tests on source. |
| .github/workflows/test-built-unit.yml | New workflow to run unit tests against built packages. |
| .github/workflows/test-misc.yml | New workflow for style, types, and circular dependency checks. |
| .github/workflows/test-docs.yml | Renames/specializes the docs workflow to only build docs (with concurrency). |
Comments suppressed due to low confidence (1)
.github/workflows/test-docs.yml:37
typegpu-docs’sbuildscript already runsastro check(seeapps/typegpu-docs/package.json). Since the newTest miscellaneousworkflow also runspnpm test:types(which runsastro checkas well), this ends up repeating the same type-check in CI.
If CI time is the priority, consider invoking astro build directly here (after transform-overloads) and relying on the separate types job for astro check.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| globalSetup: ['setupVitest.ts'], | ||
| isolate: false, | ||
| }, |
There was a problem hiding this comment.
When tests touch metadata maps, the keys are local definitions within the test itself, so it shouldn't be a problem
There was a problem hiding this comment.
Out of curiosity, did you check how much does this change alone speed up tests?
| test: { | ||
| name: 'individual-example-tests', | ||
| root: './tests/individual-example-tests', | ||
| environment: 'node', | ||
| isolate: false, | ||
| }, |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — split the single ci.yml workflow into four parallel jobs and disabled Vitest test isolation to cut CI wall time roughly in half.
- Split CI into parallel workflows —
test-unit.yml,test-built-unit.yml,test-misc.yml, andtest-docs.ymlrun the formerpnpm test+ docs build in parallel. - Added concurrency cancellation — redundant runs on the same ref are cancelled for each workflow.
- Disabled Vitest isolation —
isolate: falseinpackages/typegpu/vitest.config.mtsand theindividual-example-testsproject speeds up runs; fixtures clean up per test so this looks safe. - Added
apps/infra-benchmarks/tsconfig.json— gives the app its own TS config now thatapps/**is excluded from the root tsconfig.
Kimi K2 (free via Pullfrog for OSS) | 𝕏
| globalSetup: ['setupVitest.ts'], | ||
| isolate: false, | ||
| }, |
There was a problem hiding this comment.
Out of curiosity, did you check how much does this change alone speed up tests?
aleksanderkatan
left a comment
There was a problem hiding this comment.
That was meant to be an approve
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — reverted the isolate: false Vitest optimization while keeping the split workflows and reduced TypeScript project scope.
- Re-enabled per-file test isolation — removed
isolate: falsefrompackages/typegpu/vitest.config.mtsand the docsindividual-example-testsproject. This is the right call if disabling isolation caused flaky or interdependent tests. - Workflow split remains intact — four parallel workflows (
test-unit.yml,test-built-unit.yml,test-misc.yml,test-docs.yml) plus concurrency cancellation still deliver the CI wall-time improvement. - Reduced TypeScript scope unchanged — root
tsconfig.jsonstill excludesapps/**andnode_modules, withapps/infra-benchmarks/tsconfig.jsonproviding a local config.
ℹ️ Nitpicks
- The new commit is titled
TEMP add back isolation; consider rewording it before merge so the history doesn't carry a "TEMP" marker.
Kimi K2 (free via Pullfrog for OSS) | 𝕏
@aleksanderkatan It seems like it only marginally improves the time of unit tests, and that wasn't even the bottleneck, so I think I'll revert those changes for the sake of staying on the safe side in terms of side-effects and overlapping tests. |
68b5a27 to
168af27
Compare


Uh oh!
There was an error while loading. Please reload this page.