Skip to content

Commit 44f9fa3

Browse files
authored
Merge pull request #5143 from Tyriar/5135
Publish commit and set peerDependencies to @xterm/xterm beta when publishing
2 parents 1b48cd0 + fd0bb58 commit 44f9fa3

File tree

1 file changed

+82
-21
lines changed

1 file changed

+82
-21
lines changed

bin/publish.js

Lines changed: 82 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,35 @@ const os = require('os');
99
const path = require('path');
1010

1111
// Setup auth
12-
fs.writeFileSync(`${process.env['HOME']}/.npmrc`, `//registry.npmjs.org/:_authToken=${process.env['NPM_AUTH_TOKEN']}`);
12+
if (process.env['NPM_AUTH_TOKEN']) {
13+
fs.writeFileSync(`${process.env['HOME']}/.npmrc`, `//registry.npmjs.org/:_authToken=${process.env['NPM_AUTH_TOKEN']}`);
14+
}
1315

16+
log('Configuration:', 'green')
1417
const isDryRun = process.argv.includes('--dry');
1518
if (isDryRun) {
16-
console.log('Publish dry run');
19+
log(' Publish dry run');
20+
}
21+
22+
const allAddons = process.argv.includes('--all-addons');
23+
if (allAddons) {
24+
log(' Publish all addons');
1725
}
1826

27+
const repoCommit = getRepoCommit();
1928
const changedFiles = getChangedFilesInCommit('HEAD');
2029

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

2842
// Publish addons if any files were changed inside of the addon
2943
const addonPackageDirs = [
@@ -39,12 +53,11 @@ const addonPackageDirs = [
3953
path.resolve(__dirname, '../addons/addon-web-links'),
4054
path.resolve(__dirname, '../addons/addon-webgl')
4155
];
42-
console.log(`Checking if addons need to be published`);
56+
log(`Checking if addons need to be published`, 'green');
4357
for (const p of addonPackageDirs) {
4458
const addon = path.basename(p);
45-
if (changedFiles.some(e => e.includes(addon))) {
46-
console.log(`Try publish ${addon}`);
47-
checkAndPublishPackage(p);
59+
if (allAddons || changedFiles.some(e => e.includes(addon))) {
60+
checkAndPublishPackage(p, repoCommit, peerDependencies);
4861
}
4962
}
5063

@@ -53,7 +66,7 @@ if (isStableRelease) {
5366
updateWebsite();
5467
}
5568

56-
function checkAndPublishPackage(packageDir) {
69+
function checkAndPublishPackage(packageDir, repoCommit, peerDependencies) {
5770
const packageJson = require(path.join(packageDir, 'package.json'));
5871

5972
// Determine if this is a stable or beta release
@@ -62,12 +75,29 @@ function checkAndPublishPackage(packageDir) {
6275

6376
// Get the next version
6477
let nextVersion = isStableRelease ? packageJson.version : getNextBetaVersion(packageJson);
65-
console.log(`Publishing version: ${nextVersion}`);
78+
log(`Publishing version: ${nextVersion}`, 'green');
6679

6780
// Set the version in package.json
6881
const packageJsonFile = path.join(packageDir, 'package.json');
6982
packageJson.version = nextVersion;
70-
console.log(`Set version of ${packageJsonFile} to ${nextVersion}`);
83+
84+
// Set the commit in package.json
85+
if (repoCommit) {
86+
packageJson.commit = repoCommit;
87+
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+
log(`Set peerDependencies of ${packageJsonFile} to ${JSON.stringify(peerDependencies)}`);
96+
} else {
97+
log(`Skipping peerDependencies`);
98+
}
99+
100+
// Write new package.json
71101
fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, null, 2));
72102

73103
// Publish
@@ -78,19 +108,27 @@ function checkAndPublishPackage(packageDir) {
78108
if (isDryRun) {
79109
args.push('--dry-run');
80110
}
81-
console.log(`Spawn: npm ${args.join(' ')}`);
111+
log(`Spawn: npm ${args.join(' ')}`);
82112
const result = cp.spawnSync('npm', args, {
83113
cwd: packageDir,
84114
stdio: 'inherit'
85115
});
86116
if (result.status) {
87-
console.error(`Spawn exited with code ${result.status}`);
117+
error(`Spawn exited with code ${result.status}`);
88118
process.exit(result.status);
89119
}
90120

91-
console.groupEnd();
121+
return { isStableRelease, nextVersion };
122+
}
92123

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

96134
function getNextBetaVersion(packageJson) {
@@ -118,7 +156,11 @@ function asArray(value) {
118156
}
119157

120158
function getPublishedVersions(packageJson, version, tag) {
121-
const versionsProcess = cp.spawnSync(os.platform === 'win32' ? 'npm.cmd' : 'npm', ['view', packageJson.name, 'versions', '--json']);
159+
const versionsProcess = cp.spawnSync(
160+
os.platform === 'win32' ? 'npm.cmd' : 'npm',
161+
['view', packageJson.name, 'versions', '--json'],
162+
{ shell: true }
163+
);
122164
if (versionsProcess.stdout.length === 0 && versionsProcess.stderr) {
123165
const err = versionsProcess.stderr.toString();
124166
if (err.indexOf('404 Not Found - GET https://registry.npmjs.org/@xterm') > 0) {
@@ -152,10 +194,29 @@ function getChangedFilesInCommit(commit) {
152194
}
153195

154196
function updateWebsite() {
155-
console.log('Updating website');
197+
log('Updating website', 'green');
156198
const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'website-'));
157199
const packageJson = require(path.join(path.resolve(__dirname, '..'), 'package.json'));
158200
if (!isDryRun) {
159201
cp.spawnSync('sh', [path.join(__dirname, 'update-website.sh'), packageJson.version], { cwd, stdio: [process.stdin, process.stdout, process.stderr] });
160202
}
161203
}
204+
205+
/**
206+
* @param {string} message
207+
*/
208+
function log(message, color) {
209+
let colorSequence = '';
210+
switch (color) {
211+
case 'green': {
212+
colorSequence = '\x1b[32m';
213+
break;
214+
}
215+
}
216+
console.info([
217+
`[\x1b[2m${new Date().toLocaleTimeString('en-GB')}\x1b[0m] `,
218+
colorSequence,
219+
message,
220+
'\x1b[0m',
221+
].join(''));
222+
}

0 commit comments

Comments
 (0)