balena-cli/lib/actions-oclif/version.ts
Pagan Gazzard 667358b23e Import just strip-tags from common-tags to reduce startup time
This saves ~100ms for me on startup with no fast-boot cache and ~50ms
with a fast-boot cache

Change-type: patch
2020-06-25 22:56:43 +01:00

90 lines
2.5 KiB
TypeScript

/**
* @license
* Copyright 2019 Balena Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { flags } from '@oclif/command';
import Command from '../command';
import { stripIndent } from '../utils/lazy';
interface FlagsDef {
all?: boolean;
json?: boolean;
help: void;
}
export interface JsonVersions {
'balena-cli': string;
'Node.js': string;
}
export default class VersionCmd extends Command {
public static description = stripIndent`
Display version information for the balena CLI and/or Node.js.
Display version information for the balena CLI and/or Node.js.
The --json option is recommended when scripting the output of this command,
because the JSON format is less likely to change and it better represents
data types like lists and empty strings. The 'jq' utility may be helpful
in shell scripts (https://stedolan.github.io/jq/manual/).
`;
public static examples = [
'$ balena version',
'$ balena version -a',
'$ balena version -j',
];
public static usage = 'version';
public static flags: flags.Input<FlagsDef> = {
all: flags.boolean({
char: 'a',
default: false,
description:
'include version information for additional components (Node.js)',
}),
json: flags.boolean({
char: 'j',
default: false,
description:
'output version information in JSON format for programmatic use',
}),
help: flags.help({ char: 'h' }),
};
public async run() {
const { flags: options } = this.parse<FlagsDef, {}>(VersionCmd);
const versions: JsonVersions = {
'balena-cli': (await import('../../package.json')).version,
'Node.js':
process.version && process.version.startsWith('v')
? process.version.slice(1)
: process.version,
};
if (options.json) {
console.log(JSON.stringify(versions, null, 4));
} else {
if (options.all) {
console.log(`balena-cli version "${versions['balena-cli']}"`);
console.log(`Node.js version "${versions['Node.js']}"`);
} else {
// backwards compatibility
console.log(versions['balena-cli']);
}
}
}
}