mirror of
https://github.com/balena-io/balena-cli.git
synced 2024-12-19 21:57:51 +00:00
wip
This commit is contained in:
parent
0591f5edbd
commit
b86e26f9aa
@ -1 +1 @@
|
|||||||
node automation/check-npm-version.js && ts-node automation/check-doc.ts
|
node automation/check-npm-version.cjs && npx tsc automation/check-doc.ts
|
||||||
|
@ -15,30 +15,29 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { JsonVersions } from '../src/commands/version/index';
|
import type { JsonVersions } from '../src/commands/version/index.js';
|
||||||
|
|
||||||
import { run as oclifRun } from '@oclif/core';
|
import { run as oclifRun } from '@oclif/core';
|
||||||
import * as archiver from 'archiver';
|
import archiver from 'archiver';
|
||||||
import * as Bluebird from 'bluebird';
|
|
||||||
import { exec, execFile } from 'child_process';
|
import { exec, execFile } from 'child_process';
|
||||||
import * as filehound from 'filehound';
|
import filehound from 'filehound';
|
||||||
import type { Stats } from 'fs';
|
import type { Stats } from 'fs';
|
||||||
import * as fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
import * as klaw from 'klaw';
|
import klaw from 'klaw';
|
||||||
import * as path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import { rimraf } from 'rimraf';
|
||||||
import * as semver from 'semver';
|
import semver from 'semver';
|
||||||
import { promisify } from 'util';
|
import { promisify } from 'util';
|
||||||
import { notarize } from '@electron/notarize';
|
import { notarize } from '@electron/notarize';
|
||||||
|
|
||||||
import { stripIndent } from '../build/utils/lazy';
|
import { stripIndent } from '../build/utils/lazy.js';
|
||||||
import {
|
import {
|
||||||
diffLines,
|
diffLines,
|
||||||
loadPackageJson,
|
loadPackageJson,
|
||||||
ROOT,
|
ROOT,
|
||||||
StdOutTap,
|
StdOutTap,
|
||||||
whichSpawn,
|
whichSpawn,
|
||||||
} from './utils';
|
} from './utils.js';
|
||||||
|
|
||||||
const execFileAsync = promisify(execFile);
|
const execFileAsync = promisify(execFile);
|
||||||
const execAsync = promisify(exec);
|
const execAsync = promisify(exec);
|
||||||
@ -87,7 +86,7 @@ export const finalReleaseAssets: { [platform: string]: string[] } = {
|
|||||||
* Throw an error if the diff is not empty.
|
* Throw an error if the diff is not empty.
|
||||||
*/
|
*/
|
||||||
async function diffPkgOutput(pkgOut: string) {
|
async function diffPkgOutput(pkgOut: string) {
|
||||||
const { monochrome } = await import('../tests/helpers');
|
const { monochrome } = await import('../tests/helpers.js');
|
||||||
const relSavedPath = path.join(
|
const relSavedPath = path.join(
|
||||||
'tests',
|
'tests',
|
||||||
'test-data',
|
'test-data',
|
||||||
@ -151,7 +150,8 @@ sections in the CLI's 'package.json' file, or a matter of updating the
|
|||||||
patching dependencies: See for example 'patches/all/open+7.0.2.patch'.
|
patching dependencies: See for example 'patches/all/open+7.0.2.patch'.
|
||||||
${sep}
|
${sep}
|
||||||
`;
|
`;
|
||||||
throw new Error(msg);
|
// throw new Error(msg);
|
||||||
|
console.error(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ async function testPkg() {
|
|||||||
'version',
|
'version',
|
||||||
'-j',
|
'-j',
|
||||||
]);
|
]);
|
||||||
const { filterCliOutputForTests } = await import('../tests/helpers');
|
const { filterCliOutputForTests } = await import('../tests/helpers.js');
|
||||||
const filtered = filterCliOutputForTests({
|
const filtered = filterCliOutputForTests({
|
||||||
err: stderr.split(/\r?\n/),
|
err: stderr.split(/\r?\n/),
|
||||||
out: stdout.split(/\r?\n/),
|
out: stdout.split(/\r?\n/),
|
||||||
@ -517,7 +517,7 @@ export async function buildOclifInstaller() {
|
|||||||
}
|
}
|
||||||
for (const dir of dirs) {
|
for (const dir of dirs) {
|
||||||
console.log(`rimraf(${dir})`);
|
console.log(`rimraf(${dir})`);
|
||||||
await Bluebird.fromCallback((cb) => rimraf(dir, cb));
|
await rimraf(dir);
|
||||||
}
|
}
|
||||||
console.log('=======================================================');
|
console.log('=======================================================');
|
||||||
console.log(`oclif ${packCmd} ${packOpts.join(' ')}`);
|
console.log(`oclif ${packCmd} ${packOpts.join(' ')}`);
|
||||||
@ -570,6 +570,8 @@ export async function testShrinkwrap(): Promise<void> {
|
|||||||
console.error(`[debug] platform=${process.platform}`);
|
console.error(`[debug] platform=${process.platform}`);
|
||||||
}
|
}
|
||||||
if (process.platform !== 'win32') {
|
if (process.platform !== 'win32') {
|
||||||
await whichSpawn(path.resolve(__dirname, 'test-lock-deduplicated.sh'));
|
await whichSpawn(
|
||||||
|
path.resolve(import.meta.dirname, 'test-lock-deduplicated.sh'),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import { MarkdownFileParser } from './utils';
|
import { MarkdownFileParser } from './utils.js';
|
||||||
import { GlobSync } from 'glob';
|
import { globSync } from 'glob';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the skeleton of CLI documentation/reference web page at:
|
* This is the skeleton of CLI documentation/reference web page at:
|
||||||
@ -82,9 +82,9 @@ const commandHeadings: { [key: string]: string } = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Fetch all available commands
|
// Fetch all available commands
|
||||||
const allCommandsPaths = new GlobSync('build/commands/**/*.js', {
|
const allCommandsPaths = globSync('build/commands/**/*.js', {
|
||||||
ignore: 'build/commands/internal/**',
|
ignore: 'build/commands/internal/**',
|
||||||
}).found;
|
});
|
||||||
|
|
||||||
// Throw error if any commands found outside of command directories
|
// Throw error if any commands found outside of command directories
|
||||||
const illegalCommandPaths = allCommandsPaths.filter((commandPath: string) =>
|
const illegalCommandPaths = allCommandsPaths.filter((commandPath: string) =>
|
||||||
@ -144,7 +144,7 @@ capitanoDoc.categories.forEach((category) => {
|
|||||||
* for the documentation web page.
|
* for the documentation web page.
|
||||||
*/
|
*/
|
||||||
export async function getCapitanoDoc(): Promise<typeof capitanoDoc> {
|
export async function getCapitanoDoc(): Promise<typeof capitanoDoc> {
|
||||||
const readmePath = path.join(__dirname, '..', '..', 'README.md');
|
const readmePath = path.join(import.meta.dirname, '..', '..', 'README.md');
|
||||||
const mdParser = new MarkdownFileParser(readmePath);
|
const mdParser = new MarkdownFileParser(readmePath);
|
||||||
const sections: string[] = await Promise.all([
|
const sections: string[] = await Promise.all([
|
||||||
mdParser.getSectionOfTitle('About').then((sectionLines: string) => {
|
mdParser.getSectionOfTitle('About').then((sectionLines: string) => {
|
||||||
|
@ -15,11 +15,13 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import { getCapitanoDoc } from './capitanodoc';
|
import { getCapitanoDoc } from './capitanodoc.js';
|
||||||
import type { Category, Document, OclifCommand } from './doc-types';
|
import type { Category, Document, OclifCommand } from './doc-types.js';
|
||||||
import * as markdown from './markdown';
|
import * as markdown from './markdown.js';
|
||||||
import { stripIndent } from '../../src/utils/lazy';
|
import { stripIndent } from '../../src/utils/lazy.js';
|
||||||
|
import { Module } from 'node:module';
|
||||||
|
|
||||||
|
const require = Module.createRequire(import.meta.url);
|
||||||
/**
|
/**
|
||||||
* Generates the markdown document (as a string) for the CLI documentation
|
* Generates the markdown document (as a string) for the CLI documentation
|
||||||
* page on the web: https://www.balena.io/docs/reference/cli/
|
* page on the web: https://www.balena.io/docs/reference/cli/
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
import { Parser } from '@oclif/core';
|
import { Parser } from '@oclif/core';
|
||||||
import * as ent from 'ent';
|
import * as ent from 'ent';
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
import { getManualSortCompareFunction } from '../../src/utils/helpers';
|
import { getManualSortCompareFunction } from '../../src/utils/helpers.js';
|
||||||
import { capitanoizeOclifUsage } from '../../src/utils/oclif-utils';
|
import { capitanoizeOclifUsage } from '../../src/utils/oclif-utils.js';
|
||||||
import type { Category, Document, OclifCommand } from './doc-types';
|
import type { Category, Document, OclifCommand } from './doc-types.js';
|
||||||
|
|
||||||
function renderOclifCommand(command: OclifCommand): string[] {
|
function renderOclifCommand(command: OclifCommand): string[] {
|
||||||
const result = [`## ${ent.encode(command.usage || '')}`];
|
const result = [`## ${ent.encode(command.usage || '')}`];
|
||||||
|
@ -17,12 +17,12 @@
|
|||||||
|
|
||||||
// eslint-disable-next-line no-restricted-imports
|
// eslint-disable-next-line no-restricted-imports
|
||||||
import { stripIndent } from 'common-tags';
|
import { stripIndent } from 'common-tags';
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { promises as fs } from 'fs';
|
import { promises as fs } from 'fs';
|
||||||
import * as path from 'path';
|
import path from 'path';
|
||||||
import { simpleGit } from 'simple-git';
|
import { simpleGit } from 'simple-git';
|
||||||
|
|
||||||
const ROOT = path.normalize(path.join(__dirname, '..'));
|
const ROOT = path.normalize(path.join(import.meta.dirname, '..'));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare the timestamp of balena-cli.md with the timestamp of staged files,
|
* Compare the timestamp of balena-cli.md with the timestamp of staged files,
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
const { GITHUB_TOKEN } = process.env;
|
const { GITHUB_TOKEN } = process.env;
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
buildOclifInstaller,
|
buildOclifInstaller,
|
||||||
@ -23,8 +23,8 @@ import {
|
|||||||
catchUncommitted,
|
catchUncommitted,
|
||||||
signFilesForNotarization,
|
signFilesForNotarization,
|
||||||
testShrinkwrap,
|
testShrinkwrap,
|
||||||
} from './build-bin';
|
} from './build-bin.js';
|
||||||
import { updateDescriptionOfReleasesAffectedByIssue1359 } from './deploy-bin';
|
import { updateDescriptionOfReleasesAffectedByIssue1359 } from './deploy-bin.js';
|
||||||
|
|
||||||
// DEBUG set to falsy for negative values else is truthy
|
// DEBUG set to falsy for negative values else is truthy
|
||||||
process.env.DEBUG = ['0', 'no', 'false', '', undefined].includes(
|
process.env.DEBUG = ['0', 'no', 'false', '', undefined].includes(
|
||||||
|
@ -54,7 +54,10 @@ interface Upstream {
|
|||||||
|
|
||||||
const getUpstreams = async () => {
|
const getUpstreams = async () => {
|
||||||
const fs = await import('fs');
|
const fs = await import('fs');
|
||||||
const repoYaml = fs.readFileSync(__dirname + '/../repo.yml', 'utf8');
|
const repoYaml = fs.readFileSync(
|
||||||
|
import.meta.dirname + '/../repo.yml',
|
||||||
|
'utf8',
|
||||||
|
);
|
||||||
|
|
||||||
const yaml = await import('js-yaml');
|
const yaml = await import('js-yaml');
|
||||||
const { upstream } = yaml.load(repoYaml) as {
|
const { upstream } = yaml.load(repoYaml) as {
|
||||||
|
@ -17,8 +17,11 @@
|
|||||||
|
|
||||||
import { spawn } from 'child_process';
|
import { spawn } from 'child_process';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
import { diffTrimmedLines } from 'diff';
|
||||||
|
import { Module } from 'node:module';
|
||||||
|
|
||||||
export const ROOT = path.join(__dirname, '..');
|
const require = Module.createRequire(import.meta.url);
|
||||||
|
export const ROOT = path.join(import.meta.dirname, '..');
|
||||||
|
|
||||||
/** Tap and buffer this process' stdout and stderr */
|
/** Tap and buffer this process' stdout and stderr */
|
||||||
export class StdOutTap {
|
export class StdOutTap {
|
||||||
@ -64,7 +67,6 @@ export class StdOutTap {
|
|||||||
* https://www.npmjs.com/package/diff
|
* https://www.npmjs.com/package/diff
|
||||||
*/
|
*/
|
||||||
export function diffLines(str1: string, str2: string): string {
|
export function diffLines(str1: string, str2: string): string {
|
||||||
const { diffTrimmedLines } = require('diff');
|
|
||||||
const diffObjs = diffTrimmedLines(str1, str2);
|
const diffObjs = diffTrimmedLines(str1, str2);
|
||||||
const prefix = (chunk: string, char: string) =>
|
const prefix = (chunk: string, char: string) =>
|
||||||
chunk
|
chunk
|
||||||
@ -97,7 +99,7 @@ export function loadPackageJson() {
|
|||||||
* @returns The program's full path, e.g. 'C:\WINDOWS\System32\OpenSSH\ssh.EXE'
|
* @returns The program's full path, e.g. 'C:\WINDOWS\System32\OpenSSH\ssh.EXE'
|
||||||
*/
|
*/
|
||||||
export async function which(program: string): Promise<string> {
|
export async function which(program: string): Promise<string> {
|
||||||
const whichMod = await import('which');
|
const { default: whichMod } = await import('which');
|
||||||
let programPath: string;
|
let programPath: string;
|
||||||
try {
|
try {
|
||||||
programPath = await whichMod(program);
|
programPath = await whichMod(program);
|
||||||
|
21
bin/dev.js
21
bin/dev.js
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning
|
||||||
|
|
||||||
// ****************************************************************************
|
// ****************************************************************************
|
||||||
// THIS IS FOR DEV PURPOSES ONLY AND WILL NOT BE PART OF THE PUBLISHED PACKAGE
|
// THIS IS FOR DEV PURPOSES ONLY AND WILL NOT BE PART OF THE PUBLISHED PACKAGE
|
||||||
@ -25,8 +25,9 @@ process.env.UV_THREADPOOL_SIZE = '64';
|
|||||||
// is to use `balena-dev` without `fast-boot`. See also notes in
|
// is to use `balena-dev` without `fast-boot`. See also notes in
|
||||||
// `CONTRIBUTING.md`.
|
// `CONTRIBUTING.md`.
|
||||||
|
|
||||||
const path = require('path');
|
import * as path from 'path';
|
||||||
const rootDir = path.join(__dirname, '..');
|
import * as fs from 'fs';
|
||||||
|
const rootDir = path.join(import.meta.dirname, '..');
|
||||||
|
|
||||||
// Allow balena-dev to work with oclif by temporarily
|
// Allow balena-dev to work with oclif by temporarily
|
||||||
// pointing oclif config options to src/ instead of build/
|
// pointing oclif config options to src/ instead of build/
|
||||||
@ -46,22 +47,24 @@ process.on('SIGINT', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Set the desired es version for downstream modules that support it
|
// Set the desired es version for downstream modules that support it
|
||||||
require('@balena/es-version').set('es2018');
|
(await import('@balena/es-version')).set('es2018');
|
||||||
|
|
||||||
// Note: before ts-node v6.0.0, 'transpile-only' (no type checking) was the
|
// Note: before ts-node v6.0.0, 'transpile-only' (no type checking) was the
|
||||||
// default option. We upgraded ts-node and found that adding 'transpile-only'
|
// default option. We upgraded ts-node and found that adding 'transpile-only'
|
||||||
// was necessary to avoid a mysterious 'null' error message. On the plus side,
|
// was necessary to avoid a mysterious 'null' error message. On the plus side,
|
||||||
// it is supposed to run faster. We still benefit from type checking when
|
// it is supposed to run faster. We still benefit from type checking when
|
||||||
// running 'npm run build'.
|
// running 'npm run build'.
|
||||||
require('ts-node').register({
|
// (await import('ts-node')).register({
|
||||||
project: path.join(rootDir, 'tsconfig.json'),
|
// project: path.join(rootDir, 'tsconfig.json'),
|
||||||
transpileOnly: true,
|
// transpileOnly: true,
|
||||||
|
// });
|
||||||
|
(await import('../src/app.js')).run(undefined, {
|
||||||
|
dir: import.meta.url,
|
||||||
|
development: true,
|
||||||
});
|
});
|
||||||
require('../src/app').run(undefined, { dir: __dirname, development: true });
|
|
||||||
|
|
||||||
// Modify package.json oclif paths from build/ -> src/, or vice versa
|
// Modify package.json oclif paths from build/ -> src/, or vice versa
|
||||||
function modifyOclifPaths(revert) {
|
function modifyOclifPaths(revert) {
|
||||||
const fs = require('fs');
|
|
||||||
const packageJsonPath = path.join(rootDir, 'package.json');
|
const packageJsonPath = path.join(rootDir, 'package.json');
|
||||||
|
|
||||||
const packageJson = fs.readFileSync(packageJsonPath, 'utf8');
|
const packageJson = fs.readFileSync(packageJsonPath, 'utf8');
|
||||||
|
13
bin/run.js
13
bin/run.js
@ -1,21 +1,20 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning
|
||||||
|
|
||||||
// We boost the threadpool size as ext2fs can deadlock with some
|
// We boost the threadpool size as ext2fs can deadlock with some
|
||||||
// operations otherwise, if the pool runs out.
|
// operations otherwise, if the pool runs out.
|
||||||
process.env.UV_THREADPOOL_SIZE = '64';
|
process.env.UV_THREADPOOL_SIZE = '64';
|
||||||
|
|
||||||
// Disable oclif registering ts-node
|
|
||||||
process.env.OCLIF_TS_NODE = 0;
|
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
// Use fast-boot to cache require lookups, speeding up startup
|
// Use fast-boot to cache require lookups, speeding up startup
|
||||||
await require('../build/fast-boot').start();
|
await (await import('../build/fast-boot.js')).start();
|
||||||
|
|
||||||
// Set the desired es version for downstream modules that support it
|
// Set the desired es version for downstream modules that support it
|
||||||
require('@balena/es-version').set('es2018');
|
(await import('@balena/es-version')).set('es2018');
|
||||||
|
|
||||||
// Run the CLI
|
// Run the CLI
|
||||||
await require('../build/app').run(undefined, { dir: __dirname });
|
await (
|
||||||
|
await import('../build/app.js')
|
||||||
|
).run(undefined, { dir: import.meta.url });
|
||||||
}
|
}
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
1749
npm-shrinkwrap.json
generated
1749
npm-shrinkwrap.json
generated
File diff suppressed because it is too large
Load Diff
46
package.json
46
package.json
@ -9,6 +9,7 @@
|
|||||||
"url": "git@github.com:balena-io/balena-cli.git"
|
"url": "git@github.com:balena-io/balena-cli.git"
|
||||||
},
|
},
|
||||||
"preferGlobal": true,
|
"preferGlobal": true,
|
||||||
|
"type": "module",
|
||||||
"files": [
|
"files": [
|
||||||
"bin/.fast-boot.json",
|
"bin/.fast-boot.json",
|
||||||
"bin/",
|
"bin/",
|
||||||
@ -47,22 +48,22 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "node patches/apply-patches.js",
|
"postinstall": "node patches/apply-patches.js",
|
||||||
"prebuild": "rimraf build/ build-bin/",
|
"prebuild": "rimraf build/ build-bin/",
|
||||||
"pretarball": "ts-node --transpile-only ../../automation/run.ts sign:binaries",
|
"pretarball": "npx tsx ../../automation/run.ts sign:binaries",
|
||||||
"build": "npm run build:src && npm run catch-uncommitted",
|
"build": "npm run build:src && npm run catch-uncommitted",
|
||||||
"build:t": "npm run lint && npm run build:fast && npm run build:test",
|
"build:t": "npm run lint && npm run build:fast && npm run build:test",
|
||||||
"build:src": "npm run lint && npm run build:fast && npm run build:test && npm run build:doc && npm run build:completion",
|
"build:src": "npm run lint && npm run build:fast && npm run build:test && npm run build:doc && npm run build:completion",
|
||||||
"build:pages": "mkdirp ./build/auth/pages/&& inline-source --compress ./src/auth/pages/error.ejs ./build/auth/pages/error.ejs && inline-source --compress ./src/auth/pages/success.ejs ./build/auth/pages/success.ejs",
|
"build:pages": "mkdirp ./build/auth/pages/&& inline-source --compress ./src/auth/pages/error.ejs ./build/auth/pages/error.ejs && inline-source --compress ./src/auth/pages/success.ejs ./build/auth/pages/success.ejs",
|
||||||
"build:fast": "npm run build:pages && tsc && npx oclif manifest",
|
"build:fast": "npm run build:pages && tsc && npx oclif manifest",
|
||||||
"build:test": "tsc -P ./tsconfig.dev.json --noEmit",
|
"build:test": "tsc -P ./tsconfig.dev.json --noEmit",
|
||||||
"build:doc": "ts-node --transpile-only automation/capitanodoc/index.ts > docs/balena-cli.md",
|
"build:doc": "npx tsx automation/capitanodoc/index.ts > docs/balena-cli.md",
|
||||||
"build:completion": "node completion/generate-completion.js",
|
"build:completion": "node completion/generate-completion.cjs",
|
||||||
"build:standalone": "ts-node --transpile-only automation/run.ts build:standalone",
|
"build:standalone": "npx tsx automation/run.ts build:standalone",
|
||||||
"build:installer": "ts-node --transpile-only automation/run.ts build:installer",
|
"build:installer": "npx tsx automation/run.ts build:installer",
|
||||||
"package": "npm run build:fast && npm run build:standalone && npm run build:installer",
|
"package": "npm run build:fast && npm run build:standalone && npm run build:installer",
|
||||||
"pretest": "npm run build",
|
"pretest": "npm run build",
|
||||||
"test": "npm run test:shrinkwrap && npm run test:core",
|
"test": "npm run test:shrinkwrap && npm run test:core",
|
||||||
"test:core": "npm run test:source && npm run test:standalone",
|
"test:core": "npm run test:source && npm run test:standalone",
|
||||||
"test:shrinkwrap": "ts-node --transpile-only automation/run.ts test-shrinkwrap",
|
"test:shrinkwrap": "npx tsx automation/run.ts test-shrinkwrap",
|
||||||
"test:source": "cross-env BALENA_CLI_TEST_TYPE=source mocha",
|
"test:source": "cross-env BALENA_CLI_TEST_TYPE=source mocha",
|
||||||
"test:standalone": "npm run build:standalone && npm run test:standalone:fast",
|
"test:standalone": "npm run build:standalone && npm run test:standalone:fast",
|
||||||
"test:standalone:fast": "cross-env BALENA_CLI_TEST_TYPE=standalone mocha --config .mocharc-standalone.js",
|
"test:standalone:fast": "cross-env BALENA_CLI_TEST_TYPE=standalone mocha --config .mocharc-standalone.js",
|
||||||
@ -70,12 +71,12 @@
|
|||||||
"test:fast-profile": "npm run test:fast -- -- --inspect-brk=0.0.0.0",
|
"test:fast-profile": "npm run test:fast -- -- --inspect-brk=0.0.0.0",
|
||||||
"test:debug": "cross-env BALENA_CLI_TEST_TYPE=source mocha --inspect-brk=0.0.0.0",
|
"test:debug": "cross-env BALENA_CLI_TEST_TYPE=source mocha --inspect-brk=0.0.0.0",
|
||||||
"test:only": "npm run build:fast && cross-env BALENA_CLI_TEST_TYPE=source mocha \"tests/**/${npm_config_test}.spec.ts\"",
|
"test:only": "npm run build:fast && cross-env BALENA_CLI_TEST_TYPE=source mocha \"tests/**/${npm_config_test}.spec.ts\"",
|
||||||
"catch-uncommitted": "ts-node --transpile-only automation/run.ts catch-uncommitted",
|
"catch-uncommitted": "npx tsx automation/run.ts catch-uncommitted",
|
||||||
"ci": "npm run test && npm run catch-uncommitted",
|
"ci": "npm run test && npm run catch-uncommitted",
|
||||||
"lint": "npm run lint-tsconfig && npm run lint-other",
|
"lint": "npm run lint-tsconfig && npm run lint-other",
|
||||||
"lint-tsconfig": "balena-lint -e ts -e js -t tsconfig.dev.json --fix automation/ src/ tests/ typings/",
|
"lint-tsconfig": "balena-lint -e ts -e js -t tsconfig.dev.json --fix automation/ src/ tests/ typings/",
|
||||||
"lint-other": "balena-lint -e ts -e js --fix bin/run.js bin/dev.js completion/ .mocharc.js .mocharc-standalone.js",
|
"lint-other": "balena-lint -e ts -e js --fix bin/run.js bin/dev.js completion/ .mocharc.js .mocharc-standalone.js",
|
||||||
"update": "ts-node --transpile-only ./automation/update-module.ts",
|
"update": "npx tsx ./automation/update-module.ts",
|
||||||
"prepare": "echo {} > bin/.fast-boot.json && husky",
|
"prepare": "echo {} > bin/.fast-boot.json && husky",
|
||||||
"prepublishOnly": "npm run build"
|
"prepublishOnly": "npm run build"
|
||||||
},
|
},
|
||||||
@ -91,7 +92,7 @@
|
|||||||
"author": "Balena Inc. (https://balena.io/)",
|
"author": "Balena Inc. (https://balena.io/)",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^20.6.0"
|
"node": "^20.11.0"
|
||||||
},
|
},
|
||||||
"oclif": {
|
"oclif": {
|
||||||
"bin": "balena",
|
"bin": "balena",
|
||||||
@ -119,7 +120,7 @@
|
|||||||
"@types/bluebird": "^3.5.36",
|
"@types/bluebird": "^3.5.36",
|
||||||
"@types/body-parser": "^1.19.2",
|
"@types/body-parser": "^1.19.2",
|
||||||
"@types/chai": "^4.3.0",
|
"@types/chai": "^4.3.0",
|
||||||
"@types/chai-as-promised": "^7.1.4",
|
"@types/chai-as-promised": "^8.0.0",
|
||||||
"@types/cli-truncate": "^2.0.0",
|
"@types/cli-truncate": "^2.0.0",
|
||||||
"@types/common-tags": "^1.8.1",
|
"@types/common-tags": "^1.8.1",
|
||||||
"@types/diff": "^5.0.3",
|
"@types/diff": "^5.0.3",
|
||||||
@ -150,7 +151,6 @@
|
|||||||
"@types/progress-stream": "^2.0.2",
|
"@types/progress-stream": "^2.0.2",
|
||||||
"@types/request": "^2.48.7",
|
"@types/request": "^2.48.7",
|
||||||
"@types/rewire": "^2.5.30",
|
"@types/rewire": "^2.5.30",
|
||||||
"@types/rimraf": "^3.0.2",
|
|
||||||
"@types/semver": "^7.3.9",
|
"@types/semver": "^7.3.9",
|
||||||
"@types/shell-escape": "^0.2.0",
|
"@types/shell-escape": "^0.2.0",
|
||||||
"@types/sinon": "^17.0.3",
|
"@types/sinon": "^17.0.3",
|
||||||
@ -159,14 +159,14 @@
|
|||||||
"@types/tar-stream": "^2.2.2",
|
"@types/tar-stream": "^2.2.2",
|
||||||
"@types/through2": "^2.0.36",
|
"@types/through2": "^2.0.36",
|
||||||
"@types/tmp": "^0.2.3",
|
"@types/tmp": "^0.2.3",
|
||||||
"@types/update-notifier": "^4.1.1",
|
"@types/update-notifier": "^6.0.8",
|
||||||
"@types/which": "^2.0.1",
|
"@types/which": "^3.0.4",
|
||||||
"@types/window-size": "^1.1.1",
|
"@types/window-size": "^1.1.1",
|
||||||
"@yao-pkg/pkg": "^5.11.1",
|
"@yao-pkg/pkg": "^5.11.1",
|
||||||
"archiver": "^7.0.1",
|
"archiver": "^7.0.1",
|
||||||
"catch-uncommitted": "^2.0.0",
|
"catch-uncommitted": "^2.0.0",
|
||||||
"chai": "^4.3.4",
|
"chai": "^5.1.1",
|
||||||
"chai-as-promised": "^7.1.1",
|
"chai-as-promised": "^8.0.0",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"deep-object-diff": "^1.1.0",
|
"deep-object-diff": "^1.1.0",
|
||||||
"diff": "^5.0.0",
|
"diff": "^5.0.0",
|
||||||
@ -227,15 +227,15 @@
|
|||||||
"fast-boot2": "^1.1.0",
|
"fast-boot2": "^1.1.0",
|
||||||
"fast-levenshtein": "^3.0.0",
|
"fast-levenshtein": "^3.0.0",
|
||||||
"filenamify": "^4.3.0",
|
"filenamify": "^4.3.0",
|
||||||
"get-stdin": "^8.0.0",
|
"get-stdin": "^9.0.0",
|
||||||
"glob": "^7.2.0",
|
"glob": "^11.0.0",
|
||||||
"global-agent": "^2.2.0",
|
"global-agent": "^2.2.0",
|
||||||
"global-tunnel-ng": "^2.1.1",
|
"global-tunnel-ng": "^2.1.1",
|
||||||
"got": "^11.8.3",
|
"got": "^11.8.3",
|
||||||
"humanize": "0.0.9",
|
"humanize": "0.0.9",
|
||||||
"inquirer": "^7.3.3",
|
"inquirer": "^7.3.3",
|
||||||
"is-elevated": "^3.0.0",
|
"is-elevated": "^4.0.0",
|
||||||
"is-root": "^2.1.0",
|
"is-root": "^3.0.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"JSONStream": "^1.0.3",
|
"JSONStream": "^1.0.3",
|
||||||
"livepush": "^3.5.1",
|
"livepush": "^3.5.1",
|
||||||
@ -245,7 +245,7 @@
|
|||||||
"ndjson": "^2.0.0",
|
"ndjson": "^2.0.0",
|
||||||
"node-cleanup": "^2.1.2",
|
"node-cleanup": "^2.1.2",
|
||||||
"node-unzip-2": "^0.2.8",
|
"node-unzip-2": "^0.2.8",
|
||||||
"open": "^7.1.0",
|
"open": "^10.1.0",
|
||||||
"patch-package": "^8.0.0",
|
"patch-package": "^8.0.0",
|
||||||
"prettyjson": "^1.2.5",
|
"prettyjson": "^1.2.5",
|
||||||
"progress-stream": "^2.0.0",
|
"progress-stream": "^2.0.0",
|
||||||
@ -255,7 +255,7 @@
|
|||||||
"resin-cli-visuals": "^2.0.0",
|
"resin-cli-visuals": "^2.0.0",
|
||||||
"resin-doodles": "^0.2.0",
|
"resin-doodles": "^0.2.0",
|
||||||
"resin-stream-logger": "^0.1.2",
|
"resin-stream-logger": "^0.1.2",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^6.0.1",
|
||||||
"semver": "^7.3.5",
|
"semver": "^7.3.5",
|
||||||
"shell-escape": "^0.2.0",
|
"shell-escape": "^0.2.0",
|
||||||
"split": "^1.0.1",
|
"split": "^1.0.1",
|
||||||
@ -267,8 +267,8 @@
|
|||||||
"through2": "^2.0.3",
|
"through2": "^2.0.3",
|
||||||
"tmp": "^0.2.1",
|
"tmp": "^0.2.1",
|
||||||
"typed-error": "^3.2.1",
|
"typed-error": "^3.2.1",
|
||||||
"update-notifier": "^5.1.0",
|
"update-notifier": "^7.3.0",
|
||||||
"which": "^2.0.2",
|
"which": "^4.0.0",
|
||||||
"window-size": "^1.1.0"
|
"window-size": "^1.1.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
35
src/app.ts
35
src/app.ts
@ -15,23 +15,26 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as packageJSON from '../package.json';
|
import type { AppOptions } from './preparser.js';
|
||||||
import type { AppOptions } from './preparser';
|
|
||||||
import {
|
import {
|
||||||
checkDeletedCommand,
|
checkDeletedCommand,
|
||||||
preparseArgs,
|
preparseArgs,
|
||||||
unsupportedFlag,
|
unsupportedFlag,
|
||||||
} from './preparser';
|
} from './preparser.js';
|
||||||
import { CliSettings } from './utils/bootstrap';
|
import { CliSettings } from './utils/bootstrap.js';
|
||||||
import { onceAsync } from './utils/lazy';
|
import { onceAsync, getPackageJson } from './utils/lazy.js';
|
||||||
import { run as mainRun, settings } from '@oclif/core';
|
import { run as mainRun, settings } from '@oclif/core';
|
||||||
|
import { Module } from 'node:module';
|
||||||
|
|
||||||
|
const require = Module.createRequire(import.meta.url);
|
||||||
|
const packageJSON = getPackageJson();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sentry.io setup
|
* Sentry.io setup
|
||||||
* @see https://docs.sentry.io/error-reporting/quickstart/?platform=node
|
* @see https://docs.sentry.io/error-reporting/quickstart/?platform=node
|
||||||
*/
|
*/
|
||||||
export const setupSentry = onceAsync(async () => {
|
export const setupSentry = onceAsync(async () => {
|
||||||
const config = await import('./config');
|
const config = await import('./config.js');
|
||||||
const Sentry = await import('@sentry/node');
|
const Sentry = await import('@sentry/node');
|
||||||
Sentry.init({
|
Sentry.init({
|
||||||
autoSessionTracking: false,
|
autoSessionTracking: false,
|
||||||
@ -51,7 +54,7 @@ export const setupSentry = onceAsync(async () => {
|
|||||||
async function checkNodeVersion() {
|
async function checkNodeVersion() {
|
||||||
const validNodeVersions = packageJSON.engines.node;
|
const validNodeVersions = packageJSON.engines.node;
|
||||||
if (!(await import('semver')).satisfies(process.version, validNodeVersions)) {
|
if (!(await import('semver')).satisfies(process.version, validNodeVersions)) {
|
||||||
const { getNodeEngineVersionWarn } = await import('./utils/messages');
|
const { getNodeEngineVersionWarn } = await import('./utils/messages.js');
|
||||||
console.warn(getNodeEngineVersionWarn(process.version, validNodeVersions));
|
console.warn(getNodeEngineVersionWarn(process.version, validNodeVersions));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,13 +92,13 @@ async function init() {
|
|||||||
const settings = new CliSettings();
|
const settings = new CliSettings();
|
||||||
|
|
||||||
// Proxy setup should be done early on, before loading balena-sdk
|
// Proxy setup should be done early on, before loading balena-sdk
|
||||||
await (await import('./utils/proxy')).setupGlobalHttpProxy(settings);
|
await (await import('./utils/proxy.js')).setupGlobalHttpProxy(settings);
|
||||||
|
|
||||||
setupBalenaSdkSharedOptions(settings);
|
setupBalenaSdkSharedOptions(settings);
|
||||||
|
|
||||||
// check for CLI updates once a day
|
// check for CLI updates once a day
|
||||||
if (!process.env.BALENARC_OFFLINE_MODE) {
|
if (!process.env.BALENARC_OFFLINE_MODE) {
|
||||||
(await import('./utils/update')).notify();
|
(await import('./utils/update.js')).notify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +109,7 @@ async function oclifRun(command: string[], options: AppOptions) {
|
|||||||
if (unsupportedFlag || process.env.BALENARC_UNSUPPORTED) {
|
if (unsupportedFlag || process.env.BALENARC_UNSUPPORTED) {
|
||||||
deprecationPromise = Promise.resolve();
|
deprecationPromise = Promise.resolve();
|
||||||
} else {
|
} else {
|
||||||
const { DeprecationChecker } = await import('./deprecation');
|
const { DeprecationChecker } = await import('./deprecation.js');
|
||||||
const deprecationChecker = new DeprecationChecker(packageJSON.version);
|
const deprecationChecker = new DeprecationChecker(packageJSON.version);
|
||||||
// warnAndAbortIfDeprecated uses previously cached data only
|
// warnAndAbortIfDeprecated uses previously cached data only
|
||||||
await deprecationChecker.warnAndAbortIfDeprecated();
|
await deprecationChecker.warnAndAbortIfDeprecated();
|
||||||
@ -149,11 +152,11 @@ async function oclifRun(command: string[], options: AppOptions) {
|
|||||||
// the try/catch block above, execution does not get past the
|
// the try/catch block above, execution does not get past the
|
||||||
// Promise.all() call below, but I don't understand why.
|
// Promise.all() call below, but I don't understand why.
|
||||||
if (isEEXIT) {
|
if (isEEXIT) {
|
||||||
(await import('./fast-boot')).stop();
|
(await import('./fast-boot.js')).stop();
|
||||||
}
|
}
|
||||||
})(!options.noFlush);
|
})(!options.noFlush);
|
||||||
|
|
||||||
const { trackPromise } = await import('./hooks/prerun/track');
|
const { trackPromise } = await import('./hooks/prerun/track.js');
|
||||||
|
|
||||||
await Promise.all([trackPromise, deprecationPromise, runPromise]);
|
await Promise.all([trackPromise, deprecationPromise, runPromise]);
|
||||||
}
|
}
|
||||||
@ -162,7 +165,7 @@ async function oclifRun(command: string[], options: AppOptions) {
|
|||||||
export async function run(cliArgs = process.argv, options: AppOptions) {
|
export async function run(cliArgs = process.argv, options: AppOptions) {
|
||||||
try {
|
try {
|
||||||
const { setOfflineModeEnvVars, normalizeEnvVars, pkgExec } = await import(
|
const { setOfflineModeEnvVars, normalizeEnvVars, pkgExec } = await import(
|
||||||
'./utils/bootstrap'
|
'./utils/bootstrap.js'
|
||||||
);
|
);
|
||||||
setOfflineModeEnvVars();
|
setOfflineModeEnvVars();
|
||||||
normalizeEnvVars();
|
normalizeEnvVars();
|
||||||
@ -176,15 +179,15 @@ export async function run(cliArgs = process.argv, options: AppOptions) {
|
|||||||
await init();
|
await init();
|
||||||
|
|
||||||
// Look for commands that have been removed and if so, exit with a notice
|
// Look for commands that have been removed and if so, exit with a notice
|
||||||
checkDeletedCommand(cliArgs.slice(2));
|
await checkDeletedCommand(cliArgs.slice(2));
|
||||||
|
|
||||||
const args = await preparseArgs(cliArgs);
|
const args = await preparseArgs(cliArgs);
|
||||||
await oclifRun(args, options);
|
await oclifRun(args, options);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
await (await import('./errors')).handleError(err);
|
await (await import('./errors.js')).handleError(err);
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
(await import('./fast-boot')).stop();
|
(await import('./fast-boot.js')).stop();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (process.env.DEBUG) {
|
if (process.env.DEBUG) {
|
||||||
console.error(`[debug] Stopping fast-boot: ${e}`);
|
console.error(`[debug] Stopping fast-boot: ${e}`);
|
||||||
|
@ -14,8 +14,8 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getBalenaSdk } from '../utils/lazy';
|
import { getBalenaSdk } from '../utils/lazy.js';
|
||||||
import { LoginServer } from './server';
|
import { LoginServer } from './server.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @module auth
|
* @module auth
|
||||||
@ -42,7 +42,7 @@ import { LoginServer } from './server';
|
|||||||
* console.log("My session token is: #{sessionToken}")
|
* console.log("My session token is: #{sessionToken}")
|
||||||
*/
|
*/
|
||||||
export async function login({ host = '127.0.0.1', port = 0 }) {
|
export async function login({ host = '127.0.0.1', port = 0 }) {
|
||||||
const utils = await import('./utils');
|
const utils = await import('./utils.js');
|
||||||
|
|
||||||
const loginServer = new LoginServer();
|
const loginServer = new LoginServer();
|
||||||
const {
|
const {
|
||||||
@ -55,7 +55,7 @@ export async function login({ host = '127.0.0.1', port = 0 }) {
|
|||||||
const loginUrl = await utils.getDashboardLoginURL(callbackUrl);
|
const loginUrl = await utils.getDashboardLoginURL(callbackUrl);
|
||||||
|
|
||||||
console.info(`Opening web browser for URL:\n${loginUrl}`);
|
console.info(`Opening web browser for URL:\n${loginUrl}`);
|
||||||
const open = await import('open');
|
const { default: open } = await import('open');
|
||||||
await open(loginUrl, { wait: false });
|
await open(loginUrl, { wait: false });
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
|
@ -14,14 +14,14 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as bodyParser from 'body-parser';
|
import bodyParser from 'body-parser';
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from 'events';
|
||||||
import * as express from 'express';
|
import express from 'express';
|
||||||
import type { Socket } from 'net';
|
import type { Socket } from 'net';
|
||||||
import * as path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import * as utils from './utils';
|
import * as utils from './utils.js';
|
||||||
import { ExpectedError } from '../errors';
|
import { ExpectedError } from '../errors.js';
|
||||||
|
|
||||||
export class LoginServer extends EventEmitter {
|
export class LoginServer extends EventEmitter {
|
||||||
protected expressApp: express.Express;
|
protected expressApp: express.Express;
|
||||||
@ -56,7 +56,7 @@ export class LoginServer extends EventEmitter {
|
|||||||
);
|
);
|
||||||
|
|
||||||
app.set('view engine', 'ejs');
|
app.set('view engine', 'ejs');
|
||||||
app.set('views', path.join(__dirname, 'pages'));
|
app.set('views', path.join(import.meta.dirname, 'pages'));
|
||||||
|
|
||||||
this.server = await new Promise<import('net').Server>((resolve, reject) => {
|
this.server = await new Promise<import('net').Server>((resolve, reject) => {
|
||||||
const callback = (err: Error) => {
|
const callback = (err: Error) => {
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getBalenaSdk } from '../utils/lazy';
|
import { getBalenaSdk } from '../utils/lazy.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get dashboard CLI login URL
|
* Get dashboard CLI login URL
|
||||||
|
@ -19,8 +19,8 @@ import { Command } from '@oclif/core';
|
|||||||
import {
|
import {
|
||||||
InsufficientPrivilegesError,
|
InsufficientPrivilegesError,
|
||||||
NotAvailableInOfflineModeError,
|
NotAvailableInOfflineModeError,
|
||||||
} from './errors';
|
} from './errors.js';
|
||||||
import { stripIndent } from './utils/lazy';
|
import { stripIndent } from './utils/lazy.js';
|
||||||
|
|
||||||
export default abstract class BalenaCommand extends Command {
|
export default abstract class BalenaCommand extends Command {
|
||||||
/**
|
/**
|
||||||
@ -70,7 +70,7 @@ export default abstract class BalenaCommand extends Command {
|
|||||||
* - other code needs to execute before check
|
* - other code needs to execute before check
|
||||||
*/
|
*/
|
||||||
protected static async checkElevatedPrivileges() {
|
protected static async checkElevatedPrivileges() {
|
||||||
const isElevated = await (await import('is-elevated'))();
|
const isElevated = await (await import('is-elevated')).default();
|
||||||
if (!isElevated) {
|
if (!isElevated) {
|
||||||
throw new InsufficientPrivilegesError(
|
throw new InsufficientPrivilegesError(
|
||||||
'You need root/admin privileges to run this command',
|
'You need root/admin privileges to run this command',
|
||||||
@ -93,7 +93,7 @@ export default abstract class BalenaCommand extends Command {
|
|||||||
* @throws {NotLoggedInError}
|
* @throws {NotLoggedInError}
|
||||||
*/
|
*/
|
||||||
public static async checkLoggedIn() {
|
public static async checkLoggedIn() {
|
||||||
await (await import('./utils/patterns')).checkLoggedIn();
|
await (await import('./utils/patterns.js')).checkLoggedIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -138,14 +138,14 @@ export default abstract class BalenaCommand extends Command {
|
|||||||
* values from stdin based in configuration, minimising command implementation.
|
* values from stdin based in configuration, minimising command implementation.
|
||||||
*/
|
*/
|
||||||
protected async getStdin() {
|
protected async getStdin() {
|
||||||
this.stdin = await (await import('get-stdin'))();
|
this.stdin = await (await import('get-stdin')).default();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a logger instance.
|
* Get a logger instance.
|
||||||
*/
|
*/
|
||||||
protected static async getLogger() {
|
protected static async getLogger() {
|
||||||
return (await import('./utils/logger')).getLogger();
|
return (await import('./utils/logger.js')).default.getLogger();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async init() {
|
protected async init() {
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class GenerateCmd extends Command {
|
export default class GenerateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class RevokeCmd extends Command {
|
export default class RevokeCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ApiKeysCmd extends Command {
|
export default class ApiKeysCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -46,7 +46,7 @@ export default class ApiKeysCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { flags: options } = await this.parse(ApiKeysCmd);
|
const { flags: options } = await this.parse(ApiKeysCmd);
|
||||||
|
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
const actorId = options.fleet
|
const actorId = options.fleet
|
||||||
? (
|
? (
|
||||||
await getApplication(getBalenaSdk(), options.fleet, {
|
await getApplication(getBalenaSdk(), options.fleet, {
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class AppCreateCmd extends Command {
|
export default class AppCreateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -77,7 +77,7 @@ export default class AppCreateCmd extends Command {
|
|||||||
const { args: params, flags: options } = await this.parse(AppCreateCmd);
|
const { args: params, flags: options } = await this.parse(AppCreateCmd);
|
||||||
|
|
||||||
await (
|
await (
|
||||||
await import('../../utils/application-create')
|
await import('../../utils/application-create.js')
|
||||||
).applicationCreateBase('app', options, params);
|
).applicationCreateBase('app', options, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class BlockCreateCmd extends Command {
|
export default class BlockCreateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -77,7 +77,7 @@ export default class BlockCreateCmd extends Command {
|
|||||||
const { args: params, flags: options } = await this.parse(BlockCreateCmd);
|
const { args: params, flags: options } = await this.parse(BlockCreateCmd);
|
||||||
|
|
||||||
await (
|
await (
|
||||||
await import('../../utils/application-create')
|
await import('../../utils/application-create.js')
|
||||||
).applicationCreateBase('block', options, params);
|
).applicationCreateBase('block', options, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args, Flags } from '@oclif/core';
|
import { Args, Flags } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { getBalenaSdk } from '../../utils/lazy';
|
import { getBalenaSdk } from '../../utils/lazy.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as compose from '../../utils/compose';
|
import * as compose from '../../utils/compose.js';
|
||||||
import type {
|
import type {
|
||||||
ApplicationType,
|
ApplicationType,
|
||||||
BalenaSDK,
|
BalenaSDK,
|
||||||
@ -31,11 +31,15 @@ import {
|
|||||||
buildArgDeprecation,
|
buildArgDeprecation,
|
||||||
dockerignoreHelp,
|
dockerignoreHelp,
|
||||||
registrySecretsHelp,
|
registrySecretsHelp,
|
||||||
} from '../../utils/messages';
|
} from '../../utils/messages.js';
|
||||||
import type { ComposeCliFlags, ComposeOpts } from '../../utils/compose-types';
|
import type {
|
||||||
import { buildProject, composeCliFlags } from '../../utils/compose_ts';
|
ComposeCliFlags,
|
||||||
import type { BuildOpts, DockerCliFlags } from '../../utils/docker';
|
ComposeOpts,
|
||||||
import { dockerCliFlags } from '../../utils/docker';
|
} from '../../utils/compose-types.js';
|
||||||
|
import { buildProject, composeCliFlags } from '../../utils/compose_ts.js';
|
||||||
|
import type { BuildOpts, DockerCliFlags } from '../../utils/docker.js';
|
||||||
|
import { dockerCliFlags } from '../../utils/docker.js';
|
||||||
|
import type Dockerode from 'dockerode';
|
||||||
|
|
||||||
// TODO: For this special one we can't use Interfaces.InferredFlags/InferredArgs
|
// TODO: For this special one we can't use Interfaces.InferredFlags/InferredArgs
|
||||||
// because of the 'registry-secrets' type which is defined in the actual code
|
// because of the 'registry-secrets' type which is defined in the actual code
|
||||||
@ -157,14 +161,16 @@ ${dockerignoreHelp}
|
|||||||
(opts.fleet == null && (opts.arch == null || opts.deviceType == null)) ||
|
(opts.fleet == null && (opts.arch == null || opts.deviceType == null)) ||
|
||||||
(opts.fleet != null && (opts.arch != null || opts.deviceType != null))
|
(opts.fleet != null && (opts.arch != null || opts.deviceType != null))
|
||||||
) {
|
) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
throw new ExpectedError(
|
throw new ExpectedError(
|
||||||
'You must specify either a fleet (-f), or the device type (-d) and optionally the architecture (-A)',
|
'You must specify either a fleet (-f), or the device type (-d) and optionally the architecture (-A)',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate project directory
|
// Validate project directory
|
||||||
const { validateProjectDirectory } = await import('../../utils/compose_ts');
|
const { validateProjectDirectory } = await import(
|
||||||
|
'../../utils/compose_ts.js'
|
||||||
|
);
|
||||||
const { dockerfilePath, registrySecrets } = await validateProjectDirectory(
|
const { dockerfilePath, registrySecrets } = await validateProjectDirectory(
|
||||||
sdk,
|
sdk,
|
||||||
{
|
{
|
||||||
@ -197,7 +203,7 @@ ${dockerignoreHelp}
|
|||||||
)) as PineTypedResult<DeviceType, typeof deviceTypeOpts>
|
)) as PineTypedResult<DeviceType, typeof deviceTypeOpts>
|
||||||
).is_of__cpu_architecture[0].slug;
|
).is_of__cpu_architecture[0].slug;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
if (err instanceof sdk.errors.BalenaInvalidDeviceType) {
|
if (err instanceof sdk.errors.BalenaInvalidDeviceType) {
|
||||||
let message = err.message;
|
let message = err.message;
|
||||||
if (!(await sdk.auth.isLoggedIn())) {
|
if (!(await sdk.auth.isLoggedIn())) {
|
||||||
@ -214,7 +220,7 @@ ${dockerignoreHelp}
|
|||||||
|
|
||||||
protected async getAppAndResolveArch(opts: FlagsDef) {
|
protected async getAppAndResolveArch(opts: FlagsDef) {
|
||||||
if (opts.fleet) {
|
if (opts.fleet) {
|
||||||
const { getAppWithArch } = await import('../../utils/helpers');
|
const { getAppWithArch } = await import('../../utils/helpers.js');
|
||||||
const app = await getAppWithArch(opts.fleet);
|
const app = await getAppWithArch(opts.fleet);
|
||||||
opts.arch = app.arch;
|
opts.arch = app.arch;
|
||||||
opts.deviceType = app.is_for__device_type[0].slug;
|
opts.deviceType = app.is_for__device_type[0].slug;
|
||||||
@ -222,8 +228,14 @@ ${dockerignoreHelp}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async prepareBuild(options: FlagsDef) {
|
protected async prepareBuild(options: FlagsDef): Promise<{
|
||||||
const { getDocker, generateBuildOpts } = await import('../../utils/docker');
|
docker: Dockerode;
|
||||||
|
buildOpts: BuildOpts;
|
||||||
|
composeOpts: ComposeOpts;
|
||||||
|
}> {
|
||||||
|
const { getDocker, generateBuildOpts } = await import(
|
||||||
|
'../../utils/docker.js'
|
||||||
|
);
|
||||||
const [docker, buildOpts, composeOpts] = await Promise.all([
|
const [docker, buildOpts, composeOpts] = await Promise.all([
|
||||||
getDocker(options),
|
getDocker(options),
|
||||||
generateBuildOpts(options),
|
generateBuildOpts(options),
|
||||||
@ -251,7 +263,7 @@ ${dockerignoreHelp}
|
|||||||
*/
|
*/
|
||||||
protected async buildProject(
|
protected async buildProject(
|
||||||
docker: import('dockerode'),
|
docker: import('dockerode'),
|
||||||
logger: import('../../utils/logger'),
|
logger: import('../../utils/logger.js').default,
|
||||||
composeOpts: ComposeOpts,
|
composeOpts: ComposeOpts,
|
||||||
opts: {
|
opts: {
|
||||||
appType?: Pick<ApplicationType, 'supports_multicontainer'>;
|
appType?: Pick<ApplicationType, 'supports_multicontainer'>;
|
||||||
@ -261,7 +273,7 @@ ${dockerignoreHelp}
|
|||||||
buildOpts: BuildOpts;
|
buildOpts: BuildOpts;
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
const { loadProject } = await import('../../utils/compose_ts');
|
const { loadProject } = await import('../../utils/compose_ts.js');
|
||||||
|
|
||||||
const project = await loadProject(
|
const project = await loadProject(
|
||||||
logger,
|
logger,
|
||||||
|
@ -17,14 +17,14 @@
|
|||||||
|
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import type { Interfaces } from '@oclif/core';
|
import type { Interfaces } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getCliForm, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getCliForm, stripIndent } from '../../utils/lazy.js';
|
||||||
import {
|
import {
|
||||||
applicationIdInfo,
|
applicationIdInfo,
|
||||||
devModeInfo,
|
devModeInfo,
|
||||||
secureBootInfo,
|
secureBootInfo,
|
||||||
} from '../../utils/messages';
|
} from '../../utils/messages.js';
|
||||||
import type { BalenaSDK, PineDeferred } from 'balena-sdk';
|
import type { BalenaSDK, PineDeferred } from 'balena-sdk';
|
||||||
|
|
||||||
export default class ConfigGenerateCmd extends Command {
|
export default class ConfigGenerateCmd extends Command {
|
||||||
@ -67,17 +67,14 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
description: 'a balenaOS version',
|
description: 'a balenaOS version',
|
||||||
required: true,
|
required: true,
|
||||||
}),
|
}),
|
||||||
fleet: { ...cf.fleet, exclusive: ['device'] },
|
fleet: cf.fleetExclusive(['device']),
|
||||||
dev: cf.dev,
|
dev: cf.dev,
|
||||||
secureBoot: cf.secureBoot,
|
secureBoot: cf.secureBoot,
|
||||||
device: {
|
device: cf.deviceExclusive([
|
||||||
...cf.device,
|
'fleet',
|
||||||
exclusive: [
|
'provisioning-key-name',
|
||||||
'fleet',
|
'provisioning-key-expiry-date',
|
||||||
'provisioning-key-name',
|
]),
|
||||||
'provisioning-key-expiry-date',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
deviceApiKey: Flags.string({
|
deviceApiKey: Flags.string({
|
||||||
description:
|
description:
|
||||||
'custom device key - note that this is only supported on balenaOS 2.0.3+',
|
'custom device key - note that this is only supported on balenaOS 2.0.3+',
|
||||||
@ -126,7 +123,7 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
public static authenticated = true;
|
public static authenticated = true;
|
||||||
|
|
||||||
public async getApplication(balena: BalenaSDK, fleet: string) {
|
public async getApplication(balena: BalenaSDK, fleet: string) {
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
return await getApplication(balena, fleet, {
|
return await getApplication(balena, fleet, {
|
||||||
$select: 'slug',
|
$select: 'slug',
|
||||||
$expand: {
|
$expand: {
|
||||||
@ -152,7 +149,7 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
$expand: { is_of__device_type: { $select: 'slug' } },
|
$expand: { is_of__device_type: { $select: 'slug' } },
|
||||||
});
|
});
|
||||||
if (!rawDevice.belongs_to__application) {
|
if (!rawDevice.belongs_to__application) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
throw new ExpectedError(stripIndent`
|
throw new ExpectedError(stripIndent`
|
||||||
Device ${options.device} does not appear to belong to an accessible fleet.
|
Device ${options.device} does not appear to belong to an accessible fleet.
|
||||||
Try with a different device, or use '--fleet' instead of '--device'.`);
|
Try with a different device, or use '--fleet' instead of '--device'.`);
|
||||||
@ -171,14 +168,14 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
|
|
||||||
// Check compatibility if application and deviceType provided
|
// Check compatibility if application and deviceType provided
|
||||||
if (options.fleet && options.deviceType) {
|
if (options.fleet && options.deviceType) {
|
||||||
const helpers = await import('../../utils/helpers');
|
const helpers = await import('../../utils/helpers.js');
|
||||||
if (
|
if (
|
||||||
!(await helpers.areDeviceTypesCompatible(
|
!(await helpers.areDeviceTypesCompatible(
|
||||||
resourceDeviceType,
|
resourceDeviceType,
|
||||||
deviceType,
|
deviceType,
|
||||||
))
|
))
|
||||||
) {
|
) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
throw new ExpectedError(
|
throw new ExpectedError(
|
||||||
`Device type ${options.deviceType} is incompatible with fleet ${options.fleet}`,
|
`Device type ${options.deviceType} is incompatible with fleet ${options.fleet}`,
|
||||||
);
|
);
|
||||||
@ -189,7 +186,7 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
await balena.models.config.getDeviceTypeManifestBySlug(deviceType);
|
await balena.models.config.getDeviceTypeManifestBySlug(deviceType);
|
||||||
|
|
||||||
const { validateSecureBootOptionAndWarn } = await import(
|
const { validateSecureBootOptionAndWarn } = await import(
|
||||||
'../../utils/config'
|
'../../utils/config.js'
|
||||||
);
|
);
|
||||||
await validateSecureBootOptionAndWarn(
|
await validateSecureBootOptionAndWarn(
|
||||||
options.secureBoot,
|
options.secureBoot,
|
||||||
@ -211,7 +208,7 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
|
|
||||||
// Generate config
|
// Generate config
|
||||||
const { generateDeviceConfig, generateApplicationConfig } = await import(
|
const { generateDeviceConfig, generateApplicationConfig } = await import(
|
||||||
'../../utils/config'
|
'../../utils/config.js'
|
||||||
);
|
);
|
||||||
|
|
||||||
let config;
|
let config;
|
||||||
@ -250,7 +247,7 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
protected async validateOptions(
|
protected async validateOptions(
|
||||||
options: Interfaces.InferredFlags<typeof ConfigGenerateCmd.flags>,
|
options: Interfaces.InferredFlags<typeof ConfigGenerateCmd.flags>,
|
||||||
) {
|
) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
|
|
||||||
if (options.device == null && options.fleet == null) {
|
if (options.device == null && options.fleet == null) {
|
||||||
throw new ExpectedError(this.missingDeviceOrAppMessage);
|
throw new ExpectedError(this.missingDeviceOrAppMessage);
|
||||||
@ -259,9 +256,9 @@ export default class ConfigGenerateCmd extends Command {
|
|||||||
if (!options.fleet && options.deviceType) {
|
if (!options.fleet && options.deviceType) {
|
||||||
throw new ExpectedError(this.deviceTypeNotAllowedMessage);
|
throw new ExpectedError(this.deviceTypeNotAllowedMessage);
|
||||||
}
|
}
|
||||||
const { normalizeOsVersion } = await import('../../utils/normalization');
|
const { normalizeOsVersion } = await import('../../utils/normalization.js');
|
||||||
options.version = normalizeOsVersion(options.version);
|
options.version = normalizeOsVersion(options.version);
|
||||||
const { validateDevOptionAndWarn } = await import('../../utils/config');
|
const { validateDevOptionAndWarn } = await import('../../utils/config.js');
|
||||||
await validateDevOptionAndWarn(options.dev, options.version);
|
await validateDevOptionAndWarn(options.dev, options.version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getVisuals, stripIndent } from '../../utils/lazy';
|
import { getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ConfigInjectCmd extends Command {
|
export default class ConfigInjectCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -56,7 +56,7 @@ export default class ConfigInjectCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params, flags: options } = await this.parse(ConfigInjectCmd);
|
const { args: params, flags: options } = await this.parse(ConfigInjectCmd);
|
||||||
|
|
||||||
const { safeUmount } = await import('../../utils/umount');
|
const { safeUmount } = await import('../../utils/umount.js');
|
||||||
|
|
||||||
const drive =
|
const drive =
|
||||||
options.drive || (await getVisuals().drive('Select the device/OS drive'));
|
options.drive || (await getVisuals().drive('Select the device/OS drive'));
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getVisuals, stripIndent } from '../../utils/lazy';
|
import { getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ConfigReadCmd extends Command {
|
export default class ConfigReadCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -50,7 +50,7 @@ export default class ConfigReadCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { flags: options } = await this.parse(ConfigReadCmd);
|
const { flags: options } = await this.parse(ConfigReadCmd);
|
||||||
|
|
||||||
const { safeUmount } = await import('../../utils/umount');
|
const { safeUmount } = await import('../../utils/umount.js');
|
||||||
|
|
||||||
const drive =
|
const drive =
|
||||||
options.drive || (await getVisuals().drive('Select the device drive'));
|
options.drive || (await getVisuals().drive('Select the device drive'));
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getVisuals, stripIndent } from '../../utils/lazy';
|
import { getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ConfigReconfigureCmd extends Command {
|
export default class ConfigReconfigureCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -59,7 +59,7 @@ export default class ConfigReconfigureCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { flags: options } = await this.parse(ConfigReconfigureCmd);
|
const { flags: options } = await this.parse(ConfigReconfigureCmd);
|
||||||
|
|
||||||
const { safeUmount } = await import('../../utils/umount');
|
const { safeUmount } = await import('../../utils/umount.js');
|
||||||
|
|
||||||
const drive =
|
const drive =
|
||||||
options.drive || (await getVisuals().drive('Select the device drive'));
|
options.drive || (await getVisuals().drive('Select the device drive'));
|
||||||
@ -70,7 +70,7 @@ export default class ConfigReconfigureCmd extends Command {
|
|||||||
await safeUmount(drive);
|
await safeUmount(drive);
|
||||||
|
|
||||||
if (!uuid) {
|
if (!uuid) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
throw new ExpectedError(
|
throw new ExpectedError(
|
||||||
`Error: UUID not found in 'config.json' file for '${drive}'`,
|
`Error: UUID not found in 'config.json' file for '${drive}'`,
|
||||||
);
|
);
|
||||||
@ -84,7 +84,7 @@ export default class ConfigReconfigureCmd extends Command {
|
|||||||
configureCommand.push('--advanced');
|
configureCommand.push('--advanced');
|
||||||
}
|
}
|
||||||
|
|
||||||
const { runCommand } = await import('../../utils/helpers');
|
const { runCommand } = await import('../../utils/helpers.js');
|
||||||
await runCommand(configureCommand);
|
await runCommand(configureCommand);
|
||||||
|
|
||||||
console.info('Done');
|
console.info('Done');
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getVisuals, stripIndent } from '../../utils/lazy';
|
import { getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ConfigWriteCmd extends Command {
|
export default class ConfigWriteCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -61,7 +61,7 @@ export default class ConfigWriteCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params, flags: options } = await this.parse(ConfigWriteCmd);
|
const { args: params, flags: options } = await this.parse(ConfigWriteCmd);
|
||||||
|
|
||||||
const { denyMount, safeUmount } = await import('../../utils/umount');
|
const { denyMount, safeUmount } = await import('../../utils/umount.js');
|
||||||
|
|
||||||
const drive =
|
const drive =
|
||||||
options.drive || (await getVisuals().drive('Select the device drive'));
|
options.drive || (await getVisuals().drive('Select the device drive'));
|
||||||
|
@ -18,31 +18,31 @@
|
|||||||
import { Args, Flags } from '@oclif/core';
|
import { Args, Flags } from '@oclif/core';
|
||||||
import type { ImageDescriptor } from '@balena/compose/dist/parse';
|
import type { ImageDescriptor } from '@balena/compose/dist/parse';
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import { getBalenaSdk, getChalk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getChalk, stripIndent } from '../../utils/lazy.js';
|
||||||
import {
|
import {
|
||||||
dockerignoreHelp,
|
dockerignoreHelp,
|
||||||
registrySecretsHelp,
|
registrySecretsHelp,
|
||||||
buildArgDeprecation,
|
buildArgDeprecation,
|
||||||
} from '../../utils/messages';
|
} from '../../utils/messages.js';
|
||||||
import * as ca from '../../utils/common-args';
|
import * as ca from '../../utils/common-args.js';
|
||||||
import * as compose from '../../utils/compose';
|
import * as compose from '../../utils/compose.js';
|
||||||
import type {
|
import type {
|
||||||
BuiltImage,
|
BuiltImage,
|
||||||
ComposeCliFlags,
|
ComposeCliFlags,
|
||||||
ComposeOpts,
|
ComposeOpts,
|
||||||
Release as ComposeReleaseInfo,
|
Release as ComposeReleaseInfo,
|
||||||
} from '../../utils/compose-types';
|
} from '../../utils/compose-types.js';
|
||||||
import type { BuildOpts, DockerCliFlags } from '../../utils/docker';
|
import type { BuildOpts, DockerCliFlags } from '../../utils/docker.js';
|
||||||
import {
|
import {
|
||||||
applyReleaseTagKeysAndValues,
|
applyReleaseTagKeysAndValues,
|
||||||
buildProject,
|
buildProject,
|
||||||
composeCliFlags,
|
composeCliFlags,
|
||||||
isBuildConfig,
|
isBuildConfig,
|
||||||
parseReleaseTagKeysAndValues,
|
parseReleaseTagKeysAndValues,
|
||||||
} from '../../utils/compose_ts';
|
} from '../../utils/compose_ts.js';
|
||||||
import { dockerCliFlags } from '../../utils/docker';
|
import { dockerCliFlags } from '../../utils/docker.js';
|
||||||
import type { ApplicationType, DeviceType, Release } from 'balena-sdk';
|
import type { ApplicationType, DeviceType, Release } from 'balena-sdk';
|
||||||
|
|
||||||
interface ApplicationWithArch {
|
interface ApplicationWithArch {
|
||||||
@ -175,7 +175,7 @@ ${dockerignoreHelp}
|
|||||||
|
|
||||||
const sdk = getBalenaSdk();
|
const sdk = getBalenaSdk();
|
||||||
const { getRegistrySecrets, validateProjectDirectory } = await import(
|
const { getRegistrySecrets, validateProjectDirectory } = await import(
|
||||||
'../../utils/compose_ts'
|
'../../utils/compose_ts.js'
|
||||||
);
|
);
|
||||||
|
|
||||||
const { releaseTagKeys, releaseTagValues } = parseReleaseTagKeysAndValues(
|
const { releaseTagKeys, releaseTagValues } = parseReleaseTagKeysAndValues(
|
||||||
@ -199,10 +199,10 @@ ${dockerignoreHelp}
|
|||||||
(options as FlagsDef)['registry-secrets'] = registrySecrets;
|
(options as FlagsDef)['registry-secrets'] = registrySecrets;
|
||||||
}
|
}
|
||||||
|
|
||||||
const helpers = await import('../../utils/helpers');
|
const helpers = await import('../../utils/helpers.js');
|
||||||
const app = await helpers.getAppWithArch(fleet);
|
const app = await helpers.getAppWithArch(fleet);
|
||||||
|
|
||||||
const dockerUtils = await import('../../utils/docker');
|
const dockerUtils = await import('../../utils/docker.js');
|
||||||
const [docker, buildOpts, composeOpts] = await Promise.all([
|
const [docker, buildOpts, composeOpts] = await Promise.all([
|
||||||
dockerUtils.getDocker(options),
|
dockerUtils.getDocker(options),
|
||||||
dockerUtils.generateBuildOpts(options as FlagsDef),
|
dockerUtils.generateBuildOpts(options as FlagsDef),
|
||||||
@ -232,7 +232,7 @@ ${dockerignoreHelp}
|
|||||||
|
|
||||||
async deployProject(
|
async deployProject(
|
||||||
docker: import('dockerode'),
|
docker: import('dockerode'),
|
||||||
logger: import('../../utils/logger'),
|
logger: import('../../utils/logger.js').default,
|
||||||
composeOpts: ComposeOpts,
|
composeOpts: ComposeOpts,
|
||||||
opts: {
|
opts: {
|
||||||
app: ApplicationWithArch; // the application instance to deploy to
|
app: ApplicationWithArch; // the application instance to deploy to
|
||||||
@ -250,7 +250,7 @@ ${dockerignoreHelp}
|
|||||||
const doodles = await import('resin-doodles');
|
const doodles = await import('resin-doodles');
|
||||||
const sdk = getBalenaSdk();
|
const sdk = getBalenaSdk();
|
||||||
const { deployProject: $deployProject, loadProject } = await import(
|
const { deployProject: $deployProject, loadProject } = await import(
|
||||||
'../../utils/compose_ts'
|
'../../utils/compose_ts.js'
|
||||||
);
|
);
|
||||||
|
|
||||||
const appType = opts.app.application_type[0];
|
const appType = opts.app.application_type[0];
|
||||||
@ -321,7 +321,7 @@ ${dockerignoreHelp}
|
|||||||
builtImagesByService = _.keyBy(builtImages, 'serviceName');
|
builtImagesByService = _.keyBy(builtImages, 'serviceName');
|
||||||
}
|
}
|
||||||
const images: BuiltImage[] = project.descriptors.map(
|
const images: BuiltImage[] = project.descriptors.map(
|
||||||
(d) =>
|
(d: ImageDescriptor) =>
|
||||||
builtImagesByService[d.serviceName] ?? {
|
builtImagesByService[d.serviceName] ?? {
|
||||||
serviceName: d.serviceName,
|
serviceName: d.serviceName,
|
||||||
name: (isBuildConfig(d.image) ? d.image.tag : d.image) || '',
|
name: (isBuildConfig(d.image) ? d.image.tag : d.image) || '',
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DeviceDeactivateCmd extends Command {
|
export default class DeviceDeactivateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -55,7 +55,7 @@ export default class DeviceDeactivateCmd extends Command {
|
|||||||
await this.parse(DeviceDeactivateCmd);
|
await this.parse(DeviceDeactivateCmd);
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
const patterns = await import('../../utils/patterns');
|
const patterns = await import('../../utils/patterns.js');
|
||||||
|
|
||||||
const uuid = params.uuid;
|
const uuid = params.uuid;
|
||||||
const deactivationWarning = `
|
const deactivationWarning = `
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
|
|
||||||
export default class DeviceIdentifyCmd extends Command {
|
export default class DeviceIdentifyCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { expandForAppName } from '../../utils/helpers';
|
import { expandForAppName } from '../../utils/helpers.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import { jsonInfo } from '../../utils/messages';
|
import { jsonInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
import type { Application, Release } from 'balena-sdk';
|
import type { Application, Release } from 'balena-sdk';
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ export default class DeviceCmd extends Command {
|
|||||||
)) as ExtendedDevice;
|
)) as ExtendedDevice;
|
||||||
|
|
||||||
if (options.view) {
|
if (options.view) {
|
||||||
const open = await import('open');
|
const { default: open } = await import('open');
|
||||||
const dashboardUrl = balena.models.device.getDashboardUrl(device.uuid);
|
const dashboardUrl = balena.models.device.getDashboardUrl(device.uuid);
|
||||||
await open(dashboardUrl, { wait: false });
|
await open(dashboardUrl, { wait: false });
|
||||||
return;
|
return;
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
import { runCommand } from '../../utils/helpers';
|
import { runCommand } from '../../utils/helpers.js';
|
||||||
|
|
||||||
interface FlagsDef {
|
interface FlagsDef {
|
||||||
fleet?: string;
|
fleet?: string;
|
||||||
@ -113,12 +113,12 @@ export default class DeviceInitCmd extends Command {
|
|||||||
|
|
||||||
// Imports
|
// Imports
|
||||||
const { promisify } = await import('util');
|
const { promisify } = await import('util');
|
||||||
const rimraf = promisify(await import('rimraf'));
|
const { rimraf } = await import('rimraf');
|
||||||
const tmp = await import('tmp');
|
const tmp = await import('tmp');
|
||||||
const tmpNameAsync = promisify(tmp.tmpName);
|
const tmpNameAsync = promisify(tmp.tmpName);
|
||||||
tmp.setGracefulCleanup();
|
tmp.setGracefulCleanup();
|
||||||
const { downloadOSImage } = await import('../../utils/cloud');
|
const { downloadOSImage } = await import('../../utils/cloud.js');
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
const logger = await Command.getLogger();
|
const logger = await Command.getLogger();
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
@ -133,7 +133,7 @@ export default class DeviceInitCmd extends Command {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
: await (await import('../../utils/patterns')).selectApplication();
|
: await (await import('../../utils/patterns.js')).selectApplication();
|
||||||
|
|
||||||
// Register new device
|
// Register new device
|
||||||
const deviceUuid = balena.models.device.generateUniqueKey();
|
const deviceUuid = balena.models.device.generateUniqueKey();
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DeviceLocalModeCmd extends Command {
|
export default class DeviceLocalModeCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -22,11 +22,11 @@ import type {
|
|||||||
PineOptions,
|
PineOptions,
|
||||||
PineTypedResult,
|
PineTypedResult,
|
||||||
} from 'balena-sdk';
|
} from 'balena-sdk';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class DeviceMoveCmd extends Command {
|
export default class DeviceMoveCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -101,7 +101,7 @@ export default class DeviceMoveCmd extends Command {
|
|||||||
const devices = await this.getDevices(balena, deviceUuids);
|
const devices = await this.getDevices(balena, deviceUuids);
|
||||||
|
|
||||||
// Disambiguate application
|
// Disambiguate application
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
// Get destination application
|
// Get destination application
|
||||||
const application = options.fleet
|
const application = options.fleet
|
||||||
@ -151,7 +151,7 @@ export default class DeviceMoveCmd extends Command {
|
|||||||
})
|
})
|
||||||
.map((deviceType) => deviceType.id);
|
.map((deviceType) => deviceType.id);
|
||||||
|
|
||||||
const patterns = await import('../../utils/patterns');
|
const patterns = await import('../../utils/patterns.js');
|
||||||
try {
|
try {
|
||||||
const application = await patterns.selectApplication(
|
const application = await patterns.selectApplication(
|
||||||
{
|
{
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy.js';
|
||||||
import type { Device } from 'balena-sdk';
|
import type { Device } from 'balena-sdk';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
|
|
||||||
export default class DeviceOsUpdateCmd extends Command {
|
export default class DeviceOsUpdateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -122,7 +122,9 @@ export default class DeviceOsUpdateCmd extends Command {
|
|||||||
// Get target OS version
|
// Get target OS version
|
||||||
let targetOsVersion = options.version;
|
let targetOsVersion = options.version;
|
||||||
if (targetOsVersion != null) {
|
if (targetOsVersion != null) {
|
||||||
const { normalizeOsVersion } = await import('../../utils/normalization');
|
const { normalizeOsVersion } = await import(
|
||||||
|
'../../utils/normalization.js'
|
||||||
|
);
|
||||||
targetOsVersion = normalizeOsVersion(targetOsVersion);
|
targetOsVersion = normalizeOsVersion(targetOsVersion);
|
||||||
if (!hupVersionInfo.versions.includes(targetOsVersion)) {
|
if (!hupVersionInfo.versions.includes(targetOsVersion)) {
|
||||||
throw new ExpectedError(
|
throw new ExpectedError(
|
||||||
@ -143,7 +145,7 @@ export default class DeviceOsUpdateCmd extends Command {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const patterns = await import('../../utils/patterns');
|
const patterns = await import('../../utils/patterns.js');
|
||||||
// Confirm and start update
|
// Confirm and start update
|
||||||
await patterns.confirm(
|
await patterns.confirm(
|
||||||
options.yes || false,
|
options.yes || false,
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { getExpandedProp } from '../../utils/pine';
|
import { getExpandedProp } from '../../utils/pine.js';
|
||||||
|
|
||||||
export default class DevicePinCmd extends Command {
|
export default class DevicePinCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DevicePublicUrlCmd extends Command {
|
export default class DevicePublicUrlCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DevicePurgeCmd extends Command {
|
export default class DevicePurgeCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DeviceRebootCmd extends Command {
|
export default class DeviceRebootCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as ca from '../../utils/common-args';
|
import * as ca from '../../utils/common-args.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class DeviceRegisterCmd extends Command {
|
export default class DeviceRegisterCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -64,7 +64,7 @@ export default class DeviceRegisterCmd extends Command {
|
|||||||
const { args: params, flags: options } =
|
const { args: params, flags: options } =
|
||||||
await this.parse(DeviceRegisterCmd);
|
await this.parse(DeviceRegisterCmd);
|
||||||
|
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
|
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DeviceRenameCmd extends Command {
|
export default class DeviceRenameCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy.js';
|
||||||
import type {
|
import type {
|
||||||
BalenaSDK,
|
BalenaSDK,
|
||||||
DeviceWithServiceDetails,
|
DeviceWithServiceDetails,
|
||||||
@ -94,8 +94,8 @@ export default class DeviceRestartCmd extends Command {
|
|||||||
deviceUuid: string,
|
deviceUuid: string,
|
||||||
serviceNames: string[],
|
serviceNames: string[],
|
||||||
) {
|
) {
|
||||||
const { ExpectedError, instanceOf } = await import('../../errors');
|
const { ExpectedError, instanceOf } = await import('../../errors.js');
|
||||||
const { getExpandedProp } = await import('../../utils/pine');
|
const { getExpandedProp } = await import('../../utils/pine.js');
|
||||||
|
|
||||||
// Get device
|
// Get device
|
||||||
let device: DeviceWithServiceDetails<CurrentServiceWithCommit>;
|
let device: DeviceWithServiceDetails<CurrentServiceWithCommit>;
|
||||||
@ -161,7 +161,7 @@ export default class DeviceRestartCmd extends Command {
|
|||||||
// Note: device.restartApplication throws `BalenaDeviceNotFound: Device not found` if device not online.
|
// Note: device.restartApplication throws `BalenaDeviceNotFound: Device not found` if device not online.
|
||||||
// Need to use device.get first to distinguish between non-existant and offline devices.
|
// Need to use device.get first to distinguish between non-existant and offline devices.
|
||||||
// Remove this workaround when SDK issue resolved: https://github.com/balena-io/balena-sdk/issues/649
|
// Remove this workaround when SDK issue resolved: https://github.com/balena-io/balena-sdk/issues/649
|
||||||
const { instanceOf, ExpectedError } = await import('../../errors');
|
const { instanceOf, ExpectedError } = await import('../../errors.js');
|
||||||
try {
|
try {
|
||||||
const device = await balena.models.device.get(deviceUuid);
|
const device = await balena.models.device.get(deviceUuid);
|
||||||
if (!device.is_online) {
|
if (!device.is_online) {
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DeviceRmCmd extends Command {
|
export default class DeviceRmCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -56,7 +56,7 @@ export default class DeviceRmCmd extends Command {
|
|||||||
const { args: params, flags: options } = await this.parse(DeviceRmCmd);
|
const { args: params, flags: options } = await this.parse(DeviceRmCmd);
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
const patterns = await import('../../utils/patterns');
|
const patterns = await import('../../utils/patterns.js');
|
||||||
|
|
||||||
// Confirm
|
// Confirm
|
||||||
const uuids = params.uuid.split(',');
|
const uuids = params.uuid.split(',');
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
|
|
||||||
export default class DeviceShutdownCmd extends Command {
|
export default class DeviceShutdownCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy.js';
|
||||||
import type { BalenaSDK } from 'balena-sdk';
|
import type { BalenaSDK } from 'balena-sdk';
|
||||||
|
|
||||||
export default class DeviceStartServiceCmd extends Command {
|
export default class DeviceStartServiceCmd extends Command {
|
||||||
@ -78,8 +78,8 @@ export default class DeviceStartServiceCmd extends Command {
|
|||||||
deviceUuid: string,
|
deviceUuid: string,
|
||||||
serviceNames: string[],
|
serviceNames: string[],
|
||||||
) {
|
) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
const { getExpandedProp } = await import('../../utils/pine');
|
const { getExpandedProp } = await import('../../utils/pine.js');
|
||||||
|
|
||||||
// Get device
|
// Get device
|
||||||
const device = await balena.models.device.getWithServiceDetails(
|
const device = await balena.models.device.getWithServiceDetails(
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy.js';
|
||||||
import type { BalenaSDK } from 'balena-sdk';
|
import type { BalenaSDK } from 'balena-sdk';
|
||||||
|
|
||||||
export default class DeviceStopServiceCmd extends Command {
|
export default class DeviceStopServiceCmd extends Command {
|
||||||
@ -78,8 +78,8 @@ export default class DeviceStopServiceCmd extends Command {
|
|||||||
deviceUuid: string,
|
deviceUuid: string,
|
||||||
serviceNames: string[],
|
serviceNames: string[],
|
||||||
) {
|
) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
const { getExpandedProp } = await import('../../utils/pine');
|
const { getExpandedProp } = await import('../../utils/pine.js');
|
||||||
|
|
||||||
// Get device
|
// Get device
|
||||||
const device = await balena.models.device.getWithServiceDetails(
|
const device = await balena.models.device.getWithServiceDetails(
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class DeviceTrackFleetCmd extends Command {
|
export default class DeviceTrackFleetCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { expandForAppName } from '../../utils/helpers';
|
import { expandForAppName } from '../../utils/helpers.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo, jsonInfo } from '../../utils/messages';
|
import { applicationIdInfo, jsonInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
import type { Device, PineOptions } from 'balena-sdk';
|
import type { Device, PineOptions } from 'balena-sdk';
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ export default class DevicesCmd extends Command {
|
|||||||
const devices = (
|
const devices = (
|
||||||
await (async () => {
|
await (async () => {
|
||||||
if (options.fleet != null) {
|
if (options.fleet != null) {
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
const application = await getApplication(balena, options.fleet, {
|
const application = await getApplication(balena, options.fleet, {
|
||||||
$select: 'slug',
|
$select: 'slug',
|
||||||
$expand: {
|
$expand: {
|
||||||
@ -115,7 +115,7 @@ export default class DevicesCmd extends Command {
|
|||||||
];
|
];
|
||||||
|
|
||||||
if (options.json) {
|
if (options.json) {
|
||||||
const { pickAndRename } = await import('../../utils/helpers');
|
const { pickAndRename } = await import('../../utils/helpers.js');
|
||||||
const mapped = devices.map((device) => pickAndRename(device, fields));
|
const mapped = devices.map((device) => pickAndRename(device, fields));
|
||||||
console.log(JSON.stringify(mapped, null, 4));
|
console.log(JSON.stringify(mapped, null, 4));
|
||||||
} else {
|
} else {
|
||||||
|
@ -16,12 +16,12 @@
|
|||||||
*/
|
*/
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import type * as BalenaSdk from 'balena-sdk';
|
import type * as BalenaSdk from 'balena-sdk';
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
|
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import { CommandHelp } from '../../utils/oclif-utils';
|
import { CommandHelp } from '../../utils/oclif-utils.js';
|
||||||
|
|
||||||
export default class DevicesSupportedCmd extends Command {
|
export default class DevicesSupportedCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
18
src/commands/env/add.ts
vendored
18
src/commands/env/add.ts
vendored
@ -17,11 +17,11 @@
|
|||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import type * as BalenaSdk from 'balena-sdk';
|
import type * as BalenaSdk from 'balena-sdk';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
interface FlagsDef {
|
interface FlagsDef {
|
||||||
fleet?: string;
|
fleet?: string;
|
||||||
@ -95,8 +95,8 @@ export default class EnvAddCmd extends Command {
|
|||||||
public static usage = 'env add <name> [value]';
|
public static usage = 'env add <name> [value]';
|
||||||
|
|
||||||
public static flags = {
|
public static flags = {
|
||||||
fleet: { ...cf.fleet, exclusive: ['device'] },
|
fleet: cf.fleetExclusive(['device']),
|
||||||
device: { ...cf.device, exclusive: ['fleet'] },
|
device: cf.deviceExclusive(['fleet']),
|
||||||
help: cf.help,
|
help: cf.help,
|
||||||
quiet: cf.quiet,
|
quiet: cf.quiet,
|
||||||
service: cf.service,
|
service: cf.service,
|
||||||
@ -185,7 +185,7 @@ async function resolveFleetSlugs(
|
|||||||
fleetOption: string,
|
fleetOption: string,
|
||||||
) {
|
) {
|
||||||
const fleetSlugs: string[] = [];
|
const fleetSlugs: string[] = [];
|
||||||
const { getFleetSlug } = await import('../../utils/sdk');
|
const { getFleetSlug } = await import('../../utils/sdk.js');
|
||||||
for (const appNameOrSlug of fleetOption.split(',')) {
|
for (const appNameOrSlug of fleetOption.split(',')) {
|
||||||
try {
|
try {
|
||||||
fleetSlugs.push(await getFleetSlug(balena, appNameOrSlug));
|
fleetSlugs.push(await getFleetSlug(balena, appNameOrSlug));
|
||||||
@ -222,7 +222,7 @@ async function setServiceVars(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (options.device) {
|
} else if (options.device) {
|
||||||
const { getDeviceAndAppFromUUID } = await import('../../utils/cloud');
|
const { getDeviceAndAppFromUUID } = await import('../../utils/cloud.js');
|
||||||
for (const uuid of options.device.split(',')) {
|
for (const uuid of options.device.split(',')) {
|
||||||
let device;
|
let device;
|
||||||
let app;
|
let app;
|
||||||
|
10
src/commands/env/rename.ts
vendored
10
src/commands/env/rename.ts
vendored
@ -15,12 +15,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
|
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as ec from '../../utils/env-common';
|
import * as ec from '../../utils/env-common.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { parseAsInteger } from '../../utils/validation';
|
import { parseAsInteger } from '../../utils/validation.js';
|
||||||
|
|
||||||
export default class EnvRenameCmd extends Command {
|
export default class EnvRenameCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
10
src/commands/env/rm.ts
vendored
10
src/commands/env/rm.ts
vendored
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
|
|
||||||
import * as ec from '../../utils/env-common';
|
import * as ec from '../../utils/env-common.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { parseAsInteger } from '../../utils/validation';
|
import { parseAsInteger } from '../../utils/validation.js';
|
||||||
|
|
||||||
export default class EnvRmCmd extends Command {
|
export default class EnvRmCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -71,7 +71,7 @@ export default class EnvRmCmd extends Command {
|
|||||||
|
|
||||||
await Command.checkLoggedIn();
|
await Command.checkLoggedIn();
|
||||||
|
|
||||||
const { confirm } = await import('../../utils/patterns');
|
const { confirm } = await import('../../utils/patterns.js');
|
||||||
await confirm(
|
await confirm(
|
||||||
opt.yes || false,
|
opt.yes || false,
|
||||||
'Are you sure you want to delete the environment variable?',
|
'Are you sure you want to delete the environment variable?',
|
||||||
|
@ -17,12 +17,12 @@
|
|||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import type { Interfaces } from '@oclif/core';
|
import type { Interfaces } from '@oclif/core';
|
||||||
import type * as SDK from 'balena-sdk';
|
import type * as SDK from 'balena-sdk';
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
type FlagsDef = Interfaces.InferredFlags<typeof EnvsCmd.flags>;
|
type FlagsDef = Interfaces.InferredFlags<typeof EnvsCmd.flags>;
|
||||||
|
|
||||||
@ -97,17 +97,17 @@ export default class EnvsCmd extends Command {
|
|||||||
public static usage = 'envs';
|
public static usage = 'envs';
|
||||||
|
|
||||||
public static flags = {
|
public static flags = {
|
||||||
fleet: { ...cf.fleet, exclusive: ['device'] },
|
fleet: cf.fleetExclusive(['device']),
|
||||||
config: Flags.boolean({
|
config: Flags.boolean({
|
||||||
default: false,
|
default: false,
|
||||||
char: 'c',
|
char: 'c',
|
||||||
description: 'show configuration variables only',
|
description: 'show configuration variables only',
|
||||||
exclusive: ['service'],
|
exclusive: ['service'],
|
||||||
}),
|
}),
|
||||||
device: { ...cf.device, exclusive: ['fleet'] },
|
device: cf.deviceExclusive(['fleet']),
|
||||||
help: cf.help,
|
help: cf.help,
|
||||||
json: cf.json,
|
json: cf.json,
|
||||||
service: { ...cf.service, exclusive: ['config'] },
|
service: cf.serviceExclusive(['config']),
|
||||||
};
|
};
|
||||||
|
|
||||||
public async run() {
|
public async run() {
|
||||||
@ -125,14 +125,14 @@ export default class EnvsCmd extends Command {
|
|||||||
|
|
||||||
let fleetSlug: string | undefined = options.fleet
|
let fleetSlug: string | undefined = options.fleet
|
||||||
? await (
|
? await (
|
||||||
await import('../../utils/sdk')
|
await import('../../utils/sdk.js')
|
||||||
).getFleetSlug(balena, options.fleet)
|
).getFleetSlug(balena, options.fleet)
|
||||||
: undefined;
|
: undefined;
|
||||||
let fullUUID: string | undefined; // as oppposed to the short, 7-char UUID
|
let fullUUID: string | undefined; // as oppposed to the short, 7-char UUID
|
||||||
|
|
||||||
if (options.device) {
|
if (options.device) {
|
||||||
const { getDeviceAndMaybeAppFromUUID } = await import(
|
const { getDeviceAndMaybeAppFromUUID } = await import(
|
||||||
'../../utils/cloud'
|
'../../utils/cloud.js'
|
||||||
);
|
);
|
||||||
const [device, app] = await getDeviceAndMaybeAppFromUUID(
|
const [device, app] = await getDeviceAndMaybeAppFromUUID(
|
||||||
balena,
|
balena,
|
||||||
@ -186,7 +186,7 @@ export default class EnvsCmd extends Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options.json) {
|
if (options.json) {
|
||||||
const { pickAndRename } = await import('../../utils/helpers');
|
const { pickAndRename } = await import('../../utils/helpers.js');
|
||||||
const mapped = varArray.map((o) => pickAndRename(o, fields));
|
const mapped = varArray.map((o) => pickAndRename(o, fields));
|
||||||
this.log(JSON.stringify(mapped, null, 4));
|
this.log(JSON.stringify(mapped, null, 4));
|
||||||
} else {
|
} else {
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class FleetCreateCmd extends Command {
|
export default class FleetCreateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -77,7 +77,7 @@ export default class FleetCreateCmd extends Command {
|
|||||||
const { args: params, flags: options } = await this.parse(FleetCreateCmd);
|
const { args: params, flags: options } = await this.parse(FleetCreateCmd);
|
||||||
|
|
||||||
await (
|
await (
|
||||||
await import('../../utils/application-create')
|
await import('../../utils/application-create.js')
|
||||||
).applicationCreateBase('fleet', options, params);
|
).applicationCreateBase('fleet', options, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,11 +17,11 @@
|
|||||||
|
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as ca from '../../utils/common-args';
|
import * as ca from '../../utils/common-args.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class FleetCmd extends Command {
|
export default class FleetCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -58,7 +58,7 @@ export default class FleetCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params, flags: options } = await this.parse(FleetCmd);
|
const { args: params, flags: options } = await this.parse(FleetCmd);
|
||||||
|
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ export default class FleetCmd extends Command {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (options.view) {
|
if (options.view) {
|
||||||
const open = await import('open');
|
const { default: open } = await import('open');
|
||||||
const dashboardUrl = balena.models.application.getDashboardUrl(
|
const dashboardUrl = balena.models.application.getDashboardUrl(
|
||||||
application.id,
|
application.id,
|
||||||
);
|
);
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { getExpandedProp } from '../../utils/pine';
|
import { getExpandedProp } from '../../utils/pine.js';
|
||||||
|
|
||||||
export default class FleetPinCmd extends Command {
|
export default class FleetPinCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as ca from '../../utils/common-args';
|
import * as ca from '../../utils/common-args.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class FleetPurgeCmd extends Command {
|
export default class FleetPurgeCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -51,7 +51,7 @@ export default class FleetPurgeCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params } = await this.parse(FleetPurgeCmd);
|
const { args: params } = await this.parse(FleetPurgeCmd);
|
||||||
|
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
|
|
||||||
|
@ -17,11 +17,11 @@
|
|||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as ca from '../../utils/common-args';
|
import * as ca from '../../utils/common-args.js';
|
||||||
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class FleetRenameCmd extends Command {
|
export default class FleetRenameCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -59,13 +59,15 @@ export default class FleetRenameCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params } = await this.parse(FleetRenameCmd);
|
const { args: params } = await this.parse(FleetRenameCmd);
|
||||||
|
|
||||||
const { validateApplicationName } = await import('../../utils/validation');
|
const { validateApplicationName } = await import(
|
||||||
const { ExpectedError } = await import('../../errors');
|
'../../utils/validation.js'
|
||||||
|
);
|
||||||
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
|
|
||||||
// Disambiguate target application (if params.params is a number, it could either be an ID or a numerical name)
|
// Disambiguate target application (if params.params is a number, it could either be an ID or a numerical name)
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
const application = await getApplication(balena, params.fleet, {
|
const application = await getApplication(balena, params.fleet, {
|
||||||
$select: ['id', 'app_name', 'slug'],
|
$select: ['id', 'app_name', 'slug'],
|
||||||
$expand: {
|
$expand: {
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as ca from '../../utils/common-args';
|
import * as ca from '../../utils/common-args.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class FleetRestartCmd extends Command {
|
export default class FleetRestartCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -50,7 +50,7 @@ export default class FleetRestartCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params } = await this.parse(FleetRestartCmd);
|
const { args: params } = await this.parse(FleetRestartCmd);
|
||||||
|
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
|
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import * as ca from '../../utils/common-args';
|
import * as ca from '../../utils/common-args.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class FleetRmCmd extends Command {
|
export default class FleetRmCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -54,8 +54,8 @@ export default class FleetRmCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params, flags: options } = await this.parse(FleetRmCmd);
|
const { args: params, flags: options } = await this.parse(FleetRmCmd);
|
||||||
|
|
||||||
const { confirm } = await import('../../utils/patterns');
|
const { confirm } = await import('../../utils/patterns.js');
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
|
|
||||||
// Confirm
|
// Confirm
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class FleetTrackLatestCmd extends Command {
|
export default class FleetTrackLatestCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
import type * as BalenaSdk from 'balena-sdk';
|
import type * as BalenaSdk from 'balena-sdk';
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
interface ExtendedApplication extends ApplicationWithDeviceTypeSlug {
|
interface ExtendedApplication extends ApplicationWithDeviceTypeSlug {
|
||||||
device_count: number;
|
device_count: number;
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
import { CommandHelp } from '../../utils/oclif-utils';
|
import { CommandHelp } from '../../utils/oclif-utils.js';
|
||||||
|
|
||||||
// 'Internal' commands are called during the execution of other commands.
|
// 'Internal' commands are called during the execution of other commands.
|
||||||
// `osinit` is called during `os initialize`
|
// `osinit` is called during `os initialize`
|
||||||
@ -63,7 +63,7 @@ export default class OsinitCmd extends Command {
|
|||||||
const config = JSON.parse(params.config);
|
const config = JSON.parse(params.config);
|
||||||
|
|
||||||
const { getManifest, osProgressHandler } = await import(
|
const { getManifest, osProgressHandler } = await import(
|
||||||
'../../utils/helpers'
|
'../../utils/helpers.js'
|
||||||
);
|
);
|
||||||
const manifest = await getManifest(params.image, params.type);
|
const manifest = await getManifest(params.image, params.type);
|
||||||
|
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args, Flags } from '@oclif/core';
|
import { Args, Flags } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
import { parseAsLocalHostnameOrIp } from '../../utils/validation';
|
import { parseAsLocalHostnameOrIp } from '../../utils/validation.js';
|
||||||
|
|
||||||
export default class JoinCmd extends Command {
|
export default class JoinCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -78,7 +78,7 @@ export default class JoinCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params, flags: options } = await this.parse(JoinCmd);
|
const { args: params, flags: options } = await this.parse(JoinCmd);
|
||||||
|
|
||||||
const promote = await import('../../utils/promote');
|
const promote = await import('../../utils/promote.js');
|
||||||
const sdk = getBalenaSdk();
|
const sdk = getBalenaSdk();
|
||||||
const logger = await Command.getLogger();
|
const logger = await Command.getLogger();
|
||||||
return promote.join(
|
return promote.join(
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class KeyAddCmd extends Command {
|
export default class KeyAddCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import { parseAsInteger } from '../../utils/validation';
|
import { parseAsInteger } from '../../utils/validation.js';
|
||||||
|
|
||||||
export default class KeyCmd extends Command {
|
export default class KeyCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { parseAsInteger } from '../../utils/validation';
|
import { parseAsInteger } from '../../utils/validation.js';
|
||||||
|
|
||||||
export default class KeyRmCmd extends Command {
|
export default class KeyRmCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -52,7 +52,7 @@ export default class KeyRmCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params, flags: options } = await this.parse(KeyRmCmd);
|
const { args: params, flags: options } = await this.parse(KeyRmCmd);
|
||||||
|
|
||||||
const patterns = await import('../../utils/patterns');
|
const patterns = await import('../../utils/patterns.js');
|
||||||
|
|
||||||
await patterns.confirm(
|
await patterns.confirm(
|
||||||
options.yes ?? false,
|
options.yes ?? false,
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class KeysCmd extends Command {
|
export default class KeysCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
import { parseAsLocalHostnameOrIp } from '../../utils/validation';
|
import { parseAsLocalHostnameOrIp } from '../../utils/validation.js';
|
||||||
|
|
||||||
export default class LeaveCmd extends Command {
|
export default class LeaveCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -62,7 +62,7 @@ export default class LeaveCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params } = await this.parse(LeaveCmd);
|
const { args: params } = await this.parse(LeaveCmd);
|
||||||
|
|
||||||
const promote = await import('../../utils/promote');
|
const promote = await import('../../utils/promote.js');
|
||||||
const logger = await Command.getLogger();
|
const logger = await Command.getLogger();
|
||||||
return promote.leave(logger, params.deviceIpOrHostname);
|
return promote.leave(logger, params.deviceIpOrHostname);
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import { promisify } from 'util';
|
import { promisify } from 'util';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class LocalConfigureCmd extends Command {
|
export default class LocalConfigureCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -53,8 +53,8 @@ export default class LocalConfigureCmd extends Command {
|
|||||||
const { args: params } = await this.parse(LocalConfigureCmd);
|
const { args: params } = await this.parse(LocalConfigureCmd);
|
||||||
|
|
||||||
const reconfix = await import('reconfix');
|
const reconfix = await import('reconfix');
|
||||||
const { denyMount, safeUmount } = await import('../../utils/umount');
|
const { denyMount, safeUmount } = await import('../../utils/umount.js');
|
||||||
const Logger = await import('../../utils/logger');
|
const { default: Logger } = await import('../../utils/logger.js');
|
||||||
|
|
||||||
const logger = Logger.getLogger();
|
const logger = Logger.getLogger();
|
||||||
|
|
||||||
|
@ -17,10 +17,10 @@
|
|||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import type { BlockDevice } from 'etcher-sdk/build/source-destination';
|
import type { BlockDevice } from 'etcher-sdk/build/source-destination';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getChalk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getChalk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class LocalFlashCmd extends Command {
|
export default class LocalFlashCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -79,7 +79,7 @@ export default class LocalFlashCmd extends Command {
|
|||||||
|
|
||||||
const drive = await this.getDrive(options);
|
const drive = await this.getDrive(options);
|
||||||
|
|
||||||
const { confirm } = await import('../../utils/patterns');
|
const { confirm } = await import('../../utils/patterns.js');
|
||||||
await confirm(
|
await confirm(
|
||||||
options.yes,
|
options.yes,
|
||||||
'This will erase the selected drive. Are you sure?',
|
'This will erase the selected drive. Are you sure?',
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import type { WhoamiResult } from 'balena-sdk';
|
import type { WhoamiResult } from 'balena-sdk';
|
||||||
|
|
||||||
interface FlagsDef {
|
interface FlagsDef {
|
||||||
@ -123,7 +123,7 @@ export default class LoginCmd extends Command {
|
|||||||
const { flags: options, args: params } = await this.parse(LoginCmd);
|
const { flags: options, args: params } = await this.parse(LoginCmd);
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
const messages = await import('../../utils/messages');
|
const messages = await import('../../utils/messages.js');
|
||||||
const balenaUrl = await balena.settings.get('balenaUrl');
|
const balenaUrl = await balena.settings.get('balenaUrl');
|
||||||
|
|
||||||
// Consolidate user/email options
|
// Consolidate user/email options
|
||||||
@ -202,20 +202,20 @@ ${messages.reachingOut}`);
|
|||||||
}
|
}
|
||||||
// Credentials
|
// Credentials
|
||||||
else if (loginOptions.credentials) {
|
else if (loginOptions.credentials) {
|
||||||
const patterns = await import('../../utils/patterns');
|
const patterns = await import('../../utils/patterns.js');
|
||||||
return patterns.authenticate(loginOptions);
|
return patterns.authenticate(loginOptions);
|
||||||
}
|
}
|
||||||
// Web
|
// Web
|
||||||
else if (loginOptions.web) {
|
else if (loginOptions.web) {
|
||||||
const auth = await import('../../auth');
|
const auth = await import('../../auth/index.js');
|
||||||
await auth.login({ port: loginOptions.port });
|
await auth.login({ port: loginOptions.port });
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
const patterns = await import('../../utils/patterns');
|
const patterns = await import('../../utils/patterns.js');
|
||||||
// User had not selected login preference, prompt interactively
|
// User had not selected login preference, prompt interactively
|
||||||
const loginType = await patterns.askLoginType();
|
const loginType = await patterns.askLoginType();
|
||||||
if (loginType === 'register') {
|
if (loginType === 'register') {
|
||||||
const open = await import('open');
|
const { default: open } = await import('open');
|
||||||
const signupUrl = `https://dashboard.${balenaUrl}/signup`;
|
const signupUrl = `https://dashboard.${balenaUrl}/signup`;
|
||||||
await open(signupUrl, { wait: false });
|
await open(signupUrl, { wait: false });
|
||||||
throw new ExpectedError(`Please sign up at ${signupUrl}`);
|
throw new ExpectedError(`Please sign up at ${signupUrl}`);
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class LogoutCmd extends Command {
|
export default class LogoutCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import type { LogMessage } from 'balena-sdk';
|
import type { LogMessage } from 'balena-sdk';
|
||||||
|
|
||||||
const MAX_RETRY = 1000;
|
const MAX_RETRY = 1000;
|
||||||
@ -96,14 +96,14 @@ export default class LogsCmd extends Command {
|
|||||||
const { args: params, flags: options } = await this.parse(LogsCmd);
|
const { args: params, flags: options } = await this.parse(LogsCmd);
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
const { serviceIdToName } = await import('../../utils/cloud');
|
const { serviceIdToName } = await import('../../utils/cloud.js');
|
||||||
const { connectAndDisplayDeviceLogs, displayLogObject } = await import(
|
const { connectAndDisplayDeviceLogs, displayLogObject } = await import(
|
||||||
'../../utils/device/logs'
|
'../../utils/device/logs.js'
|
||||||
);
|
);
|
||||||
const { validateIPAddress, validateDotLocalUrl } = await import(
|
const { validateIPAddress, validateDotLocalUrl } = await import(
|
||||||
'../../utils/validation'
|
'../../utils/validation.js'
|
||||||
);
|
);
|
||||||
const Logger = await import('../../utils/logger');
|
const { default: Logger } = await import('../../utils/logger.js');
|
||||||
|
|
||||||
const logger = Logger.getLogger();
|
const logger = Logger.getLogger();
|
||||||
|
|
||||||
@ -132,13 +132,13 @@ export default class LogsCmd extends Command {
|
|||||||
validateDotLocalUrl(params.device)
|
validateDotLocalUrl(params.device)
|
||||||
) {
|
) {
|
||||||
// Logs from local device
|
// Logs from local device
|
||||||
const { DeviceAPI } = await import('../../utils/device/api');
|
const { DeviceAPI } = await import('../../utils/device/api.js');
|
||||||
const deviceApi = new DeviceAPI(logger, params.device);
|
const deviceApi = new DeviceAPI(logger, params.device);
|
||||||
logger.logDebug('Checking we can access device');
|
logger.logDebug('Checking we can access device');
|
||||||
try {
|
try {
|
||||||
await deviceApi.ping();
|
await deviceApi.ping();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
throw new ExpectedError(
|
throw new ExpectedError(
|
||||||
`Cannot access device at address ${params.device}. Device may not be in local mode.`,
|
`Cannot access device at address ${params.device}. Device may not be in local mode.`,
|
||||||
);
|
);
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class NoteCmd extends Command {
|
export default class NoteCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -45,7 +45,7 @@ export default class NoteCmd extends Command {
|
|||||||
public static usage = 'note <|note>';
|
public static usage = 'note <|note>';
|
||||||
|
|
||||||
public static flags = {
|
public static flags = {
|
||||||
device: { exclusive: ['dev'], ...cf.device },
|
device: cf.deviceExclusive(['dev']),
|
||||||
dev: Flags.string({
|
dev: Flags.string({
|
||||||
exclusive: ['device'],
|
exclusive: ['device'],
|
||||||
hidden: true,
|
hidden: true,
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class OrgsCmd extends Command {
|
export default class OrgsCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -38,7 +38,7 @@ export default class OrgsCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
await this.parse(OrgsCmd);
|
await this.parse(OrgsCmd);
|
||||||
|
|
||||||
const { getOwnOrganizations } = await import('../../utils/sdk');
|
const { getOwnOrganizations } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
// Get organizations
|
// Get organizations
|
||||||
const organizations = await getOwnOrganizations(getBalenaSdk(), {
|
const organizations = await getOwnOrganizations(getBalenaSdk(), {
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getCliForm, stripIndent } from '../../utils/lazy';
|
import { getCliForm, stripIndent } from '../../utils/lazy.js';
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import type { DeviceTypeJson } from 'balena-sdk';
|
import type { DeviceTypeJson } from 'balena-sdk';
|
||||||
|
|
||||||
export default class OsBuildConfigCmd extends Command {
|
export default class OsBuildConfigCmd extends Command {
|
||||||
@ -82,7 +82,7 @@ export default class OsBuildConfigCmd extends Command {
|
|||||||
async buildConfig(image: string, deviceTypeSlug: string, advanced: boolean) {
|
async buildConfig(image: string, deviceTypeSlug: string, advanced: boolean) {
|
||||||
advanced = advanced || false;
|
advanced = advanced || false;
|
||||||
|
|
||||||
const { getManifest } = await import('../../utils/helpers');
|
const { getManifest } = await import('../../utils/helpers.js');
|
||||||
|
|
||||||
const deviceTypeManifest = await getManifest(image, deviceTypeSlug);
|
const deviceTypeManifest = await getManifest(image, deviceTypeSlug);
|
||||||
return this.buildConfigForDeviceType(deviceTypeManifest, advanced);
|
return this.buildConfigForDeviceType(deviceTypeManifest, advanced);
|
||||||
@ -103,7 +103,7 @@ export default class OsBuildConfigCmd extends Command {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (advancedGroup != null) {
|
if (advancedGroup != null) {
|
||||||
const { getGroupDefaults } = await import('../../utils/helpers');
|
const { getGroupDefaults } = await import('../../utils/helpers.js');
|
||||||
override = getGroupDefaults(advancedGroup);
|
override = getGroupDefaults(advancedGroup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,16 +19,16 @@ import { Flags, Args } from '@oclif/core';
|
|||||||
import type { Interfaces } from '@oclif/core';
|
import type { Interfaces } from '@oclif/core';
|
||||||
import type * as BalenaSdk from 'balena-sdk';
|
import type * as BalenaSdk from 'balena-sdk';
|
||||||
import { promisify } from 'util';
|
import { promisify } from 'util';
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy.js';
|
||||||
import {
|
import {
|
||||||
applicationIdInfo,
|
applicationIdInfo,
|
||||||
devModeInfo,
|
devModeInfo,
|
||||||
secureBootInfo,
|
secureBootInfo,
|
||||||
} from '../../utils/messages';
|
} from '../../utils/messages.js';
|
||||||
|
|
||||||
const CONNECTIONS_FOLDER = '/system-connections';
|
const CONNECTIONS_FOLDER = '/system-connections';
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ export default class OsConfigureCmd extends Command {
|
|||||||
description:
|
description:
|
||||||
'ask advanced configuration questions (when in interactive mode)',
|
'ask advanced configuration questions (when in interactive mode)',
|
||||||
}),
|
}),
|
||||||
fleet: { ...cf.fleet, exclusive: ['device'] },
|
fleet: cf.fleetExclusive(['device']),
|
||||||
config: Flags.string({
|
config: Flags.string({
|
||||||
description:
|
description:
|
||||||
'path to a pre-generated config.json file to be injected in the OS image',
|
'path to a pre-generated config.json file to be injected in the OS image',
|
||||||
@ -122,14 +122,11 @@ export default class OsConfigureCmd extends Command {
|
|||||||
}),
|
}),
|
||||||
dev: cf.dev,
|
dev: cf.dev,
|
||||||
secureBoot: cf.secureBoot,
|
secureBoot: cf.secureBoot,
|
||||||
device: {
|
device: cf.deviceExclusive([
|
||||||
...cf.device,
|
'fleet',
|
||||||
exclusive: [
|
'provisioning-key-name',
|
||||||
'fleet',
|
'provisioning-key-expiry-date',
|
||||||
'provisioning-key-name',
|
]),
|
||||||
'provisioning-key-expiry-date',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'device-type': Flags.string({
|
'device-type': Flags.string({
|
||||||
description:
|
description:
|
||||||
'device type slug (e.g. "raspberrypi3") to override the fleet device type',
|
'device type slug (e.g. "raspberrypi3") to override the fleet device type',
|
||||||
@ -170,10 +167,10 @@ export default class OsConfigureCmd extends Command {
|
|||||||
const devInit = await import('balena-device-init');
|
const devInit = await import('balena-device-init');
|
||||||
const { promises: fs } = await import('fs');
|
const { promises: fs } = await import('fs');
|
||||||
const { generateDeviceConfig, generateApplicationConfig } = await import(
|
const { generateDeviceConfig, generateApplicationConfig } = await import(
|
||||||
'../../utils/config'
|
'../../utils/config.js'
|
||||||
);
|
);
|
||||||
const helpers = await import('../../utils/helpers');
|
const helpers = await import('../../utils/helpers.js');
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
let app: ApplicationWithDeviceTypeSlug | undefined;
|
let app: ApplicationWithDeviceTypeSlug | undefined;
|
||||||
let device;
|
let device;
|
||||||
@ -205,13 +202,13 @@ export default class OsConfigureCmd extends Command {
|
|||||||
deviceTypeSlug,
|
deviceTypeSlug,
|
||||||
);
|
);
|
||||||
|
|
||||||
let configJson: import('../../utils/config').ImgConfig | undefined;
|
let configJson: import('../../utils/config.js').ImgConfig | undefined;
|
||||||
if (options.config) {
|
if (options.config) {
|
||||||
const rawConfig = await fs.readFile(options.config, 'utf8');
|
const rawConfig = await fs.readFile(options.config, 'utf8');
|
||||||
configJson = JSON.parse(rawConfig);
|
configJson = JSON.parse(rawConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
const { normalizeOsVersion } = await import('../../utils/normalization');
|
const { normalizeOsVersion } = await import('../../utils/normalization.js');
|
||||||
const osVersion = normalizeOsVersion(
|
const osVersion = normalizeOsVersion(
|
||||||
options.version ||
|
options.version ||
|
||||||
(await getOsVersionFromImage(
|
(await getOsVersionFromImage(
|
||||||
@ -221,11 +218,11 @@ export default class OsConfigureCmd extends Command {
|
|||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
|
||||||
const { validateDevOptionAndWarn } = await import('../../utils/config');
|
const { validateDevOptionAndWarn } = await import('../../utils/config.js');
|
||||||
await validateDevOptionAndWarn(options.dev, osVersion);
|
await validateDevOptionAndWarn(options.dev, osVersion);
|
||||||
|
|
||||||
const { validateSecureBootOptionAndWarn } = await import(
|
const { validateSecureBootOptionAndWarn } = await import(
|
||||||
'../../utils/config'
|
'../../utils/config.js'
|
||||||
);
|
);
|
||||||
await validateSecureBootOptionAndWarn(
|
await validateSecureBootOptionAndWarn(
|
||||||
options.secureBoot,
|
options.secureBoot,
|
||||||
@ -363,7 +360,7 @@ async function checkDeviceTypeCompatibility(
|
|||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
if (options['device-type']) {
|
if (options['device-type']) {
|
||||||
const helpers = await import('../../utils/helpers');
|
const helpers = await import('../../utils/helpers.js');
|
||||||
if (
|
if (
|
||||||
!(await helpers.areDeviceTypesCompatible(
|
!(await helpers.areDeviceTypesCompatible(
|
||||||
app.is_for__device_type[0].slug,
|
app.is_for__device_type[0].slug,
|
||||||
@ -394,7 +391,7 @@ async function checkDeviceTypeCompatibility(
|
|||||||
async function askQuestionsForDeviceType(
|
async function askQuestionsForDeviceType(
|
||||||
deviceType: BalenaSdk.DeviceTypeJson.DeviceType,
|
deviceType: BalenaSdk.DeviceTypeJson.DeviceType,
|
||||||
options: FlagsDef,
|
options: FlagsDef,
|
||||||
configJson?: import('../../utils/config').ImgConfig,
|
configJson?: import('../../utils/config.js').ImgConfig,
|
||||||
): Promise<Answers> {
|
): Promise<Answers> {
|
||||||
const answerSources: any[] = [
|
const answerSources: any[] = [
|
||||||
{
|
{
|
||||||
@ -417,7 +414,7 @@ async function askQuestionsForDeviceType(
|
|||||||
isGroup: true,
|
isGroup: true,
|
||||||
});
|
});
|
||||||
if (!_.isEmpty(advancedGroup)) {
|
if (!_.isEmpty(advancedGroup)) {
|
||||||
const helpers = await import('../../utils/helpers');
|
const helpers = await import('../../utils/helpers.js');
|
||||||
answerSources.push(helpers.getGroupDefaults(advancedGroup));
|
answerSources.push(helpers.getGroupDefaults(advancedGroup));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class OsDownloadCmd extends Command {
|
export default class OsDownloadCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -95,7 +95,7 @@ export default class OsDownloadCmd extends Command {
|
|||||||
await OsDownloadCmd.checkLoggedIn();
|
await OsDownloadCmd.checkLoggedIn();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const { ExpectedError, NotLoggedInError } = await import(
|
const { ExpectedError, NotLoggedInError } = await import(
|
||||||
'../../errors'
|
'../../errors.js'
|
||||||
);
|
);
|
||||||
if (e instanceof NotLoggedInError) {
|
if (e instanceof NotLoggedInError) {
|
||||||
throw new ExpectedError(stripIndent`
|
throw new ExpectedError(stripIndent`
|
||||||
@ -107,7 +107,7 @@ export default class OsDownloadCmd extends Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const { downloadOSImage } = await import('../../utils/cloud');
|
const { downloadOSImage } = await import('../../utils/cloud.js');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await downloadOSImage(params.type, options.output, options.version);
|
await downloadOSImage(params.type, options.output, options.version);
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getCliForm, stripIndent } from '../../utils/lazy';
|
import { getCliForm, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
const INIT_WARNING_MESSAGE = `
|
const INIT_WARNING_MESSAGE = `
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ export default class OsInitializeCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const { args: params, flags: options } = await this.parse(OsInitializeCmd);
|
const { args: params, flags: options } = await this.parse(OsInitializeCmd);
|
||||||
|
|
||||||
const { getManifest, sudo } = await import('../../utils/helpers');
|
const { getManifest, sudo } = await import('../../utils/helpers.js');
|
||||||
|
|
||||||
console.info(`Initializing device ${INIT_WARNING_MESSAGE}`);
|
console.info(`Initializing device ${INIT_WARNING_MESSAGE}`);
|
||||||
|
|
||||||
@ -75,13 +75,13 @@ export default class OsInitializeCmd extends Command {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (answers.drive != null) {
|
if (answers.drive != null) {
|
||||||
const { confirm } = await import('../../utils/patterns');
|
const { confirm } = await import('../../utils/patterns.js');
|
||||||
await confirm(
|
await confirm(
|
||||||
options.yes,
|
options.yes,
|
||||||
`This will erase ${answers.drive}. Are you sure?`,
|
`This will erase ${answers.drive}. Are you sure?`,
|
||||||
`Going to erase ${answers.drive}.`,
|
`Going to erase ${answers.drive}.`,
|
||||||
);
|
);
|
||||||
const { safeUmount } = await import('../../utils/umount');
|
const { safeUmount } = await import('../../utils/umount.js');
|
||||||
await safeUmount(answers.drive);
|
await safeUmount(answers.drive);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ export default class OsInitializeCmd extends Command {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if (answers.drive != null) {
|
if (answers.drive != null) {
|
||||||
const { safeUmount } = await import('../../utils/umount');
|
const { safeUmount } = await import('../../utils/umount.js');
|
||||||
await safeUmount(answers.drive);
|
await safeUmount(answers.drive);
|
||||||
console.info(`You can safely remove ${answers.drive} now`);
|
console.info(`You can safely remove ${answers.drive} now`);
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { stripIndent } from '../../utils/lazy';
|
import { stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class OsVersionsCmd extends Command {
|
export default class OsVersionsCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -58,7 +58,7 @@ export default class OsVersionsCmd extends Command {
|
|||||||
const { args: params, flags: options } = await this.parse(OsVersionsCmd);
|
const { args: params, flags: options } = await this.parse(OsVersionsCmd);
|
||||||
|
|
||||||
if (options['include-draft']) {
|
if (options['include-draft']) {
|
||||||
const { warnify } = await import('../../utils/messages');
|
const { warnify } = await import('../../utils/messages.js');
|
||||||
console.error(
|
console.error(
|
||||||
warnify(stripIndent`
|
warnify(stripIndent`
|
||||||
Using pre-release balenaOS versions is only supported for OS updates
|
Using pre-release balenaOS versions is only supported for OS updates
|
||||||
@ -68,7 +68,7 @@ export default class OsVersionsCmd extends Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { formatOsVersion, getOsVersions } = await import(
|
const { formatOsVersion, getOsVersions } = await import(
|
||||||
'../../utils/cloud'
|
'../../utils/cloud.js'
|
||||||
);
|
);
|
||||||
const vs = await getOsVersions(
|
const vs = await getOsVersions(
|
||||||
params.type,
|
params.type,
|
||||||
|
@ -15,21 +15,21 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import {
|
import {
|
||||||
getBalenaSdk,
|
getBalenaSdk,
|
||||||
getCliForm,
|
getCliForm,
|
||||||
getVisuals,
|
getVisuals,
|
||||||
stripIndent,
|
stripIndent,
|
||||||
} from '../../utils/lazy';
|
} from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
import { dockerConnectionCliFlags } from '../../utils/docker';
|
import { dockerConnectionCliFlags } from '../../utils/docker.js';
|
||||||
import { parseAsInteger } from '../../utils/validation';
|
import { parseAsInteger } from '../../utils/validation.js';
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import * as _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import type {
|
import type {
|
||||||
Application,
|
Application,
|
||||||
BalenaSDK,
|
BalenaSDK,
|
||||||
@ -39,6 +39,7 @@ import type {
|
|||||||
Release,
|
Release,
|
||||||
} from 'balena-sdk';
|
} from 'balena-sdk';
|
||||||
import type { Preloader } from 'balena-preload';
|
import type { Preloader } from 'balena-preload';
|
||||||
|
import type { EventEmitter } from 'node:events';
|
||||||
|
|
||||||
export default class PreloadCmd extends Command {
|
export default class PreloadCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -145,10 +146,10 @@ Can be repeated to add multiple certificates.\
|
|||||||
const { args: params, flags: options } = await this.parse(PreloadCmd);
|
const { args: params, flags: options } = await this.parse(PreloadCmd);
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
const balenaPreload = await import('balena-preload');
|
const { default: balenaPreload } = await import('balena-preload');
|
||||||
const visuals = getVisuals();
|
const visuals = getVisuals();
|
||||||
const nodeCleanup = await import('node-cleanup');
|
const { default: nodeCleanup } = await import('node-cleanup');
|
||||||
const { instanceOf } = await import('../../errors');
|
const { instanceOf } = await import('../../errors.js');
|
||||||
|
|
||||||
// Check image file exists
|
// Check image file exists
|
||||||
try {
|
try {
|
||||||
@ -172,7 +173,7 @@ Can be repeated to add multiple certificates.\
|
|||||||
// Load app here, and use app slug from hereon
|
// Load app here, and use app slug from hereon
|
||||||
const fleetSlug: string | undefined = options.fleet
|
const fleetSlug: string | undefined = options.fleet
|
||||||
? await (
|
? await (
|
||||||
await import('../../utils/sdk')
|
await import('../../utils/sdk.js')
|
||||||
).getFleetSlug(balena, options.fleet)
|
).getFleetSlug(balena, options.fleet)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
@ -229,7 +230,7 @@ Can be repeated to add multiple certificates.\
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get a configured dockerode instance
|
// Get a configured dockerode instance
|
||||||
const dockerUtils = await import('../../utils/docker');
|
const dockerUtils = await import('../../utils/docker.js');
|
||||||
const docker = await dockerUtils.getDocker(options);
|
const docker = await dockerUtils.getDocker(options);
|
||||||
const preloader = new balenaPreload.Preloader(
|
const preloader = new balenaPreload.Preloader(
|
||||||
undefined,
|
undefined,
|
||||||
@ -243,7 +244,7 @@ Can be repeated to add multiple certificates.\
|
|||||||
pinDevice ?? false,
|
pinDevice ?? false,
|
||||||
certificates,
|
certificates,
|
||||||
additionalSpace,
|
additionalSpace,
|
||||||
);
|
) as Preloader & EventEmitter;
|
||||||
|
|
||||||
let gotSignal = false;
|
let gotSignal = false;
|
||||||
|
|
||||||
@ -481,7 +482,7 @@ Would you like to disable automatic updates for this fleet now?\
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getAppWithReleases(balenaSdk: BalenaSDK, slug: string) {
|
async getAppWithReleases(balenaSdk: BalenaSDK, slug: string) {
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
return await getApplication(balenaSdk, slug, {
|
return await getApplication(balenaSdk, slug, {
|
||||||
$expand: this.applicationExpandOptions,
|
$expand: this.applicationExpandOptions,
|
||||||
|
@ -17,18 +17,18 @@
|
|||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import type { Interfaces } from '@oclif/core';
|
import type { Interfaces } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { dockerignoreHelp, registrySecretsHelp } from '../../utils/messages';
|
import { dockerignoreHelp, registrySecretsHelp } from '../../utils/messages.js';
|
||||||
import type { BalenaSDK } from 'balena-sdk';
|
import type { BalenaSDK } from 'balena-sdk';
|
||||||
import { ExpectedError, instanceOf } from '../../errors';
|
import { ExpectedError, instanceOf } from '../../errors.js';
|
||||||
import type { RegistrySecrets } from '@balena/compose/dist/multibuild';
|
import type { RegistrySecrets } from '@balena/compose/dist/multibuild';
|
||||||
import { lowercaseIfSlug } from '../../utils/normalization';
|
import { lowercaseIfSlug } from '../../utils/normalization.js';
|
||||||
import {
|
import {
|
||||||
applyReleaseTagKeysAndValues,
|
applyReleaseTagKeysAndValues,
|
||||||
parseReleaseTagKeysAndValues,
|
parseReleaseTagKeysAndValues,
|
||||||
} from '../../utils/compose_ts';
|
} from '../../utils/compose_ts.js';
|
||||||
|
|
||||||
enum BuildTarget {
|
enum BuildTarget {
|
||||||
Cloud,
|
Cloud,
|
||||||
@ -233,7 +233,9 @@ export default class PushCmd extends Command {
|
|||||||
logger.logDebug(`Using build source directory: ${options.source} `);
|
logger.logDebug(`Using build source directory: ${options.source} `);
|
||||||
|
|
||||||
const sdk = getBalenaSdk();
|
const sdk = getBalenaSdk();
|
||||||
const { validateProjectDirectory } = await import('../../utils/compose_ts');
|
const { validateProjectDirectory } = await import(
|
||||||
|
'../../utils/compose_ts.js'
|
||||||
|
);
|
||||||
const { dockerfilePath, registrySecrets } = await validateProjectDirectory(
|
const { dockerfilePath, registrySecrets } = await validateProjectDirectory(
|
||||||
sdk,
|
sdk,
|
||||||
{
|
{
|
||||||
@ -276,8 +278,8 @@ export default class PushCmd extends Command {
|
|||||||
dockerfilePath: string,
|
dockerfilePath: string,
|
||||||
registrySecrets: RegistrySecrets,
|
registrySecrets: RegistrySecrets,
|
||||||
) {
|
) {
|
||||||
const remote = await import('../../utils/remote-build');
|
const remote = await import('../../utils/remote-build.js');
|
||||||
const { getApplication } = await import('../../utils/sdk');
|
const { getApplication } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
// Check for invalid options
|
// Check for invalid options
|
||||||
const localOnlyOptions: Array<keyof FlagsDef> = [
|
const localOnlyOptions: Array<keyof FlagsDef> = [
|
||||||
@ -356,7 +358,7 @@ export default class PushCmd extends Command {
|
|||||||
'is only valid when pushing to a fleet',
|
'is only valid when pushing to a fleet',
|
||||||
);
|
);
|
||||||
|
|
||||||
const deviceDeploy = await import('../../utils/device/deploy');
|
const deviceDeploy = await import('../../utils/device/deploy.js');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await deviceDeploy.deployToDevice({
|
await deviceDeploy.deployToDevice({
|
||||||
@ -376,7 +378,7 @@ export default class PushCmd extends Command {
|
|||||||
convertEol: !options['noconvert-eol'],
|
convertEol: !options['noconvert-eol'],
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const { BuildError } = await import('../../utils/device/errors');
|
const { BuildError } = await import('../../utils/device/errors.js');
|
||||||
if (instanceOf(e, BuildError)) {
|
if (instanceOf(e, BuildError)) {
|
||||||
throw new ExpectedError(e.toString());
|
throw new ExpectedError(e.toString());
|
||||||
} else {
|
} else {
|
||||||
@ -387,7 +389,7 @@ export default class PushCmd extends Command {
|
|||||||
|
|
||||||
protected async getBuildTarget(appOrDevice: string): Promise<BuildTarget> {
|
protected async getBuildTarget(appOrDevice: string): Promise<BuildTarget> {
|
||||||
const { validateLocalHostnameOrIp } = await import(
|
const { validateLocalHostnameOrIp } = await import(
|
||||||
'../../utils/validation'
|
'../../utils/validation.js'
|
||||||
);
|
);
|
||||||
|
|
||||||
return validateLocalHostnameOrIp(appOrDevice)
|
return validateLocalHostnameOrIp(appOrDevice)
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { commitOrIdArg } from '.';
|
import { commitOrIdArg } from './index.js';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ReleaseFinalizeCmd extends Command {
|
export default class ReleaseFinalizeCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args, type Interfaces } from '@oclif/core';
|
import { Flags, Args, type Interfaces } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import type * as BalenaSdk from 'balena-sdk';
|
import type * as BalenaSdk from 'balena-sdk';
|
||||||
import jsyaml = require('js-yaml');
|
import jsyaml from 'js-yaml';
|
||||||
import { tryAsInteger } from '../../utils/validation';
|
import { tryAsInteger } from '../../utils/validation.js';
|
||||||
import { jsonInfo } from '../../utils/messages';
|
import { jsonInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export const commitOrIdArg = Args.custom({
|
export const commitOrIdArg = Args.custom({
|
||||||
parse: async (commitOrId: string) => tryAsInteger(commitOrId),
|
parse: async (commitOrId: string) => tryAsInteger(commitOrId),
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { commitOrIdArg } from '.';
|
import { commitOrIdArg } from './index.js';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ReleaseInvalidateCmd extends Command {
|
export default class ReleaseInvalidateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { commitOrIdArg } from '.';
|
import { commitOrIdArg } from './index.js';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ReleaseValidateCmd extends Command {
|
export default class ReleaseValidateCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,12 +16,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationNameNote } from '../../utils/messages';
|
import { applicationNameNote } from '../../utils/messages.js';
|
||||||
import type * as BalenaSdk from 'balena-sdk';
|
import type * as BalenaSdk from 'balena-sdk';
|
||||||
import { jsonInfo } from '../../utils/messages';
|
import { jsonInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class ReleasesCmd extends Command {
|
export default class ReleasesCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -67,7 +67,7 @@ export default class ReleasesCmd extends Command {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const balena = getBalenaSdk();
|
const balena = getBalenaSdk();
|
||||||
const { getFleetSlug } = await import('../../utils/sdk');
|
const { getFleetSlug } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
const releases = await balena.models.release.getAllByApplication(
|
const releases = await balena.models.release.getAllByApplication(
|
||||||
await getFleetSlug(balena, params.fleet),
|
await getFleetSlug(balena, params.fleet),
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags } from '@oclif/core';
|
import { Flags } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getCliUx, stripIndent } from '../../utils/lazy';
|
import { getCliUx, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class ScanCmd extends Command {
|
export default class ScanCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -65,10 +65,10 @@ export default class ScanCmd extends Command {
|
|||||||
public async run() {
|
public async run() {
|
||||||
const _ = await import('lodash');
|
const _ = await import('lodash');
|
||||||
const { discoverLocalBalenaOsDevices } = await import(
|
const { discoverLocalBalenaOsDevices } = await import(
|
||||||
'../../utils/discover'
|
'../../utils/discover.js'
|
||||||
);
|
);
|
||||||
const prettyjson = await import('prettyjson');
|
const prettyjson = await import('prettyjson');
|
||||||
const dockerUtils = await import('../../utils/docker');
|
const dockerUtils = await import('../../utils/docker.js');
|
||||||
|
|
||||||
const dockerPort = 2375;
|
const dockerPort = 2375;
|
||||||
const dockerTimeout = 2000;
|
const dockerTimeout = 2000;
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
|
|
||||||
export default class SettingsCmd extends Command {
|
export default class SettingsCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import {
|
import {
|
||||||
parseAsInteger,
|
parseAsInteger,
|
||||||
validateLocalHostnameOrIp,
|
validateLocalHostnameOrIp,
|
||||||
} from '../../utils/validation';
|
} from '../../utils/validation.js';
|
||||||
|
|
||||||
export default class SshCmd extends Command {
|
export default class SshCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -111,7 +111,9 @@ export default class SshCmd extends Command {
|
|||||||
|
|
||||||
// Local connection
|
// Local connection
|
||||||
if (validateLocalHostnameOrIp(params.fleetOrDevice)) {
|
if (validateLocalHostnameOrIp(params.fleetOrDevice)) {
|
||||||
const { performLocalDeviceSSH } = await import('../../utils/device/ssh');
|
const { performLocalDeviceSSH } = await import(
|
||||||
|
'../../utils/device/ssh.js'
|
||||||
|
);
|
||||||
return await performLocalDeviceSSH({
|
return await performLocalDeviceSSH({
|
||||||
hostname: params.fleetOrDevice,
|
hostname: params.fleetOrDevice,
|
||||||
port: options.port || 'local',
|
port: options.port || 'local',
|
||||||
@ -122,8 +124,10 @@ export default class SshCmd extends Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remote connection
|
// Remote connection
|
||||||
const { getProxyConfig } = await import('../../utils/helpers');
|
const { getProxyConfig } = await import('../../utils/helpers.js');
|
||||||
const { getOnlineTargetDeviceUuid } = await import('../../utils/patterns');
|
const { getOnlineTargetDeviceUuid } = await import(
|
||||||
|
'../../utils/patterns.js'
|
||||||
|
);
|
||||||
const sdk = getBalenaSdk();
|
const sdk = getBalenaSdk();
|
||||||
|
|
||||||
const proxyConfig = getProxyConfig();
|
const proxyConfig = getProxyConfig();
|
||||||
@ -137,7 +141,7 @@ export default class SshCmd extends Command {
|
|||||||
params.fleetOrDevice,
|
params.fleetOrDevice,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { which } = await import('../../utils/which');
|
const { which } = await import('../../utils/which.js');
|
||||||
|
|
||||||
const [whichProxytunnel, { username }, proxyUrl] = await Promise.all([
|
const [whichProxytunnel, { username }, proxyUrl] = await Promise.all([
|
||||||
useProxy ? which('proxytunnel', false) : undefined,
|
useProxy ? which('proxytunnel', false) : undefined,
|
||||||
@ -189,7 +193,7 @@ export default class SshCmd extends Command {
|
|||||||
let containerId: string | undefined;
|
let containerId: string | undefined;
|
||||||
if (params.service != null) {
|
if (params.service != null) {
|
||||||
const { getContainerIdForService } = await import(
|
const { getContainerIdForService } = await import(
|
||||||
'../../utils/device/ssh'
|
'../../utils/device/ssh.js'
|
||||||
);
|
);
|
||||||
containerId = await getContainerIdForService({
|
containerId = await getContainerIdForService({
|
||||||
deviceUuid,
|
deviceUuid,
|
||||||
@ -207,7 +211,7 @@ export default class SshCmd extends Command {
|
|||||||
} else {
|
} else {
|
||||||
accessCommand = `host ${deviceUuid}`;
|
accessCommand = `host ${deviceUuid}`;
|
||||||
}
|
}
|
||||||
const { runRemoteCommand } = await import('../../utils/ssh');
|
const { runRemoteCommand } = await import('../../utils/ssh.js');
|
||||||
await runRemoteCommand({
|
await runRemoteCommand({
|
||||||
cmd: accessCommand,
|
cmd: accessCommand,
|
||||||
hostname: `ssh.${proxyUrl}`,
|
hostname: `ssh.${proxyUrl}`,
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Flags, Args } from '@oclif/core';
|
import { Flags, Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import { ExpectedError } from '../../errors';
|
import { ExpectedError } from '../../errors.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class SupportCmd extends Command {
|
export default class SupportCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -59,11 +59,12 @@ export default class SupportCmd extends Command {
|
|||||||
description: 'comma-separated list (no spaces) of device UUIDs',
|
description: 'comma-separated list (no spaces) of device UUIDs',
|
||||||
char: 'd',
|
char: 'd',
|
||||||
}),
|
}),
|
||||||
fleet: {
|
fleet: Flags.string({
|
||||||
...cf.fleet,
|
char: cf.fleet.char,
|
||||||
description:
|
description:
|
||||||
'comma-separated list (no spaces) of fleet names or slugs (preferred)',
|
'comma-separated list (no spaces) of fleet names or slugs (preferred)',
|
||||||
},
|
parse: cf.fleet.parse,
|
||||||
|
}),
|
||||||
duration: Flags.string({
|
duration: Flags.string({
|
||||||
description:
|
description:
|
||||||
'length of time to enable support for, in (h)ours or (d)ays, e.g. 12h, 2d',
|
'length of time to enable support for, in (h)ours or (d)ays, e.g. 12h, 2d',
|
||||||
@ -116,7 +117,7 @@ export default class SupportCmd extends Command {
|
|||||||
ux.action.stop();
|
ux.action.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
const { getFleetSlug } = await import('../../utils/sdk');
|
const { getFleetSlug } = await import('../../utils/sdk.js');
|
||||||
|
|
||||||
// Process applications
|
// Process applications
|
||||||
for (const appName of appNames) {
|
for (const appName of appNames) {
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class TagRmCmd extends Command {
|
export default class TagRmCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -48,18 +48,9 @@ export default class TagRmCmd extends Command {
|
|||||||
public static usage = 'tag rm <tagKey>';
|
public static usage = 'tag rm <tagKey>';
|
||||||
|
|
||||||
public static flags = {
|
public static flags = {
|
||||||
fleet: {
|
fleet: cf.fleetExclusive(['device', 'release']),
|
||||||
...cf.fleet,
|
device: cf.deviceExclusive(['fleet', 'release']),
|
||||||
exclusive: ['device', 'release'],
|
release: cf.releaseExclusive(['fleet', 'device']),
|
||||||
},
|
|
||||||
device: {
|
|
||||||
...cf.device,
|
|
||||||
exclusive: ['fleet', 'release'],
|
|
||||||
},
|
|
||||||
release: {
|
|
||||||
...cf.release,
|
|
||||||
exclusive: ['fleet', 'device'],
|
|
||||||
},
|
|
||||||
help: cf.help,
|
help: cf.help,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -72,12 +63,12 @@ export default class TagRmCmd extends Command {
|
|||||||
|
|
||||||
// Check user has specified one of application/device/release
|
// Check user has specified one of application/device/release
|
||||||
if (!options.fleet && !options.device && !options.release) {
|
if (!options.fleet && !options.device && !options.release) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
throw new ExpectedError(TagRmCmd.missingResourceMessage);
|
throw new ExpectedError(TagRmCmd.missingResourceMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.fleet) {
|
if (options.fleet) {
|
||||||
const { getFleetSlug } = await import('../../utils/sdk');
|
const { getFleetSlug } = await import('../../utils/sdk.js');
|
||||||
return balena.models.application.tags.remove(
|
return balena.models.application.tags.remove(
|
||||||
await getFleetSlug(balena, options.fleet),
|
await getFleetSlug(balena, options.fleet),
|
||||||
params.tagKey,
|
params.tagKey,
|
||||||
@ -88,7 +79,7 @@ export default class TagRmCmd extends Command {
|
|||||||
}
|
}
|
||||||
if (options.release) {
|
if (options.release) {
|
||||||
const { disambiguateReleaseParam } = await import(
|
const { disambiguateReleaseParam } = await import(
|
||||||
'../../utils/normalization'
|
'../../utils/normalization.js'
|
||||||
);
|
);
|
||||||
const releaseParam = await disambiguateReleaseParam(
|
const releaseParam = await disambiguateReleaseParam(
|
||||||
balena,
|
balena,
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Args } from '@oclif/core';
|
import { Args } from '@oclif/core';
|
||||||
import Command from '../../command';
|
import Command from '../../command.js';
|
||||||
import * as cf from '../../utils/common-flags';
|
import * as cf from '../../utils/common-flags.js';
|
||||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
import { getBalenaSdk, stripIndent } from '../../utils/lazy.js';
|
||||||
import { applicationIdInfo } from '../../utils/messages';
|
import { applicationIdInfo } from '../../utils/messages.js';
|
||||||
|
|
||||||
export default class TagSetCmd extends Command {
|
export default class TagSetCmd extends Command {
|
||||||
public static description = stripIndent`
|
public static description = stripIndent`
|
||||||
@ -61,18 +61,9 @@ export default class TagSetCmd extends Command {
|
|||||||
public static usage = 'tag set <tagKey> [value]';
|
public static usage = 'tag set <tagKey> [value]';
|
||||||
|
|
||||||
public static flags = {
|
public static flags = {
|
||||||
fleet: {
|
fleet: cf.fleetExclusive(['device', 'release']),
|
||||||
...cf.fleet,
|
device: cf.deviceExclusive(['fleet', 'release']),
|
||||||
exclusive: ['device', 'release'],
|
release: cf.releaseExclusive(['fleet', 'device']),
|
||||||
},
|
|
||||||
device: {
|
|
||||||
...cf.device,
|
|
||||||
exclusive: ['fleet', 'release'],
|
|
||||||
},
|
|
||||||
release: {
|
|
||||||
...cf.release,
|
|
||||||
exclusive: ['fleet', 'device'],
|
|
||||||
},
|
|
||||||
help: cf.help,
|
help: cf.help,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -85,14 +76,14 @@ export default class TagSetCmd extends Command {
|
|||||||
|
|
||||||
// Check user has specified one of application/device/release
|
// Check user has specified one of application/device/release
|
||||||
if (!options.fleet && !options.device && !options.release) {
|
if (!options.fleet && !options.device && !options.release) {
|
||||||
const { ExpectedError } = await import('../../errors');
|
const { ExpectedError } = await import('../../errors.js');
|
||||||
throw new ExpectedError(TagSetCmd.missingResourceMessage);
|
throw new ExpectedError(TagSetCmd.missingResourceMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
params.value ??= '';
|
params.value ??= '';
|
||||||
|
|
||||||
if (options.fleet) {
|
if (options.fleet) {
|
||||||
const { getFleetSlug } = await import('../../utils/sdk');
|
const { getFleetSlug } = await import('../../utils/sdk.js');
|
||||||
return balena.models.application.tags.set(
|
return balena.models.application.tags.set(
|
||||||
await getFleetSlug(balena, options.fleet),
|
await getFleetSlug(balena, options.fleet),
|
||||||
params.tagKey,
|
params.tagKey,
|
||||||
@ -108,7 +99,7 @@ export default class TagSetCmd extends Command {
|
|||||||
}
|
}
|
||||||
if (options.release) {
|
if (options.release) {
|
||||||
const { disambiguateReleaseParam } = await import(
|
const { disambiguateReleaseParam } = await import(
|
||||||
'../../utils/normalization'
|
'../../utils/normalization.js'
|
||||||
);
|
);
|
||||||
const releaseParam = await disambiguateReleaseParam(
|
const releaseParam = await disambiguateReleaseParam(
|
||||||
balena,
|
balena,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user