Convert util available-drives to oclif

Change-type: patch
Signed-off-by: Scott Lowe <scott@balena.io>
This commit is contained in:
Scott Lowe 2020-07-09 13:58:59 +02:00
parent e2c9bf86c7
commit 6f265b24aa
7 changed files with 81 additions and 71 deletions

View File

@ -149,7 +149,7 @@ const capitanoDoc = {
},
{
title: 'Utilities',
files: ['build/actions/util.js'],
files: ['build/actions-oclif/util/available-drives.js'],
},
],
};

View File

@ -2681,5 +2681,7 @@ the device IP or hostname
## util available-drives
Use this command to list your machine's drives usable for writing the OS image to.
Skips the system drives.
List available drives which are usable for writing an OS image to.
Does not list system drives.
### Options

View File

@ -0,0 +1,75 @@
/**
* @license
* Copyright 2016-2020 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 * as cf from '../../utils/common-flags';
import { stripIndent, getChalk, getVisuals } from '../../utils/lazy';
interface FlagsDef {
help: void;
}
export default class UtilAvailableDrivesCmd extends Command {
public static description = stripIndent`
List available drives.
List available drives which are usable for writing an OS image to.
Does not list system drives.
`;
public static usage = 'util available-drives';
public static flags: flags.Input<FlagsDef> = {
help: cf.help,
};
public async run() {
this.parse<FlagsDef, {}>(UtilAvailableDrivesCmd);
const sdk = await import('etcher-sdk');
const adapter = new sdk.scanner.adapters.BlockDeviceAdapter(() => false);
const scanner = new sdk.scanner.Scanner([adapter]);
await scanner.start();
function prepareDriveInfo(drive: any) {
const size = drive.size / 1000000000;
return {
device: drive.device,
size: `${size.toFixed(1)} GB`,
description: drive.description,
};
}
if (scanner.drives.size === 0) {
console.error(
`${getChalk().red(
'x',
)} No available drives were detected, plug one in!`,
);
} else {
console.log(
getVisuals().table.horizontal(
Array.from(scanner.drives).map(prepareDriveInfo),
['device', 'size', 'description'],
),
);
}
scanner.stop();
}
}

View File

@ -19,7 +19,6 @@ export * as help from './help';
export * as local from './local';
export * as os from './os';
export * as push from './push';
export * as util from './util';
export { build } from './build';

View File

@ -1,64 +0,0 @@
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
/*
Copyright 2016-2017 Balena
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 type { CommandDefinition } from 'capitano';
import { getChalk, getVisuals, stripIndent } from '../utils/lazy';
export const availableDrives: CommandDefinition<{}, {}> = {
signature: 'util available-drives',
description: 'list available drives',
help: stripIndent`
Use this command to list your machine's drives usable for writing the OS image to.
Skips the system drives.
`,
async action() {
const sdk = await import('etcher-sdk');
const adapter = new sdk.scanner.adapters.BlockDeviceAdapter(() => false);
const scanner = new sdk.scanner.Scanner([adapter]);
await scanner.start();
function formatDrive(drive: any) {
const size = drive.size / 1000000000;
return {
device: drive.device,
size: `${size.toFixed(1)} GB`,
description: drive.description,
};
}
if (scanner.drives.size === 0) {
console.error(
`${getChalk().red(
'x',
)} No available drives were detected, plug one in!`,
);
} else {
console.log(
getVisuals().table.horizontal(
Array.from(scanner.drives).map(formatDrive),
['device', 'size', 'description'],
),
);
}
scanner.stop();
},
};

View File

@ -66,9 +66,6 @@ capitano.command(actions.preload);
capitano.command(actions.local.configure);
capitano.command(actions.local.flash);
// ---------- Public utils ----------
capitano.command(actions.util.availableDrives);
// ------------ Local build and deploy -------
capitano.command(actions.build);
capitano.command(actions.deploy);

View File

@ -185,6 +185,7 @@ export const convertedCommands = [
'tag:rm',
'tag:set',
'tunnel',
'util:available-drives',
'version',
'whoami',
];