Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
629 commits
Select commit Hold shift + click to select a range
303b968
chore(deps): update dependency yauzl to v3.2.1 [security] (#476)
renovate[bot] Mar 14, 2026
b2771be
Merge pull request #477 from scratchfoundation/test-vm-state-snapshot
cwillisf Mar 14, 2026
02e1465
chore(deps): update dependency terser-webpack-plugin to v5.4.0 (#474)
renovate[bot] Mar 15, 2026
ec2d1cf
chore(deps): update dependency eslint-plugin-import-x to v4.16.2
renovate[bot] Mar 15, 2026
767696f
style(deps): update dependency eslint-config-scratch to v14.0.7
renovate[bot] Mar 15, 2026
0fd65a1
chore(deps): update dependency npm to v10.9.6
renovate[bot] Mar 15, 2026
6196443
style(deps): update dependency eslint-config-scratch to v14.0.8
renovate[bot] Mar 15, 2026
441b69e
chore(deps): update vitest monorepo to v4.1.0
renovate[bot] Mar 15, 2026
ffaf91c
chore(release): 13.1.1 [skip ci]
Mar 16, 2026
05a2929
feat: extract media libraries build script in its own package
adzhindzhi Mar 16, 2026
05c7c7a
ci: general GHA cleanup
cwillisf Mar 16, 2026
37a61b3
ci: publish the builds that were tested
cwillisf Mar 16, 2026
dac1ab6
ci(publish): add release comments on issues & PRs
cwillisf Mar 16, 2026
fbd1597
fix: report test results
adzhindzhi Mar 16, 2026
3ec8e87
ci: handle empty test matrix better
cwillisf Mar 16, 2026
9c4f407
build: don't build on prepublish & enforce publish through CI
cwillisf Mar 16, 2026
b81d1ab
chore(deps): update dorny/paths-filter action to v4
renovate[bot] Mar 17, 2026
a625d04
fix: use correct schema path
adzhindzhi Mar 17, 2026
54007f7
fix: remove prefix from npm version
adzhindzhi Mar 17, 2026
5862b68
fix: try again to fix key events
cwillisf Mar 17, 2026
08016f8
fix: prevent sprite selection from affecting project execution
cwillisf Mar 17, 2026
4271431
Merge pull request #482 from scratchfoundation/more-scratch-blocks-fixes
cwillisf Mar 17, 2026
f4def2f
feat: update media library assets from scratchfoundation/scratch-medi…
github-actions[bot] Mar 17, 2026
cc1264b
chore: tooltip changes and more
kbangelov Mar 18, 2026
4c0d824
chore: some UI and UX improvements
kbangelov Mar 18, 2026
698e391
fix: prevent focus manager throw when proc editor closes
cwillisf Mar 17, 2026
96b874f
fix: speculative fix for "Oops!" on color mode change
cwillisf Mar 18, 2026
8e32fc9
Merge pull request #480 from scratchfoundation/renovate/dorny-paths-f…
cwillisf Mar 18, 2026
387053f
fix(deps): update dependency scratch-blocks to v2.1.2
renovate[bot] Mar 18, 2026
3334dad
fix: adress review points
adzhindzhi Mar 18, 2026
b0b76d2
Merge branch 'uepr-530-separate-media-libraries-build-script-in-its-o…
adzhindzhi Mar 18, 2026
1c4f57f
Merge pull request #484 from scratchfoundation/fix-focus-throw
cwillisf Mar 18, 2026
7f96ea2
chore: monorepo cleanup
cwillisf Mar 18, 2026
b97e60b
Merge pull request #466 from scratchfoundation/feat/update-media-libr…
cwillisf Mar 18, 2026
f98c3ab
feat: update media library assets from scratchfoundation/scratch-medi…
github-actions[bot] Mar 18, 2026
0c70923
Merge pull request #485 from scratchfoundation/feat/update-media-libr…
cwillisf Mar 18, 2026
a948144
chore(release): 13.2.0 [skip ci]
Mar 18, 2026
03ffa6e
style(deps): update dependency eslint-config-scratch to v14.0.9
renovate[bot] Mar 19, 2026
f4698f8
chore: addressed some comments
kbangelov Mar 19, 2026
6c06180
chore: addressed comments
kbangelov Mar 19, 2026
5620b60
Merge pull request #441 from scratchfoundation/backpack-interface
georgyangelov Mar 19, 2026
953aff1
Merge pull request #481 from scratchfoundation/uepr-530-separate-medi…
adzhindzhi Mar 19, 2026
8979f63
fix: resolve package-lock.json issues
adzhindzhi Mar 19, 2026
ed5d236
Revert "fix: resolve package-lock.json issues"
adzhindzhi Mar 19, 2026
9e39d56
fix: update eslint-config-scratch-version
adzhindzhi Mar 19, 2026
65005b6
Merge pull request #486 from adzhindzhi/fix/resolve-package-lock-issues
adzhindzhi Mar 19, 2026
8934776
chore: addressed copilot comments
kbangelov Mar 19, 2026
725e94e
chore: move method into lib folder
kbangelov Mar 19, 2026
c3addb3
chore: omit unused logic
kbangelov Mar 19, 2026
3a6b8ee
chore: update dependency of scratch-storage to v6.2.0
adzhindzhi Mar 19, 2026
12b13e8
Merge pull request #487 from adzhindzhi/chore/update-scratch-storage
adzhindzhi Mar 19, 2026
0a622f1
chore(release): 13.3.0 [skip ci]
Mar 19, 2026
afedf4b
style(deps): update dependency eslint-config-scratch to v14.0.10
renovate[bot] Mar 19, 2026
e1f7fc4
fix(deps): pin dependencies
renovate[bot] Mar 19, 2026
1d1eed4
style(deps): update dependency eslint-config-scratch to v14.0.11
renovate[bot] Mar 20, 2026
dc29990
chore(deps): update dependency @babel/preset-env to v7.29.2
renovate[bot] Mar 20, 2026
2cee39a
feat: add symlinks:false to webpack config
KManolov3 Mar 20, 2026
32ae07e
chore: add a mechanism for internal queue tuning
cwillisf Mar 20, 2026
0046a56
fix(deps): update dependency scratch-blocks to v2.1.4
renovate[bot] Mar 20, 2026
b7f6fea
chore(deps): update dependency npm to v10.9.7
renovate[bot] Mar 22, 2026
f3fef71
style(deps): update dependency eslint-config-scratch to v14.0.12
renovate[bot] Mar 22, 2026
f15e060
Merge pull request #488 from scratchfoundation/feat/support-local-lin…
KManolov3 Mar 23, 2026
199758d
chore: custom handle all clip-path logic
kbangelov Mar 23, 2026
812f889
feat: wait for project to be shared before moving to www
adzhindzhi Mar 23, 2026
c9a6691
fix(deps): update dependency scratch-blocks to v2.1.5
renovate[bot] Mar 23, 2026
7929890
chore: altered call with windowref
kbangelov Mar 24, 2026
86e9372
fix: address copilot comments
adzhindzhi Mar 24, 2026
4780722
chore: addressed comments
kbangelov Mar 24, 2026
5c3160c
fix: address review points
adzhindzhi Mar 24, 2026
76b1f60
Merge branch 'develop' into publish-tested-builds
cwillisf Mar 24, 2026
0c1c659
Merge pull request #478 from scratchfoundation/publish-tested-builds
cwillisf Mar 24, 2026
6b0c584
ci: force GET for gh api runs request
cwillisf Mar 24, 2026
339a832
ci: fix publish step for scratch-media-lib-scripts
cwillisf Mar 24, 2026
2bda382
chore(release): 13.4.0-test.3 [skip ci]
Mar 24, 2026
80bbfc4
fix(deps): update dependency scratch-blocks to v2.1.7
renovate[bot] Mar 24, 2026
59113db
fix(ci): build with new version before testing and publishing
cwillisf Mar 24, 2026
bb35c3e
chore: merged components to use popup with arrow common logic
kbangelov Mar 25, 2026
5d39186
chore: remove async logic
kbangelov Mar 25, 2026
26759dd
chore: addressed comments, renamed component more appropriately
kbangelov Mar 25, 2026
f330580
ci: make CI names consistently Title Case
cwillisf Mar 25, 2026
02cf0c2
Merge pull request #496 from scratchfoundation/version-before-build
cwillisf Mar 25, 2026
86d982b
chore(release): 13.4.0-test.4 [skip ci]
Mar 25, 2026
9ca084d
ci: fix version bump during publish
cwillisf Mar 25, 2026
e49c3da
chore(release): 13.4.0-test.5 [skip ci]
Mar 25, 2026
5cd7ff6
ci: only bump the version once per build
cwillisf Mar 25, 2026
83a5441
fix(deps): update dependency scratch-l10n to v6.1.61
renovate[bot] Mar 25, 2026
80155de
ci: fix build artifact path for tests
cwillisf Mar 26, 2026
0182afc
chore(release): 13.4.0-test.7 [skip ci]
Mar 26, 2026
7dc6684
fix(deps): update dependency scratch-l10n to v6.1.62
renovate[bot] Mar 26, 2026
02c594c
chore: refactored delete confirmation prompt and other code
kbangelov Mar 26, 2026
7f6e6ce
chore: added logic to stop modifying original clip path and create ne…
kbangelov Mar 26, 2026
f74a1c5
chore: don't forget about gui-standalone
cwillisf Mar 26, 2026
68ac1ed
chore: modal with arrow refactoring
kbangelov Mar 26, 2026
752ca85
chore(deps): update vitest monorepo to v4.1.1
renovate[bot] Mar 26, 2026
ad26bea
chore(deps): update node.js to v24.14.1
renovate[bot] Mar 27, 2026
ace70ed
style(deps): update dependency eslint-config-scratch to v14.0.13
renovate[bot] Mar 27, 2026
e792842
chore: made delete confirmation prompt use confirmation prompt
kbangelov Mar 27, 2026
b8cc0c3
chore: refactored props
kbangelov Mar 27, 2026
ef6c0b0
feat: make clouddata provider configurable through GUIConfig
georgyangelov Mar 27, 2026
6356ca7
chore: removed unnecessary code
kbangelov Mar 27, 2026
3efeaa9
chore: add types to the CloudProvider class
georgyangelov Mar 27, 2026
9f00faa
chore: fix linter issues
georgyangelov Mar 27, 2026
67b589a
fix: tests
georgyangelov Mar 27, 2026
5b417ca
fix: a mock
georgyangelov Mar 27, 2026
b4003d9
style(deps): update dependency eslint-config-scratch to v14.0.14
renovate[bot] Mar 29, 2026
9130530
chore(deps): update vitest monorepo to v4.1.2
renovate[bot] Mar 29, 2026
941a076
fix: tests & revert reconnection logic change
georgyangelov Mar 30, 2026
9dd8813
chore: replaced state
kbangelov Mar 30, 2026
7ac1c53
chore(release): 13.4.0 [skip ci]
Mar 30, 2026
9878e50
style(deps): update dependency eslint-config-scratch to v14.0.15
renovate[bot] Mar 30, 2026
c7172de
chore(deps): update dependency npm to v10.9.8
renovate[bot] Mar 31, 2026
69f3634
chore: addressed comments
kbangelov Mar 31, 2026
8990f38
Merge pull request #471 from kbangelov/task/uepr-518-manual-thumbnail…
KManolov3 Mar 31, 2026
e33a5bf
Merge pull request #494 from adzhindzhi/feat/add-sharing-to-project-w…
KManolov3 Mar 31, 2026
62bbeb3
docs: fix donation URL
cwillisf Mar 31, 2026
990df07
feat: add feature callout for set thumbnail button in editor
KManolov3 Mar 31, 2026
79274ad
docs: add an item for updating docs, including AGENTS.md
cwillisf Mar 31, 2026
33de21d
style(deps): update dependency eslint-config-scratch to v14.1.1
renovate[bot] Mar 31, 2026
cbd846b
fix(deps): update dependency scratch-l10n to v6.1.63
renovate[bot] Apr 1, 2026
facc8c2
fix: modal content overflow issues
KManolov3 Apr 1, 2026
e12012a
fix: render arrow image as direct body descendant
KManolov3 Apr 1, 2026
7b012b0
fix: minor ui adjustments
KManolov3 Apr 1, 2026
b74119d
Merge pull request #506 from scratchfoundation/clouddata-interface
KManolov3 Apr 2, 2026
8de0a0c
chore(release): 13.5.0 [skip ci]
Apr 2, 2026
da94420
chore: add comment explaining method
kbangelov Apr 2, 2026
e1a2434
fix(deps): update dependency scratch-blocks to v2.1.8
renovate[bot] Apr 2, 2026
c9ac064
style(deps): update dependency eslint-config-scratch to v14.1.3
renovate[bot] Apr 3, 2026
71691b1
fix(deps): update dependency scratch-l10n to v6.1.64
renovate[bot] Apr 3, 2026
6a6a00f
fix: fixes and adjustments to feature callout logic
KManolov3 Apr 3, 2026
259cee0
Merge pull request #509 from scratchfoundation/feat/uepr-522-manual-t…
KManolov3 Apr 3, 2026
cc6c5b6
Merge pull request #511 from scratchfoundation/release/manual-thumbna…
KManolov3 Apr 3, 2026
a1eeece
chore(release): 13.6.0 [skip ci]
Apr 3, 2026
ab1413f
fix(deps): update dependency lodash.omit to v4.18.0
renovate[bot] Apr 3, 2026
df6b8d3
chore(deps): update dependency playwright-chromium to v1.59.0
renovate[bot] Apr 4, 2026
071e7ec
chore(deps): update dependency yauzl to v3.3.0
renovate[bot] Apr 4, 2026
0073a62
fix(deps): update dependency scratch-l10n to v6.1.65
renovate[bot] Apr 4, 2026
2900f9b
style(deps): update dependency eslint-config-scratch to v14.1.4
renovate[bot] Apr 4, 2026
93afc43
chore(deps): update dependency playwright-chromium to v1.59.1
renovate[bot] Apr 4, 2026
a1d3795
chore(deps): update dependency ts-jest to v29.4.9
renovate[bot] Apr 4, 2026
96a7424
chore(deps): update dependency ts-loader to v9.5.7
renovate[bot] Apr 5, 2026
fbea3d1
fix: catch more external url(...) references
cwillisf Apr 6, 2026
6d20ec3
fix: canonicalize CSS first, then sanitize
cwillisf Apr 6, 2026
2570c39
fix: use css-tree 3.2.1 to decode CSS escapes
cwillisf Apr 6, 2026
b850a15
fix: block external href/xlink:href on SVG elements
cwillisf Apr 6, 2026
7821a42
test: add test cases to protect existing sanitizations
cwillisf Apr 6, 2026
33eda2c
fix(deps): update dependency scratch-l10n to v6.1.66
renovate[bot] Apr 7, 2026
1510211
fix: altered the z-index for the tooltip
kbangelov Apr 7, 2026
9442435
fix: sanitize external url() in CSS custom property values
cwillisf Apr 7, 2026
629c2bd
Merge branch 'develop' into hotfix/more-svg-sanitization
cwillisf Apr 7, 2026
5dfbe9a
Merge pull request #513 from scratchfoundation/hotfix/more-svg-saniti…
cwillisf Apr 7, 2026
54d6fa1
chore(release): 13.6.1 [skip ci]
Apr 7, 2026
d84920e
fix(deps): update scratch-blocks to v2.1.9
cwillisf Apr 7, 2026
5ce99e9
chore(release): 13.6.2 [skip ci]
Apr 7, 2026
e7aa6f0
fix(deps): update dependency scratch-l10n to v6.1.67
renovate[bot] Apr 8, 2026
d5e5275
chore: despecified class so it's easier to override
kbangelov Apr 8, 2026
c6095d7
Merge pull request #514 from kbangelov/bugfix/uepr-558-thumbnail-call…
KManolov3 Apr 8, 2026
06f8e40
style(ci): fix spacing
cwillisf Apr 8, 2026
68cfd95
ci: derive package list from npm, not ls
cwillisf Apr 8, 2026
9835cae
ci: prevent github-release-commenter from breaking the deploy
cwillisf Apr 8, 2026
b425419
Merge pull request #516 from scratchfoundation/publish-fixups
cwillisf Apr 8, 2026
e8182cc
chore(deps): update dependency typedoc to v0.28.18
renovate[bot] Apr 8, 2026
4d1d05a
Merge pull request #448 from scratchfoundation/renovate/typedoc-0.x
cwillisf Apr 8, 2026
f11dc80
chore(deps): remove abandoned xmldom package
cwillisf Apr 8, 2026
8152f79
Merge pull request #517 from scratchfoundation/chore/replace-xmldom-w…
cwillisf Apr 8, 2026
2a0428b
chore: remove gh-pages package in favor of GHA
cwillisf Apr 8, 2026
3f9fcad
Merge pull request #518 from scratchfoundation/chore/remove-gh-pages-…
cwillisf Apr 8, 2026
2a61eaa
chore(deps): update dependency tap to v21.6.3
renovate[bot] Apr 8, 2026
dae225c
fix(deps): update dependency scratch-l10n to v6.1.68
renovate[bot] Apr 9, 2026
e9738b2
chore(release): 13.6.3 [skip ci]
Apr 9, 2026
d84a710
test(scratch-gui): add Playwright cross-browser test infrastructure
cwillisf Apr 9, 2026
1bb733a
chore(deps): update vitest monorepo to v4.1.3
renovate[bot] Apr 10, 2026
7c024be
fix: address PR feedback and aggregate test reporting
cwillisf Apr 10, 2026
74f8151
Merge pull request #520 from scratchfoundation/add-playwright-test-infra
cwillisf Apr 10, 2026
1c62e7e
fix(deps): update dependency scratch-storage to v6.2.1
renovate[bot] Apr 11, 2026
3513e26
fix(deps): update scratch-blocks to v2.1.10
cwillisf Apr 11, 2026
df0a34e
fix(deps): update dependency scratch-blocks to v2.1.10
renovate[bot] Apr 11, 2026
8204bb7
fix: hover detection during block drags
cwillisf Apr 10, 2026
c2a69e7
test: turn off headless for Firefox to enable WebGL
cwillisf Apr 11, 2026
73ca53e
Merge pull request #521 from scratchfoundation/fix-pointer-event-hove…
cwillisf Apr 11, 2026
c98603e
chore(release): 13.6.4 [skip ci]
Apr 11, 2026
0d7014f
style(deps): update dependency eslint-config-scratch to v14.1.5
renovate[bot] Apr 11, 2026
9cdd781
chore(deps): update dependency webpack to v5.106.0
renovate[bot] Apr 11, 2026
6ad8b83
chore(deps): update vitest monorepo to v4.1.4
renovate[bot] Apr 12, 2026
bbb26f8
chore(deps): update dependency prettier to v3.8.2
renovate[bot] Apr 13, 2026
1038bd5
style(deps): update dependency eslint-config-scratch to v14.1.6
renovate[bot] Apr 13, 2026
38308ff
chore(deps): update dependency webpack to v5.106.1
renovate[bot] Apr 13, 2026
d15c1ce
fix: update the tooltip body for the manual thumbnail update
adzhindzhi Apr 14, 2026
46db594
feat: pass callbacks for onManualThumbnailUpdate/onManualThumbnailUpd…
adzhindzhi Apr 14, 2026
955a14f
Merge pull request #522 from adzhindzhi/bugfix/update-manual-thumbnai…
adzhindzhi Apr 14, 2026
fb204d1
fix: address review comments
adzhindzhi Apr 14, 2026
7e194bc
Merge pull request #523 from scratchfoundation/bugfix/uepr-572-track-…
adzhindzhi Apr 14, 2026
4886f27
chore(release): 13.6.5 [skip ci]
Apr 14, 2026
25588f0
fix: clear parent when block is removed from input with shadow
cwillisf Apr 14, 2026
1074d9e
Merge pull request #525 from scratchfoundation/fix-scratch-blocks-3541
cwillisf Apr 14, 2026
ce00a52
chore: add "npm start" convenience script
cwillisf Apr 14, 2026
2176f01
chore(release): 13.6.6 [skip ci]
Apr 14, 2026
5fb564d
fix: prevent shadow blocks from being top-level in SB3 round-trip
cwillisf Apr 14, 2026
e8d7bfe
fix: update VM field values on intermediate field changes
cwillisf Apr 14, 2026
cff4bb6
fix(deps): update dependency scratch-blocks to v2.1.11
renovate[bot] Apr 14, 2026
764deef
Merge pull request #528 from scratchfoundation/fix/top-level-shadow-b…
cwillisf Apr 14, 2026
4ed4e92
Merge pull request #527 from scratchfoundation/fix/intermediate-field…
cwillisf Apr 14, 2026
5283156
chore(release): 13.6.7 [skip ci]
Apr 14, 2026
ced787d
fix: project not being able to save after share
adzhindzhi Apr 16, 2026
c9f1f70
Merge pull request #531 from adzhindzhi/bugfix/project-not-able-to-sa…
adzhindzhi Apr 16, 2026
a9a945a
chore(release): 13.6.8 [skip ci]
Apr 16, 2026
dfc6831
fix(deps): update dependency scratch-l10n to v6.1.69
renovate[bot] Apr 16, 2026
28939dc
fix(deps): update scratch-blocks to v2.1.13
cwillisf Apr 16, 2026
b8af3af
chore(release): 13.6.9 [skip ci]
Apr 16, 2026
6f66512
fix(deps): update scratch-blocks to v2.1.14
cwillisf Apr 17, 2026
1a81e94
chore(release): 13.6.10 [skip ci]
Apr 17, 2026
63409e8
style(deps): update dependency eslint-config-scratch to v14.1.9
renovate[bot] Apr 17, 2026
217dd2e
chore(deps): update node.js to v24.15.0
renovate[bot] Apr 18, 2026
c142b33
fix(deps): update dependency scratch-l10n to v6.1.70
renovate[bot] Apr 18, 2026
364af13
style(deps): update dependency eslint-config-scratch to v14.1.10
renovate[bot] Apr 18, 2026
166d64a
chore(deps): update dependency prettier to v3.8.3
renovate[bot] Apr 18, 2026
115e985
chore(deps): update dependency webpack to v5.106.2
renovate[bot] Apr 18, 2026
fb2f64b
chore(deps): update dependency tap to v21.7.0
renovate[bot] Apr 18, 2026
ef8f906
Merge pull request #492 from kbangelov/bugfix/uepr-527-investigate-mi…
adzhindzhi Apr 20, 2026
a55773f
chore(release): 13.7.0 [skip ci]
Apr 20, 2026
2e3d96c
style(deps): update dependency eslint-config-scratch to v14.1.11
renovate[bot] Apr 20, 2026
7dd6a7e
chore(deps): update dependency html-webpack-plugin to v5.6.7
renovate[bot] Apr 20, 2026
6a74633
fix(deps): update dependency scratch-l10n to v6.1.71
renovate[bot] Apr 20, 2026
3e88e55
fix(deps): update dependency scratch-blocks to v2.1.16
renovate[bot] Apr 20, 2026
b717fdc
fix(deps): update scratch-blocks to v2.1.16
cwillisf Apr 20, 2026
e5cc7cd
chore(deps): update dependency tap to v21.7.1
renovate[bot] Apr 20, 2026
43abcb5
style(deps): update dependency eslint-config-scratch to v14.1.12
renovate[bot] Apr 21, 2026
62488f5
fix(deps): update dependency scratch-l10n to v6.1.72
renovate[bot] Apr 21, 2026
de7f7d5
fix(scratch-vm): repair broken shadow references from cursed inputs bug
cwillisf Apr 20, 2026
cf6b1a3
perf(scratch-vm): cache peer shadow lookups in deserializeBlocks
cwillisf Apr 21, 2026
e24b26d
Merge pull request #536 from scratchfoundation/fix/cursed-inputs-shad…
cwillisf Apr 21, 2026
e922f21
fix(deps): update scratch-blocks to v2.1.17
cwillisf Apr 21, 2026
f94cf64
fix(deps): update dependency scratch-blocks to v2.1.17
renovate[bot] Apr 21, 2026
851d45a
fix(deps): pin dependencies
renovate[bot] Apr 21, 2026
21752a0
Merge branch 'hotfix/scratch-blocks-release-triage' into develop
cwillisf Apr 21, 2026
c29cfe5
Merge pull request #497 from scratchfoundation/renovate/pin-dependencies
cwillisf Apr 21, 2026
96531c9
chore(release): 13.7.1 [skip ci]
Apr 21, 2026
0543fcf
test: verify shadow blocks are never added to _scripts
cwillisf Apr 24, 2026
88ec448
fix: exclude shadow blocks from _scripts in createBlock
cwillisf Apr 24, 2026
c743c03
Merge pull request #543 from scratchfoundation/fix/shadow-topLevel-sc…
cwillisf Apr 29, 2026
4eb7f74
fix(deps): update dependency scratch-blocks to v2.1.19
renovate[bot] Apr 28, 2026
673e355
fix(vm): create missing variable and broadcast definitions on import
cwillisf Apr 30, 2026
f687340
Merge pull request #554 from scratchfoundation/fix/backpack-missing-d…
cwillisf Apr 30, 2026
946bfb8
fix(vm): repair missing variable and broadcast definitions on project…
cwillisf Apr 30, 2026
1b44f2c
fix(vm): coalesce same-name dangling references in reconciliation
cwillisf Apr 30, 2026
da628df
fix(vm): normalize displayed names for refs resolved by id during rec…
cwillisf Apr 30, 2026
560626b
test(vm): cover list reconciliation; reword stale-name log message
cwillisf Apr 30, 2026
b437181
Merge pull request #555 from scratchfoundation/fix/load-time-missing-…
cwillisf Apr 30, 2026
8f73c77
chore(release): 13.7.3 [skip ci]
Apr 30, 2026
8369bb9
Merge experience-cs into 1287; keep 13.7.3 tree
DNR500 May 20, 2026
5d0dde7
build: rpf build specifics
DNR500 May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 3 additions & 2 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ root = true
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_size = 4
trim_trailing_whitespace = true

[*.{cjs,js,jsx,mjs,ts,tsx}]
[*.{cjs,html,js,jsx,mjs,ts,tsx}]
indent_style = space

[*,{json,json5,jsonc}]
[*.{json,json5,jsonc}]
indent_size = 2
indent_style = space

Expand Down
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
*.sublime-project text eol=lf
*.test.*.snap text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.txt text eol=lf
*.vert text eol=lf
*.xml text eol=lf
Expand Down
64 changes: 64 additions & 0 deletions .github/actions/deploy-pages-with-retry/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Deploy GitHub Pages with retry

description: Deploy to GitHub Pages and retry failed deploy attempts with a delay.

inputs:
github_token:
description: GitHub token used by peaceiris/actions-gh-pages
required: true
publish_dir:
description: Directory to publish
required: true
destination_dir:
description: Destination subdirectory in gh-pages branch
required: true
full_commit_message:
description: Full commit message for the deploy commit
required: true
retry_delay_seconds:
description: Delay in seconds between retries
required: false
default: "5"

runs:
using: composite
steps:
- name: Deploy (attempt 1)
id: deploy_pages_attempt_1
continue-on-error: true
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
with:
github_token: ${{ inputs.github_token }}
publish_dir: ${{ inputs.publish_dir }}
destination_dir: ${{ inputs.destination_dir }}
full_commit_message: ${{ inputs.full_commit_message }}

- name: Wait before retry (attempt 2)
if: ${{ steps.deploy_pages_attempt_1.outcome == 'failure' }}
shell: bash
run: sleep "${{ inputs.retry_delay_seconds }}"

- name: Deploy (attempt 2)
id: deploy_pages_attempt_2
if: ${{ steps.deploy_pages_attempt_1.outcome == 'failure' }}
continue-on-error: true
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
with:
github_token: ${{ inputs.github_token }}
publish_dir: ${{ inputs.publish_dir }}
destination_dir: ${{ inputs.destination_dir }}
full_commit_message: ${{ inputs.full_commit_message }}

- name: Wait before retry (attempt 3)
if: ${{ steps.deploy_pages_attempt_2.outcome == 'failure' }}
shell: bash
run: sleep "${{ inputs.retry_delay_seconds }}"

- name: Deploy (attempt 3)
if: ${{ steps.deploy_pages_attempt_2.outcome == 'failure' }}
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
with:
github_token: ${{ inputs.github_token }}
publish_dir: ${{ inputs.publish_dir }}
destination_dir: ${{ inputs.destination_dir }}
full_commit_message: ${{ inputs.full_commit_message }}
1 change: 0 additions & 1 deletion .github/actions/install-dependencies/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ runs:
key: ${{ runner.os }}-npm-${{ hashFiles('.nvmrc', 'package-lock.json') }}
- if: steps.restore-node-modules-cache.outputs.cache-hit != 'true'
name: Install NPM dependencies
working-directory: .
shell: bash
run: NODE_ENV=development npm ci
- uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
Expand Down
22 changes: 13 additions & 9 deletions .github/actions/test-package/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,28 @@ runs:
using: composite
steps:
- name: Install Playwright
if: ${{ inputs.package_name == 'scratch-render' || inputs.package_name == 'scratch-gui' }}
shell: bash
run: |
if [[ ${{ inputs.package_name }} == "scratch-render" ]]; then
npx playwright install --with-deps chromium
fi
- name: Explicitly install Rolldown linux binaries
shell: bash
run: npm install @rolldown/binding-linux-x64-gnu --no-save --ignore-scripts

# Install both browsers for any package that needs Playwright,
# even if a particular package only uses one of them — keeping
# the install step uniform is much simpler than maintaining a
# per-package browser list, and Firefox in scratch-render is
# cheap unused weight rather than a correctness problem.
run: npx playwright install --with-deps chromium firefox
- name: Test
working-directory: ./packages/${{ inputs.package_name }}
shell: bash
env:
TAP_REPORTER: "junit"
TAP_REPORTER_FILE: "test-results/junit.xml"
# xvfb-run provides a virtual display for browsers that need one.
# Firefox's non-headless mode (used because headless Firefox lacks
# WebGL support) requires an X server, and xvfb fills that role
# on the headless CI runner. Chromium doesn't need it but works
# fine under xvfb too.
run: |
mkdir -p test-results
npm run test
xvfb-run --auto-servernum npm run test
- name: Store Test Results
if: ${{ !cancelled() }}
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
Expand Down
3 changes: 3 additions & 0 deletions .github/path-filters.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ any-workspace:
task-herder:
- *global
- "packages/task-herder/**"
scratch-media-lib-scripts:
- *global
- "packages/scratch-media-lib-scripts/**"
scratch-svg-renderer:
- *global
- "packages/scratch-svg-renderer/**"
Expand Down
145 changes: 78 additions & 67 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
name: CI

on:
workflow_dispatch: # Allows you to run this workflow manually from the Actions tab
push: # Runs whenever a commit is pushed to the repository
branches: [experience-cs]
merge_group:
pull_request:
push: # WARNING: Renovate sometimes automerges without PR, so we MUST build and test renovate/** branches
workflow_call:
inputs:
force-full-build:
description: 'Build all packages regardless of path filters'
type: boolean
default: false
workflow_dispatch:
inputs:
force-full-build:
description: 'Build all packages regardless of path filters'
type: boolean
default: false

permissions:
packages: write # deploy to GitHub Packages
contents: read # The following 4 permissions are needed to publish test results
issues: read
checks: write
pull-requests: write
contents: read
packages: write

concurrency:
group: "${{ github.workflow }} @ ${{ github.event.compare || github.head_ref || github.ref }}"
Expand All @@ -27,104 +36,106 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "npm"
node-version-file: ".nvmrc"
registry-url: "https://npm.pkg.github.com"
- uses: wagoid/commitlint-github-action@9763196e10f27aef304c9b8b660d31d97fce0f99 # v5
- name: Debug info
cache: 'npm'
node-version-file: '.nvmrc'
registry-url: https://npm.pkg.github.com
- name: Debug Info
# https://docs.github.com/en/actions/reference/security/secure-use#use-an-intermediate-environment-variable
env:
# `env:` values are printed to the log even without using them in `run:`
GH_CONTEXT: ${{ toJson(github) }}
SCRATCH_ENV: ${{ vars.SCRATCH_ENV || '<none>' }}
run: |
cat <<EOF
Working directory: $(pwd)
Node version: $(node --version)
NPM version: $(npm --version)
Scratch environment: ${{ vars.SCRATCH_ENV || '<none>' }}
Scratch environment: $SCRATCH_ENV
EOF

- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
id: filter
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4
id: paths-filter
if: ${{ !inputs.force-full-build }}
with:
filters: ./.github/path-filters.yml

- name: Resolve Changed Packages
id: filter
run: |
if [ "${{ inputs.force-full-build }}" = "true" ]; then
echo "any-workspace=true" >> "$GITHUB_OUTPUT"
PACKAGES=$(ls -1d packages/*/ | xargs -n1 basename | jq -Rcn '[inputs]')
echo "changes=$PACKAGES" >> "$GITHUB_OUTPUT"
else
echo "any-workspace=${{ steps.paths-filter.outputs.any-workspace }}" >> "$GITHUB_OUTPUT"
PACKAGES=$(echo '${{ steps.paths-filter.outputs.changes }}' | jq -c '[.[] | select(. != "global" and . != "any-workspace")]')
echo "changes=$PACKAGES" >> "$GITHUB_OUTPUT"
fi

- if: ${{ steps.filter.outputs.any-workspace == 'true' }}
env:
NPM_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: ./.github/actions/install-dependencies

- name: Explicitly install Rolldown linux binaries
- name: Install Rolldown linux binaries
if: ${{ steps.filter.outputs.any-workspace == 'true' }}
run: npm install @rolldown/binding-linux-x64-gnu --no-save --ignore-scripts

- name: Build packages
# TODO: Packages currently depend on each other's compiled dist at build time. Fix that and matrix the builds.
- name: Build Packages
if: ${{ steps.filter.outputs.any-workspace == 'true' }}
run: npm run build

- name: Store build artifacts
- name: Store Build Artifacts
if: ${{ steps.filter.outputs.any-workspace == 'true' }}
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: build
retention-days: 90
path: |
packages/**/build
packages/**/dist
packages/**/playground

- name: Publish scratch-gui to GitHub Packages
if: ${{ github.ref == 'refs/heads/experience-cs' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') }}
working-directory: ./packages/scratch-gui
env:
NPM_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
RELEASE_VERSION="0.1.0-experience-cs.$(date +'%Y%m%d%H%M%S')"
npm version --no-git-tag-version $RELEASE_VERSION
RELEASE_VERSION="13.7.3-experience-cs.$(date +'%Y%m%d%H%M%S')"
npm version --no-git-tag-version "$RELEASE_VERSION"
npm publish --access public --tag latest

test:
runs-on: ubuntu-latest
name: Test
needs: build
if: ${{ needs.build.outputs.any-workspace == 'true' }}
strategy:
fail-fast: false
matrix:
package: ${{ fromJSON(needs.build.outputs.packages) }}
exclude:
- package: global
- package: any-workspace
name: Test ${{ matrix.package }}
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "npm"
node-version-file: ".nvmrc"
- uses: ./.github/actions/install-dependencies
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: build
path: packages
- uses: ./.github/actions/test-package
with:
package_name: ${{ matrix.package }}
results:
name: Test Results
runs-on: ubuntu-latest
needs: test
if: ${{ !cancelled() }}
steps:
- run: |
case "${{ needs.test.result }}" in
success)
echo "Tests passed successfully."
exit 0
;;
skipped)
echo "Tests were unnecessary for these changes, so they were skipped."
echo "If this is unexpected, check the path filters."
exit 0
;;
*)
echo "Tests failed."
exit 1
;;
esac
if: ${{ needs.build.outputs.any-workspace == 'true' && needs.build.outputs.packages != '[]' }}
uses: ./.github/workflows/test-packages.yml
with:
packages: ${{ needs.build.outputs.packages }}

preview:
name: Preview
needs: build
# We don't want to give forks free reign to publish to our GitHub Pages, so run this job only if both:
# - any workspace changed (otherwise there's no work to do)
# - and either
# - this is not a PR (so it's some other event that happened in our fork, like a push or merge group)
# - or it's a PR from our fork (not some other fork)
# - and
# - it's not a Renovate branch (just to reduce noise)
if: ${{
(needs.build.outputs.any-workspace == 'true') &&
(
(!github.event.pull_request) ||
(github.event.pull_request.head.repo.full_name == github.repository)
) &&
(!startsWith((github.head_ref || github.ref_name), 'renovate/'))
}}
uses: ./.github/workflows/deploy-playground-preview.yml
with:
# even `develop` should be published to a subdirectory
# that way each branch can be updated or cleaned up independently
destination_dir: ${{ github.head_ref || github.ref_name }}
full_commit_message: "Build for ${{ github.sha }} ${{ github.event.head_commit.message }}"
3 changes: 2 additions & 1 deletion .github/workflows/commitlint.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
name: Lint commit messages
name: Lint Commit Messages
on: [pull_request]

concurrency:
group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.sha }}"
cancel-in-progress: true

jobs:
commitlint:
Expand Down
Loading
Loading