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

Packages: Automate npm publishing as part of Gutenberg release workflow #39259

Merged
merged 4 commits into from
Mar 9, 2022

Conversation

gziolo
Copy link
Member

@gziolo gziolo commented Mar 7, 2022

What

Related PR with manually triggered npm publishing: #37751.
Related discussion: #37820.

I'm proposing a new strategy where the "feature-freeze" mode in WordPress Core isn't taken into account when publishing npm packages with the latest tag. The plan is to publish to npm every time the Gutenberg plugin RC1 is released.

After a release of WordPress, we need to leave room for patch releases and security releases (so patch versions changes).

Every plugin release (RC1) will trigger at least a minor version bump for packages with production code. I also want to automate adding a CHANGELOG entry that links to the GitHub release page with the full plugin release changelog.

During the beta/rc cycle of WordPress, we often need to make package updates that are not necessary just bug fixes, so minor version changes, we should make sure there's no "newer" version available because of a plugin npm release.

As long as those changes are applied as a patch version bump then it should be good for the time being. An alternative to consider as a follow-up would be to enforce a major version bump to production packages on the plugin release that won't be included in the upcoming major WordPress release. The latter is more difficult to handle but I think @ockham had some ideas on how to detect this exact moment.

The only non-blocking remaining question is whether we would use patch dist-tag for beta and RC phase of major WordPress releases or we switch to tags targeting a given release line as discussed in #37820 (reply in thread). In the case of the upcoming WordPress 6.0 release, we could start using wp-6.0 tag instead. This proposal is tracked in #24376.

In the long run, we could simplify npm publishing for minor WordPress releases (like 5.9.x) so you could trigger it from the GitHub UI using similar automation that we have for plugin releases. For the time being, the changes proposed in this PR don't impact this type of releases at all.

Why

We have GitHub automation in place for handling the Gutenberg plugin releases.

Prior work:

We should bring the same experience when publishing WordPress packages to npm to make the whole process predictable and more transparent.

npm publishing is still a manual process that has its quirks when the WordPress trunk branch can be closed or in "feature-freeze" mode as documented in Synchronizing WordPress Trunk. There is also a limited group of folks who have access to WordPress organization on npm. It's a lot of overhead to add new contributors there and train them.

How

npm access token

I created a new npm user gutenbergplugin that mirrors the @gutenbergplugin user that handles the Gutenberg plugin releases on GitHub.

I followed the instructions from npm documentation to create an access token for npm publishing:

https://docs.npmjs.com/creating-and-viewing-access-tokens

I followed the instructions from the following article on how to configure a GitHub action to perform npm publishing with the token:

https://dev.to/astagi/publish-to-npm-using-github-actions-23fn

As part of that, I went to "Settings" -> "Secrets". I clicked on "New repository secret" and added the npm access token that I previously copied from npm. It's available in GitHub actions as secrets.NPM_TOKEN whenever you want to use gutenbergplugin for automated npm interactions.

This way npm publishing triggered from GitHub actions will always use a bot user instead of private accounts. It removes all the friction of managing the WordPress organization on npm 🎉

GitHub workflow

I added a new job in the workflow that handles Gutenberg plugin releases. It is going to be triggered:

  • when the Gutenberg plugin RC1 is created
  • after the changelog for the Gutenberg plugin gets updated

The job for the first test run will publish WordPress packages to npm based on the plugin release with the next dist-tag. That means we won't update the production version of npm packages but those distributed for development purposes. This is intentional to minimize the risk that something goes wrong.

Testing instructions

I don't think there is a simple way to test those changes without triggering a real Gutenberg plugin RC1 release.

I tested it in a very hacky way by injecting the job into the Static Analysis workflow that gets triggered on every commit to the PR. You can check the last testing version in f74fdf3. I was able to successfully publish all WordPress npm packages to npm with the next dist tag:

Screenshot 2022-03-09 at 09 25 32

All the following changes to the wp/next branch got applied from testing runs triggered from this branch:

Screenshot 2022-03-09 at 12 43 40

It took me some time to sort out npm access permissions when interacting with Lerna. The commit related to the successful publishing is c510818.

@github-actions
Copy link

github-actions bot commented Mar 7, 2022

Size Change: +18 B (0%)

Total Size: 1.16 MB

