mirror of
https://github.com/zoriya/react-native-web.git
synced 2026-08-15 18:45:06 +00:00
Publish only updates react-native-web packages
The script to release react-native-web is now limited to version-locking related packages, not every package in the monorepo.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict';
|
||||
|
||||
const execSync = require('child_process').execSync;
|
||||
const fs = require('fs');
|
||||
const glob = require('glob');
|
||||
const minimist = require('minimist');
|
||||
const path = require('path');
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
const argv = minimist(args);
|
||||
|
||||
const version = argv._[0];
|
||||
const skipGit = argv['skip-git'];
|
||||
const oneTimeCode = argv.otp;
|
||||
|
||||
console.log(`Publishing react-native-web@${version}`);
|
||||
|
||||
// Collect 'react-native-web' workspaces and package manifests
|
||||
const workspacePaths = require('../package.json').workspaces;
|
||||
const workspaces = workspacePaths.reduce((acc, curr) => {
|
||||
const packageDirectories = glob.sync(curr);
|
||||
const subsetOfpackageDirectories = packageDirectories.filter((dir) => {
|
||||
return dir.includes('react-native-web');
|
||||
});
|
||||
subsetOfpackageDirectories.forEach((dir) => {
|
||||
const directory = path.resolve(dir);
|
||||
const packageJsonPath = path.join(directory, 'package.json');
|
||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, { encoding: 'utf-8' }));
|
||||
acc.push({ directory, packageJson, packageJsonPath });
|
||||
});
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
// Update each package version and its dependencies
|
||||
const workspaceNames = workspaces.map(({ packageJson }) => packageJson.name);
|
||||
workspaces.forEach(({ directory, packageJson, packageJsonPath }) => {
|
||||
packageJson.version = version;
|
||||
workspaceNames.forEach((name) => {
|
||||
if (packageJson.dependencies && packageJson.dependencies[name]) {
|
||||
packageJson.dependencies[name] = version;
|
||||
}
|
||||
if (packageJson.devDependencies && packageJson.devDependencies[name]) {
|
||||
packageJson.devDependencies[name] = version;
|
||||
}
|
||||
});
|
||||
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
||||
});
|
||||
|
||||
// Commit changes
|
||||
if (!skipGit) {
|
||||
// add changes
|
||||
execSync('git add .');
|
||||
// commit
|
||||
execSync(`git commit -m "${version}" --no-verify`);
|
||||
// tag
|
||||
execSync(`git tag -m ${version} "${version}"`);
|
||||
}
|
||||
|
||||
// Publish public packages
|
||||
workspaces.forEach(({ directory, packageJson }) => {
|
||||
if (!packageJson.private) {
|
||||
execSync(`cd ${directory} && npm publish --otp ${oneTimeCode}`);
|
||||
}
|
||||
});
|
||||
|
||||
// Push changes
|
||||
if (!skipGit) {
|
||||
execSync('git push --tags origin master');
|
||||
}
|
||||
Reference in New Issue
Block a user