From 62db248c28515d7ee9fa0fc8796324096990b93c Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:02:47 +0100 Subject: [PATCH 01/32] Add concurrently dev package --- package-lock.json | 351 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 + 2 files changed, 347 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 473f9d23b8..0785f74548 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "babel-plugin-react-native-classname-to-style": "^1.2.1", "babel-plugin-react-native-platform-specific-extensions": "^1.1.1", "babel-plugin-transform-remove-console": "6.9.4", + "concurrently": "8.2.2", "cross-env": "^5.1.4", "empty": "^0.10.1", "enzyme": "^3.9.0", @@ -63,7 +64,7 @@ }, "gutenberg/packages/babel-plugin-import-jsx-pragma": { "name": "@wordpress/babel-plugin-import-jsx-pragma", - "version": "4.32.0", + "version": "4.33.0", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -75,7 +76,7 @@ }, "gutenberg/packages/babel-preset-default": { "name": "@wordpress/babel-preset-default", - "version": "7.33.0", + "version": "7.34.0", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -98,7 +99,7 @@ }, "gutenberg/packages/browserslist-config": { "name": "@wordpress/browserslist-config", - "version": "5.32.0", + "version": "5.33.0", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -138,7 +139,7 @@ }, "gutenberg/packages/eslint-plugin": { "name": "@wordpress/eslint-plugin", - "version": "17.6.0", + "version": "17.7.0", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -271,7 +272,7 @@ }, "gutenberg/packages/prettier-config": { "name": "@wordpress/prettier-config", - "version": "3.6.0", + "version": "3.7.0", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -283,7 +284,7 @@ }, "gutenberg/packages/warning": { "name": "@wordpress/warning", - "version": "2.49.0", + "version": "2.50.0", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -10780,6 +10781,154 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/concurrently": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -11075,6 +11224,22 @@ "node": ">= 14" } }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/dayjs": { "version": "1.11.8", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", @@ -24302,6 +24467,21 @@ "integrity": "sha1-QAwJ6+kU57F+C27zJjQA/Cq8fLM=", "dev": true }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/safaridriver": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-0.1.0.tgz", @@ -25083,6 +25263,12 @@ "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, "node_modules/spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -25997,6 +26183,15 @@ "node": "*" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -35808,6 +36003,112 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "concurrently": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, "connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -36049,6 +36350,15 @@ "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "dev": true }, + "date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" + } + }, "dayjs": { "version": "1.11.8", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", @@ -46027,6 +46337,23 @@ "integrity": "sha1-QAwJ6+kU57F+C27zJjQA/Cq8fLM=", "dev": true }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, "safaridriver": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-0.1.0.tgz", @@ -46666,6 +46993,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -47399,6 +47732,12 @@ "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", "dev": true }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", diff --git a/package.json b/package.json index c212686e1c..b7ffe250b7 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "babel-plugin-react-native-classname-to-style": "^1.2.1", "babel-plugin-react-native-platform-specific-extensions": "^1.1.1", "babel-plugin-transform-remove-console": "6.9.4", + "concurrently": "8.2.2", "cross-env": "^5.1.4", "empty": "^0.10.1", "enzyme": "^3.9.0", @@ -79,6 +80,7 @@ "bundle:ios": "npm run bundle:ios:text && npm run bundle:ios:bytecode", "bundle:ios:text": "mkdir -p bundle/ios && npm run rn-bundle -- --platform ios --dev false --entry-file ./index.js --assets-dest ./ios-xcframework/Gutenberg/Resources --bundle-output ./bundle/ios/App.text.js --sourcemap-output ./bundle/ios/App.text.js.map", "bundle:ios:bytecode": "./gutenberg/node_modules/react-native/sdks/hermesc/`node -e \"const platform=require('os').platform();console.log(platform === 'darwin' ? 'osx-bin' : (platform === 'linux' ? 'linux64-bin' : (platform === 'win32' ? 'win64-bin' : 'unsupported-os')));\"`/hermesc -emit-binary -O -out bundle/ios/App.js bundle/ios/App.text.js -output-source-map", + "bundle:all": "concurrently 'npm run bundle:android' 'npm run bundle:ios'", "prewpandroid": "rm -Rf $TMPDIR/gbmobile-wpandroidfakernroot && mkdir $TMPDIR/gbmobile-wpandroidfakernroot && ln -s $(cd \"$(dirname \"../../../\")\"; pwd) $TMPDIR/gbmobile-wpandroidfakernroot/android", "wpandroid": "cd gutenberg && react-native run-android --root $TMPDIR/gbmobile-wpandroidfakernroot --variant wasabiDebug --appIdSuffix beta --appFolder WordPress --main-activity=ui.WPLaunchActivity", "test": "cross-env NODE_ENV=test jest --config ./jest.config.js", From 3c09801debeb71be01c7a84eaf54a89e65787e5c Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:03:05 +0100 Subject: [PATCH 02/32] Generate bundles using concurrently --- .buildkite/pipeline.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 62c8f10c23..3e43a905c1 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -120,8 +120,8 @@ steps: npm run prebundle:js fi - echo "--- :android: Build Android bundle" - npm run bundle:android + echo "--- :react: Generate bundles" + npm run bundle:all echo "--- :arrow_up: Upload Android bundle artifact" buildkite-agent artifact upload bundle/android/App.js @@ -132,9 +132,6 @@ steps: buildkite-agent artifact upload bundle/android/App.composed.js.map fi - echo "--- :ios: Build iOS bundle" - npm run bundle:ios - echo "--- :arrow_up: Upload iOS bundle artifact" buildkite-agent artifact upload bundle/ios/App.js tar -czvf ios-assets.tar.gz -C ios-xcframework/Gutenberg/Resources assets/ From 2ed46177e09edce87e12abc1af141e9399b2947f Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:30:55 +0100 Subject: [PATCH 03/32] Update Gutenberg ref --- gutenberg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gutenberg b/gutenberg index 9a049b6d56..3157a243f6 160000 --- a/gutenberg +++ b/gutenberg @@ -1 +1 @@ -Subproject commit 9a049b6d563ef358b647c14a926f6ab1fb62d5ae +Subproject commit 3157a243f65635bcdb1fa8aca6855d054b9f51a3 From 319cf7a6275a000f2b16e7277d82e4668ff992a5 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:31:11 +0100 Subject: [PATCH 04/32] Remove unused pre/post bundle commands --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index b7ffe250b7..fed957e1f6 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,7 @@ "start:reset": "npm run core clean:runtime && npm run start:quick -- --reset-cache", "start:quick": "react-native start --config ./metro.config.js", "core": "cd gutenberg && npm run native", - "prern-bundle": "patch-package --patch-dir gutenberg/packages/react-native-editor/metro-patch", "rn-bundle": "react-native bundle", - "postrn-bundle": "patch-package --reverse --patch-dir gutenberg/packages/react-native-editor/metro-patch", "i18n:check-cache": "./bin/i18n-check-cache.sh jetpack wp-plugins/jetpack layout-grid wp-plugins/layout-grid jetpack-videopress-pkg wp-plugins/jetpack", "i18n:update": "./bin/i18n-update.sh jetpack wp-plugins/jetpack ./jetpack/projects/plugins/jetpack/extensions layout-grid wp-plugins/layout-grid ./block-experiments/blocks/layout-grid jetpack-videopress-pkg wp-plugins/jetpack ./jetpack/projects/packages/videopress", "i18n:update:test": "./bin/i18n-update.sh --path i18n-test jetpack wp-plugins/jetpack ./jetpack/projects/plugins/jetpack/extensions layout-grid wp-plugins/layout-grid ./block-experiments/blocks/layout-grid jetpack-videopress-pkg wp-plugins/jetpack ./jetpack/projects/packages/videopress", From 8d82f8236a72a39a3879be05d86461646267e002 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:36:52 +0100 Subject: [PATCH 05/32] Fix typos --- .buildkite/commands/test-android.sh | 2 +- .buildkite/commands/test-ios.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/commands/test-android.sh b/.buildkite/commands/test-android.sh index 9b47887518..6e7203ad8e 100755 --- a/.buildkite/commands/test-android.sh +++ b/.buildkite/commands/test-android.sh @@ -16,7 +16,7 @@ while [ "$INPUT" != "" ]; do INPUT="${1-}" done -echo '--- :node: Set up Node depenendencies' +echo '--- :node: Set up Node dependencies' npm ci --prefer-offline --no-audit --ignore-scripts npm ci --prefix gutenberg --prefer-offline --no-audit diff --git a/.buildkite/commands/test-ios.sh b/.buildkite/commands/test-ios.sh index 17e03b3335..5aa05c88e1 100755 --- a/.buildkite/commands/test-ios.sh +++ b/.buildkite/commands/test-ios.sh @@ -19,7 +19,7 @@ while [ "$INPUT" != "" ]; do INPUT="${1-}" done -echo '--- :node: Set up Node depenendencies' +echo '--- :node: Set up Node dependencies' npm ci --prefer-offline --no-audit --ignore-scripts npm ci --prefix gutenberg --prefer-offline --no-audit From 7f517d21687496e97a6f5e3770eab912324c60b2 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:37:28 +0100 Subject: [PATCH 06/32] Use separate npm commands to avoid post install scripts --- .buildkite/commands/unit-tests-android.sh | 3 ++- .buildkite/commands/unit-tests-ios.sh | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.buildkite/commands/unit-tests-android.sh b/.buildkite/commands/unit-tests-android.sh index f50a85c658..ca6ba53920 100755 --- a/.buildkite/commands/unit-tests-android.sh +++ b/.buildkite/commands/unit-tests-android.sh @@ -1,7 +1,8 @@ #!/bin/bash -eu echo "--- :npm: Install Node dependencies" -npm ci --unsafe-perm --prefer-offline --no-audit --no-progress +npm ci --prefer-offline --no-audit --ignore-scripts +npm ci --prefix gutenberg --prefer-offline --no-audit SECTION='--- :node: Android Unit Tests' set +e diff --git a/.buildkite/commands/unit-tests-ios.sh b/.buildkite/commands/unit-tests-ios.sh index 66414f1f5b..574e3b396f 100755 --- a/.buildkite/commands/unit-tests-ios.sh +++ b/.buildkite/commands/unit-tests-ios.sh @@ -1,7 +1,8 @@ #!/bin/bash -eu echo "--- :npm: Install Node dependencies" -npm ci --unsafe-perm --prefer-offline --no-audit --no-progress +npm ci --prefer-offline --no-audit --ignore-scripts +npm ci --prefix gutenberg --prefer-offline --no-audit SECTION='--- :node: iOS Unit Tests' set +e From 9e9aee3a50d3cc3ea60e301ead6805bb0c3e3ec0 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:48:34 +0100 Subject: [PATCH 07/32] Restore npm ci commands --- .buildkite/commands/unit-tests-android.sh | 3 +-- .buildkite/commands/unit-tests-ios.sh | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.buildkite/commands/unit-tests-android.sh b/.buildkite/commands/unit-tests-android.sh index ca6ba53920..f50a85c658 100755 --- a/.buildkite/commands/unit-tests-android.sh +++ b/.buildkite/commands/unit-tests-android.sh @@ -1,8 +1,7 @@ #!/bin/bash -eu echo "--- :npm: Install Node dependencies" -npm ci --prefer-offline --no-audit --ignore-scripts -npm ci --prefix gutenberg --prefer-offline --no-audit +npm ci --unsafe-perm --prefer-offline --no-audit --no-progress SECTION='--- :node: Android Unit Tests' set +e diff --git a/.buildkite/commands/unit-tests-ios.sh b/.buildkite/commands/unit-tests-ios.sh index 574e3b396f..66414f1f5b 100755 --- a/.buildkite/commands/unit-tests-ios.sh +++ b/.buildkite/commands/unit-tests-ios.sh @@ -1,8 +1,7 @@ #!/bin/bash -eu echo "--- :npm: Install Node dependencies" -npm ci --prefer-offline --no-audit --ignore-scripts -npm ci --prefix gutenberg --prefer-offline --no-audit +npm ci --unsafe-perm --prefer-offline --no-audit --no-progress SECTION='--- :node: iOS Unit Tests' set +e From ffb3b0bb52a5db0382c05bfd9d091890919ee266 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 11:59:00 +0100 Subject: [PATCH 08/32] Trigger bundle generation right away --- .buildkite/pipeline.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 3e43a905c1..d66cd167db 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -98,10 +98,6 @@ steps: queue: android - label: Build JS Bundles - depends_on: - - lint - - android-unit-tests - - ios-unit-tests key: js-bundles plugins: - *ci_toolkit_plugin # unused? From 5a49e1c342b2416bb7f38b41d9e452b870afaf1c Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 12:29:28 +0100 Subject: [PATCH 09/32] Download Android bundle for E2E testing and avoid generating it again --- .buildkite/commands/build-android.sh | 4 ++-- .buildkite/pipeline.yml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.buildkite/commands/build-android.sh b/.buildkite/commands/build-android.sh index 8103651c7c..d4fd0763c0 100755 --- a/.buildkite/commands/build-android.sh +++ b/.buildkite/commands/build-android.sh @@ -9,8 +9,8 @@ export TEST_RN_PLATFORM=android export TEST_ENV=sauce set +x -echo '--- :react: Build Android bundle for E2E testing' -npm run test:e2e:bundle:android +echo '--- :arrow_down: Download Android bundle' +buildkite-agent artifact download bundle/android/App.js . echo '--- :react: Build Android app for E2E testing' npm run core test:e2e:build-app:android diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index d66cd167db..d7249c21cb 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -210,6 +210,7 @@ steps: - android-unit-tests - android-unit-tests-editor - android-unit-tests-bridge + - js-bundles command: .buildkite/commands/build-android.sh plugins: - *ci_toolkit_plugin From 7559dfeb7add87c8ba078548d08ade1a5a27ece0 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 12:30:41 +0100 Subject: [PATCH 10/32] Reduce NPM commands time --- .buildkite/commands/build-android.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.buildkite/commands/build-android.sh b/.buildkite/commands/build-android.sh index d4fd0763c0..793e66fc0f 100755 --- a/.buildkite/commands/build-android.sh +++ b/.buildkite/commands/build-android.sh @@ -1,7 +1,8 @@ #!/bin/bash -eu echo "--- :npm: Set up Node dependencies" -npm ci --unsafe-perm --prefer-offline --no-audit --no-progress +npm ci --prefer-offline --no-audit --ignore-scripts +npm ci --prefix gutenberg --prefer-offline --no-audit echo '--- :android: Set env var for Android E2E testing' set -x From cc16ba97dad4546e54a6e6e1d561188f677d19d4 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 12:56:41 +0100 Subject: [PATCH 11/32] Download JS bundles for the iOS E2E build --- .buildkite/commands/build-ios.sh | 16 ++++++++++++---- .buildkite/pipeline.yml | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.buildkite/commands/build-ios.sh b/.buildkite/commands/build-ios.sh index 508d8d0a78..76e0a2b8d1 100755 --- a/.buildkite/commands/build-ios.sh +++ b/.buildkite/commands/build-ios.sh @@ -3,8 +3,9 @@ echo '--- :desktop_computer: Clear up some disk space' rm -rfv ~/.Trash/15.1.xip -echo '--- :node: Set up Node depenendencies' -npm ci --unsafe-perm --prefer-offline --no-audit --no-progress +echo '--- :node: Set up Node dependencies' +npm ci --prefer-offline --no-audit --ignore-scripts +npm ci --prefix gutenberg --prefer-offline --no-audit echo '--- :ios: Set env var for iOS E2E testing' set -x @@ -16,8 +17,15 @@ export TEST_ENV=sauce export RN_EDITOR_E2E_IOS_DESTINATION="platform=iOS Simulator,name=iPhone 15" set +x -echo '--- :react: Build iOS bundle for E2E testing' -npm run test:e2e:bundle:ios +echo '--- :arrow_down: Download iOS bundle' +buildkite-agent artifact download bundle/ios/App.js . +buildkite-agent artifact download ios-assets.tar.gz . + +APP_PATH="gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app" + +mkdir -p "$APP_PATH" +cp bundle/ios/App.js "$APP_PATH/main.jsbundle" +tar -xzvf ios-assets.tar.gz -C "$APP_PATH/" echo '--- :react: Build iOS app for E2E testing' npm run core test:e2e:build-app:ios diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index d7249c21cb..3a41cf6814 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -176,6 +176,7 @@ steps: depends_on: - lint - ios-unit-tests + - js-bundles command: .buildkite/commands/build-ios.sh plugins: - *ci_toolkit_plugin From 7e08335cc464aad74d120f3a95abf2132639c4f5 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 13:42:17 +0100 Subject: [PATCH 12/32] Update Gutenberg ref --- gutenberg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gutenberg b/gutenberg index 3157a243f6..1b1b1a50fd 160000 --- a/gutenberg +++ b/gutenberg @@ -1 +1 @@ -Subproject commit 3157a243f65635bcdb1fa8aca6855d054b9f51a3 +Subproject commit 1b1b1a50fd97dd82e4d1d5ea8f1572f9b975b649 From fe3e9ca98c83a7d7deaae28c45e6bcb3975fab7e Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 13:42:28 +0100 Subject: [PATCH 13/32] Try ignore scripts --- .buildkite/commands/build-android.sh | 2 +- .buildkite/commands/build-ios.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/commands/build-android.sh b/.buildkite/commands/build-android.sh index 793e66fc0f..64cbab8bc5 100755 --- a/.buildkite/commands/build-android.sh +++ b/.buildkite/commands/build-android.sh @@ -2,7 +2,7 @@ echo "--- :npm: Set up Node dependencies" npm ci --prefer-offline --no-audit --ignore-scripts -npm ci --prefix gutenberg --prefer-offline --no-audit +npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts echo '--- :android: Set env var for Android E2E testing' set -x diff --git a/.buildkite/commands/build-ios.sh b/.buildkite/commands/build-ios.sh index 76e0a2b8d1..2c763b3912 100755 --- a/.buildkite/commands/build-ios.sh +++ b/.buildkite/commands/build-ios.sh @@ -5,7 +5,7 @@ rm -rfv ~/.Trash/15.1.xip echo '--- :node: Set up Node dependencies' npm ci --prefer-offline --no-audit --ignore-scripts -npm ci --prefix gutenberg --prefer-offline --no-audit +npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts echo '--- :ios: Set env var for iOS E2E testing' set -x From 02bf0921a3851eebc4911ee06cbf829ca76fd035 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 14:23:06 +0100 Subject: [PATCH 14/32] Copy assets for Android build --- .buildkite/commands/build-android.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.buildkite/commands/build-android.sh b/.buildkite/commands/build-android.sh index 64cbab8bc5..c5ccb061cd 100755 --- a/.buildkite/commands/build-android.sh +++ b/.buildkite/commands/build-android.sh @@ -13,6 +13,12 @@ set +x echo '--- :arrow_down: Download Android bundle' buildkite-agent artifact download bundle/android/App.js . +# Copy the JavaScript bundle and all local static assets referenced within the +# bundle to the appropriate locations for inclusion in the bridge bundle +mkdir -p gutenberg/packages/react-native-bridge/android/react-native-bridge/build/assets +cp ./bundle/android/App.js ./gutenberg/packages/react-native-bridge/android/react-native-bridge/build/assets/index.android.bundle +cp -r ./bundle/android/drawable-* ./gutenberg/packages/react-native-bridge/android/react-native-bridge/src/main/res/ + echo '--- :react: Build Android app for E2E testing' npm run core test:e2e:build-app:android From f83e309978656768d6f0771d0d85833d81134157 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 15:13:18 +0100 Subject: [PATCH 15/32] Try ignore scripts for testing jobs --- .buildkite/commands/test-android.sh | 2 +- .buildkite/commands/test-ios.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/commands/test-android.sh b/.buildkite/commands/test-android.sh index 6e7203ad8e..04f1a1810e 100755 --- a/.buildkite/commands/test-android.sh +++ b/.buildkite/commands/test-android.sh @@ -18,7 +18,7 @@ done echo '--- :node: Set up Node dependencies' npm ci --prefer-offline --no-audit --ignore-scripts -npm ci --prefix gutenberg --prefer-offline --no-audit +npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts echo '--- :ios: Set env var for Android E2E testing' set -x diff --git a/.buildkite/commands/test-ios.sh b/.buildkite/commands/test-ios.sh index 5aa05c88e1..c7521c1eb4 100755 --- a/.buildkite/commands/test-ios.sh +++ b/.buildkite/commands/test-ios.sh @@ -21,7 +21,7 @@ done echo '--- :node: Set up Node dependencies' npm ci --prefer-offline --no-audit --ignore-scripts -npm ci --prefix gutenberg --prefer-offline --no-audit +npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts echo '--- :ios: Set env var for iOS E2E testing' set -x From 89b8bb4435bd24adb41e0d4d7c45c758f84d20ef Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 15:19:17 +0100 Subject: [PATCH 16/32] Try concurrent in post install --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fed957e1f6..2a4baaf661 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "webdriverio": "8.16.20" }, "scripts": { - "postinstall": "patch-package && npm run clean:gutenberg:distclean && npm ci --prefix gutenberg && npm run i18n:check-cache && ./bin/run-jetpack-command.sh \"install --ignore-scripts\"", + "postinstall": "npm run clean:gutenberg:distclean && npm ci --prefix gutenberg && concurrently 'npm run i18n:check-cache' './bin/run-jetpack-command.sh \"install --ignore-scripts\"'", "start": "echo \"\\x1b[33mThe start command is not available in this project. It is strongly recommended to use \\x1b[1:33mstart:reset\\x1b[0m\\x1b[33m to perform some cleanup when starting the metro bundler.\nOr you may use \\x1b[1:33mstart:quick\\x1b[0m\\x1b[33m for a quicker startup, but this may lead to unexpected javascript errors when running the app.\\x1b[0m\"", "start:reset": "npm run core clean:runtime && npm run start:quick -- --reset-cache", "start:quick": "react-native start --config ./metro.config.js", From 46382f43b6c9bdf45d0ec4e430e2d9130a4779fa Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 16:00:36 +0100 Subject: [PATCH 17/32] Remove concurrently --- package-lock.json | 339 ---------------------------------------------- package.json | 5 +- 2 files changed, 2 insertions(+), 342 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0785f74548..f64001f0b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,6 @@ "babel-plugin-react-native-classname-to-style": "^1.2.1", "babel-plugin-react-native-platform-specific-extensions": "^1.1.1", "babel-plugin-transform-remove-console": "6.9.4", - "concurrently": "8.2.2", "cross-env": "^5.1.4", "empty": "^0.10.1", "enzyme": "^3.9.0", @@ -10781,154 +10780,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/concurrently/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concurrently/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/concurrently/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/concurrently/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -11224,22 +11075,6 @@ "node": ">= 14" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, "node_modules/dayjs": { "version": "1.11.8", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", @@ -24467,21 +24302,6 @@ "integrity": "sha1-QAwJ6+kU57F+C27zJjQA/Cq8fLM=", "dev": true }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/safaridriver": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-0.1.0.tgz", @@ -25263,12 +25083,6 @@ "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, "node_modules/spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -26183,15 +25997,6 @@ "node": "*" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, "node_modules/trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -36003,112 +35808,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, "connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -36350,15 +36049,6 @@ "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "dev": true }, - "date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.21.0" - } - }, "dayjs": { "version": "1.11.8", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", @@ -46337,23 +46027,6 @@ "integrity": "sha1-QAwJ6+kU57F+C27zJjQA/Cq8fLM=", "dev": true }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, "safaridriver": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-0.1.0.tgz", @@ -46993,12 +46666,6 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -47732,12 +47399,6 @@ "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", "dev": true }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", diff --git a/package.json b/package.json index 2a4baaf661..3c6dcf22b5 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "babel-plugin-react-native-classname-to-style": "^1.2.1", "babel-plugin-react-native-platform-specific-extensions": "^1.1.1", "babel-plugin-transform-remove-console": "6.9.4", - "concurrently": "8.2.2", "cross-env": "^5.1.4", "empty": "^0.10.1", "enzyme": "^3.9.0", @@ -60,7 +59,7 @@ "webdriverio": "8.16.20" }, "scripts": { - "postinstall": "npm run clean:gutenberg:distclean && npm ci --prefix gutenberg && concurrently 'npm run i18n:check-cache' './bin/run-jetpack-command.sh \"install --ignore-scripts\"'", + "postinstall": "patch-package && npm run clean:gutenberg:distclean && npm ci --prefix gutenberg && npm run i18n:check-cache && ./bin/run-jetpack-command.sh \"install --ignore-scripts\"", "start": "echo \"\\x1b[33mThe start command is not available in this project. It is strongly recommended to use \\x1b[1:33mstart:reset\\x1b[0m\\x1b[33m to perform some cleanup when starting the metro bundler.\nOr you may use \\x1b[1:33mstart:quick\\x1b[0m\\x1b[33m for a quicker startup, but this may lead to unexpected javascript errors when running the app.\\x1b[0m\"", "start:reset": "npm run core clean:runtime && npm run start:quick -- --reset-cache", "start:quick": "react-native start --config ./metro.config.js", @@ -78,7 +77,7 @@ "bundle:ios": "npm run bundle:ios:text && npm run bundle:ios:bytecode", "bundle:ios:text": "mkdir -p bundle/ios && npm run rn-bundle -- --platform ios --dev false --entry-file ./index.js --assets-dest ./ios-xcframework/Gutenberg/Resources --bundle-output ./bundle/ios/App.text.js --sourcemap-output ./bundle/ios/App.text.js.map", "bundle:ios:bytecode": "./gutenberg/node_modules/react-native/sdks/hermesc/`node -e \"const platform=require('os').platform();console.log(platform === 'darwin' ? 'osx-bin' : (platform === 'linux' ? 'linux64-bin' : (platform === 'win32' ? 'win64-bin' : 'unsupported-os')));\"`/hermesc -emit-binary -O -out bundle/ios/App.js bundle/ios/App.text.js -output-source-map", - "bundle:all": "concurrently 'npm run bundle:android' 'npm run bundle:ios'", + "bundle:all": "npm run bundle:android & npm run bundle:ios", "prewpandroid": "rm -Rf $TMPDIR/gbmobile-wpandroidfakernroot && mkdir $TMPDIR/gbmobile-wpandroidfakernroot && ln -s $(cd \"$(dirname \"../../../\")\"; pwd) $TMPDIR/gbmobile-wpandroidfakernroot/android", "wpandroid": "cd gutenberg && react-native run-android --root $TMPDIR/gbmobile-wpandroidfakernroot --variant wasabiDebug --appIdSuffix beta --appFolder WordPress --main-activity=ui.WPLaunchActivity", "test": "cross-env NODE_ENV=test jest --config ./jest.config.js", From 58471cc4d5116828ab45b46313c3fc9bab5dd931 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 16:09:18 +0100 Subject: [PATCH 18/32] Update Gutenberg ref --- gutenberg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gutenberg b/gutenberg index 1b1b1a50fd..d60062a3de 160000 --- a/gutenberg +++ b/gutenberg @@ -1 +1 @@ -Subproject commit 1b1b1a50fd97dd82e4d1d5ea8f1572f9b975b649 +Subproject commit d60062a3de8415239fc017089467dab79ee046eb From ece89a406752ca9f5c0ee86dc00ab5bf627f748b Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 17:48:05 +0100 Subject: [PATCH 19/32] Update Gutenberg ref --- gutenberg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gutenberg b/gutenberg index d60062a3de..58718e205b 160000 --- a/gutenberg +++ b/gutenberg @@ -1 +1 @@ -Subproject commit d60062a3de8415239fc017089467dab79ee046eb +Subproject commit 58718e205bf44148521a6a96c02b2902b77f0376 From d501c6037063353b5ad088c43395d47a41a30bbd Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 17:50:42 +0100 Subject: [PATCH 20/32] Try running iOS tests in Buildkite --- .buildkite/commands/build-ios.sh | 25 +++++++++++++++---------- .buildkite/commands/test-ios.sh | 15 +++++++++++---- .buildkite/pipeline.yml | 16 ++++++++-------- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/.buildkite/commands/build-ios.sh b/.buildkite/commands/build-ios.sh index 2c763b3912..454009929e 100755 --- a/.buildkite/commands/build-ios.sh +++ b/.buildkite/commands/build-ios.sh @@ -10,7 +10,6 @@ npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts echo '--- :ios: Set env var for iOS E2E testing' set -x export TEST_RN_PLATFORM=ios -export TEST_ENV=sauce # We must use a simulator that's available on the selected Xcode version # otherwsie Xcode fallbacks to "generic destination" which requires provision # profiles to built the Demo app. @@ -27,20 +26,26 @@ mkdir -p "$APP_PATH" cp bundle/ios/App.js "$APP_PATH/main.jsbundle" tar -xzvf ios-assets.tar.gz -C "$APP_PATH/" +echo "--- :react: Prepare tests setup" +npm run core test:e2e:setup + echo '--- :react: Build iOS app for E2E testing' npm run core test:e2e:build-app:ios -echo '--- :compression: Prepare artifact for SauceLabs upload' +echo '--- :react: Build WDA for E2E testing' +npm run core test:e2e:build-wda + +echo '--- :compression: Prepare artifacts' WORK_DIR=$(pwd) \ && pushd ./gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator \ && zip -r "$WORK_DIR/gutenberg/packages/react-native-editor/ios/GutenbergDemo.app.zip" GutenbergDemo.app \ && popd -echo '--- :saucelabs: Upload app artifact to SauceLabs' -SAUCE_FILENAME=${BUILDKITE_BRANCH//[\/]/-} -curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" \ - --location \ - --request POST 'https://api.us-west-1.saucelabs.com/v1/storage/upload' \ - --form 'payload=@"./gutenberg/packages/react-native-editor/ios/GutenbergDemo.app.zip"' \ - --form "name=Gutenberg-$SAUCE_FILENAME.app.zip" \ - --form 'description="Gutenberg"' +WORK_DIR=$(pwd) \ + && pushd ./gutenberg/packages/react-native-editor/ios/build/WDA \ + && zip -r "$WORK_DIR/gutenberg/packages/react-native-editor/ios/WDA.zip" ./* \ + && popd + +echo "--- :arrow_up: Upload Build Products" +upload_artifact "./gutenberg/packages/react-native-editor/ios/GutenbergDemo.app.zip" +upload_artifact "./gutenberg/packages/react-native-editor/ios/WDA.zip" \ No newline at end of file diff --git a/.buildkite/commands/test-ios.sh b/.buildkite/commands/test-ios.sh index c7521c1eb4..33a482b195 100755 --- a/.buildkite/commands/test-ios.sh +++ b/.buildkite/commands/test-ios.sh @@ -26,11 +26,7 @@ npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts echo '--- :ios: Set env var for iOS E2E testing' set -x export TEST_RN_PLATFORM=ios -export TEST_ENV=sauce export JEST_JUNIT_OUTPUT_FILE="reports/test-results/ios-test-results.xml" -# This is a relic of the CircleCI setup. -# It should be removed once the migration to Buildkite is completed. -export CIRCLE_BRANCH=${BUILDKITE_BRANCH} set +x if [ "$MODE" == 'canary' ]; then @@ -44,6 +40,17 @@ else TESTS_CMD='device-tests' fi +echo "--- :react: Prepare tests setup" +npm run core test:e2e:setup + +echo "--- 📦 Downloading Build Artifacts" +export IOS_APP_PATH=./gutenberg/packages/react-native-editor/ios/GutenbergDemo.app.zip +download_artifact "GutenbergDemo.app.zip" "$IOS_APP_PATH" + +export WDA_PATH=./gutenberg/packages/react-native-editor/ios/build/WDA +download_artifact "WDA.zip" "$WDA_PATH/WDA.zip" +unzip "$WDA_PATH/WDA.zip" -d "$WDA_PATH" + set +e echo "$SECTION" npm run "$TESTS_CMD" diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index e1091a5a24..780066ce99 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -187,8 +187,8 @@ steps: queue: mac env: *xcode_agent_env - - label: iOS Build and Sauce Labs - key: ios-build-and-saucelabs + - label: iOS Build + key: ios-build depends_on: - lint - ios-unit-tests @@ -205,7 +205,7 @@ steps: env: *xcode_agent_env - label: Test iOS on Device – Canary Pages - depends_on: ios-build-and-saucelabs + depends_on: ios-build command: .buildkite/commands/test-ios.sh --canary plugins: - *ci_toolkit_plugin @@ -258,13 +258,13 @@ steps: if: *is_branch_for_quick_ui_tests key: run-full-ui-test prompt: "Run full UI tests suites?" - depends_on: ios-build-and-saucelabs + depends_on: ios-build - label: Test iOS on Device – Full iPhone # The quick UI tests suite version depends on the block step being unblocked if: *is_branch_for_quick_ui_tests depends_on: - - ios-build-and-saucelabs + - ios-build - run-full-ui-test command: .buildkite/commands/test-ios.sh plugins: @@ -282,7 +282,7 @@ steps: # The full UI tests suite version depends only on the ios-build step, meaning it has no manual step that triggers it if: *is_branch_for_full_ui_tests depends_on: - - ios-build-and-saucelabs + - ios-build command: .buildkite/commands/test-ios.sh plugins: - *ci_toolkit_plugin @@ -298,7 +298,7 @@ steps: # The quick UI tests suite version depends on the block step being unblocked if: *is_branch_for_quick_ui_tests depends_on: - - ios-build-and-saucelabs + - ios-build - run-full-ui-test command: .buildkite/commands/test-ios.sh --ipad plugins: @@ -315,7 +315,7 @@ steps: # The full UI tests suite version depends only on the ios-build step, meaning it has no manual step that triggers it if: *is_branch_for_full_ui_tests depends_on: - - ios-build-and-saucelabs + - ios-build command: .buildkite/commands/test-ios.sh --ipad plugins: - *ci_toolkit_plugin From ec666bcf25437b9cab554f52a4bedff2d8a9efea Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 26 Jan 2024 18:26:24 +0100 Subject: [PATCH 21/32] Add Appium path --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c6dcf22b5..0036578ab5 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "test:update": "cross-env NODE_ENV=test jest --config ./jest.config.js --updateSnapshot", "test:debug": "cross-env NODE_ENV=test node --inspect-brk node_modules/.bin/jest --runInBand --verbose --config jest.config.js", "device-tests": "cross-env NODE_ENV=test jest --maxWorkers=2 --testPathIgnorePatterns='canary|gutenberg-editor-rendering|ipad' --config jest_ui.config.js", - "device-tests-canary": "cross-env NODE_ENV=test jest --maxWorkers=2 --testPathPattern=@canary --config jest_ui.config.js", + "device-tests-canary": "cross-env APPIUM_HOME=~/.appium NODE_ENV=test jest --maxWorkers=2 --testPathPattern=@canary --config jest_ui.config.js", "device-tests-ipad": "cross-env NODE_ENV=test IPAD=true jest --maxWorkers=2 --testPathPattern=@ipad --config jest_ui.config.js", "device-tests:local": "APPIUM_HOME=~/.appium IOS_APP_PATH='./gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app' WDA_PATH='./gutenberg/packages/react-native-editor/ios/build/WDA' ANDROID_APP_PATH='./gutenberg/packages/react-native-editor/android/app/build/outputs/apk/debug/app-debug.apk' NODE_ENV=test jest --maxWorkers=2 --detectOpenHandles --config jest_ui.config.js", "device-tests:debug": "IOS_APP_PATH='./gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app' WDA_PATH='./gutenberg/packages/react-native-editor/ios/build/WDA' ANDROID_APP_PATH='./gutenberg/packages/react-native-editor/android/app/build/outputs/apk/debug/app-debug.apk' cross-env NODE_ENV=test node $NODE_DEBUG_OPTION --inspect-brk node_modules/jest/bin/jest --runInBand --detectOpenHandles --verbose --config jest_ui.config.js", From 7925d100b68093d037c46d8cca33b19ccf00ce4f Mon Sep 17 00:00:00 2001 From: Gerardo Date: Sun, 28 Jan 2024 19:15:32 +0100 Subject: [PATCH 22/32] Extract test commands --- bin/test-e2e.sh | 30 ++++++++++++++++++++++++++++++ package.json | 10 +++++----- 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100755 bin/test-e2e.sh diff --git a/bin/test-e2e.sh b/bin/test-e2e.sh new file mode 100755 index 0000000000..cb00a14246 --- /dev/null +++ b/bin/test-e2e.sh @@ -0,0 +1,30 @@ +#!/bin/bash -e + +set -o pipefail + +# Using the ':' operator with ':=' to check if a variable is set. +# If the variable is unset or null, the value after ':=' is assigned to it. +: ${IOS_APP_PATH:='./gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app'} +: ${WDA_PATH:='./gutenberg/packages/react-native-editor/ios/build/WDA'} +: ${ANDROID_APP_PATH:='./gutenberg/packages/react-native-editor/android/app/build/outputs/apk/debug/app-debug.apk'} + +export IOS_APP_PATH +export WDA_PATH +export ANDROID_APP_PATH + +export APPIUM_HOME=~/.appium +export NODE_ENV=test + +if [ -z "$TEST_RN_PLATFORM" ] || [ "$TEST_RN_PLATFORM" == "android" ]; then + MAX_WORKERS=2 +else + MAX_WORKERS=1 +fi + +# Check for debug mode +if [ "$1" == "--debug" ]; then + shift # Remove first argument + node $NODE_DEBUG_OPTION --inspect-brk node_modules/jest/bin/jest --runInBand --detectOpenHandles --verbose --config jest_ui.config.js "$@" +else + cross-env jest --config ./jest_ui.config.js --maxWorkers 1 --forceExit "$@" +fi \ No newline at end of file diff --git a/package.json b/package.json index 0036578ab5..66fda40584 100644 --- a/package.json +++ b/package.json @@ -83,11 +83,11 @@ "test": "cross-env NODE_ENV=test jest --config ./jest.config.js", "test:update": "cross-env NODE_ENV=test jest --config ./jest.config.js --updateSnapshot", "test:debug": "cross-env NODE_ENV=test node --inspect-brk node_modules/.bin/jest --runInBand --verbose --config jest.config.js", - "device-tests": "cross-env NODE_ENV=test jest --maxWorkers=2 --testPathIgnorePatterns='canary|gutenberg-editor-rendering|ipad' --config jest_ui.config.js", - "device-tests-canary": "cross-env APPIUM_HOME=~/.appium NODE_ENV=test jest --maxWorkers=2 --testPathPattern=@canary --config jest_ui.config.js", - "device-tests-ipad": "cross-env NODE_ENV=test IPAD=true jest --maxWorkers=2 --testPathPattern=@ipad --config jest_ui.config.js", - "device-tests:local": "APPIUM_HOME=~/.appium IOS_APP_PATH='./gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app' WDA_PATH='./gutenberg/packages/react-native-editor/ios/build/WDA' ANDROID_APP_PATH='./gutenberg/packages/react-native-editor/android/app/build/outputs/apk/debug/app-debug.apk' NODE_ENV=test jest --maxWorkers=2 --detectOpenHandles --config jest_ui.config.js", - "device-tests:debug": "IOS_APP_PATH='./gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app' WDA_PATH='./gutenberg/packages/react-native-editor/ios/build/WDA' ANDROID_APP_PATH='./gutenberg/packages/react-native-editor/android/app/build/outputs/apk/debug/app-debug.apk' cross-env NODE_ENV=test node $NODE_DEBUG_OPTION --inspect-brk node_modules/jest/bin/jest --runInBand --detectOpenHandles --verbose --config jest_ui.config.js", + "device-tests": "./bin/test-e2e.sh --testPathIgnorePatterns='canary|gutenberg-editor-rendering|ipad'", + "device-tests-canary": "./bin/test-e2e.sh --testPathPattern=@canary", + "device-tests-ipad": "IPAD=true ./bin/test-e2e.sh --testPathPattern=@ipad", + "device-tests:local": "./bin/test-e2e.sh --detectOpenHandles", + "device-tests:debug": "./bin/test-e2e.sh --debug --runInBand --detectOpenHandles --verbose", "test:e2e:bundle:android": "npm run test:e2e:bundle:android:text && npm run test:e2e:bundle:android:bytecode", "test:e2e:bundle:android:text": "mkdir -p gutenberg/packages/react-native-editor/android/app/src/main/assets && npm run rn-bundle -- --reset-cache --platform android --dev false --minify false --entry-file index.js --bundle-output gutenberg/packages/react-native-editor/android/app/src/main/assets/index.android.text.bundle --assets-dest gutenberg/packages/react-native-editor/android/app/src/main/res", "test:e2e:bundle:android:bytecode": "./gutenberg/node_modules/react-native/sdks/hermesc/`node -e \"const platform=require('os').platform();console.log(platform === 'darwin' ? 'osx-bin' : (platform === 'linux' ? 'linux64-bin' : (platform === 'win32' ? 'win64-bin' : 'unsupported-os')));\"`/hermesc -emit-binary -O -out gutenberg/packages/react-native-editor/android/app/src/main/assets/index.android.bundle gutenberg/packages/react-native-editor/android/app/src/main/assets/index.android.text.bundle -output-source-map", From b9d4ae6bbc81d0d21ea26e68fb1bd93b291cff03 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Sun, 28 Jan 2024 21:36:44 +0100 Subject: [PATCH 23/32] Reorganize test commands --- .buildkite/commands/test-ios.sh | 38 ++++++++++++++++++++------------- bin/test-e2e.sh | 4 ++-- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/.buildkite/commands/test-ios.sh b/.buildkite/commands/test-ios.sh index 33a482b195..3c9a7aae45 100755 --- a/.buildkite/commands/test-ios.sh +++ b/.buildkite/commands/test-ios.sh @@ -1,5 +1,9 @@ #!/bin/bash -eu +CONFIG_FILE="$(pwd)/gutenberg/packages/react-native-editor/__device-tests__/helpers/device-config.json" +DEVICE_NAME=$(jq -r '.ios.local.deviceName' "$CONFIG_FILE") +DEVICE_TABLET_NAME=$(jq -r '.ios.local.deviceTabletName' "$CONFIG_FILE") + MODE="iphone" INPUT="${1-}" while [ "$INPUT" != "" ]; do @@ -19,29 +23,20 @@ while [ "$INPUT" != "" ]; do INPUT="${1-}" done -echo '--- :node: Set up Node dependencies' -npm ci --prefer-offline --no-audit --ignore-scripts -npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts - -echo '--- :ios: Set env var for iOS E2E testing' -set -x -export TEST_RN_PLATFORM=ios -export JEST_JUNIT_OUTPUT_FILE="reports/test-results/ios-test-results.xml" -set +x - if [ "$MODE" == 'canary' ]; then - SECTION='--- :saucelabs: Test iOS Canary Pages' + SECTION='--- :react: Test iOS Canary Pages' TESTS_CMD='device-tests-canary' elif [ "$MODE" == "ipad" ]; then - SECTION='--- :saucelabs: Test iOS iPad' + SECTION='--- :react: Test iOS iPad' + DEVICE_NAME=$DEVICE_TABLET_NAME TESTS_CMD='device-tests-ipad' else - SECTION='--- :saucelabs: Test iOS iPhone' + SECTION='--- :react: Test iOS iPhone' TESTS_CMD='device-tests' fi -echo "--- :react: Prepare tests setup" -npm run core test:e2e:setup +echo "--- :apple_logo: Start booting up simulator" +xcrun simctl boot "$DEVICE_NAME" & echo "--- 📦 Downloading Build Artifacts" export IOS_APP_PATH=./gutenberg/packages/react-native-editor/ios/GutenbergDemo.app.zip @@ -51,6 +46,19 @@ export WDA_PATH=./gutenberg/packages/react-native-editor/ios/build/WDA download_artifact "WDA.zip" "$WDA_PATH/WDA.zip" unzip "$WDA_PATH/WDA.zip" -d "$WDA_PATH" +echo '--- :node: Set up Node dependencies' +npm ci --prefer-offline --no-audit --ignore-scripts +npm ci --prefix gutenberg --prefer-offline --no-audit --ignore-scripts + +echo '--- :ios: Set env var for iOS E2E testing' +set -x +export TEST_RN_PLATFORM=ios +export JEST_JUNIT_OUTPUT_FILE="reports/test-results/ios-test-results.xml" +set +x + +echo "--- :react: Prepare tests setup" +npm run core test:e2e:setup + set +e echo "$SECTION" npm run "$TESTS_CMD" diff --git a/bin/test-e2e.sh b/bin/test-e2e.sh index cb00a14246..1052b684b4 100755 --- a/bin/test-e2e.sh +++ b/bin/test-e2e.sh @@ -15,7 +15,7 @@ export ANDROID_APP_PATH export APPIUM_HOME=~/.appium export NODE_ENV=test -if [ -z "$TEST_RN_PLATFORM" ] || [ "$TEST_RN_PLATFORM" == "android" ]; then +if [ "$TEST_RN_PLATFORM" == "android" ]; then MAX_WORKERS=2 else MAX_WORKERS=1 @@ -26,5 +26,5 @@ if [ "$1" == "--debug" ]; then shift # Remove first argument node $NODE_DEBUG_OPTION --inspect-brk node_modules/jest/bin/jest --runInBand --detectOpenHandles --verbose --config jest_ui.config.js "$@" else - cross-env jest --config ./jest_ui.config.js --maxWorkers 1 --forceExit "$@" + jest --config ./jest_ui.config.js --maxWorkers $MAX_WORKERS --forceExit "$@" fi \ No newline at end of file From e2581fc46045f07fee2c83a35e78f0fbd25dc3f9 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Sun, 28 Jan 2024 21:58:31 +0100 Subject: [PATCH 24/32] Update Gutenberg ref --- gutenberg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gutenberg b/gutenberg index 58718e205b..2f527807a9 160000 --- a/gutenberg +++ b/gutenberg @@ -1 +1 @@ -Subproject commit 58718e205bf44148521a6a96c02b2902b77f0376 +Subproject commit 2f527807a9ee6d8fb4df948cbc660652fcc3cd8b From b36daa8b2dd28ea33ecf6fe28643f34f509a31a7 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Sun, 28 Jan 2024 23:05:23 +0100 Subject: [PATCH 25/32] Start appium server --- .buildkite/commands/test-ios.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.buildkite/commands/test-ios.sh b/.buildkite/commands/test-ios.sh index 3c9a7aae45..7d6dd3d59f 100755 --- a/.buildkite/commands/test-ios.sh +++ b/.buildkite/commands/test-ios.sh @@ -57,6 +57,7 @@ export JEST_JUNIT_OUTPUT_FILE="reports/test-results/ios-test-results.xml" set +x echo "--- :react: Prepare tests setup" +npm run core appium:start & npm run core test:e2e:setup set +e From b2b39f94db384f20413963e84a3f784084be24c8 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Sun, 28 Jan 2024 23:35:33 +0100 Subject: [PATCH 26/32] Revert adding appium command --- .buildkite/commands/test-ios.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/.buildkite/commands/test-ios.sh b/.buildkite/commands/test-ios.sh index 7d6dd3d59f..3c9a7aae45 100755 --- a/.buildkite/commands/test-ios.sh +++ b/.buildkite/commands/test-ios.sh @@ -57,7 +57,6 @@ export JEST_JUNIT_OUTPUT_FILE="reports/test-results/ios-test-results.xml" set +x echo "--- :react: Prepare tests setup" -npm run core appium:start & npm run core test:e2e:setup set +e From 2c3dea0b2c7ec0e4eb4d6cae45b0d99fd65ad1a8 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Mon, 29 Jan 2024 17:24:49 +0100 Subject: [PATCH 27/32] Temp: Disable test --- .../gutenberg-editor-writing-flow.test.js | 2 +- ...-with-the-same-color-as-the-font-1-ios.png | Bin 18694 -> 25622 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/__device-tests__/gutenberg-editor-writing-flow.test.js b/__device-tests__/gutenberg-editor-writing-flow.test.js index 0a006c4ad9..f7037bc9ba 100644 --- a/__device-tests__/gutenberg-editor-writing-flow.test.js +++ b/__device-tests__/gutenberg-editor-writing-flow.test.js @@ -5,7 +5,7 @@ const { blockNames } = editorPage; import { takeScreenshot } from './utils'; import { WEBSITE_HTML } from './test-editor-data'; -describe( 'Gutenberg Editor Writing Flow', () => { +describe.skip( 'Gutenberg Editor Writing Flow', () => { it( 'should format pasted HTML', async () => { // Arrange await editorPage.initializeEditor(); diff --git a/__device-tests__/image-snapshots/gutenberg-editor-functionality-test-4-visual-test-js-gutenberg-editor-test-suite-4-buttons-block-should-have-its-selection-caret-with-the-same-color-as-the-font-1-ios.png b/__device-tests__/image-snapshots/gutenberg-editor-functionality-test-4-visual-test-js-gutenberg-editor-test-suite-4-buttons-block-should-have-its-selection-caret-with-the-same-color-as-the-font-1-ios.png index 69008f7be6a6f11f5c893f79ee9a29330573843f..a74862c85b6b4125e5dfdd001e2218a8a62cd637 100644 GIT binary patch literal 25622 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 sdrCTJ3NdI%6Dqa~D8)Z+vx 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 Date: Mon, 29 Jan 2024 17:24:59 +0100 Subject: [PATCH 28/32] Update Gutenberg ref --- gutenberg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gutenberg b/gutenberg index 2f527807a9..c93c3f6251 160000 --- a/gutenberg +++ b/gutenberg @@ -1 +1 @@ -Subproject commit 2f527807a9ee6d8fb4df948cbc660652fcc3cd8b +Subproject commit c93c3f625163902ba45252c04ec235f5c1880fdb From c0277e80ce881844af0458cdd1f6a1b839eac437 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Mon, 29 Jan 2024 17:27:36 +0100 Subject: [PATCH 29/32] Update tests and snapshots --- ...editor-functionality-test-4-visual.test.js | 3 --- ...eep-nesting-to-at-least-3-levels-1-ios.png | Bin 46558 -> 28479 bytes ...trait-and-landscape-orientations-1-ios.png | Bin 38469 -> 25988 bytes ...trait-and-landscape-orientations-2-ios.png | Bin 28215 -> 20909 bytes ...ays-placeholders-when-unselected-1-ios.png | Bin 27789 -> 18958 bytes ...ays-placeholders-when-unselected-2-ios.png | Bin 20021 -> 15606 bytes ...ct-colors-with-dark-mode-enabled-1-ios.png | Bin 28594 -> 21685 bytes ...ct-colors-with-dark-mode-enabled-2-ios.png | Bin 25625 -> 21869 bytes ...display-in-the-correct-positions-1-ios.png | Bin 30813 -> 22234 bytes ...display-in-the-correct-positions-2-ios.png | Bin 30587 -> 21901 bytes ...roportionate-fill-level-previews-1-ios.png | Bin 57593 -> 40075 bytes ...hould-display-active-icon-colors-1-ios.png | Bin 9520 -> 5912 bytes ...block-inserted-from-the-appender-1-ios.png | Bin 11052 -> 6761 bytes ...ck-should-allow-edit-text-styles-1-ios.png | Bin 18250 -> 16787 bytes ...custom-text-and-background-color-1-ios.png | Bin 16408 -> 14243 bytes ...k-should-render-dark-mode-colors-1-ios.png | Bin 41115 -> 34800 bytes ...render-gradient-background-color-1-ios.png | Bin 19542 -> 17464 bytes ...d-navigate-between-nested-blocks-1-ios.png | Bin 29714 -> 24921 bytes ...d-navigate-between-nested-blocks-2-ios.png | Bin 30250 -> 24842 bytes ...d-navigate-between-nested-blocks-3-ios.png | Bin 29694 -> 25172 bytes ...k-should-render-dark-mode-colors-1-ios.png | Bin 25437 -> 21470 bytes ...averse-up-and-down-nested-blocks-1-ios.png | Bin 29722 -> 24921 bytes ...averse-up-and-down-nested-blocks-2-ios.png | Bin 35986 -> 28846 bytes ...averse-up-and-down-nested-blocks-3-ios.png | Bin 36075 -> 29350 bytes ...averse-up-and-down-nested-blocks-4-ios.png | Bin 34740 -> 28752 bytes ...k-should-render-dark-mode-colors-1-ios.png | Bin 18638 -> 16101 bytes ...spacing-in-landscape-orientation-1-ios.png | Bin 12301 -> 10905 bytes ...spacing-in-landscape-orientation-2-ios.png | Bin 16609 -> 14517 bytes ...rs-default-placeholder-correctly-1-ios.png | Bin 21570 -> 15717 bytes ...nders-different-blocks-correctly-1-ios.png | Bin 86565 -> 57332 bytes ...rs-default-placeholder-correctly-1-ios.png | Bin 16601 -> 15043 bytes ...nders-different-blocks-correctly-1-ios.png | Bin 56286 -> 48561 bytes ...rs-default-placeholder-correctly-1-ios.png | Bin 20885 -> 14743 bytes ...nders-different-blocks-correctly-1-ios.png | Bin 63341 -> 42101 bytes ...rs-default-placeholder-correctly-1-ios.png | Bin 17093 -> 15414 bytes ...nders-different-blocks-correctly-1-ios.png | Bin 68202 -> 59119 bytes ...le-to-render-a-gallery-correctly-1-ios.png | Bin 25823 -> 22396 bytes ...render-the-placeholder-correctly-1-ios.png | Bin 17354 -> 15755 bytes ...eholder-for-the-unselected-state-1-ios.png | Bin 22074 -> 16302 bytes ...nsupported-block-web-view-editor-1-ios.png | Bin 43358 -> 33937 bytes ...or-the-selected-unselected-state-1-ios.png | Bin 17756 -> 15631 bytes ...or-the-selected-unselected-state-2-ios.png | Bin 18960 -> 16797 bytes ...ed-unselected-state-in-dark-mode-1-ios.png | Bin 17608 -> 15567 bytes ...ed-unselected-state-in-dark-mode-2-ios.png | Bin 18288 -> 16788 bytes __device-tests__/utils.js | 2 +- 45 files changed, 1 insertion(+), 4 deletions(-) diff --git a/__device-tests__/gutenberg-editor-functionality-test-4-visual.test.js b/__device-tests__/gutenberg-editor-functionality-test-4-visual.test.js index e6740f2b05..784ffbe2d6 100644 --- a/__device-tests__/gutenberg-editor-functionality-test-4-visual.test.js +++ b/__device-tests__/gutenberg-editor-functionality-test-4-visual.test.js @@ -124,9 +124,6 @@ describe( 'Gutenberg Editor - Test Suite 4', () => { buttonBlockTextInput ); - // Wait for text context menu animation - await editorPage.driver.pause( 500 ); - // Visual test check const screenshot = await takeScreenshotByElement( buttonBlockTextInput, diff --git a/__device-tests__/image-snapshots/gutenberg-editor-functionality-test-1-visual-test-js-gutenberg-editor-test-suite-1-columns-block-allows-deep-nesting-to-at-least-3-levels-1-ios.png b/__device-tests__/image-snapshots/gutenberg-editor-functionality-test-1-visual-test-js-gutenberg-editor-test-suite-1-columns-block-allows-deep-nesting-to-at-least-3-levels-1-ios.png index c29851f22587f16e480275f8779db7a10873aa78..1b621f014db02a602c7c6ce74ad61355f4d18493 100644 GIT binary patch literal 28479 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 literal 46558 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