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

Block Directory: Use plugin API for installing & deleting block-plugins #23219

Merged
merged 5 commits into from
Jun 24, 2020

Conversation

ryelle
Copy link
Contributor

@ryelle ryelle commented Jun 16, 2020

Description

The /plugins endpoints were introduced in #22454, and while /block-directory/install and /block-directory/uninstall were updated to use those endpoints in PHP, we can actually remove those endpoints and call the plugins methods directly. See #22454 (comment)

This PR updates the install flow to call POST __experimental/plugins, and the uninstall flow to call PUT __experimental/plugins/${ plugin } (to deactivate) and DELETE __experimental/plugins/${ plugin } to remove the files.

It also removes the install & uninstall endpoints from __experimental/block-directory, and updates all the tests.

How has this been tested?

The php & js unit tests have been updated. I've also tested the block directory flow in browser (chrome):

  • Open a post
  • Search for a new block, add it
  • It should install & be added to the post content
  • In another tab, you can open the plugins screen to see it installed
  • Back in the editor, remove the block, and save your post
  • The block is silently removed, since it's unused
  • Back on the plugins screen, the plugin should be gone

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.

@ryelle ryelle added the [Feature] Block Directory Related to the Block Directory, a repository of block plugins label Jun 16, 2020
@ryelle ryelle requested a review from spacedmonkey as a code owner June 16, 2020 19:48
@ryelle ryelle self-assigned this Jun 16, 2020
},
method: 'POST',
} );
yield addInstalledBlockType( block );
yield addInstalledBlockType( { ...block, plugin: response.plugin } );
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is a bit of a workaround, since we need the main plugin file for uninstallation (ex, blissful-buttons/blissful-buttons.php, or wp-p5js-block/plugin.php). I'm not sure if we can/should try adding this to the block directory response (from wp.org), or leave this as-is.

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think the block directory response could return that info nor should it.

I'm fine with this approach for now, but since plugin is a pretty generic property we could run into collisions in the future.

Copy link
Member

@TimothyBJacobs TimothyBJacobs left a comment

Choose a reason for hiding this comment

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

This looks great to me!

One alternative might be to add the self link to the addInstalledBlockType instead. That way you don't have to manually construct the route, and can just operate off the link.

@@ -94,18 +95,19 @@ export function* installBlockType( block ) {
* @param {Object} block The blockType object.
*/
export function* uninstallBlockType( block ) {
const { id } = block;
const plugin = block.plugin.replace( '.php', '' );
Copy link
Contributor

Choose a reason for hiding this comment

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

This is somewhat unexpected, is the plugin file the only way to get the slug?

Copy link
Member

Choose a reason for hiding this comment

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

Right now the plugins controller returns the file. This could be bypassed by using the self link.

I don't know if the controller should return the file ie my-plugin/init.php or my-plugin/init for the plugin field. The former is the "real" value, but the latter is what will get used in the URL. I'm very much open to thoughts.

@StevenDufresne
Copy link
Contributor

Ran this locally. Works fine.

@tellyworth tellyworth mentioned this pull request Jun 23, 2020
20 tasks
@ellatrix ellatrix added this to the Gutenberg 8.4 milestone Jun 23, 2020
@ellatrix
Copy link
Member

Could this be rebased? Not sure if the test failures are legitimate.

@ellatrix ellatrix force-pushed the update/block-dir-use-plugin-eps branch from 6c9ac20 to fa992a7 Compare June 23, 2020 08:31
@ellatrix
Copy link
Member

Ok, I rebased it.

@github-actions
Copy link

github-actions bot commented Jun 23, 2020

Size Change: +640 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-directory/index.js 7.37 kB +100 B (1%)
build/block-editor/index.js 107 kB +64 B (0%)
build/block-editor/style-rtl.css 10.6 kB +13 B (0%)
build/block-editor/style.css 10.6 kB +13 B (0%)
build/block-library/editor-rtl.css 7.6 kB +9 B (0%)
build/block-library/editor.css 7.6 kB +9 B (0%)
build/block-library/index.js 129 kB +281 B (0%)
build/block-library/style-rtl.css 8.03 kB +16 B (0%)
build/block-library/style.css 8.04 kB +15 B (0%)
build/components/index.js 197 kB -124 B (0%)
build/components/style-rtl.css 15.8 kB +10 B (0%)
build/components/style.css 15.8 kB +11 B (0%)
build/edit-navigation/index.js 9.87 kB +223 B (2%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/style-rtl.css 937 B 0 B
build/block-directory/style.css 937 B 0 B
build/block-library/theme-rtl.css 730 B 0 B
build/block-library/theme.css 732 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.2 kB 0 B
build/compose/index.js 9.62 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.44 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 3.19 kB 0 B
build/edit-navigation/style-rtl.css 1.02 kB 0 B
build/edit-navigation/style.css 1.02 kB 0 B
build/edit-post/index.js 303 kB 0 B
build/edit-post/style-rtl.css 5.48 kB 0 B
build/edit-post/style.css 5.47 kB 0 B
build/edit-site/index.js 16.6 kB 0 B
build/edit-site/style-rtl.css 3.02 kB 0 B
build/edit-site/style.css 3.02 kB 0 B
build/edit-widgets/index.js 9.33 kB 0 B
build/edit-widgets/style-rtl.css 2.42 kB 0 B
build/edit-widgets/style.css 2.42 kB 0 B
build/editor/editor-styles-rtl.css 537 B 0 B
build/editor/editor-styles.css 539 B 0 B
build/editor/index.js 44.9 kB 0 B
build/editor/style-rtl.css 3.81 kB 0 B
build/editor/style.css 3.81 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.72 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.13 kB 0 B
build/list-reusable-blocks/style-rtl.css 450 B 0 B
build/list-reusable-blocks/style.css 451 B 0 B
build/media-utils/index.js 5.29 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 663 B 0 B
build/nux/style.css 660 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14 kB 0 B
build/server-side-render/index.js 2.67 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

The install and uninstall routes no longer exist on this controller, as they've moved to the plugin controller.
@ellatrix
Copy link
Member

Looks like there's some e2e test failures.

@noisysocks noisysocks merged commit bacb520 into master Jun 24, 2020
@noisysocks noisysocks deleted the update/block-dir-use-plugin-eps branch June 24, 2020 03:50
noisysocks pushed a commit that referenced this pull request Jun 24, 2020
…ns (#23219)

* Block Directory: Use plugin API for installing & deleting block-plugins

* Remove the install & uninstall endpoints from the block-directory

* Set the endpoint for the block by using the self link property

* Remove erroneous route tests

The install and uninstall routes no longer exist on this controller, as they've moved to the plugin controller.

* Update e2e install mock url to fix tests.

Co-authored-by: tellyworth <[email protected]>
Co-authored-by: dufresnesteven <[email protected]>
This was referenced Jun 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block Directory Related to the Block Directory, a repository of block plugins
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants