diff --git a/docs/balena-cli.md b/docs/balena-cli.md index 30a24c38..1a694b51 100644 --- a/docs/balena-cli.md +++ b/docs/balena-cli.md @@ -665,23 +665,14 @@ list of zero or more values). The 'jq' utility may be helpful in shell scripts Examples: $ balena devices supported - $ balena devices supported --verbose - $ balena devices supported -vj + $ balena devices supported --json ### Options -#### --discontinued - -No effect (DEPRECATED) - #### -j, --json produce JSON output instead of tabular output -#### -v, --verbose - -No effect (DEPRECATED) - ## device <uuid> Show information about a single device. diff --git a/lib/commands/devices/supported.ts b/lib/commands/devices/supported.ts index 70d0db85..9a5555a3 100644 --- a/lib/commands/devices/supported.ts +++ b/lib/commands/devices/supported.ts @@ -21,33 +21,18 @@ import Command from '../../command'; import * as cf from '../../utils/common-flags'; import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy'; import { CommandHelp } from '../../utils/oclif-utils'; -import { isV13 } from '../../utils/version'; interface FlagsDef { - discontinued: boolean; help: void; json?: boolean; - verbose?: boolean; } -const deprecatedInfo = isV13() - ? '' - : ` -The --verbose option may add extra columns/fields to the output. Currently -this includes the "STATE" column which is DEPRECATED and whose values are one -of 'new', 'released' or 'discontinued'. However, 'discontinued' device types -are only listed if the '--discontinued' option is also used, and this option -is also DEPRECATED. -` - .split('\n') - .join(`\n\t\t`); - export default class DevicesSupportedCmd extends Command { public static description = stripIndent` List the supported device types (like 'raspberrypi3' or 'intel-nuc'). List the supported device types (like 'raspberrypi3' or 'intel-nuc'). - ${deprecatedInfo} + 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 (for example, the ALIASES column contains a @@ -56,8 +41,7 @@ export default class DevicesSupportedCmd extends Command { `; public static examples = [ '$ balena devices supported', - '$ balena devices supported --verbose', - '$ balena devices supported -vj', + '$ balena devices supported --json', ]; public static usage = ( @@ -66,22 +50,11 @@ export default class DevicesSupportedCmd extends Command { ).trim(); public static flags: flags.Input = { - discontinued: flags.boolean({ - description: isV13() - ? 'No effect (DEPRECATED)' - : 'include "discontinued" device types (DEPRECATED)', - }), help: cf.help, json: flags.boolean({ char: 'j', description: 'produce JSON output instead of tabular output', }), - verbose: flags.boolean({ - char: 'v', - description: isV13() - ? 'No effect (DEPRECATED)' - : 'add extra columns in the tabular output (DEPRECATED)', - }), }; public async run() { @@ -95,53 +68,28 @@ export default class DevicesSupportedCmd extends Command { ]); const dtsBySlug = _.keyBy(dts, (dt) => dt.slug); const configDTsBySlug = _.keyBy(configDTs, (dt) => dt.slug); - const discontinuedDTs = isV13() - ? [] - : configDTs.filter((dt) => dt.state === 'DISCONTINUED'); - const discontinuedDTsBySlug = _.keyBy(discontinuedDTs, (dt) => dt.slug); - // set of slugs from models.deviceType.getAllSupported() plus slugs of - // discontinued device types as per models.config.getDeviceTypes() - const slugsOfInterest = new Set([ - ...Object.keys(dtsBySlug), - ...Object.keys(discontinuedDTsBySlug), - ]); interface DT { slug: string; aliases: string[]; arch: string; - state?: string; // to be removed in CLI v13 name: string; } let deviceTypes: DT[] = []; - for (const slug of slugsOfInterest) { + for (const slug of Object.keys(dtsBySlug)) { const configDT: Partial = configDTsBySlug[slug] || {}; - if (configDT.state === 'DISCONTINUED' && !options.discontinued) { - continue; - } - const dt: Partial = dtsBySlug[slug] || {}; const aliases = (configDT.aliases || []).filter( (alias) => alias !== slug, ); + const dt: Partial = dtsBySlug[slug] || {}; deviceTypes.push({ slug, aliases: options.json ? aliases : [aliases.join(', ')], - arch: - (dt.is_of__cpu_architecture as any)?.[0]?.slug || - configDT.arch || - 'n/a', - // 'BETA' renamed to 'NEW' - // https://www.flowdock.com/app/rulemotion/i-cli/threads/1svvyaf8FAZeSdG4dPJc4kHOvJU - state: isV13() - ? undefined - : (configDT.state || 'NEW').replace('BETA', 'NEW'), - name: dt.name || configDT.name || 'N/A', + arch: (dt.is_of__cpu_architecture as any)?.[0]?.slug || 'n/a', + name: dt.name || 'N/A', }); } - const fields = - options.verbose && !isV13() - ? ['slug', 'aliases', 'arch', 'state', 'name'] - : ['slug', 'aliases', 'arch', 'name']; + const fields = ['slug', 'aliases', 'arch', 'name']; deviceTypes = _.sortBy(deviceTypes, fields); if (options.json) { console.log(JSON.stringify(deviceTypes, null, 4)); diff --git a/tests/commands/device/supported.spec.ts b/tests/commands/device/supported.spec.ts index 50f60584..bed6832c 100644 --- a/tests/commands/device/supported.spec.ts +++ b/tests/commands/device/supported.spec.ts @@ -20,8 +20,6 @@ import { expect } from 'chai'; import { BalenaAPIMock } from '../../nock/balena-api-mock'; import { cleanOutput, runCommand } from '../../helpers'; -import { isV13 } from '../../../build/utils/version'; - describe('balena devices supported', function () { let api: BalenaAPIMock; @@ -48,34 +46,16 @@ describe('balena devices supported', function () { api.expectGetDeviceTypes(); api.expectGetConfigDeviceTypes(); - const { out, err } = await runCommand('devices supported -v'); + const { out, err } = await runCommand('devices supported'); const lines = cleanOutput(out, true); - expect(lines[0]).to.equal( - isV13() ? 'SLUG ALIASES ARCH NAME' : 'SLUG ALIASES ARCH STATE NAME', - ); + expect(lines[0]).to.equal('SLUG ALIASES ARCH NAME'); expect(lines).to.have.lengthOf.at.least(2); + expect(lines).to.contain('intel-nuc nuc amd64 Intel NUC'); expect(lines).to.contain( - isV13() - ? 'intel-nuc nuc amd64 Intel NUC' - : 'intel-nuc nuc amd64 RELEASED Intel NUC', + 'odroid-xu4 odroid-ux3, odroid-u3+ armv7hf ODROID-XU4', ); - expect(lines).to.contain( - isV13() - ? 'odroid-xu4 odroid-ux3, odroid-u3+ armv7hf ODROID-XU4' - : 'odroid-xu4 odroid-ux3, odroid-u3+ armv7hf RELEASED ODROID-XU4', - ); - - // Discontinued devices should be filtered out from results - expect(lines.some((l) => l.includes('DISCONTINUED'))).to.be.false; - - // Beta devices should be listed as new - expect(lines.some((l) => l.includes('BETA'))).to.be.false; - expect(lines.some((l) => l.includes('NEW'))).to.equal( - isV13() ? false : true, - ); - expect(err).to.eql([]); }); });