|
1 | 1 | /* eslint-disable @typescript-eslint/no-var-requires */
|
| 2 | +import { promisify } from 'util'; |
| 3 | +import path from 'path'; |
2 | 4 | import chalk from 'chalk';
|
3 | 5 | import boxen from 'boxen';
|
| 6 | +import rimraf from 'rimraf'; |
| 7 | +import compareVersions from 'vf-core-service-discovery-versions-comparison'; |
4 | 8 | import ServiceDiscovery from '..';
|
5 | 9 | import { Reporter } from '../types';
|
| 10 | +import { PassThrough } from 'stream'; |
| 11 | + |
| 12 | +const rimrafP = promisify(rimraf); |
6 | 13 |
|
7 | 14 | interface Arguments {
|
8 | 15 | verbose: boolean;
|
9 | 16 | 'log-file': string;
|
10 | 17 | force: boolean;
|
11 | 18 | profile: boolean;
|
12 | 19 | 'only-outdated': boolean;
|
| 20 | + 'compare-versions': boolean; |
13 | 21 | reporters: string[];
|
14 | 22 | disabled: string[];
|
15 | 23 | format: string;
|
@@ -62,6 +70,12 @@ export const builder = {
|
62 | 70 | default: '',
|
63 | 71 | alias: 'm',
|
64 | 72 | },
|
| 73 | + 'compare-versions': { |
| 74 | + description: "Compare components' versions", |
| 75 | + type: 'boolean', |
| 76 | + default: false, |
| 77 | + alias: 'c', |
| 78 | + }, |
65 | 79 | };
|
66 | 80 |
|
67 | 81 | export async function handler(argv: Arguments): Promise<void> {
|
@@ -89,6 +103,39 @@ export async function handler(argv: Arguments): Promise<void> {
|
89 | 103 | for (const report of reporters) {
|
90 | 104 | await report(items, argv.format);
|
91 | 105 | }
|
| 106 | + |
| 107 | + const discoveryItemsForComparison = items |
| 108 | + .map((item) => item.discoveryItem) |
| 109 | + .filter((item) => item.version !== item.packageJson?.version); |
| 110 | + |
| 111 | + if (argv['compare-versions'] && discoveryItemsForComparison.length > 0) { |
| 112 | + const temporaryWebServerFilesDirectory = path.join(process.cwd(), 'vf-core-service-discovery-tmp'); |
| 113 | + const logStream = new PassThrough({ encoding: 'utf-8' }); |
| 114 | + |
| 115 | + logStream.on('data', (data) => { |
| 116 | + console.log(data); |
| 117 | + }); |
| 118 | + |
| 119 | + await compareVersions( |
| 120 | + temporaryWebServerFilesDirectory, |
| 121 | + { |
| 122 | + components: discoveryItemsForComparison.map((item) => ({ |
| 123 | + name: item.name, |
| 124 | + nameWithoutPrefix: item.nameWithoutPrefix, |
| 125 | + installedVersion: item.version, |
| 126 | + latestVersion: item.packageJson?.version, |
| 127 | + })), |
| 128 | + }, |
| 129 | + logStream, |
| 130 | + ); |
| 131 | + |
| 132 | + // TODO: check windows |
| 133 | + process.on('SIGINT', async () => { |
| 134 | + console.log(`Deleting temporary web server files directory: ${temporaryWebServerFilesDirectory}`); |
| 135 | + await rimrafP(temporaryWebServerFilesDirectory); |
| 136 | + process.exit(); |
| 137 | + }); |
| 138 | + } |
92 | 139 | } catch (error) {
|
93 | 140 | console.log(error);
|
94 | 141 | process.exit(1);
|
|
0 commit comments