Build/Test Tools: Ensure all built files are deleted as expected.
Block editor-related files can currently become stale or are not always deleted from src through the relevant grunt clean commands reliably. In the past, this primarily caused issues locally when a CSS file was copied from the @wordpress/block-library npm package into src and later removed from the package entirely. The result was a failing grunt verify:old-files task until the grunt clean command was run with the --dev flag.
After [61438] this issue presented in new ways. Mainly, files would remain in the core.svn.wordpress.org build repository indefinitely unless explicitly deleted. [62051] brought the grunt clean tasks up to date, but there are still paths where files remain unexpectedly or have outdated contents after rebuilding. This can cause incomplete or inaccurate commits where built files subject to version control are not updated correctly, especially when changing the gutenberg.sha value in package.json.
This change improves the build script to ensure that all files sourced from the zip file with assets built by the Gutenberg repository are always fresh and up to date, and any files that are deleted from the built zip file are also deleted from version control appropriately (in both the develop and core repositories).
A handful of changes were required to accomplish this:
- All Gutenberg-sourced outputs are written to
src/ regardless of --dev. In production builds, build:gutenberg runs before build:files, and copy:files propagates the tree to build/.
gutenbergFiles has been split into two different arrays: gutenbergUnversionedFiles and gutenbergVersionedFiles. The src argument for the clean:gutenberg task is dynamically populated at run time with a bare grunt clean cleaning only the unversioned subset (so version-controlled files are not unexpectedly deleted), and explicit clean:gutenberg (or any chain through build:gutenberg) cleans both, removing files deleted upstream from version control.
clean:gutenberg no longer wipes non-Gutenberg sourced files from wp-includes/js/. All file/path lists have been updated to only match files the related tasks are directly responsible for managing.
tools/gutenberg/copy.js has been added to tsconfig.json and brought under tsc --build strict-mode checking. The large copyBlockAssets() function was broken into one named function per asset type, each typed against the relevant COPY_CONFIG slice. The split is a code-clarity improvement, not a bug fix.
Props desrosj, westonruter, jorbin, adamsilverstein.
Fixes #65452.