Filename Size Change
build/block-library/index.min.js 168 kB +27 B (0%)
build/edit-navigation/style-rtl.css 4.04 kB -1 B (0%)
build/edit-navigation/style.css 4.05 kB -1 B (0%)
build/edit-post/style-rtl.css 7.07 kB -1 B (0%)
build/edit-post/style.css 7.07 kB -2 B (0%)
build/edit-site/style-rtl.css 7.43 kB -1 B (0%)
build/edit-site/style.css 7.42 kB -1 B (0%)
build/edit-widgets/style-rtl.css 4.39 kB -1 B (0%)
build/edit-widgets/style.css 4.39 kB -1 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-editor/index.min.js 144 kB
build/block-editor/style-rtl.css 14.8 kB
build/block-editor/style.css 14.8 kB
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/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 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.61 kB
build/block-library/blocks/gallery/style.css 1.61 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/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 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 522 B
build/block-library/blocks/image/style.css 528 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 94 B
build/block-library/blocks/list/style.css 94 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 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.89 kB
build/block-library/blocks/navigation/style.css 1.88 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 273 B
build/block-library/blocks/paragraph/style.css 273 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 389 B
build/block-library/blocks/pullquote/style.css 388 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 201 B
build/block-library/blocks/quote/style.css 201 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 99 B
build/block-library/blocks/separator/editor.css 99 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 172 B
build/block-library/blocks/separator/theme.css 172 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 744 B
build/block-library/blocks/site-logo/editor.css 744 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 235 B
build/block-library/blocks/template-part/editor.css 235 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/editor-rtl.css 9.92 kB
build/block-library/editor.css 9.92 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.4 kB
build/block-library/style.css 11.4 kB
build/block-library/theme-rtl.css 665 B
build/block-library/theme.css 670 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.4 kB
build/components/index.min.js 217 kB
build/components/style-rtl.css 15.6 kB
build/components/style.css 15.6 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14 kB
build/customize-widgets/index.min.js 11.2 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.03 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.9 kB
build/edit-site/index.min.js 41.9 kB
build/edit-widgets/index.min.js 16.5 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.1 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.94 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

@gziolo gziolo force-pushed the update/npm-publishing-workflow-changes branch from f5c476f to 13a29c0 Compare March 7, 2022 16:17
@gziolo gziolo added the npm Packages Related to npm packages label Mar 7, 2022
@gziolo gziolo self-assigned this Mar 7, 2022
@gziolo gziolo added the [Status] In Progress Tracking issues with work in progress label Mar 7, 2022
@gziolo gziolo force-pushed the update/npm-publishing-workflow-changes branch 6 times, most recently from cb0b699 to c5e79fc Compare March 9, 2022 06:54
@gziolo gziolo force-pushed the update/npm-publishing-workflow-changes branch from 9ae910d to d7c77dc Compare March 9, 2022 11:32
@gziolo gziolo marked this pull request as ready for review March 9, 2022 11:34
@gziolo gziolo added [Type] Project Management Meta-issues related to project management of Gutenberg and removed [Status] In Progress Tracking issues with work in progress labels Mar 9, 2022
@gziolo gziolo requested a review from a team March 9, 2022 13:35
@gziolo gziolo changed the title Packages: Apply changes to npm publishing workflow Packages: Automate npm publishing as part of Gutenberg release workflow Mar 9, 2022
@ryanwelcher
Copy link
Contributor

I love this idea! I'm not familiar enough with the code here to be comfortable approving it but this has my upvote for sure :)

Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

The explanations here make sense, I think the sooner we try this, the better that way it doesn't impact WP releases much (backports and such)

@gziolo
Copy link
Member Author

gziolo commented Mar 9, 2022

I update the documentation to emphasize why we publish packages to npm at the time of Gutenberg RC1 release. It's important to have it documented as it might be tempting to move that moment by one week as we used to have it in the past.

I also included a note why we will start a minor version bump for every Gutenberg plugin release which was rightly raised by @youknowriad in the discussion related to this PR: #37820 (reply in thread).

In the next two weeks, I plan to summarize the current status and propose the next steps as an official post at https://make.wordpress.org/core/.

@gziolo gziolo merged commit 39333d4 into trunk Mar 9, 2022
@gziolo gziolo deleted the update/npm-publishing-workflow-changes branch March 9, 2022 15:02
@github-actions github-actions bot added this to the Gutenberg 12.8 milestone Mar 9, 2022
Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

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

Automating the release process further is always a good thing 🎉

I left some questions below about how this is going to work with the WP release process. I assume we'll be using patch releases exclusively to backport changes after WP code freeze?

It would be great to explain clearly what the process will be in the docs (or at least our current assumptions about the process, things can always change later of course 😄 )

