1 | const semver = require('semver');
|
2 | const logger = require('../logger');
|
3 | const taskify = require('../cli-task');
|
4 | const updateVersions = require('../update-versions');
|
5 | const getLatestVersions = require('../get-latest-versions');
|
6 |
|
7 | async function version(targetPackages = [], tag, allPackages = []) {
|
8 |
|
9 | const number = semver.clean(tag);
|
10 |
|
11 | if (semver.valid(number)) {
|
12 | logger.info(`Updating packages to version ${number}`);
|
13 | } else {
|
14 | throw new Error(`The given tag "${tag}" is not a valid version number`);
|
15 | }
|
16 |
|
17 |
|
18 | const latestVersions = await getLatestVersions(allPackages);
|
19 |
|
20 | const packagesToUpdate = new Set(targetPackages.map(pkg => pkg.name));
|
21 |
|
22 | return targetPackages.map(pkg => {
|
23 | const apply = () => {
|
24 | const newManifest = updateVersions(
|
25 | pkg.manifest,
|
26 | packagesToUpdate,
|
27 | number,
|
28 | latestVersions,
|
29 | );
|
30 | return pkg.writeManifest(newManifest);
|
31 | };
|
32 |
|
33 | return { pkg, apply };
|
34 | });
|
35 | }
|
36 |
|
37 | exports.task = version;
|
38 |
|
39 | exports.register = program => {
|
40 | program
|
41 | .command('version <tag>')
|
42 | .description(
|
43 | 'Updates the release number for public packages and their cross-dependencies and writes the data back to package.json',
|
44 | )
|
45 | .action(taskify(version));
|
46 | };
|