@samitouri / QOS-React-2 / commits / 39a3b72c6d

Post-process build files for React Native to add generated signature and @nolint (#26616)

## Summary We're enabling a new mechanism to synchronize build files from `react` to `react-native`. That new mechanism doesn't post-process files, so we need to add that post-processing somewhere. This PR does that when generating the files in the first place, so the generated files in the `build` directory are ready to be committed in the `react-native` repository directly. This makes use of `signedsource` to avoid direct modifications of these files in the `react-native` repository, as well as `@noformat` and `@nolint` to prevent unactionable CI failures in that repository. ## How did you test this change? Generated build files for `react-native` before and after this change: ``` node ./scripts/rollup/build-all-release-channels.js react-native ``` Checked new contents. Relevant changes: ```diff diff --color -r build-before/react-native/implementations/ReactFabric-dev.fb.js build-after/react-native/implementations/ReactFabric-dev.fb.js 10c10 < * @generated --- > * @generated SignedSource<<03cef14e77b8250b567dfdf3b066085e>> diff --color -r build-before/react-native/implementations/ReactFabric-dev.js build-after/react-native/implementations/ReactFabric-dev.js 11c11 < * @generated --- > * @generated SignedSource<<e39eed38a363846ca9ee9b59a225683c>> diff --color -r build-before/react-native/implementations/ReactFabric-prod.fb.js build-after/react-native/implementations/ReactFabric-prod.fb.js 10c10 < * @generated --- > * @generated SignedSource<<f65efcd6a469d5f6fef1ce647e5ec09a>> diff --color -r build-before/react-native/implementations/ReactFabric-prod.js build-after/react-native/implementations/ReactFabric-prod.js 11c11 < * @generated --- > * @generated SignedSource<<cdd582aa889b1054b2c5faf412622b18>> diff --color -r build-before/react-native/implementations/ReactFabric-profiling.fb.js build-after/react-native/implementations/ReactFabric-profiling.fb.js 10c10 < * @generated --- > * @generated SignedSource<<81e74849b24f104882bd298f062be0fa>> diff --color -r build-before/react-native/implementations/ReactFabric-profiling.js build-after/react-native/implementations/ReactFabric-profiling.js 11c11 < * @generated --- > * @generated SignedSource<<c050b7fa1453dc21ac1c5b98146210a8>> diff --color -r build-before/react-native/implementations/ReactNativeRenderer-dev.fb.js build-after/react-native/implementations/ReactNativeRenderer-dev.fb.js 10c10 < * @generated --- > * @generated SignedSource<<9c03464b489b41c06a065aeba8619263>> diff --color -r build-before/react-native/implementations/ReactNativeRenderer-dev.js build-after/react-native/implementations/ReactNativeRenderer-dev.js 11c11 < * @generated --- > * @generated SignedSource<<18b34c037544949dcf9b28f945921ba8>> diff --color -r build-before/react-native/implementations/ReactNativeRenderer-prod.fb.js build-after/react-native/implementations/ReactNativeRenderer-prod.fb.js 10c10 < * @generated --- > * @generated SignedSource<<592e9654c584d1da523378b119bd8bd7>> diff --color -r build-before/react-native/implementations/ReactNativeRenderer-prod.js build-after/react-native/implementations/ReactNativeRenderer-prod.js 11c11 < * @generated --- > * @generated SignedSource<<91c894db99e2d76f8a32708ad6ad1bde>> diff --color -r build-before/react-native/implementations/ReactNativeRenderer-profiling.fb.js build-after/react-native/implementations/ReactNativeRenderer-profiling.fb.js 10c10 < * @generated --- > * @generated SignedSource<<5ce378a9216ea747d91b208b9fd1ebd5>> diff --color -r build-before/react-native/implementations/ReactNativeRenderer-profiling.js build-after/react-native/implementations/ReactNativeRenderer-profiling.js 11c11 < * @generated --- > * @generated SignedSource<<1c7564f446ee83142976035b2884dcfd>> diff --color -r build-before/react-native/shims/ReactFabric.js build-after/react-native/shims/ReactFabric.js 7c7 < * @format --- > * @noformat 8a9,10 > * @nolint > * @generated SignedSource<<cece19ddbec9f287c995721f49c68977>> diff --color -r build-before/react-native/shims/ReactFeatureFlags.js build-after/react-native/shims/ReactFeatureFlags.js 7c7 < * @format --- > * @noformat 8a9,10 > * @nolint > * @generated SignedSource<<2881c8e89ef0f73f4cf6612cb518b197>> diff --color -r build-before/react-native/shims/ReactNative.js build-after/react-native/shims/ReactNative.js 7c7 < * @format --- > * @noformat 8a9,10 > * @nolint > * @generated SignedSource<<0debd6e5a17dc037cb4661315a886de6>> diff --color -r build-before/react-native/shims/ReactNativeTypes.js build-after/react-native/shims/ReactNativeTypes.js 7c7 < * @format --- > * @noformat 8a9,10 > * @nolint > * @generated SignedSource<<652b117c94307244bcf5e4af18928903>> diff --color -r build-before/react-native/shims/ReactNativeViewConfigRegistry.js build-after/react-native/shims/ReactNativeViewConfigRegistry.js 7c7 < * @format --- > * @noformat 8a9,10 > * @nolint > * @generated SignedSource<<ce82e8957367bee7d11379ab88e3f7c5>> diff --color -r build-before/react-native/shims/createReactNativeComponentClass.js build-after/react-native/shims/createReactNativeComponentClass.js 7c7 < * @format --- > * @noformat 8a9,10 > * @nolint > * @generated SignedSource<<ede54ac2fa1b9a09e234cdf098048989>> ```

Rubén Norte committed Apr 14, 2023 at 11:42 UTC 39a3b72c6db97c58c45b0dd9b685b316cd2302c3
4 files changed +46 -19
package.json
+1
@@ -93,6 +93,7 @@
93 "rollup-plugin-prettier": "^3.0.0",
94 "rollup-plugin-strip-banner": "^3.0.0",
95 "semver": "^7.1.1",
96 + "signedsource": "^2.0.0",
97 "targz": "^1.0.1",
98 "through2": "^3.0.1",
99 "tmp": "^0.1.0",
scripts/rollup/packaging.js
+20
@@ -7,6 +7,7 @@ const {
7 readFileSync,
8 writeFileSync,
9 } = require('fs');
10 +const path = require('path');
11 const Bundles = require('./bundles');
12 const {
13 asyncCopyTo,
@@ -14,6 +15,7 @@ const {
15 asyncExtractTar,
16 asyncRimRaf,
17 } = require('./utils');
18 +const {getSigningToken, signFile} = require('signedsource');
19
20 const {
21 NODE_ES2015,
@@ -134,6 +136,24 @@ async function copyRNShims() {
136 require.resolve('react-native-renderer/src/ReactNativeTypes.js'),
137 'build/react-native/shims/ReactNativeTypes.js'
138 );
139 + processGenerated('build/react-native/shims');
140 +}
141 +
142 +function processGenerated(directory) {
143 + const files = readdirSync(directory)
144 + .filter(dir => dir.endsWith('.js'))
145 + .map(file => path.join(directory, file));
146 +
147 + files.forEach(file => {
148 + const originalContents = readFileSync(file, 'utf8');
149 + const contents = originalContents
150 + // Replace {@}format with {@}noformat
151 + .replace(/(\n\s*\*\s*)@format\b.*(\n)/, '$1@noformat$2')
152 + // Add {@}nolint and {@}generated
153 + .replace(' */\n', ` * @nolint\n * ${getSigningToken()}\n */\n`);
154 + const signedContents = signFile(contents);
155 + writeFileSync(file, signedContents, 'utf8');
156 + });
157 }
158
159 async function copyAllShims() {
scripts/rollup/wrappers.js
+20 -19
@@ -2,6 +2,7 @@
2
3 const {resolve} = require('path');
4 const {readFileSync} = require('fs');
5 +const {signFile, getSigningToken} = require('signedsource');
6 const {bundleTypes, moduleTypes} = require('./bundles');
7
8 const {
@@ -238,14 +239,14 @@ ${source}`;
239
240 /****************** RN_OSS_DEV ******************/
241 [RN_OSS_DEV](source, globalName, filename, moduleType) {
241 - return `/**
242 + return signFile(`/**
243 ${license}
244 *
245 * @noflow
246 * @nolint
247 * @providesModule ${globalName}-dev
248 * @preventMunge
248 - * ${'@gen' + 'erated'}
249 + * ${getSigningToken()}
250 */
251
252 'use strict';
@@ -254,48 +255,48 @@ if (__DEV__) {
255 (function() {
256 ${source}
257 })();
257 -}`;
258 +}`);
259 },
260
261 /****************** RN_OSS_PROD ******************/
262 [RN_OSS_PROD](source, globalName, filename, moduleType) {
262 - return `/**
263 + return signFile(`/**
264 ${license}
265 *
266 * @noflow
267 * @nolint
268 * @providesModule ${globalName}-prod
269 * @preventMunge
269 - * ${'@gen' + 'erated'}
270 + * ${getSigningToken()}
271 */
272
272 -${source}`;
273 +${source}`);
274 },
275
276 /****************** RN_OSS_PROFILING ******************/
277 [RN_OSS_PROFILING](source, globalName, filename, moduleType) {
277 - return `/**
278 + return signFile(`/**
279 ${license}
280 *
281 * @noflow
282 * @nolint
283 * @providesModule ${globalName}-profiling
284 * @preventMunge
284 - * ${'@gen' + 'erated'}
285 + * ${getSigningToken()}
286 */
287
287 -${source}`;
288 +${source}`);
289 },
290
291 /****************** RN_FB_DEV ******************/
292 [RN_FB_DEV](source, globalName, filename, moduleType) {
292 - return `/**
293 + return signFile(`/**
294 ${license}
295 *
296 * @noflow
297 * @nolint
298 * @preventMunge
298 - * ${'@gen' + 'erated'}
299 + * ${getSigningToken()}
300 */
301
302 'use strict';
@@ -304,35 +305,35 @@ if (__DEV__) {
305 (function() {
306 ${source}
307 })();
307 -}`;
308 +}`);
309 },
310
311 /****************** RN_FB_PROD ******************/
312 [RN_FB_PROD](source, globalName, filename, moduleType) {
312 - return `/**
313 + return signFile(`/**
314 ${license}
315 *
316 * @noflow
317 * @nolint
318 * @preventMunge
318 - * ${'@gen' + 'erated'}
319 + * ${getSigningToken()}
320 */
321
321 -${source}`;
322 +${source}`);
323 },
324
325 /****************** RN_FB_PROFILING ******************/
326 [RN_FB_PROFILING](source, globalName, filename, moduleType) {
326 - return `/**
327 + return signFile(`/**
328 ${license}
329 *
330 * @noflow
331 * @nolint
332 * @preventMunge
332 - * ${'@gen' + 'erated'}
333 + * ${getSigningToken()}
334 */
335
335 -${source}`;
336 +${source}`);
337 },
338 };
339
@@ -369,7 +370,7 @@ ${source}
370 ${license}
371 */
372 module.exports = function $$$reconciler($$$config) {
372 -
373 +
374 var exports = {};
375 ${source}
376 return exports;
yarn.lock
+5
@@ -14872,6 +14872,11 @@ signal-exit@^3.0.7:
14872 resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
14873 integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
14874
14875 +signedsource@^2.0.0:
14876 + version "2.0.0"
14877 + resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-2.0.0.tgz#f72dc0f98f5bca2763b464a555511a84a4da8eee"
14878 + integrity sha512-MscTxXbMij5JVgrW1xDiMIc+vFa0+H0+HP+rRrFjwa7ef2VAxIP/4L/E75I5H4xvyb4l1X+a9ch+6Zy5uFu7Fg==
14879 +
14880 sisteransi@^1.0.5:
14881 version "1.0.5"
14882 resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"