Skip to content

Instantly share code, notes, and snippets.

@captbaritone
Created July 6, 2022 16:53
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save captbaritone/3351af94fb0821b93e26e23fbbc0c4c5 to your computer and use it in GitHub Desktop.
Save captbaritone/3351af94fb0821b93e26e23fbbc0c4c5 to your computer and use it in GitHub Desktop.
'use strict';
const {ROOT_DIR} = require('../../utils/config/index.js');
var fs = require('fs');
const OSS_DIR = `${ROOT_DIR}/xplat/js/RKJSModules/Libraries/Relay/oss`;
const COMPILER_TARGETS_FILE = `${ROOT_DIR}/fbcode/relay/oss/crates/relay-compiler/TARGETS`;
const COMPILER_CARGO_FILES = [
`${ROOT_DIR}/fbcode/relay/oss/crates/relay-compiler/Cargo.toml`,
`${ROOT_DIR}/fbcode/relay/oss/Cargo.oss.lock`,
];
function updateCompilerTargetFile(currentVersion, nextVersion) {
const text = fs.readFileSync(COMPILER_TARGETS_FILE, 'utf8');
const withUpdatedVersion = text.replace(
`"version": "${currentVersion}"`,
`"version": "${nextVersion}"`,
);
fs.writeFileSync(COMPILER_TARGETS_FILE, withUpdatedVersion);
}
function updateCompilerCargoFiles(currentVersion, nextVersion) {
COMPILER_CARGO_FILES.forEach(file => {
const text = fs.readFileSync(file, 'utf8');
const withUpdatedVersion = text.replace(
`name = "relay-compiler"\nversion = "${currentVersion}"`,
`name = "relay-compiler"\nversion = "${nextVersion}"`,
);
fs.writeFileSync(file, withUpdatedVersion);
});
}
function getCurrentVersion() {
const file = `${OSS_DIR}/__github__/package.json`;
const packageJson = require(file);
return packageJson.version;
}
exports.command = 'update-version VERSION';
exports.describe = 'Updates the version of relay across all package.json files';
exports.handler = argv => {
const currentVersion = getCurrentVersion();
const version = argv.VERSION;
if (!version || !/^\d+\.\d+\.\d+(\-[\d\w\.]+)?$/.test(version)) {
console.error(
`Invalid version '${version}'\n\n` +
'USAGE:\n' +
' js1 relay update-version 1.2.3\n' +
' js1 relay update-version 1.2.3-rc.1',
);
process.exit(1);
}
function updatePackageJson(packageJsonPath, updateVersion) {
var packageJson = require(packageJsonPath);
if (updateVersion) {
packageJson.version = version;
}
for (const dependenciesKey of [
'dependencies',
'devDependencies',
'peerDependencies',
]) {
for (const dep in packageJson[dependenciesKey]) {
if (relayPackages.includes(dep)) {
packageJson[dependenciesKey][dep] = version;
}
}
}
fs.writeFileSync(
packageJsonPath,
JSON.stringify(packageJson, null, 2) + '\n',
'utf8',
);
}
const relayPackages = [
'babel-plugin-relay',
'react-relay',
'relay-compiler',
'relay-runtime',
'relay-test-utils',
'relay-test-utils-internal',
];
updatePackageJson(`${ROOT_DIR}/xplat/js/package.json`);
updatePackageJson(`${OSS_DIR}/__github__/package.json`, true);
for (const relayPackage of relayPackages) {
updatePackageJson(`${OSS_DIR}/${relayPackage}/package.json`, true);
}
updateCompilerTargetFile(currentVersion, version);
updateCompilerCargoFiles(currentVersion, version);
console.log(
'Updated package.json files, now run:\n' +
'\n' +
` cd ${ROOT_DIR}/xplat/js && yarn`,
);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment