Skip to content

Commit

Permalink
Revert Build Versions from Content Hash to Commit Hash (#29663)
Browse files Browse the repository at this point in the history
#29236 caused issues for internal
syncs at Meta, because we were computing version numbers using file
hashes (to eliminate "no-op" internal sync commits). The problem is that
since version numbers may not be consistent across synced files (e.g. if
some files have not changed in recent commits), the newly introduced
version mismatch check fails.

There's some more work that needs to be done here to restore the
benefits of file-specific hashing, but for now this simply reverts the
content hash changes from the following PRs:

- #28633
(95319ab)
- #28590
(37676ab)
- #28582
(cb076b5)
- #26734
(5dd90c5)
- #26331
(3cad3a5)
  • Loading branch information
yungsters committed May 30, 2024
1 parent 72644ef commit 5bd4031
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 65 deletions.
23 changes: 3 additions & 20 deletions .github/workflows/commit_artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ jobs:
mkdir -p ${BASE_FOLDER}/react-native-github/Libraries/Renderer/
mkdir -p ${BASE_FOLDER}/RKJSModules/vendor/react/{scheduler,react,react-is,react-test-renderer}/
# Move React Native renderer
# Move React Native renderer
mv build/react-native/implementations/ $BASE_FOLDER/react-native-github/Libraries/Renderer/
mv build/react-native/shims/ $BASE_FOLDER/react-native-github/Libraries/Renderer/
mv build/facebook-react-native/scheduler/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/scheduler/
Expand All @@ -161,9 +161,10 @@ jobs:
rm $RENDERER_FOLDER/ReactNativeRenderer-{dev,prod,profiling}.js
ls -R ./compiled
- name: Add REVISION file
- name: Add REVISION files
run: |
echo ${{ github.sha }} >> ./compiled/facebook-www/REVISION
cp ./compiled/facebook-www/REVISION ./compiled/facebook-www/REVISION_TRANSFORMS
echo ${{ github.sha }} >> ./compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/REVISION
- uses: actions/upload-artifact@v3
with:
Expand All @@ -189,16 +190,7 @@ jobs:
name: compiled
path: compiled/
- run: git status -u
- name: Check if only the REVISION file has changed
id: check_should_commit
run: |
if git status --porcelain | grep -qv '/REVISION$'; then
echo "should_commit=true" >> "$GITHUB_OUTPUT"
else
echo "should_commit=false" >> "$GITHUB_OUTPUT"
fi
- name: Commit changes to branch
if: steps.check_should_commit.outputs.should_commit == 'true'
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: |
Expand All @@ -225,16 +217,7 @@ jobs:
name: compiled-rn
path: compiled-rn/
- run: git status -u
- name: Check if only the REVISION file has changed
id: check_should_commit
run: |
if git status --porcelain | grep -qv '/REVISION$'; then
echo "should_commit=true" >> "$GITHUB_OUTPUT"
else
echo "should_commit=false" >> "$GITHUB_OUTPUT"
fi
- name: Commit changes to branch
if: steps.check_should_commit.outputs.should_commit == 'true'
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: |
Expand Down
54 changes: 9 additions & 45 deletions scripts/rollup/build-all-release-channels.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

/* eslint-disable no-for-of-loops/no-for-of-loops */

const crypto = require('node:crypto');
const fs = require('fs');
const fse = require('fs-extra');
const {spawnSync} = require('child_process');
Expand Down Expand Up @@ -41,7 +40,10 @@ if (dateString.startsWith("'")) {

// Build the artifacts using a placeholder React version. We'll then do a string
// replace to swap it with the correct version per release channel.
const PLACEHOLDER_REACT_VERSION = ReactVersion + '-PLACEHOLDER';
//
// The placeholder version is the same format that the "next" channel uses
const PLACEHOLDER_REACT_VERSION =
ReactVersion + '-' + canaryChannelLabel + '-' + sha + '-' + dateString;

// TODO: We should inject the React version using a build-time parameter
// instead of overwriting the source files.
Expand Down Expand Up @@ -158,7 +160,7 @@ function processStable(buildDir) {
}

if (fs.existsSync(buildDir + '/facebook-www')) {
for (const fileName of fs.readdirSync(buildDir + '/facebook-www').sort()) {
for (const fileName of fs.readdirSync(buildDir + '/facebook-www')) {
const filePath = buildDir + '/facebook-www/' + fileName;
const stats = fs.statSync(filePath);
if (!stats.isDirectory()) {
Expand All @@ -167,28 +169,10 @@ function processStable(buildDir) {
}
updatePlaceholderReactVersionInCompiledArtifacts(
buildDir + '/facebook-www',
ReactVersion + '-www-classic-%FILEHASH%'
ReactVersion + '-www-classic-' + sha + '-' + dateString
);
}

[
buildDir + '/react-native/implementations/',
buildDir + '/facebook-react-native/',
].forEach(reactNativeBuildDir => {
if (fs.existsSync(reactNativeBuildDir)) {
updatePlaceholderReactVersionInCompiledArtifacts(
reactNativeBuildDir,
ReactVersion + '-' + canaryChannelLabel + '-%FILEHASH%'
);
}
});

// Update remaining placeholders with canary channel version
updatePlaceholderReactVersionInCompiledArtifacts(
buildDir,
ReactVersion + '-' + canaryChannelLabel + '-' + sha + '-' + dateString
);

if (fs.existsSync(buildDir + '/sizes')) {
fs.renameSync(buildDir + '/sizes', buildDir + '/sizes-stable');
}
Expand Down Expand Up @@ -222,7 +206,7 @@ function processExperimental(buildDir, version) {
}

if (fs.existsSync(buildDir + '/facebook-www')) {
for (const fileName of fs.readdirSync(buildDir + '/facebook-www').sort()) {
for (const fileName of fs.readdirSync(buildDir + '/facebook-www')) {
const filePath = buildDir + '/facebook-www/' + fileName;
const stats = fs.statSync(filePath);
if (!stats.isDirectory()) {
Expand All @@ -231,28 +215,10 @@ function processExperimental(buildDir, version) {
}
updatePlaceholderReactVersionInCompiledArtifacts(
buildDir + '/facebook-www',
ReactVersion + '-www-modern-%FILEHASH%'
ReactVersion + '-www-modern-' + sha + '-' + dateString
);
}

[
buildDir + '/react-native/implementations/',
buildDir + '/facebook-react-native/',
].forEach(reactNativeBuildDir => {
if (fs.existsSync(reactNativeBuildDir)) {
updatePlaceholderReactVersionInCompiledArtifacts(
reactNativeBuildDir,
ReactVersion + '-' + canaryChannelLabel + '-%FILEHASH%'
);
}
});

// Update remaining placeholders with canary channel version
updatePlaceholderReactVersionInCompiledArtifacts(
buildDir,
ReactVersion + '-' + canaryChannelLabel + '-' + sha + '-' + dateString
);

if (fs.existsSync(buildDir + '/sizes')) {
fs.renameSync(buildDir + '/sizes', buildDir + '/sizes-experimental');
}
Expand Down Expand Up @@ -362,11 +328,9 @@ function updatePlaceholderReactVersionInCompiledArtifacts(

for (const artifactFilename of artifactFilenames) {
const originalText = fs.readFileSync(artifactFilename, 'utf8');
const fileHash = crypto.createHash('sha1');
fileHash.update(originalText);
const replacedText = originalText.replaceAll(
PLACEHOLDER_REACT_VERSION,
newVersion.replace(/%FILEHASH%/g, fileHash.digest('hex').slice(0, 8))
newVersion
);
fs.writeFileSync(artifactFilename, replacedText);
}
Expand Down

0 comments on commit 5bd4031

Please sign in to comment.