@@ -192,35 +192,31 @@ The Gutenberg repository mirrors the [WordPress SVN repository](https://make.wor

- The `wp/trunk` branch contains the same version of packages published to npm with the `latest` distribution tag. The WordPress core consumes those packages directly in the `trunk` branch and uses them for public releases.
- The `wp/next` branch contains the same version of packages published to npm with the `next` distribution tag. Projects should use those packages for development purposes only.
- A Gutenberg branch targeting a specific WordPress major release (including its further minor increments) is created (example `wp/5.2`) based on the `wp/trunk` Gutenberg branch when the corresponding WordPress release branch is created. (This usually happens when the first `RC` of the next WordPress major version is released).
- A Gutenberg branch targeting a specific WordPress major release (including its further minor increments) is created (example `wp/5.2`) based on the `wp/trunk` Gutenberg branch when the corresponding WordPress release branch is created. (This usually happens when the `beta` or `RC` of the next WordPress major version is released).
Copy link
Contributor

Choose a reason for hiding this comment

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

Does this mean the WP release branch will be created at Beta going forward, or are we planning to create the Gutenberg release branch before the WP one?

Copy link
Member Author

Choose a reason for hiding this comment

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

I think it is strictly RC in WordPress core. I see it's scheduled for WP 6.0 at the time the first RC happens. In practice, it means we will have to cut a new wp/6.0 branch at the time when cherry-pick first commits from the Gutenberg plugin release that doesn't get included in the WordPress release. So that means a bit earlier.

I don't think it doesn't change much in the process, because previously we would use wp/trunk for publishing dedicated for WordPress core, and here we just use a different branch wp/6.0.

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah, that makes sense. I think in WP too it would be better to create the release branch straight after Beta, but that might not change anytime soon, and nothing stops us from creating the Gutenberg release branch earlier.

To make the docs clear, perhaps we can specify that the Gutenberg release branch is created as soon as code freeze (or Beta 1, if there's no prior code freeze) happens in Core.


Note that the WordPress `trunk` branch can be closed or in "feature-freeze" mode. Usually, feature freeze in WordPress Core happens about 2 weeks before Beta 1 and remains in effect until RC1 when the `trunk` gets branched. During this period, the Gutenberg plugin releases should not be synchronized with WordPress Core.
We deliberately update the `wp/trunk` branch within the Gutenberg repo with the content from the Gutenberg release `release/*` (example `release/12.7`) branch at the time of the Gutenberg RC1 release. This is done to ensure that the `wp/trunk` branch is as close as possible to the latest version of the Gutenberg plugin. It also practically removes the chances of conflicts while backporting to `trunk` commits with updates applied during publishing to `package.json` and `CHANGELOG.md` files. In the past, we had many issues in that aspect when doing npm publishing after the regular Gutenberg release a week later. When publishing the new package versions to npm, we pick at least the `minor` version bump to account for future bugfix or security releases.
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we update Core trunk after each Gutenberg release too? If not, does it really make sense to keep calling this branch wp/trunk if it's not in sync with Core trunk?

Copy link
Member Author

Choose a reason for hiding this comment

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

Great question. In the past, we used that branch several times to update the trunk in the WordPress core with changes published from wp/trunk before the beta for the major WordPress release. Nothing stops us from doing it on regular basis 😅

There are only 3 weeks between beta 1 (12 April) and RC 1 (3 May) for WP 6.0 so it's a relatively short period of time where wp/6.0 would exist in Gutenberg without 6.0 branch in WP core. Anyway, we can just rename it to wp/latest to better express its intent.

Copy link
Contributor

Choose a reason for hiding this comment

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

Nothing stops us from doing it on regular basis 😅

Totally agree we should do this! I think the only thing that stops us is not wanting to throw all the super experimental/unstable stuff into Core, but we can maybe make more use of feature flags.

we can just rename it to wp/latest

That would be be ideal if it's not always going to match WP trunk 🙂

@gziolo
Copy link
Member Author

gziolo commented Mar 10, 2022

I left some questions below about how this is going to work with the WP release process. I assume we'll be using patch releases exclusively to backport changes after WP code freeze?

Yes, that was my initial idea to use patch releases that we already use for minor and security WordPress releases.

The alternative is to use more granular dist-tags on npm that are tied to the WordPress major release line. Let me give an example:

  • for a security release in WP 5.3.x we could use wp-5.3 dist tag
  • for a minor release in WP 5.9.x we could use wp-5.9 dist tag
  • for beta and RC releases in WP 6.0.x we could use wp-6.0dist-tag

The benefit of that strategy would be that you could simplify updating packages in WordPress core because you could run for example:

npm install @wordpress/[email protected]

That would update @wordpress/components to the latest version for WordPress 5.9 release in the 5.9 branch in core.

It would be great to explain clearly what the process will be in the docs (or at least our current assumptions about the process, things can always change later of course 😄 )

Yes, that's the tricky part because we need to test everything in action. I'm definitely willing to spend more time polishing this flows and distilling the most important parts in the release documentation.

npm-publish:
name: Publish WordPress packages to npm
runs-on: ubuntu-latest
needs: update-changelog
Copy link
Member Author

Choose a reason for hiding this comment

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

Let's put npm access token into its own enviroment:

 environment: npm organization

@gziolo
Copy link
Member Author

gziolo commented Mar 14, 2022

I was thinking about the changes to the publishing process based on the feedback from @tellthemachines and this is my current thinking posted in the higher-level discussion for better visibility: #37820 (comment).

@gziolo
Copy link
Member Author

gziolo commented Mar 16, 2022

#39389 covers all the improvements discussed after this PR got merged. Thank you again for your great feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
npm Packages Related to npm packages [Type] Project Management Meta-issues related to project management of Gutenberg
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants