-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
publish-version.mjs
91 lines (73 loc) · 2.97 KB
/
publish-version.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { execa } from 'execa';
import fs from 'fs/promises';
import glob from 'glob';
import path from 'path';
async function run() {
const { stdout: branchName } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD']);
console.log('Current branch:', branchName);
const lernaJson = JSON.parse(await fs.readFile('lerna.json', 'utf-8'));
// read the current version from ./version.txt
const nextVersion = await fs.readFile('./version.txt', 'utf-8');
const packages = lernaJson.packages;
if (!packages) {
throw new Error('Could not find packages in lerna.json');
}
// for each package's package.json file, see if there is a peerdependency,
// and for each peer dependency see if it includes a package that
// starts with @ohif/, if so update the version to the
// next version since lerna will not handle this for us
// Iterate over each package path pattern
for (const packagePathPattern of packages) {
// Use glob to find all matching directories
const matchingDirectories = glob.sync(packagePathPattern);
for (const packageDirectory of matchingDirectories) {
const packageJsonPath = path.join(packageDirectory, 'package.json');
try {
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
// lerna will take care of updating the dependencies, but it does not
// update the peerDependencies, so we need to do that manually
for (const peerDependency of Object.keys(packageJson.peerDependencies)) {
if (peerDependency.startsWith('@ohif/')) {
packageJson.peerDependencies[peerDependency] = nextVersion;
}
}
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
console.log(`Updated ${packageJsonPath}`);
} catch (err) {
console.log("ERROR: Couldn't find package.json in", packageDirectory);
continue;
}
}
}
// remove the .npmrc to not accidentally publish to npm
await fs.unlink('.npmrc');
// rm -f ./.npmrc again
await execa('rm', ['-f', '.npmrc']);
// Todo: Do we really need to run the build command here?
// Maybe we need to hook the netlify deploy preview
// await execa('yarn', ['run', 'build']);
console.log('Committing and pushing changes...');
await execa('git', ['add', '-A']);
await execa('git', ['commit', '-m', 'chore(version): version.json [skip ci]']);
await execa('git', ['push', 'origin', branchName]);
console.log('Setting the version using lerna...');
// add a message to the commit to indicate that the version was set using lerna
await execa('npx', [
'lerna',
'version',
nextVersion,
'--yes',
'--exact',
'--force-publish',
'--message',
'chore(version): Update package versions [skip ci]',
'--conventional-commits',
'--create-release',
'github',
]);
console.log('Version set using lerna');
}
run().catch(err => {
console.error('Error encountered during version bump:', err);
process.exit(1);
});