@samitouri / QOS-React-2 / commits / 36df5e8b42

[release] Allow building single release channel with processed versions (#35270)

Sebastian "Sebbie" Silbermann committed Dec 2, 2025 at 22:05 UTC 36df5e8b42a97df4092f9584e4695bf4537853d5
2 files changed +29 -20
package.json
+1 -1
@@ -123,7 +123,7 @@
123 "scripts": {
124 "prebuild": "./scripts/react-compiler/link-compiler.sh",
125 "build": "node ./scripts/rollup/build-all-release-channels.js",
126 - "build-for-devtools": "cross-env RELEASE_CHANNEL=experimental yarn build react/index,react/jsx,react/compiler-runtime,react-dom/index,react-dom/client,react-dom/unstable_testing,react-dom/test-utils,react-is,react-debug-tools,scheduler,react-test-renderer,react-refresh,react-art --type=NODE",
126 + "build-for-devtools": "cross-env yarn build react/index,react/jsx,react/compiler-runtime,react-dom/index,react-dom/client,react-dom/unstable_testing,react-dom/test-utils,react-is,react-debug-tools,scheduler,react-test-renderer,react-refresh,react-art --type=NODE --release-channel=experimental",
127 "build-for-devtools-dev": "yarn build-for-devtools --type=NODE_DEV",
128 "build-for-devtools-prod": "yarn build-for-devtools --type=NODE_PROD",
129 "build-for-flight-dev": "cross-env RELEASE_CHANNEL=experimental node ./scripts/rollup/build.js react/index,react/jsx,react.react-server,react-dom/index,react-dom/client,react-dom/server,react-dom.react-server,react-dom-server.node,react-dom-server-legacy.node,scheduler,react-server-dom-webpack/ --type=NODE_DEV,ESM_PROD,NODE_ES2015 && mv ./build/node_modules ./build/oss-experimental",
scripts/rollup/build-all-release-channels.js
+28 -19
@@ -124,25 +124,34 @@ async function main() {
124 throw new Error(`Unknown release channel ${argv.releaseChannel}`);
125 }
126 } else {
127 - // Running locally, no concurrency. Move each channel's build artifacts into
128 - // a temporary directory so that they don't conflict.
129 - buildForChannel('stable', '', '');
130 - const stableDir = tmp.dirSync().name;
131 - crossDeviceRenameSync('./build', stableDir);
132 - processStable(stableDir);
133 - buildForChannel('experimental', '', '');
134 - const experimentalDir = tmp.dirSync().name;
135 - crossDeviceRenameSync('./build', experimentalDir);
136 - processExperimental(experimentalDir);
137 -
138 - // Then merge the experimental folder into the stable one. processExperimental
139 - // will have already removed conflicting files.
140 - //
141 - // In CI, merging is handled by the GitHub Download Artifacts plugin.
142 - mergeDirsSync(experimentalDir + '/', stableDir + '/');
143 -
144 - // Now restore the combined directory back to its original name
145 - crossDeviceRenameSync(stableDir, './build');
127 + const releaseChannel = argv.releaseChannel;
128 + if (releaseChannel === 'stable') {
129 + buildForChannel('stable', '', '');
130 + processStable('./build');
131 + } else if (releaseChannel === 'experimental') {
132 + buildForChannel('experimental', '', '');
133 + processExperimental('./build');
134 + } else {
135 + // Running locally, no concurrency. Move each channel's build artifacts into
136 + // a temporary directory so that they don't conflict.
137 + buildForChannel('stable', '', '');
138 + const stableDir = tmp.dirSync().name;
139 + crossDeviceRenameSync('./build', stableDir);
140 + processStable(stableDir);
141 + buildForChannel('experimental', '', '');
142 + const experimentalDir = tmp.dirSync().name;
143 + crossDeviceRenameSync('./build', experimentalDir);
144 + processExperimental(experimentalDir);
145 +
146 + // Then merge the experimental folder into the stable one. processExperimental
147 + // will have already removed conflicting files.
148 + //
149 + // In CI, merging is handled by the GitHub Download Artifacts plugin.
150 + mergeDirsSync(experimentalDir + '/', stableDir + '/');
151 +
152 + // Now restore the combined directory back to its original name
153 + crossDeviceRenameSync(stableDir, './build');
154 + }
155 }
156 }
157