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

Testing: Test Create Block with more OS and Node versions #38368

Merged
merged 6 commits into from
Feb 2, 2022

Conversation

gziolo
Copy link
Member

@gziolo gziolo commented Jan 31, 2022

Description

We had a regression in #38348 for Windows OS when using @wordpress/scripts. That could be caught early in the process with GitHub Actions if we were testing more operating systems. This PR tries to include Windows and macOS when testing Create Block.

It also adds Node 16 to the mix. (Node 16 doesn't work with the current lock file because it uses npm 8)

@gziolo gziolo force-pushed the update/ci-create-block-os-node-version branch from ad78354 to 0c08f5d Compare January 31, 2022 09:50
@gziolo gziolo self-assigned this Jan 31, 2022
@gziolo gziolo added [Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests. [Tool] WP Scripts /packages/scripts [Tool] Create Block /packages/create-block [Type] Enhancement A suggestion for improvement. labels Jan 31, 2022
@gziolo gziolo requested a review from ockham January 31, 2022 09:51
@gziolo
Copy link
Member Author

gziolo commented Jan 31, 2022

It would be also great to include a check in the bash script that verifies if all files were build for the block using wp-scripts build:

status "Building block..."
../node_modules/.bin/wp-scripts build

@ockham, I guess ls build | wc -l is enough to count the number of files in the output folder because there are no subdirectories. How can I exit the script with an error if the number of expected files differs?

@gziolo
Copy link
Member Author

gziolo commented Jan 31, 2022

Does anyone know how do I run the test script on Windows OS. It fails at the moment:

Screenshot 2022-01-31 at 11 05 19

More in https://github.com/WordPress/gutenberg/runs/5003897537?check_suite_focus=true.

@gziolo gziolo added the [Status] In Progress Tracking issues with work in progress label Jan 31, 2022
@ockham
Copy link
Contributor

ockham commented Jan 31, 2022

@ockham, I guess ls build | wc -l is enough to count the number of files in the output folder because there are no subdirectories. How can I exit the script with an error if the number of expected files differs?

Hmm, maybe try something like

expected=57
actual=$( ls build | wc -l | xargs )
if [ "$expected" != "$actual" ]; then
    exit 1
fi

(The | xargs is needed to remove the leading whitespace from wc's return value.)

@ockham
Copy link
Contributor

ockham commented Jan 31, 2022

Does anyone know how do I run the test script on Windows OS. It fails at the moment:

Screenshot 2022-01-31 at 11 05 19

More in https://github.com/WordPress/gutenberg/runs/5003897537?check_suite_focus=true.

Hmm, this is a tricky one, since there are two levels of indirection:

  • GHA calls npm run test:create-block, i.e. a script defined in package.json
  • That script then runs ./bin/test-create-block.sh.

It's the latter line that Windows seems to be struggling with; or rather, the shell that Windows is using.

My first attempt at a solution would thus be to set the shell on Windows to bash (where the default would be Powershell).

Something like

diff --git a/.github/workflows/create-block.yml b/.github/workflows/create-block.yml
index 61ae4c49be..37044229f4 100644
--- a/.github/workflows/create-block.yml
+++ b/.github/workflows/create-block.yml
@@ -36,6 +36,7 @@ jobs:
                   cache: npm
 
             - name: npm install, build, format and lint
+              shell: bash
               run: |
                   npm ci
                   npm run test:create-block

@talldan
Copy link
Contributor

talldan commented Feb 1, 2022

Does anyone know how do I run the test script on Windows OS. It fails at the moment

I know there's also been some use of cross-env in the past for npm scripts (https://www.npmjs.com/package/cross-env). I'm not sure if that will solve this particular problem, or if it only helps with environment variables.

@gziolo
Copy link
Member Author

gziolo commented Feb 1, 2022

Hmm, maybe try something like

expected=57
actual=$( ls build | wc -l | xargs )
if [ "$expected" != "$actual" ]; then
    exit 1
fi

Brilliant, it works like a charm. This is what I ened up using:

expected=5
actual=$( ls build | wc -l | xargs )
if [ "$expected" != "$actual" ]; then
	error "Expected $expected files in the build folder, but found $actual."
    exit 1
fi

@gziolo
Copy link
Member Author

gziolo commented Feb 1, 2022

I'm afraid that the following trick didn't help:

shell: bash

I spend some time on StackOverflow, but I didn't find anything useful so far. It looks like the whole problem is related to npm run that uses the path to the shell script. I will try cross-env tomorrow but it's probably only related to env variables. Let's see.

@ockham
Copy link
Contributor

ockham commented Feb 1, 2022

I'm afraid that the following trick didn't help:

shell: bash

I spend some time on StackOverflow, but I didn't find anything useful so far. It looks like the whole problem is related to npm run that uses the path to the shell script. I will try cross-env tomorrow but it's probably only related to env variables.

Yeah, that's my hunch as well, I'm afraid.

I've seen some threads on SO that referred to a very similar problem -- having a package.json script that calls a node script with a leading dot and slash, e.g.

		"do:something": "./bin/do-something.js",

For those instances, the suggested workaround was to explicitly use node to run that script:

		"do:something": "node ./bin/do-something.js",

since node itself apparently does accept the leading-dot and foward-slash notation for the file it's passed as a cmd line arg, even on Windows.

But alas, that doesn't translate to our case, where we're dealing with a (POSIX) shell script. I've seen some people suggest prepending sh:

		"test:create-block": "sh ./bin/test-create-block.sh",

That seems to work across some platforms, but from what I've seen, maybe not on Windows (it's worth trying it out tho -- maybe it doesn't work with PowerShell but does with bash?)


If all else fails, how about inlining the contents of bin/test-create-block.sh into create-block.yml? (AFAICS, that's the only callsite of that script, so we might even consider deleting the script afterwords.)

@ockham
Copy link
Contributor

ockham commented Feb 1, 2022

I've seen some people suggest prepending sh

I pushed 319a6bc to try this out.

@github-actions
Copy link

github-actions bot commented Feb 1, 2022

Size Change: +1.36 kB (0%)

Total Size: 1.14 MB

Filename Size Change
build/block-editor/index.min.js 141 kB +13 B (0%)
build/block-editor/style-rtl.css 14.6 kB -1 B (0%)
build/block-editor/style.css 14.6 kB -1 B (0%)
build/block-library/blocks/cover/style-rtl.css 1.4 kB +179 B (+15%) ⚠️
build/block-library/blocks/cover/style.css 1.4 kB +180 B (+15%) ⚠️
build/block-library/blocks/navigation/editor-rtl.css 1.92 kB +18 B (+1%)
build/block-library/blocks/navigation/editor.css 1.93 kB +19 B (+1%)
build/block-library/editor-rtl.css 10 kB +19 B (0%)
build/block-library/editor.css 10 kB +20 B (0%)
build/block-library/index.min.js 166 kB +184 B (0%)
build/block-library/style-rtl.css 11 kB +231 B (+2%)
build/block-library/style.css 11 kB +235 B (+2%)
build/components/index.min.js 215 kB +82 B (0%)
build/components/style-rtl.css 15.5 kB -3 B (0%)
build/components/style.css 15.5 kB -2 B (0%)
build/edit-navigation/index.min.js 16.2 kB +121 B (+1%)
build/edit-widgets/index.min.js 16.6 kB +75 B (0%)
build/primitives/index.min.js 917 B -7 B (-1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.22 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 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/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 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 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 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-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/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 322 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 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 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 343 B
build/block-library/blocks/navigation/style-rtl.css 1.85 kB
build/block-library/blocks/navigation/style.css 1.84 kB
build/block-library/blocks/navigation/view.min.js 2.81 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 401 B
build/block-library/blocks/page-list/editor.css 402 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/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 245 B
build/block-library/blocks/separator/style.css 245 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 214 B
build/block-library/blocks/tag-cloud/style.css 215 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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 908 B
build/block-library/common.css 905 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 676 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.4 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 13.4 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 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.15 kB
build/edit-post/style.css 7.14 kB
build/edit-site/index.min.js 41.5 kB
build/edit-site/style-rtl.css 7.22 kB
build/edit-site/style.css 7.21 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.17 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 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.75 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 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.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 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.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.58 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@gziolo
Copy link
Member Author

gziolo commented Feb 1, 2022

It looks like it works. The failure still happens on Windows but in the newly added verification for the build folder.

@ockham
Copy link
Contributor

ockham commented Feb 1, 2022

It looks like it works.

Ah yeah, so I guess that's at least some good news 🎉

The failure still happens on Windows but in the newly added verification for the build folder.

Indeed:

xargs: environment is too large for exec

🤔

@ockham
Copy link
Contributor

ockham commented Feb 1, 2022

xargs: environment is too large for exec

Documented here.

Maybe we can work around using xargs to trim whitespace on this line 🤔

@gziolo
Copy link
Member Author

gziolo commented Feb 2, 2022

With some further digging into StackOverflow, I found awk '{$1=$1};1' that works with Windows. Everything is green now 🎉

@gziolo gziolo removed the [Status] In Progress Tracking issues with work in progress label Feb 2, 2022
@gziolo gziolo requested a review from mcsf February 2, 2022 06:03
@gziolo
Copy link
Member Author

gziolo commented Feb 2, 2022

@ockham or @mcsf, I would appreciate a review for the shell scripts that work but might be totally suboptimal 😅

Copy link
Contributor

@ockham ockham left a comment

Choose a reason for hiding this comment

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

LGTM! 🚢

@gziolo gziolo merged commit 2ef161d into trunk Feb 2, 2022
@gziolo gziolo deleted the update/ci-create-block-os-node-version branch February 2, 2022 18:05
@github-actions github-actions bot added this to the Gutenberg 12.6 milestone Feb 2, 2022
Copy link
Contributor

@mcsf mcsf left a comment

Choose a reason for hiding this comment

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

Thanks for the ping, Bash always brightens my day. :P

I'll open up a small PR with minor touches.

@@ -31,6 +35,14 @@ status "Formatting files..."
status "Building block..."
../node_modules/.bin/wp-scripts build

status "Verifying build..."
expected=5
actual=$( ls build | wc -l | awk '{$1=$1};1' )
Copy link
Contributor

Choose a reason for hiding this comment

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

awk '{$1=$1};1'

Mysterious incantation! 😄

OK, I think I got it: is the issue that, because wc -l formats the output with a leading space, the comparison [ "$expected" != "$actual" ] always fails? There are a couple of ways to make this clearer:

  • Since we're already invoking AWK, we can let it do the counting too: awk 'END { print NR }', which means "once the end of the file/stream is reached, print the number of records, i.e. lines, that we have processed. Alternatively, grepcan also count:grep -c .` (the dot represents any character to match)
  • But, actually, Bash is capable of arithmetic comparison: [ "$expected" -ne "$actual" ], where -ne stands for "not equal". In this scenario, Bash will parse the numbers unencumbered by formatting.

run: |
npm ci
npm run test:create-block
sh ./bin/test-create-block.sh
Copy link
Contributor

Choose a reason for hiding this comment

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

Unless there is a GitHub Actions quirk that I am not aware of, in a normal environment this invocation is problematic, because test-create-block.sh isn't a POSIX shell script, but a Bash script with specific Bashisms. So it should be:

bash ./bin/test-create-block.sh

I'll open a follow-up PR.

Copy link
Member Author

Choose a reason for hiding this comment

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

❤️

Copy link
Contributor

Choose a reason for hiding this comment

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

(FWIW, we're setting the shell to bash, so in practice, it shouldn't matter much IIUC.)

Copy link
Contributor

Choose a reason for hiding this comment

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

(FWIW, we're setting the shell to bash, so in practice, it shouldn't matter much IIUC.)

Indeed, but I don't understand what that actually means, mechanically. :) That is, in the end in the runtime there must be something equivalent to exec, and this could either mean that some layer is honouring the hashbang (parsing the first line of the script — #!/bin/bash — and thus exec'ing /bin/bash with the script path as argument), or that some layer is directly exec'ing entire string in the config — bash ./bin/test-create-block.sh. I have no idea what kind of effect shell: bash plays in the middle of this!

Copy link
Contributor

Choose a reason for hiding this comment

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

BTW, coming back to this from another angle: Are there even that many Bashisms left? Seems like -ne could be actually POSIX-compliant 🤔

Copy link
Contributor

Choose a reason for hiding this comment

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

Actually, the -ne is fine and dates back to the original Unix days, I believe. :) According to ShellCheck, the only Bashism is the -e flag passed to echo. Replacing echo -e with printf should be enough — just don't forget the trailing newline.

Btw, ShellCheck is available as a linter. I have it in Vim, so I'm sure it's trivial to install in VSCode. I highly recommend it. It not only prevents mistakes, but it has also taught me a lot thanks to the detailed explanations in the wiki. :)

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks for the reminder! I was still copying code back and forth into shellcheck.net. (I have yet to try if it's clever enough to work inside of the workflow YAML 🤔 )

mcsf added a commit that referenced this pull request Feb 3, 2022
@mcsf
Copy link
Contributor

mcsf commented Feb 3, 2022

Follow-up at #38482! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Tool] Create Block /packages/create-block [Tool] WP Scripts /packages/scripts [Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants