Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Style engine: move backend scripts to package #39736

Merged
merged 2 commits into from
Apr 6, 2022

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Mar 25, 2022

Requires:

What?

A very naïve attempt at:

  • copying package PHP files over to /build
  • ensuring _gutenberg/_wp renaming is minimized for core patches

Why?

  1. The Style Engine backend is an implementation of the JS version. Keeping them together in the package makes the relationship more conspicuous.
  2. The Style Engine is something that might be used across Gutenberg PHP files in the future. The intention is to make backporting to core easier. See discussion over at Why are there PHP files in the JS packages on npm? #33241 (comment)

Historical context/discussion:

How?

  • Move Style Engine class to packages/style-engine
  • Update Webpack packages script to:
    • copy the class to build
    • rename classes and methods so that they don't conflict with core (_gutenberg)

Testing Instructions

Build the project via npm run dev or npm run build

Check that the PHP file in packages/style-engine is copied to /build and:

  • renamed to *-gutenberg.php
  • edited so that class names have _Gutenberg appended

Follow the test instructions in #39446, and check that the margin and padding block support styles are output correctly on the frontend.

Unit tests

npm run test-unit-php /var/www/html/wp-content/plugins/gutenberg/packages/style-engine/phpunit/class-wp-style-engine-test.php
npm run build
npm run test-unit-php /var/www/html/wp-content/plugins/gutenberg/phpunit/block-supports/spacing-test.php


@ramonjd ramonjd self-assigned this Mar 25, 2022
@ramonjd ramonjd added [Status] In Progress Tracking issues with work in progress [Type] Build Tooling Issues or PRs related to build tooling Needs Technical Feedback Needs testing from a developer perspective. [Type] Experimental Experimental feature or API. labels Mar 25, 2022
@github-actions
Copy link

github-actions bot commented Mar 25, 2022

Size Change: +1.15 kB (0%)

Total Size: 1.22 MB

Filename Size Change
build/block-editor/index.min.js 149 kB +173 B (0%)
build/block-editor/style-rtl.css 15.4 kB +36 B (0%)
build/block-editor/style.css 15.4 kB +38 B (0%)
build/block-library/blocks/group/editor-rtl.css 333 B +174 B (+109%) 🆘
build/block-library/blocks/group/editor.css 333 B +174 B (+109%) 🆘
build/block-library/blocks/navigation-link/style-rtl.css 115 B +21 B (+22%) 🚨
build/block-library/blocks/navigation-link/style.css 115 B +21 B (+22%) 🚨
build/block-library/editor-rtl.css 10.1 kB +108 B (+1%)
build/block-library/editor.css 10.1 kB +108 B (+1%)
build/block-library/index.min.js 174 kB +171 B (0%)
build/block-library/style-rtl.css 11.3 kB +13 B (0%)
build/block-library/style.css 11.3 kB +12 B (0%)
build/components/index.min.js 223 kB +8 B (0%)
build/edit-site/index.min.js 46.7 kB +59 B (0%)
build/edit-site/style-rtl.css 7.75 kB +15 B (0%)
build/edit-site/style.css 7.73 kB +15 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.49 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.56 kB
build/block-library/blocks/cover/style.css 1.56 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 708 B
build/block-library/blocks/navigation-link/editor.css 706 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.93 kB
build/block-library/blocks/navigation/style.css 1.92 kB
build/block-library/blocks/navigation/view.min.js 2.85 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 140 B
build/block-library/blocks/separator/editor.css 140 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 934 B
build/block-library/common.css 932 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 46.9 kB
build/components/style-rtl.css 14.9 kB
build/components/style.css 14.9 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14.5 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.64 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.58 kB
build/edit-navigation/index.min.js 15.8 kB
build/edit-navigation/style-rtl.css 4.04 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.06 kB
build/edit-post/style.css 7.06 kB
build/edit-widgets/index.min.js 16.3 kB
build/edit-widgets/style-rtl.css 4.4 kB
build/edit-widgets/style.css 4.39 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.2 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@Mamaduka
Copy link
Member

Hi, @ramonjd

In case you missed this, @noisysocks recently merged best practices for Gutenberg PHP - https://github.com/WordPress/gutenberg/blob/trunk/lib/README.md.

@ramonjd
Copy link
Member Author

ramonjd commented Mar 25, 2022

In case you missed this, @noisysocks recently merged best practices for Gutenberg PHP

Thanks @Mamaduka I did read this. What it doesn't cover is this novel situation:

How should we import individual PHP files – in this instance a class that might be used across Gutenberg – from /packages/**?

There's a solution perhaps related to the way we import block index.php, though I suspect we need to come up with an approach that takes into account the build/renaming/unit tests, and then document in the file you cited.

I'm very keen to hear folks' advice on this, since I'm just hacking around. 😄

@ramonjd ramonjd force-pushed the try/style-engine-block-supports-backend branch from 4ace927 to bf9f444 Compare March 28, 2022 01:32
Base automatically changed from try/style-engine-block-supports-backend to trunk March 28, 2022 02:18
@ramonjd ramonjd force-pushed the update/style-engine-backend-to-package branch 2 times, most recently from a7ab9e4 to e7487ca Compare March 29, 2022 06:26
@ramonjd
Copy link
Member Author

ramonjd commented Mar 29, 2022

After hacking my way into a hole, I have the following open questions:

What we want - high level

  • For the Style Engine PHP file and its tests to live in packages/style-engine
  • To make both WordPress core migration and future Gutenberg development easier by auto-renaming classes and methods, _Gutenberg and gutenberg_
  • Not to create a hacky precedent. It has to be sustainable if future packages want to do the same thing.

What we want - low level

  1. Copy the file into the Gutenberg lib directory
  2. Rename the file and the class names
  3. Require the renamed file and use the renamed class in the app
  4. Somehow do all the above during tests as well.

OR

Can we accept for now that the Style Engine PHP file lives as part of lib next to the files with which it's closely coupled and try to mitigate any future core migration pains there?

How?

Not the way I've done it 😄

🤷

  • How should we get the PHP file included as part of the tests? What about creating a composer package? Maybe we need a package copy/build step in bootstrap?
  • Should we keep a list of package php files that need to be included in Gutenberg build, like a static JSON file or something
  • How can we ensure we can keep iterating on a package PHP file once a file is in WordPress?
  • In the package, should we go full-blown composer, PHP unit and everything else?

cc @youknowriad @apeatling @andrewserong

and cc @gziolo and @ockham, who I know also have experience in the build process

Thanks for your advice!

@youknowriad
Copy link
Contributor

Hi @ramonjd it's unclear to me from the message, what errors you had with our current way of doing things and why we need to change our approach?

I'm all for using the best approach and don't mind changing but I'd like to understand the struggles with the current way we do things (block-library) which is the following:

  • PHP file is part of the npm package, that way the update happens automatically in Core when we do the npm package update.
  • We rename the functions and generate a "build" version of the php files in build folder in Gutenberg (that way we clearly separate source and build)
  • Renaming the functions allows us to load 2 versions without conflicts (Core and Gutenberg), so we can continue iterating.
  • We need to assume the built files exist in other parts of Gutenberg php code (unit and lib folder) to require them.

I think the thing that differ from block-library setup is that we will be using the renamed classes/functions outside the block-library folder. I think that's in lib/block-supports mostly for now and maybe it's fine to refer to the "gutenberg" version directly there for now since we're back porting these files (block supports) manually at the moment, so we can rename at the moment we backport them.


The above is mostly about moving this forward with what we already know/do. I think exploring alternatives is possible but it's unclear to me, what will we do here: Composer packages are interesting of course but we'd need to solve "auto loading" and whether it's fine for us to rely on composer auto-loading, we'd need to start a discussion in make/core with the whole community about it (I'm sure a lot of them will be delighted to use composer packages but I think there will be a resistance too). With composer packages, we won't solve the "duplication" problem though, if we load the package in core and Gutenberg, we'll have same class/file names.

@ramonjd
Copy link
Member Author

ramonjd commented Mar 29, 2022

Thanks a lot for the explanation @youknowriad !

it's unclear to me from the message, what errors you had with our current way of doing things and why we need to change our approach?

I'm not suggesting we change the approach. The source of my uncertainties stems mostly from not being sure whether what I'm doing is right at all 😄

I'm also conflicted in relation to how to deal with PHP unit tests: the file needs to be copied and renamed before the unit test runner kicks off (I've hacked this into bootstrap.php)

I think you've confirmed the general direction, which is really helpful.

I'm not too far off conceptually I believe, I just need to dig a little deeper as I'm still working out the parts.

We rename the functions and generate a "build" version of the php files in build folder in Gutenberg (that way we clearly separate source and build)

Looks like this is where my initial attempt is probably not right. I'm writing to /lib directly just to get it working.

This branch actually works locally for me, and I (mostly) followed the block-library approach.

The branch isn't building on CI yet though.

I'll keep plugging away. Thanks again! 🙇

@ramonjd ramonjd force-pushed the update/style-engine-backend-to-package branch 2 times, most recently from 86faf85 to b94e602 Compare March 31, 2022 04:57
@ramonjd ramonjd marked this pull request as ready for review March 31, 2022 06:53
@gziolo
Copy link
Member

gziolo commented Mar 31, 2022

I'm looking at the moment at lib/block-supports and it's really difficult to tell whether there were any functional changes introduced in the WP 6.0 release cycle. It definitely is an issue that all functions are prefixed with gutenberg_ and they can easily diverge with WordPress core because some fixes might get applied directly there. It's a very difficult problem to resolve. From the backporting to WP core perspective, it would be better to limit the number of files that change in every WordPress release and ensure it's easy to discover.

@youknowriad
Copy link
Contributor

@gziolo For the block supports, I think we should do the same as "block-library" (and the proposed changes for style engine here), meaning I believe we should just write them as if we were in Core, copy them automatically as part of the package update in core (like we do for blocks and parser) and rename them automatically in the gutenberg plugin in the web pack build.

In previous version (5.9, 5.8) we kind of this that process manually: replace the files in core with the Gutenberg's files, rename the functions again.

@gziolo
Copy link
Member

gziolo commented Mar 31, 2022

@youknowriad. It isn't that the syncing core blocks with WordPress core don't have any drawbacks. It was criticized several times in the past, including this issue #33241. Anyway, if you feel strongly about that approach then we can give it a try. From the perspective of someone merging the changes into WordPress core, it seems to be easier to leave everything to the script.

@youknowriad
Copy link
Contributor

It isn't that the syncing core blocks with WordPress core don't have any drawbacks.

I agree it's not perfect, especially for Gutenberg itself as it adds this "renaming stuff" complexity, but I think it still a bit better than having to do all these backports manually, don't you think?

it seems to be easier to leave everything to the script.

Yes, that's the main selling point here.

@ramonjd ramonjd force-pushed the update/style-engine-backend-to-package branch 2 times, most recently from c3b5173 to 05027cf Compare April 5, 2022 01:52
- moving Style Engine class and tests to packages
- updating build script to copy package PHP into the build folder
- rename methods and classes
@ramonjd ramonjd force-pushed the update/style-engine-backend-to-package branch from 05027cf to 1f4fab5 Compare April 5, 2022 01:53
@ramonjd ramonjd changed the title [TRY] Style engine: move backend scripts to package Style engine: move backend scripts to package Apr 5, 2022
@youknowriad
Copy link
Contributor

This is looking good to me, do you think there's any blockers left?

@glendaviesnz
Copy link
Contributor

This all worked as advertised for me:

✅ Files as copied to /build folder and renamed and Gutenberg appended to class name
✅ Unit tests passed
✅ Styles were added to the sampe h1 blocks on frontend

@ramonjd
Copy link
Member Author

ramonjd commented Apr 5, 2022

Thanks for testing @glendaviesnz !

This is looking good to me, do you think there's any blockers left?

I can't think of any, though I can't help but feel I have a limited overview of all the working parts.

Things are working as they should so far so I suppose we could go ahead and merge and then 🤞

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work @ramonjd, thanks for the follow-up! This is testing well for me:

✅ Builds file to correct location when running npm run build
✅ Builds file to correct location when running npm run dev
✅ Classes and function names correctly have gutenberg appended or prepended, respectively
✅ Tests are passing, and padding / margin behaviour still works correctly on the front-end

It looks like now that the test file is moved into the package, we should be able to remove the duplicate at https://github.com/wordpress/gutenberg/blob/44925a947fde29feaab512e0adf4291272209d59/phpunit/style-engine/class-wp-style-engine-gutenberg-test.php ?

There were good points raised in the discussion about what to do about the naming of the function calls / class names when the style engine is called from within the block supports files, but I reckon we could look at that separately if/when we want to improve things for the block supports directly.

This looks good to try to me!

@youknowriad
Copy link
Contributor

LGTM to me as well. We'll need to make a specific patch for this for WordPress trunk (add the code to copied php files from packages) when we decide to include the style engine in Core. If it's for 6.0 that's easy (it's this week), otherwise it's going to be for 6.1 and we need to make sure we don't forget :P

@ramonjd
Copy link
Member Author

ramonjd commented Apr 6, 2022

We'll need to make a specific patch for this for WordPress trunk (add the code to copied php files from packages) when we decide to include the style engine in Core. If it's for 6.0 that's easy (it's this week), otherwise it's going to be for 6.1 and we need to make sure we don't forget :P

Good call.

We've left it out of 6.0 because it's not really doing much.

But I've set a reminder in my brain for 6.1 to get back to you 😄

@ramonjd
Copy link
Member Author

ramonjd commented Apr 6, 2022

It looks like now that the test file is moved into the package, we should be able to remove the duplicate at https://github.com/wordpress/gutenberg/blob/44925a947fde29feaab512e0adf4291272209d59/phpunit/style-engine/class-wp-style-engine-gutenberg-test.php ?

Oh, yeah! I'll do that before merging this PR. Thanks for spotting that @andrewserong

@ramonjd ramonjd merged commit d4927f0 into trunk Apr 6, 2022
@ramonjd ramonjd deleted the update/style-engine-backend-to-package branch April 6, 2022 23:40
@github-actions github-actions bot added this to the Gutenberg 13.0 milestone Apr 6, 2022
@ramonjd ramonjd removed the [Status] In Progress Tracking issues with work in progress label Apr 12, 2022
@noisysocks
Copy link
Member

@gziolo For the block supports, I think we should do the same as "block-library" (and the proposed changes for style engine here), meaning I believe we should just write them as if we were in Core, copy them automatically as part of the package update in core (like we do for blocks and parser) and rename them automatically in the gutenberg plugin in the web pack build.

💯 yes.

@bph bph mentioned this pull request Sep 21, 2022
89 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Technical Feedback Needs testing from a developer perspective. [Type] Build Tooling Issues or PRs related to build tooling [Type] Experimental Experimental feature or API.
Projects
Status: 🏆 Done
Development

Successfully merging this pull request may close these issues.

7 participants