Skip to content

Commit 7ebbb86

Browse files
committed
Set peer dependencies and commit in published package.json
The commit will allow us to link published releases to the exact code version. Fixes #5135
1 parent 6b54599 commit 7ebbb86

File tree

1 file changed

+49
-11
lines changed

1 file changed

+49
-11
lines changed

bin/publish.js

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,25 @@ if (isDryRun) {
1818
console.log('Publish dry run');
1919
}
2020

21+
const allAddons = process.argv.includes('--all-addons');
22+
if (allAddons) {
23+
console.log('Publish all addons');
24+
}
25+
26+
const repoCommit = getRepoCommit();
2127
const changedFiles = getChangedFilesInCommit('HEAD');
2228

23-
// Publish xterm if any files were changed outside of the addons directory
24-
let isStableRelease = false;
25-
if (changedFiles.some(e => e.search(/^addons\//) === -1)) {
26-
isStableRelease = checkAndPublishPackage(path.resolve(__dirname, '..'));
27-
checkAndPublishPackage(path.resolve(__dirname, '../headless'));
28-
}
29+
// Always publish xterm, technically this isn't needed if
30+
// `changedFiles.some(e => e.search(/^addons\//)`, but it's here for convenience to get the right
31+
// peer dependencies for addons.
32+
const result = checkAndPublishPackage(path.resolve(__dirname, '..'), repoCommit);
33+
const isStableRelease = result.isStableRelease;
34+
const peerDependencies = {
35+
'@xterm/xterm': `^${result.nextVersion}`,
36+
};
37+
checkAndPublishPackage(path.resolve(__dirname, '../headless'), repoCommit);
38+
39+
// Addon peer dependencies
2940

3041
// Publish addons if any files were changed inside of the addon
3142
const addonPackageDirs = [
@@ -44,9 +55,9 @@ const addonPackageDirs = [
4455
console.log(`Checking if addons need to be published`);
4556
for (const p of addonPackageDirs) {
4657
const addon = path.basename(p);
47-
if (changedFiles.some(e => e.includes(addon))) {
58+
if (allAddons || changedFiles.some(e => e.includes(addon))) {
4859
console.log(`Try publish ${addon}`);
49-
checkAndPublishPackage(p);
60+
checkAndPublishPackage(p, repoCommit, peerDependencies);
5061
}
5162
}
5263

@@ -55,7 +66,7 @@ if (isStableRelease) {
5566
updateWebsite();
5667
}
5768

58-
function checkAndPublishPackage(packageDir) {
69+
function checkAndPublishPackage(packageDir, repoCommit, peerDependencies) {
5970
const packageJson = require(path.join(packageDir, 'package.json'));
6071

6172
// Determine if this is a stable or beta release
@@ -69,7 +80,24 @@ function checkAndPublishPackage(packageDir) {
6980
// Set the version in package.json
7081
const packageJsonFile = path.join(packageDir, 'package.json');
7182
packageJson.version = nextVersion;
72-
console.log(`Set version of ${packageJsonFile} to ${nextVersion}`);
83+
84+
// Set the commit in package.json
85+
if (repoCommit) {
86+
packageJson.commit = repoCommit;
87+
console.log(`Set commit of ${packageJsonFile} to ${repoCommit}`);
88+
} else {
89+
throw new Error(`No commit set`);
90+
}
91+
92+
// Set peer dependencies
93+
if (peerDependencies) {
94+
packageJson.peerDependencies = peerDependencies;
95+
console.log(`Set peerDependencies of ${packageJsonFile} to ${JSON.stringify(peerDependencies)}`);
96+
} else {
97+
console.log(`Skipping peerDependencies`);
98+
}
99+
100+
// Write new package.json
73101
fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, null, 2));
74102

75103
// Publish
@@ -92,7 +120,17 @@ function checkAndPublishPackage(packageDir) {
92120

93121
console.groupEnd();
94122

95-
return isStableRelease;
123+
return { isStableRelease, nextVersion };
124+
}
125+
126+
function getRepoCommit() {
127+
const commitProcess = cp.spawnSync('git', ['log', '-1', '--format="%H"']);
128+
if (commitProcess.stdout.length === 0 && commitProcess.stderr) {
129+
const err = versionsProcess.stderr.toString();
130+
throw new Error('Could not get repo commit\n' + err);
131+
}
132+
const output = commitProcess.stdout.toString().trim();
133+
return output.replace(/^"/, '').replace(/"$/, '');
96134
}
97135

98136
function getNextBetaVersion(packageJson) {

0 commit comments

Comments
 (0)