Merge pull request #2833 from balena-io/api-v7

Api v7
This commit is contained in:
flowzone-app[bot] 2024-10-25 17:32:44 +00:00 committed by GitHub
commit 6dd6f43d64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
120 changed files with 2397 additions and 2919 deletions

View File

@ -25,7 +25,14 @@ function renderOclifCommand(command: Category['commands'][0]): string[] {
const result = [`## ${ent.encode(command.name || '')}`]; const result = [`## ${ent.encode(command.name || '')}`];
if (command.aliases?.length) { if (command.aliases?.length) {
result.push('### Aliases'); result.push('### Aliases');
result.push(command.aliases.map((alias) => `- \`${alias}\``).join('\n')); result.push(
command.aliases
.map(
(alias) =>
`- \`${alias}\`${command.deprecateAliases ? ' *(deprecated)*' : ''}`,
)
.join('\n'),
);
result.push( result.push(
`\nTo use one of the aliases, replace \`${command.name}\` with the alias.`, `\nTo use one of the aliases, replace \`${command.name}\` with the alias.`,
); );

View File

@ -29,7 +29,7 @@ _balena() {
_arguments -C \ _arguments -C \
'(- 1 *)--version[show version and exit]' \ '(- 1 *)--version[show version and exit]' \
'(- 1 *)'{-h,--help}'[show help options and exit]' \ '(- 1 *)--help[show help options and exit]' \
'1:first command:_balena_main_cmds' \ '1:first command:_balena_main_cmds' \
'2:second command:_balena_sec_cmds' \ '2:second command:_balena_sec_cmds' \
&& ret=0 && ret=0

View File

@ -14,7 +14,7 @@ $sub_cmds$
_arguments -C \ _arguments -C \
'(- 1 *)--version[show version and exit]' \ '(- 1 *)--version[show version and exit]' \
'(- 1 *)'{-h,--help}'[show help options and exit]' \ '(- 1 *)--help[show help options and exit]' \
'1:first command:_balena_main_cmds' \ '1:first command:_balena_main_cmds' \
'2:second command:_balena_sec_cmds' \ '2:second command:_balena_sec_cmds' \
&& ret=0 && ret=0

View File

@ -333,13 +333,11 @@ Examples:
the API key name the API key name
### Options
## api-key list ## api-key list
### Aliases ### Aliases
- `api-keys` - `api-keys` *(deprecated)*
To use one of the aliases, replace `api-key list` with the alias. To use one of the aliases, replace `api-key list` with the alias.
@ -384,8 +382,6 @@ Examples:
the API key ids the API key ids
### Options
# Apps # Apps
## app create ## app create
@ -1229,7 +1225,7 @@ Docker host TLS key file
### Aliases ### Aliases
- `devices supported` - `devices supported` *(deprecated)*
To use one of the aliases, replace `device-type list` with the alias. To use one of the aliases, replace `device-type list` with the alias.
@ -1296,7 +1292,7 @@ answer "yes" to all questions (non interactive use)
### Aliases ### Aliases
- `scan` - `scan` *(deprecated)*
To use one of the aliases, replace `device detect` with the alias. To use one of the aliases, replace `device detect` with the alias.
@ -1346,8 +1342,6 @@ Examples:
the uuid of the device to identify the uuid of the device to identify
### Options
## device ## device
### Description ### Description
@ -1473,7 +1467,7 @@ expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)
### Aliases ### Aliases
- `devices` - `devices` *(deprecated)*
To use one of the aliases, replace `device list` with the alias. To use one of the aliases, replace `device list` with the alias.
@ -1554,7 +1548,7 @@ output boolean indicating local mode status
### Aliases ### Aliases
- `logs` - `logs` *(deprecated)*
To use one of the aliases, replace `device logs` with the alias. To use one of the aliases, replace `device logs` with the alias.
@ -1655,7 +1649,7 @@ fleet name or slug (preferred)
### Aliases ### Aliases
- `notes` - `notes` *(deprecated)*
To use one of the aliases, replace `device note` with the alias. To use one of the aliases, replace `device note` with the alias.
@ -1749,8 +1743,6 @@ the uuid of the device to pin to a release
the commit of the release for the device to get pinned to the commit of the release for the device to get pinned to
### Options
## device public-url ## device public-url
### Description ### Description
@ -1807,8 +1799,6 @@ Examples:
comma-separated list (no blank spaces) of device UUIDs comma-separated list (no blank spaces) of device UUIDs
### Options
## device reboot ## device reboot
### Description ### Description
@ -1895,8 +1885,6 @@ the uuid of the device to rename
the new name for the device the new name for the device
### Options
## device restart ## device restart
### Description ### Description
@ -1982,7 +1970,7 @@ force action if the update lock is set
### Aliases ### Aliases
- `ssh` - `ssh` *(deprecated)*
To use one of the aliases, replace `device ssh` with the alias. To use one of the aliases, replace `device ssh` with the alias.
@ -2076,8 +2064,6 @@ comma-separated list (no blank spaces) of device UUIDs
comma-separated list (no blank spaces) of service names comma-separated list (no blank spaces) of service names
### Options
## device stop-service ## device stop-service
### Description ### Description
@ -2102,8 +2088,6 @@ comma-separated list (no blank spaces) of device UUIDs
comma-separated list (no blank spaces) of service names comma-separated list (no blank spaces) of service names
### Options
## device track-fleet ## device track-fleet
### Description ### Description
@ -2120,13 +2104,11 @@ Examples:
the uuid of the device to make track the fleet's release the uuid of the device to make track the fleet's release
### Options
## device tunnel ## device tunnel
### Aliases ### Aliases
- `tunnel` - `tunnel` *(deprecated)*
To use one of the aliases, replace `device tunnel` with the alias. To use one of the aliases, replace `device tunnel` with the alias.
@ -2188,7 +2170,7 @@ port mapping in the format <remotePort>[:[localIP:]localPort]
### Aliases ### Aliases
- `envs` - `envs` *(deprecated)*
To use one of the aliases, replace `env list` with the alias. To use one of the aliases, replace `env list` with the alias.
@ -2406,7 +2388,7 @@ do not prompt for confirmation before deleting the variable
### Aliases ### Aliases
- `env add` - `env add` *(deprecated)*
To use one of the aliases, replace `env set` with the alias. To use one of the aliases, replace `env set` with the alias.
@ -2573,7 +2555,7 @@ produce JSON output instead of tabular output
### Aliases ### Aliases
- `fleets` - `fleets` *(deprecated)*
To use one of the aliases, replace `fleet list` with the alias. To use one of the aliases, replace `fleet list` with the alias.
@ -2618,8 +2600,6 @@ the slug of the fleet to pin to a release
the commit of the release for the fleet to get pinned to the commit of the release for the fleet to get pinned to
### Options
## fleet purge ## fleet purge
### Description ### Description
@ -2648,8 +2628,6 @@ Examples:
fleet name or slug (preferred) fleet name or slug (preferred)
### Options
## fleet rename ## fleet rename
### Description ### Description
@ -2685,8 +2663,6 @@ fleet name or slug (preferred)
the new name for the fleet the new name for the fleet
### Options
## fleet restart ## fleet restart
### Description ### Description
@ -2714,8 +2690,6 @@ Examples:
fleet name or slug (preferred) fleet name or slug (preferred)
### Options
## fleet rm ## fleet rm
### Description ### Description
@ -2769,8 +2743,6 @@ Examples:
the slug of the fleet to make track the latest release the slug of the fleet to make track the latest release
### Options
# Local # Local
## local configure ## local configure
@ -2790,8 +2762,6 @@ Examples:
path of drive or image to configure path of drive or image to configure
### Options
## local flash ## local flash
### Description ### Description
@ -2832,7 +2802,7 @@ answer "yes" to all questions (non interactive use)
### Aliases ### Aliases
- `orgs` - `orgs` *(deprecated)*
To use one of the aliases, replace `organization list` with the alias. To use one of the aliases, replace `organization list` with the alias.
@ -2845,8 +2815,6 @@ Examples:
$ balena organization list $ balena organization list
### Options
# OS # OS
## os build-config ## os build-config
@ -3217,8 +3185,6 @@ Examples:
the device IP or hostname the device IP or hostname
### Options
# Preload # Preload
## preload ## preload
@ -3277,9 +3243,9 @@ fleet name or slug (preferred)
The commit hash of the release to preload. Use "current" to specify the current The commit hash of the release to preload. Use "current" to specify the current
release (ignored if no appId is given). The current release is usually also the release (ignored if no appId is given). The current release is usually also the
latest, but can be pinned to a specific release. See: latest, but can be pinned to a specific release. See:
https://www.balena.io/docs/learn/deploy/release-strategy/release-policy/ https://www.balena.io/docs/learn/deploy/release-strategy/release-policy/
https://www.balena.io/docs/learn/more/masterclasses/fleet-management/#63-pin-using-the-api https://www.balena.io/docs/learn/more/masterclasses/fleet-management/#63-pin-using-the-api
https://github.com/balena-io-examples/staged-releases https://github.com/balena-io-examples/staged-releases
#### -s, --splash-image SPLASH-IMAGE #### -s, --splash-image SPLASH-IMAGE
@ -3586,8 +3552,6 @@ Examples:
the commit or ID of the release to finalize the commit or ID of the release to finalize
### Options
## release ## release
### Description ### Description
@ -3641,13 +3605,11 @@ Examples:
the commit or ID of the release to invalidate the commit or ID of the release to invalidate
### Options
## release list ## release list
### Aliases ### Aliases
- `releases` - `releases` *(deprecated)*
To use one of the aliases, replace `release list` with the alias. To use one of the aliases, replace `release list` with the alias.
@ -3708,8 +3670,6 @@ Examples:
the commit or ID of the release to validate the commit or ID of the release to validate
### Options
# Settings # Settings
## settings ## settings
@ -3722,15 +3682,13 @@ Examples:
$ balena settings $ balena settings
### Options
# SSH Keys # SSH Keys
## ssh-key add ## ssh-key add
### Aliases ### Aliases
- `key add` - `key add` *(deprecated)*
To use one of the aliases, replace `ssh-key add` with the alias. To use one of the aliases, replace `ssh-key add` with the alias.
@ -3772,13 +3730,11 @@ the SSH key name
the path to the public key file the path to the public key file
### Options
## ssh-key ## ssh-key
### Aliases ### Aliases
- `key` - `key` *(deprecated)*
To use one of the aliases, replace `ssh-key` with the alias. To use one of the aliases, replace `ssh-key` with the alias.
@ -3797,14 +3753,12 @@ Examples:
balenaCloud ID for the SSH key balenaCloud ID for the SSH key
### Options
## ssh-key list ## ssh-key list
### Aliases ### Aliases
- `keys` - `keys` *(deprecated)*
- `key list` - `key list` *(deprecated)*
To use one of the aliases, replace `ssh-key list` with the alias. To use one of the aliases, replace `ssh-key list` with the alias.
@ -3817,13 +3771,11 @@ Examples:
$ balena ssh-key list $ balena ssh-key list
### Options
## ssh-key rm ## ssh-key rm
### Aliases ### Aliases
- `key rm` - `key rm` *(deprecated)*
To use one of the aliases, replace `ssh-key rm` with the alias. To use one of the aliases, replace `ssh-key rm` with the alias.
@ -3909,7 +3861,7 @@ length of time to enable support for, in (h)ours or (d)ays, e.g. 12h, 2d
### Aliases ### Aliases
- `tags` - `tags` *(deprecated)*
To use one of the aliases, replace `tag list` with the alias. To use one of the aliases, replace `tag list` with the alias.
@ -4058,8 +4010,6 @@ release id
List available drives which are usable for writing an OS image to. List available drives which are usable for writing an OS image to.
Does not list system drives. Does not list system drives.
### Options
# Version # Version
## version ## version

529
npm-shrinkwrap.json generated
View File

@ -10,7 +10,7 @@
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@balena/compose": "^4.0.1", "@balena/compose": "^5.0.0",
"@balena/dockerignore": "^1.0.2", "@balena/dockerignore": "^1.0.2",
"@balena/env-parsing": "^1.1.8", "@balena/env-parsing": "^1.1.8",
"@balena/es-version": "^1.0.1", "@balena/es-version": "^1.0.1",
@ -20,8 +20,8 @@
"balena-device-init": "^7.0.1", "balena-device-init": "^7.0.1",
"balena-errors": "^4.7.3", "balena-errors": "^4.7.3",
"balena-image-fs": "^7.0.6", "balena-image-fs": "^7.0.6",
"balena-preload": "^15.0.6", "balena-preload": "^16.0.0",
"balena-sdk": "^19.7.3", "balena-sdk": "^20.3.0",
"balena-semver": "^2.3.0", "balena-semver": "^2.3.0",
"balena-settings-client": "^5.0.2", "balena-settings-client": "^5.0.2",
"balena-settings-storage": "^8.1.0", "balena-settings-storage": "^8.1.0",
@ -1264,13 +1264,12 @@
"dev": true "dev": true
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.25.9", "version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.0.tgz",
"integrity": "sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==", "integrity": "sha512-aP8x5pIw3xvYr/sXT+SEUwyhrXT8rUJRZltK/qN3Db80dcKpTett8cJxHyjk+xYSVXvNnl2SfcJVjbwxpOSscA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.25.9" "@babel/types": "^7.26.0"
}, },
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@ -1280,11 +1279,10 @@
} }
}, },
"node_modules/@babel/parser/node_modules/@babel/types": { "node_modules/@babel/parser/node_modules/@babel/types": {
"version": "7.25.9", "version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
"integrity": "sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==", "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.25.9", "@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9" "@babel/helper-validator-identifier": "^7.25.9"
@ -1308,11 +1306,10 @@
} }
}, },
"node_modules/@babel/template/node_modules/@babel/types": { "node_modules/@babel/template/node_modules/@babel/types": {
"version": "7.25.9", "version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
"integrity": "sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==", "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.25.9", "@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9" "@babel/helper-validator-identifier": "^7.25.9"
@ -1343,13 +1340,13 @@
} }
}, },
"node_modules/@babel/traverse/node_modules/@babel/generator": { "node_modules/@babel/traverse/node_modules/@babel/generator": {
"version": "7.25.9", "version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz",
"integrity": "sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==", "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.25.9", "@babel/parser": "^7.26.0",
"@babel/types": "^7.26.0",
"@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2" "jsesc": "^3.0.2"
@ -1359,11 +1356,10 @@
} }
}, },
"node_modules/@babel/traverse/node_modules/@babel/types": { "node_modules/@babel/traverse/node_modules/@babel/types": {
"version": "7.25.9", "version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
"integrity": "sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==", "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.25.9", "@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9" "@babel/helper-validator-identifier": "^7.25.9"
@ -1398,6 +1394,50 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@balena/abstract-sql-compiler": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/@balena/abstract-sql-compiler/-/abstract-sql-compiler-9.2.0.tgz",
"integrity": "sha512-sKSbGNcL19QvqUrslms/k8GsVWjq75g0b8uVh/jpZEUWHniixWq402b+OKs0wRIhtRMsWSVA3CLuC33tYj6KCA==",
"dependencies": {
"@balena/sbvr-types": "^7.0.1",
"lodash": "^4.17.21"
},
"engines": {
"node": ">=16.13.0",
"npm": ">=8.1.0"
}
},
"node_modules/@balena/abstract-sql-compiler/node_modules/@balena/sbvr-types": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@balena/sbvr-types/-/sbvr-types-7.1.3.tgz",
"integrity": "sha512-kizk+ClfYJVJidMx69BiFSFqtDE97R4JXRYrn1Ff/vK+ycN7Mj3HVObFk5DvckresiBI9S2mvZsysW+RVNmJsg==",
"license": "BSD",
"engines": {
"node": ">=16.13.0",
"npm": ">=8.1.0"
},
"optionalDependencies": {
"bcrypt": "^5.1.1",
"bcryptjs": "^2.4.3",
"sha.js": "^2.4.11"
}
},
"node_modules/@balena/abstract-sql-to-typescript": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@balena/abstract-sql-to-typescript/-/abstract-sql-to-typescript-3.3.1.tgz",
"integrity": "sha512-0I96tPXwznhNagnnD7rzE+0lb3O2cEmKPBbaktXn6hFZmrKmzG1lgNpc4czfCbrVtOsk+jReWx4wXPnxcu1yXA==",
"dependencies": {
"@balena/abstract-sql-compiler": "^9.2.0",
"@balena/odata-to-abstract-sql": "^6.2.7",
"@balena/sbvr-types": "^8.0.0",
"@types/node": "^20.14.8",
"common-tags": "^1.8.2"
},
"engines": {
"node": ">=16.13.0",
"npm": ">=8.1.0"
}
},
"node_modules/@balena/apple-plist": { "node_modules/@balena/apple-plist": {
"version": "0.0.3", "version": "0.0.3",
"resolved": "https://registry.npmjs.org/@balena/apple-plist/-/apple-plist-0.0.3.tgz", "resolved": "https://registry.npmjs.org/@balena/apple-plist/-/apple-plist-0.0.3.tgz",
@ -1410,9 +1450,9 @@
} }
}, },
"node_modules/@balena/compose": { "node_modules/@balena/compose": {
"version": "4.0.1", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/@balena/compose/-/compose-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@balena/compose/-/compose-5.0.0.tgz",
"integrity": "sha512-yUaML0V58nl7/3xbCJ5eDJyGMWL8H+iPHD6Fc4GkLco5kFMiySkvlGy7+7cJoBa/p2+7GggQO0vCaOKpI7+GJQ==", "integrity": "sha512-jfp08uSw999cGX8v7tuO6cYD99Ge6yq1cIow1EvmRtKQ8PTkeUh5rxUbaMyUN8/meDnqlyAYpXgwwNUuuePKGQ==",
"dependencies": { "dependencies": {
"ajv": "^6.12.3", "ajv": "^6.12.3",
"docker-file-parser": "^1.0.7", "docker-file-parser": "^1.0.7",
@ -1664,6 +1704,51 @@
"web-streams-polyfill": "^3.1.0" "web-streams-polyfill": "^3.1.0"
} }
}, },
"node_modules/@balena/odata-parser": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/@balena/odata-parser/-/odata-parser-3.0.8.tgz",
"integrity": "sha512-EhC7uYZUTIeoBPSAHRfL2tz4H2pfe9vO9U4jf/84NVnh6GKApA8Gfo4QQWwL/SHuz+KJI0LkhjU9yNqKCPE0kg==",
"license": "BSD",
"engines": {
"node": ">=16.13.0",
"npm": ">=8.1.0"
}
},
"node_modules/@balena/odata-to-abstract-sql": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/@balena/odata-to-abstract-sql/-/odata-to-abstract-sql-6.3.0.tgz",
"integrity": "sha512-T5GDWjDsl2vtPL3LFN59b/JuKbX48frdkeQ6QbQPiWUDQLltTp4piQFAxP6SMpXe/QdWsV9kbNN5yBdTm4PfwQ==",
"license": "BSD",
"dependencies": {
"@balena/abstract-sql-compiler": "^9.2.0",
"@balena/odata-parser": "^3.0.8",
"@types/lodash": "^4.17.7",
"@types/memoizee": "^0.4.11",
"@types/string-hash": "^1.1.3",
"lodash": "^4.17.21",
"memoizee": "^0.4.17",
"string-hash": "^1.1.3"
},
"engines": {
"node": ">=16.13.0",
"npm": ">=8.1.0"
}
},
"node_modules/@balena/sbvr-types": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@balena/sbvr-types/-/sbvr-types-8.0.0.tgz",
"integrity": "sha512-SDvbHOkav+rh9ahNSz6hYKGygK6r2pF8+sTRJ7fLhG4wT5LGmU+BZjjyf/bbuvihcW1fX/vm5WGbyXkFDsG/Qw==",
"license": "BSD",
"engines": {
"node": ">=16.13.0",
"npm": ">=8.1.0"
},
"optionalDependencies": {
"bcrypt": "^5.1.1",
"bcryptjs": "^2.4.3",
"sha.js": "^2.4.11"
}
},
"node_modules/@balena/udif": { "node_modules/@balena/udif": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/@balena/udif/-/udif-1.1.2.tgz", "resolved": "https://registry.npmjs.org/@balena/udif/-/udif-1.1.2.tgz",
@ -2237,6 +2322,103 @@
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="
}, },
"node_modules/@mapbox/node-pre-gyp": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
"integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
"license": "BSD-3-Clause",
"optional": true,
"dependencies": {
"detect-libc": "^2.0.0",
"https-proxy-agent": "^5.0.0",
"make-dir": "^3.1.0",
"node-fetch": "^2.6.7",
"nopt": "^5.0.0",
"npmlog": "^5.0.1",
"rimraf": "^3.0.2",
"semver": "^7.3.5",
"tar": "^6.1.11"
},
"bin": {
"node-pre-gyp": "bin/node-pre-gyp"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
"deprecated": "This package is no longer supported.",
"license": "ISC",
"optional": true,
"dependencies": {
"delegates": "^1.0.0",
"readable-stream": "^3.6.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
"license": "Apache-2.0",
"optional": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/gauge": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
"integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
"deprecated": "This package is no longer supported.",
"license": "ISC",
"optional": true,
"dependencies": {
"aproba": "^1.0.3 || ^2.0.0",
"color-support": "^1.1.2",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.1",
"object-assign": "^4.1.1",
"signal-exit": "^3.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
"wide-align": "^1.1.2"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
"deprecated": "This package is no longer supported.",
"license": "ISC",
"optional": true,
"dependencies": {
"are-we-there-yet": "^2.0.0",
"console-control-strings": "^1.1.0",
"gauge": "^3.0.0",
"set-blocking": "^2.0.0"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"license": "MIT",
"optional": true,
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -3687,9 +3869,16 @@
} }
}, },
"node_modules/@types/lodash": { "node_modules/@types/lodash": {
"version": "4.17.6", "version": "4.17.7",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz",
"integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==" "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==",
"license": "MIT"
},
"node_modules/@types/memoizee": {
"version": "0.4.11",
"resolved": "https://registry.npmjs.org/@types/memoizee/-/memoizee-0.4.11.tgz",
"integrity": "sha512-2gyorIBZu8GoDr9pYjROkxWWcFtHCquF7TVbN2I+/OvgZhnIGQS0vX5KJz4lXNKb8XOSfxFOSG5OLru1ESqLUg==",
"license": "MIT"
}, },
"node_modules/@types/mime": { "node_modules/@types/mime": {
"version": "3.0.4", "version": "3.0.4",
@ -3747,10 +3936,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.16.15", "version": "20.17.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.15.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.1.tgz",
"integrity": "sha512-DV58qQz9dBMqVVn+qnKwGa51QzCD4YM/tQM16qLKxdf5tqz5W4QwtrMzjSTbabN1cFTSuyxVYBy+QWHjWW8X/g==", "integrity": "sha512-j2VlPv1NnwPJbaCNv69FO/1z4lId0QmGvpT41YxitRtWlg96g/j8qcv2RKsLKe2F6OJgyXhupN1Xo17b2m139Q==",
"license": "MIT",
"dependencies": { "dependencies": {
"undici-types": "~6.19.2" "undici-types": "~6.19.2"
} }
@ -3958,6 +4146,12 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/string-hash": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@types/string-hash/-/string-hash-1.1.3.tgz",
"integrity": "sha512-p6skq756fJWiA59g2Uss+cMl6tpoDGuCBuxG0SI1t0NwJmYOU66LAMS6QiCgu7cUh3/hYCaMl5phcCW1JP5wOA==",
"license": "MIT"
},
"node_modules/@types/tar-stream": { "node_modules/@types/tar-stream": {
"version": "2.2.2", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-2.2.2.tgz", "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-2.2.2.tgz",
@ -4442,6 +4636,13 @@
"resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
"integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="
}, },
"node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"license": "ISC",
"optional": true
},
"node_modules/abort-controller": { "node_modules/abort-controller": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@ -5320,11 +5521,11 @@
} }
}, },
"node_modules/balena-preload": { "node_modules/balena-preload": {
"version": "15.0.6", "version": "16.0.0",
"resolved": "https://registry.npmjs.org/balena-preload/-/balena-preload-15.0.6.tgz", "resolved": "https://registry.npmjs.org/balena-preload/-/balena-preload-16.0.0.tgz",
"integrity": "sha512-WQQu9Agu8usnmwZZFz5G+Qblnry/NsIwpv1hu5PCViHSOARHThQrBu6n5Yhx2LUGQ2J0e+BcoE3eEeBWD3vxuA==", "integrity": "sha512-IP+4Op6LHJW5ip/oomQmERjbNroKqi5atDI3s07aokgv/mH8J7jy4BOOW6JwnrHb560IQy/oPf4yM4h3qQlLEA==",
"dependencies": { "dependencies": {
"balena-sdk": "^19.7.2", "balena-sdk": "^20.1.3",
"bluebird": "^3.7.2", "bluebird": "^3.7.2",
"compare-versions": "^3.6.0", "compare-versions": "^3.6.0",
"docker-progress": "^5.0.0", "docker-progress": "^5.0.0",
@ -5380,13 +5581,13 @@
} }
}, },
"node_modules/balena-sdk": { "node_modules/balena-sdk": {
"version": "19.7.3", "version": "20.3.0",
"resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-19.7.3.tgz", "resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-20.3.0.tgz",
"integrity": "sha512-O7c+ZVZVSGOlECvkLvi1DWwbKb7bM3UgPaRlCfld0cOcp6X9S+6fcLt9ewOOhF3YsxrBksYOSYBnrmkW9VxqLQ==", "integrity": "sha512-HN8sDLf3Jbl2UrI9UE0zFRf07XRcUh2VLsxsuZYGOi0LQ7aJ8FB6F0DRsPQIDLMuvzz18lnztvpEmgzvTE/P1A==",
"dependencies": { "dependencies": {
"@balena/es-version": "^1.0.0", "@balena/es-version": "^1.0.0",
"@types/json-schema": "^7.0.9", "@types/json-schema": "^7.0.9",
"@types/node": "^18.0.0", "@types/node": "^18.19.50",
"abortcontroller-polyfill": "^1.7.1", "abortcontroller-polyfill": "^1.7.1",
"balena-auth": "^6.0.1", "balena-auth": "^6.0.1",
"balena-errors": "^4.9.0", "balena-errors": "^4.9.0",
@ -5402,7 +5603,7 @@
"mime": "^3.0.0", "mime": "^3.0.0",
"ndjson": "^2.0.0", "ndjson": "^2.0.0",
"p-throttle": "^4.1.1", "p-throttle": "^4.1.1",
"pinejs-client-core": "~6.14.0", "pinejs-client-core": "^6.15.0",
"tslib": "^2.1.0" "tslib": "^2.1.0"
}, },
"engines": { "engines": {
@ -5499,6 +5700,21 @@
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
}, },
"node_modules/bcrypt": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz",
"integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@mapbox/node-pre-gyp": "^1.0.11",
"node-addon-api": "^5.0.0"
},
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/bcrypt-pbkdf": { "node_modules/bcrypt-pbkdf": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@ -5507,6 +5723,20 @@
"tweetnacl": "^0.14.3" "tweetnacl": "^0.14.3"
} }
}, },
"node_modules/bcrypt/node_modules/node-addon-api": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
"integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
"license": "MIT",
"optional": true
},
"node_modules/bcryptjs": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
"integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
"license": "MIT",
"optional": true
},
"node_modules/binary": { "node_modules/binary": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
@ -6283,6 +6513,16 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
}, },
"node_modules/color-support": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"license": "ISC",
"optional": true,
"bin": {
"color-support": "bin.js"
}
},
"node_modules/colors": { "node_modules/colors": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
@ -6852,12 +7092,16 @@
} }
}, },
"node_modules/d": { "node_modules/d": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
"integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
"license": "ISC",
"dependencies": { "dependencies": {
"es5-ext": "^0.10.50", "es5-ext": "^0.10.64",
"type": "^1.0.1" "type": "^2.7.2"
},
"engines": {
"node": ">=0.12"
} }
}, },
"node_modules/dashdash": { "node_modules/dashdash": {
@ -8125,12 +8369,6 @@
"node": ">=0.10" "node": ">=0.10"
} }
}, },
"node_modules/esniff/node_modules/type": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
"license": "ISC"
},
"node_modules/espree": { "node_modules/espree": {
"version": "9.6.1", "version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@ -8515,12 +8753,6 @@
"type": "^2.7.2" "type": "^2.7.2"
} }
}, },
"node_modules/ext/node_modules/type": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
"license": "ISC"
},
"node_modules/ext2fs": { "node_modules/ext2fs": {
"version": "4.2.1", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/ext2fs/-/ext2fs-4.2.1.tgz", "resolved": "https://registry.npmjs.org/ext2fs/-/ext2fs-4.2.1.tgz",
@ -9152,6 +9384,32 @@
"node": ">=14.14" "node": ">=14.14"
} }
}, },
"node_modules/fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"license": "ISC",
"optional": true,
"dependencies": {
"minipass": "^3.0.0"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/fs-minipass/node_modules/minipass": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"optional": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/fs.realpath": { "node_modules/fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -12020,18 +12278,22 @@
} }
}, },
"node_modules/memoizee": { "node_modules/memoizee": {
"version": "0.4.15", "version": "0.4.17",
"resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz",
"integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==",
"license": "ISC",
"dependencies": { "dependencies": {
"d": "^1.0.1", "d": "^1.0.2",
"es5-ext": "^0.10.53", "es5-ext": "^0.10.64",
"es6-weak-map": "^2.0.3", "es6-weak-map": "^2.0.3",
"event-emitter": "^0.3.5", "event-emitter": "^0.3.5",
"is-promise": "^2.2.2", "is-promise": "^2.2.2",
"lru-queue": "^0.1.0", "lru-queue": "^0.1.0",
"next-tick": "^1.1.0", "next-tick": "^1.1.0",
"timers-ext": "^0.1.7" "timers-ext": "^0.1.7"
},
"engines": {
"node": ">=0.12"
} }
}, },
"node_modules/merge-descriptors": { "node_modules/merge-descriptors": {
@ -12147,6 +12409,33 @@
"node": ">=16 || 14 >=14.17" "node": ">=16 || 14 >=14.17"
} }
}, },
"node_modules/minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
"license": "MIT",
"optional": true,
"dependencies": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/minizlib/node_modules/minipass": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"optional": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/mkdirp": { "node_modules/mkdirp": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
@ -12827,6 +13116,22 @@
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
"integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI="
}, },
"node_modules/nopt": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
"license": "ISC",
"optional": true,
"dependencies": {
"abbrev": "1"
},
"bin": {
"nopt": "bin/nopt.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/normalize-package-data": { "node_modules/normalize-package-data": {
"version": "6.0.2", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
@ -14004,10 +14309,11 @@
} }
}, },
"node_modules/pinejs-client-core": { "node_modules/pinejs-client-core": {
"version": "6.14.13", "version": "6.15.11",
"resolved": "https://registry.npmjs.org/pinejs-client-core/-/pinejs-client-core-6.14.13.tgz", "resolved": "https://registry.npmjs.org/pinejs-client-core/-/pinejs-client-core-6.15.11.tgz",
"integrity": "sha512-Ca1kfbst+0C9UbvqrJFM2VZRAX/UDSgMDYiqSswzTsNoz/axOLMB3bmbrK8el+wSLb0TG2s/UsOZQTnN4MkOcQ==", "integrity": "sha512-EUhXx+UpyKJnkw7E5Y5fEwYMNx6SstBJdE21Rwsvs783oXPeoQ1Gmo1Lh5Ct67YaDQLoA6Dab4KoqycwrZPGSA==",
"dependencies": { "dependencies": {
"@balena/abstract-sql-to-typescript": "^3.2.3",
"@balena/es-version": "^1.0.3" "@balena/es-version": "^1.0.3"
}, },
"engines": { "engines": {
@ -15456,6 +15762,20 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
}, },
"node_modules/sha.js": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"license": "(MIT AND BSD-3-Clause)",
"optional": true,
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
},
"bin": {
"sha.js": "bin.js"
}
},
"node_modules/shebang-command": { "node_modules/shebang-command": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@ -15996,6 +16316,12 @@
"safe-buffer": "~5.1.0" "safe-buffer": "~5.1.0"
} }
}, },
"node_modules/string-hash": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
"integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==",
"license": "CC0-1.0"
},
"node_modules/string-to-stream": { "node_modules/string-to-stream": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz",
@ -16300,6 +16626,24 @@
"node": ">= 0.4.0" "node": ">= 0.4.0"
} }
}, },
"node_modules/tar": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
"integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"license": "ISC",
"optional": true,
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^5.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/tar-fs": { "node_modules/tar-fs": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
@ -16348,6 +16692,39 @@
"tar-stream": "^2.1.3" "tar-stream": "^2.1.3"
} }
}, },
"node_modules/tar/node_modules/chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
"license": "ISC",
"optional": true,
"engines": {
"node": ">=10"
}
},
"node_modules/tar/node_modules/minipass": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
"integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
"license": "ISC",
"optional": true,
"engines": {
"node": ">=8"
}
},
"node_modules/tar/node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"license": "MIT",
"optional": true,
"bin": {
"mkdirp": "bin/cmd.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/temp": { "node_modules/temp": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/temp/-/temp-0.6.0.tgz", "resolved": "https://registry.npmjs.org/temp/-/temp-0.6.0.tgz",
@ -16677,9 +17054,10 @@
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
}, },
"node_modules/type": { "node_modules/type": {
"version": "1.2.0", "version": "2.7.3",
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
"license": "ISC"
}, },
"node_modules/type-check": { "node_modules/type-check": {
"version": "0.4.0", "version": "0.4.0",
@ -17541,6 +17919,13 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC",
"optional": true
},
"node_modules/yaml": { "node_modules/yaml": {
"version": "1.10.2", "version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",

View File

@ -189,7 +189,7 @@
"typescript": "^5.6.2" "typescript": "^5.6.2"
}, },
"dependencies": { "dependencies": {
"@balena/compose": "^4.0.1", "@balena/compose": "^5.0.0",
"@balena/dockerignore": "^1.0.2", "@balena/dockerignore": "^1.0.2",
"@balena/env-parsing": "^1.1.8", "@balena/env-parsing": "^1.1.8",
"@balena/es-version": "^1.0.1", "@balena/es-version": "^1.0.1",
@ -199,8 +199,8 @@
"balena-device-init": "^7.0.1", "balena-device-init": "^7.0.1",
"balena-errors": "^4.7.3", "balena-errors": "^4.7.3",
"balena-image-fs": "^7.0.6", "balena-image-fs": "^7.0.6",
"balena-preload": "^15.0.6", "balena-preload": "^16.0.0",
"balena-sdk": "^19.7.3", "balena-sdk": "^20.3.0",
"balena-semver": "^2.3.0", "balena-semver": "^2.3.0",
"balena-settings-client": "^5.0.2", "balena-settings-client": "^5.0.2",
"balena-settings-storage": "^8.1.0", "balena-settings-storage": "^8.1.0",

View File

@ -17,7 +17,6 @@
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import { ExpectedError } from '../../errors'; import { ExpectedError } from '../../errors';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class GenerateCmd extends Command { export default class GenerateCmd extends Command {
@ -39,10 +38,6 @@ export default class GenerateCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -21,6 +21,7 @@ import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
export default class APIKeyListCmd extends Command { export default class APIKeyListCmd extends Command {
public static aliases = ['api-keys']; public static aliases = ['api-keys'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Print a list of balenaCloud API keys. Print a list of balenaCloud API keys.
@ -32,7 +33,6 @@ export default class APIKeyListCmd extends Command {
public static examples = ['$ balena api-key list']; public static examples = ['$ balena api-key list'];
public static flags = { public static flags = {
help: cf.help,
user: Flags.boolean({ user: Flags.boolean({
char: 'u', char: 'u',
description: 'show API keys for your user', description: 'show API keys for your user',
@ -51,7 +51,7 @@ export default class APIKeyListCmd extends Command {
await getApplication(getBalenaSdk(), options.fleet, { await getApplication(getBalenaSdk(), options.fleet, {
$select: 'actor', $select: 'actor',
}) })
).actor ).actor.__id
: await getBalenaSdk().auth.getActorId(); : await getBalenaSdk().auth.getActorId();
const keys = await getBalenaSdk().pine.get({ const keys = await getBalenaSdk().pine.get({
resource: 'api_key', resource: 'api_key',

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class RevokeCmd extends Command { export default class RevokeCmd extends Command {
@ -40,10 +39,6 @@ export default class RevokeCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { stripIndent } from '../../utils/lazy'; import { stripIndent } from '../../utils/lazy';
export default class AppCreateCmd extends Command { export default class AppCreateCmd extends Command {
@ -64,7 +63,6 @@ export default class AppCreateCmd extends Command {
description: description:
'app device type (Check available types with `balena device-type list`)', 'app device type (Check available types with `balena device-type list`)',
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { stripIndent } from '../../utils/lazy'; import { stripIndent } from '../../utils/lazy';
export default class BlockCreateCmd extends Command { export default class BlockCreateCmd extends Command {
@ -64,7 +63,6 @@ export default class BlockCreateCmd extends Command {
description: description:
'block device type (Check available types with `balena device-type list`)', 'block device type (Check available types with `balena device-type list`)',
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -44,7 +44,6 @@ interface FlagsDef extends ComposeCliFlags, DockerCliFlags {
deviceType?: string; deviceType?: string;
fleet?: string; fleet?: string;
source?: string; // Not part of command profile - source param copied here. source?: string; // Not part of command profile - source param copied here.
help: void;
} }
export default class BuildCmd extends Command { export default class BuildCmd extends Command {
@ -95,9 +94,6 @@ ${dockerignoreHelp}
fleet: cf.fleet, fleet: cf.fleet,
...composeCliFlags, ...composeCliFlags,
...dockerCliFlags, ...dockerCliFlags,
// NOTE: Not supporting -h for help, because of clash with -h in DockerCliFlags
// Revisit this in future release.
help: Flags.help({}),
}; };
public static primary = true; public static primary = true;

View File

@ -117,7 +117,6 @@ export default class ConfigGenerateCmd extends Command {
'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)', 'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)',
exclusive: ['device'], exclusive: ['device'],
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -44,7 +44,6 @@ export default class ConfigInjectCmd extends Command {
public static flags = { public static flags = {
drive: cf.driveOrImg, drive: cf.driveOrImg,
help: cf.help,
}; };
public static root = true; public static root = true;

View File

@ -38,7 +38,6 @@ export default class ConfigReadCmd extends Command {
public static flags = { public static flags = {
drive: cf.driveOrImg, drive: cf.driveOrImg,
help: cf.help,
json: cf.json, json: cf.json,
}; };

View File

@ -44,7 +44,6 @@ export default class ConfigReconfigureCmd extends Command {
description: 'show advanced commands', description: 'show advanced commands',
char: 'v', char: 'v',
}), }),
help: cf.help,
version: Flags.string({ version: Flags.string({
description: 'balenaOS version, for example "2.32.0" or "2.44.0+rev1"', description: 'balenaOS version, for example "2.32.0" or "2.44.0+rev1"',
}), }),

View File

@ -49,7 +49,6 @@ export default class ConfigWriteCmd extends Command {
public static flags = { public static flags = {
drive: cf.driveOrImg, drive: cf.driveOrImg,
help: cf.help,
}; };
public static root = true; public static root = true;

View File

@ -60,7 +60,6 @@ interface FlagsDef extends ComposeCliFlags, DockerCliFlags {
'release-tag'?: string[]; 'release-tag'?: string[];
draft: boolean; draft: boolean;
note?: string; note?: string;
help: void;
} }
export default class DeployCmd extends Command { export default class DeployCmd extends Command {
@ -139,9 +138,6 @@ ${dockerignoreHelp}
note: Flags.string({ description: 'The notes for this release' }), note: Flags.string({ description: 'The notes for this release' }),
...composeCliFlags, ...composeCliFlags,
...dockerCliFlags, ...dockerCliFlags,
// NOTE: Not supporting -h for help, because of clash with -h in DockerCliFlags
// Revisit this in future release.
help: Flags.help({}),
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -17,11 +17,11 @@
import { Flags, Command } from '@oclif/core'; import { Flags, Command } from '@oclif/core';
import type * as BalenaSdk from 'balena-sdk'; import type * as BalenaSdk from 'balena-sdk';
import * as _ from 'lodash'; import * as _ from 'lodash';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
export default class DeviceTypeListCmd extends Command { export default class DeviceTypeListCmd extends Command {
public static aliases = ['devices supported']; public static aliases = ['devices supported'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List the device types supported by balena (like 'raspberrypi3' or 'intel-nuc'). List the device types supported by balena (like 'raspberrypi3' or 'intel-nuc').
@ -45,7 +45,6 @@ export default class DeviceTypeListCmd extends Command {
]; ];
public static flags = { public static flags = {
help: cf.help,
json: Flags.boolean({ json: Flags.boolean({
char: 'j', char: 'j',
description: 'produce JSON output instead of tabular output', description: 'produce JSON output instead of tabular output',

View File

@ -42,7 +42,6 @@ export default class DeviceDeactivateCmd extends Command {
public static flags = { public static flags = {
yes: cf.yes, yes: cf.yes,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,11 +16,11 @@
*/ */
import { Flags, Command } from '@oclif/core'; import { Flags, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getCliUx, stripIndent } from '../../utils/lazy'; import { getCliUx, stripIndent } from '../../utils/lazy';
export default class DeviceDetectCmd extends Command { export default class DeviceDetectCmd extends Command {
public static aliases = ['scan']; public static aliases = ['scan'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Scan for balenaOS devices on your local network. Scan for balenaOS devices on your local network.
@ -49,7 +49,6 @@ export default class DeviceDetectCmd extends Command {
char: 't', char: 't',
description: 'scan timeout in seconds', description: 'scan timeout in seconds',
}), }),
help: cf.help,
json: Flags.boolean({ json: Flags.boolean({
default: false, default: false,
char: 'j', char: 'j',

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { ExpectedError } from '../../errors'; import { ExpectedError } from '../../errors';
@ -35,10 +34,6 @@ export default class DeviceIdentifyCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -63,7 +63,6 @@ export default class DeviceCmd extends Command {
public static flags = { public static flags = {
json: cf.json, json: cf.json,
help: cf.help,
view: Flags.boolean({ view: Flags.boolean({
default: false, default: false,
description: 'open device dashboard page', description: 'open device dashboard page',

View File

@ -28,7 +28,6 @@ interface FlagsDef {
'os-version'?: string; 'os-version'?: string;
drive?: string; drive?: string;
config?: string; config?: string;
help: void;
'provisioning-key-name'?: string; 'provisioning-key-name'?: string;
'provisioning-key-expiry-date'?: string; 'provisioning-key-expiry-date'?: string;
} }
@ -100,7 +99,6 @@ export default class DeviceInitCmd extends Command {
description: description:
'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)', 'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)',
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -37,6 +37,7 @@ const devicesSelectFields = {
export default class DeviceListCmd extends Command { export default class DeviceListCmd extends Command {
public static aliases = ['devices']; public static aliases = ['devices'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List all devices. List all devices.
@ -58,7 +59,6 @@ export default class DeviceListCmd extends Command {
public static flags = { public static flags = {
fleet: cf.fleet, fleet: cf.fleet,
json: cf.json, json: cf.json,
help: cf.help,
}; };
public static primary = true; public static primary = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class DeviceLocalModeCmd extends Command { export default class DeviceLocalModeCmd extends Command {
@ -54,7 +53,6 @@ export default class DeviceLocalModeCmd extends Command {
description: 'output boolean indicating local mode status', description: 'output boolean indicating local mode status',
exclusive: ['enable', 'disable'], exclusive: ['enable', 'disable'],
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import type { LogMessage } from 'balena-sdk'; import type { LogMessage } from 'balena-sdk';
@ -24,6 +23,7 @@ const MAX_RETRY = 1000;
export default class DeviceLogsCmd extends Command { export default class DeviceLogsCmd extends Command {
public static aliases = ['logs']; public static aliases = ['logs'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Show device logs. Show device logs.
@ -86,7 +86,6 @@ export default class DeviceLogsCmd extends Command {
'Only show system logs. This can be used in combination with --service.', 'Only show system logs. This can be used in combination with --service.',
char: 'S', char: 'S',
}), }),
help: cf.help,
}; };
public static primary = true; public static primary = true;

View File

@ -55,7 +55,6 @@ export default class DeviceMoveCmd extends Command {
public static flags = { public static flags = {
fleet: cf.fleet, fleet: cf.fleet,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -22,6 +22,7 @@ import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class DeviceNoteCmd extends Command { export default class DeviceNoteCmd extends Command {
public static aliases = ['notes']; public static aliases = ['notes'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Set a device note. Set a device note.
@ -49,7 +50,6 @@ export default class DeviceNoteCmd extends Command {
exclusive: ['device'], exclusive: ['device'],
hidden: true, hidden: true,
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -57,7 +57,6 @@ export default class DeviceOsUpdateCmd extends Command {
exclusive: ['version'], exclusive: ['version'],
}), }),
yes: cf.yes, yes: cf.yes,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;
@ -147,7 +146,18 @@ export default class DeviceOsUpdateCmd extends Command {
'Host OS updates require a device restart when they complete. Are you sure you want to proceed?', 'Host OS updates require a device restart when they complete. Are you sure you want to proceed?',
); );
await sdk.models.device.startOsUpdate(uuid, targetOsVersion); await sdk.models.device
await patterns.awaitDeviceOsUpdate(uuid, targetOsVersion); .startOsUpdate(uuid, targetOsVersion, {
runDetached: true,
})
.then(() => {
console.log(
`The balena OS update has started. You can keep track of the progress via the dashboard.\n` +
`To open the dashboard page related to a device via the CLI, you can use \`balena device UUID --view\``,
);
})
.catch((error) => {
console.error(`Failed to start OS update for device ${uuid}:`, error);
});
} }
} }

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { getExpandedProp } from '../../utils/pine'; import { getExpandedProp } from '../../utils/pine';
@ -43,10 +42,6 @@ export default class DevicePinCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {
@ -56,7 +51,7 @@ export default class DevicePinCmd extends Command {
const device = await balena.models.device.get(params.uuid, { const device = await balena.models.device.get(params.uuid, {
$expand: { $expand: {
should_be_running__release: { is_pinned_on__release: {
$select: 'commit', $select: 'commit',
}, },
belongs_to__application: { belongs_to__application: {
@ -66,7 +61,7 @@ export default class DevicePinCmd extends Command {
}); });
const pinnedRelease = getExpandedProp( const pinnedRelease = getExpandedProp(
device.should_be_running__release, device.is_pinned_on__release,
'commit', 'commit',
); );
const appSlug = getExpandedProp(device.belongs_to__application, 'slug'); const appSlug = getExpandedProp(device.belongs_to__application, 'slug');

View File

@ -17,7 +17,6 @@
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import { ExpectedError } from '../../errors'; import { ExpectedError } from '../../errors';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class DevicePublicUrlCmd extends Command { export default class DevicePublicUrlCmd extends Command {
@ -56,7 +55,6 @@ export default class DevicePublicUrlCmd extends Command {
description: 'determine if public URL is enabled', description: 'determine if public URL is enabled',
exclusive: ['enable', 'disable'], exclusive: ['enable', 'disable'],
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
export default class DevicePurgeCmd extends Command { export default class DevicePurgeCmd extends Command {
@ -41,10 +40,6 @@ export default class DevicePurgeCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -36,7 +36,6 @@ export default class DeviceRebootCmd extends Command {
public static flags = { public static flags = {
force: cf.force, force: cf.force,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Command } from '@oclif/core'; import { Flags, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import * as ca from '../../utils/common-args'; import * as ca from '../../utils/common-args';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { applicationIdInfo } from '../../utils/messages'; import { applicationIdInfo } from '../../utils/messages';
@ -52,7 +51,6 @@ export default class DeviceRegisterCmd extends Command {
description: description:
"device type slug (run 'balena device-type list' for possible values)", "device type slug (run 'balena device-type list' for possible values)",
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy'; import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
export default class DeviceRenameCmd extends Command { export default class DeviceRenameCmd extends Command {
@ -42,10 +41,6 @@ export default class DeviceRenameCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
import type { import type {
BalenaSDK, BalenaSDK,
@ -58,7 +57,6 @@ export default class DeviceRestartCmd extends Command {
'comma-separated list (no blank spaces) of service names to restart', 'comma-separated list (no blank spaces) of service names to restart',
char: 's', char: 's',
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;
@ -156,7 +154,7 @@ export default class DeviceRestartCmd extends Command {
async restartAllServices(balena: BalenaSDK, deviceUuid: string) { async restartAllServices(balena: BalenaSDK, deviceUuid: string) {
// 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 disconnected 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');
try { try {

View File

@ -44,7 +44,6 @@ export default class DeviceRmCmd extends Command {
public static flags = { public static flags = {
yes: cf.yes, yes: cf.yes,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -37,7 +37,6 @@ export default class DeviceShutdownCmd extends Command {
public static flags = { public static flags = {
force: cf.force, force: cf.force,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { import {
parseAsInteger, parseAsInteger,
@ -25,6 +24,7 @@ import {
export default class DeviceSSHCmd extends Command { export default class DeviceSSHCmd extends Command {
public static aliases = ['ssh']; public static aliases = ['ssh'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Open a SSH prompt on a device's host OS or service container. Open a SSH prompt on a device's host OS or service container.
@ -99,7 +99,6 @@ export default class DeviceSSHCmd extends Command {
default: false, default: false,
description: 'bypass global proxy configuration for the ssh connection', description: 'bypass global proxy configuration for the ssh connection',
}), }),
help: cf.help,
}; };
public static primary = true; public static primary = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
import type { BalenaSDK } from 'balena-sdk'; import type { BalenaSDK } from 'balena-sdk';
@ -45,10 +44,6 @@ export default class DeviceStartServiceCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getCliUx, stripIndent } from '../../utils/lazy';
import type { BalenaSDK } from 'balena-sdk'; import type { BalenaSDK } from 'balena-sdk';
@ -45,10 +44,6 @@ export default class DeviceStopServiceCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class DeviceTrackFleetCmd extends Command { export default class DeviceTrackFleetCmd extends Command {
@ -34,10 +33,6 @@ export default class DeviceTrackFleetCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -21,7 +21,6 @@ import {
InvalidPortMappingError, InvalidPortMappingError,
ExpectedError, ExpectedError,
} from '../../errors'; } from '../../errors';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { lowercaseIfSlug } from '../../utils/normalization'; import { lowercaseIfSlug } from '../../utils/normalization';
@ -29,6 +28,7 @@ import type { Server, Socket } from 'net';
export default class DeviceTunnelCmd extends Command { export default class DeviceTunnelCmd extends Command {
public static aliases = ['tunnel']; public static aliases = ['tunnel'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Tunnel local ports to your balenaOS device. Tunnel local ports to your balenaOS device.
@ -86,7 +86,6 @@ export default class DeviceTunnelCmd extends Command {
char: 'p', char: 'p',
multiple: true, multiple: true,
}), }),
help: cf.help,
}; };
public static primary = true; public static primary = true;

View File

@ -47,6 +47,7 @@ interface ServiceEnvironmentVariableInfo
export default class EnvListCmd extends Command { export default class EnvListCmd extends Command {
public static aliases = ['envs']; public static aliases = ['envs'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List the environment or config variables of a fleet, device or service. List the environment or config variables of a fleet, device or service.
@ -104,7 +105,6 @@ export default class EnvListCmd extends Command {
exclusive: ['service'], exclusive: ['service'],
}), }),
device: { ...cf.device, exclusive: ['fleet'] }, device: { ...cf.device, exclusive: ['fleet'] },
help: cf.help,
json: cf.json, json: cf.json,
service: { ...cf.service, exclusive: ['config'] }, service: { ...cf.service, exclusive: ['config'] },
}; };

View File

@ -15,7 +15,6 @@
* limitations under the License. * limitations under the License.
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import * as ec from '../../utils/env-common'; import * as ec from '../../utils/env-common';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { parseAsInteger } from '../../utils/validation'; import { parseAsInteger } from '../../utils/validation';
@ -55,7 +54,6 @@ export default class EnvRenameCmd extends Command {
config: ec.booleanConfig, config: ec.booleanConfig,
device: ec.booleanDevice, device: ec.booleanDevice,
service: ec.booleanService, service: ec.booleanService,
help: cf.help,
}; };
public async run() { public async run() {

View File

@ -25,7 +25,6 @@ import { applicationIdInfo } from '../../utils/messages';
interface FlagsDef { interface FlagsDef {
fleet?: string; fleet?: string;
device?: string; // device UUID device?: string; // device UUID
help: void;
quiet: boolean; quiet: boolean;
service?: string; // service name service?: string; // service name
} }
@ -37,6 +36,7 @@ interface ArgsDef {
export default class EnvSetCmd extends Command { export default class EnvSetCmd extends Command {
public static aliases = ['env add']; public static aliases = ['env add'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Add or update env or config variable to fleets, devices or services. Add or update env or config variable to fleets, devices or services.
@ -97,7 +97,6 @@ export default class EnvSetCmd extends Command {
public static flags = { public static flags = {
fleet: { ...cf.fleet, exclusive: ['device'] }, fleet: { ...cf.fleet, exclusive: ['device'] },
device: { ...cf.device, exclusive: ['fleet'] }, device: { ...cf.device, exclusive: ['fleet'] },
help: cf.help,
quiet: cf.quiet, quiet: cf.quiet,
service: cf.service, service: cf.service,
}; };

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { stripIndent } from '../../utils/lazy'; import { stripIndent } from '../../utils/lazy';
export default class FleetCreateCmd extends Command { export default class FleetCreateCmd extends Command {
@ -64,7 +63,6 @@ export default class FleetCreateCmd extends Command {
description: description:
'fleet device type (Check available types with `balena device-type list`)', 'fleet device type (Check available types with `balena device-type list`)',
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -40,7 +40,6 @@ export default class FleetCmd extends Command {
}; };
public static flags = { public static flags = {
help: cf.help,
view: Flags.boolean({ view: Flags.boolean({
default: false, default: false,
description: 'open fleet dashboard page', description: 'open fleet dashboard page',

View File

@ -28,6 +28,7 @@ interface ExtendedApplication extends ApplicationWithDeviceTypeSlug {
export default class FleetListCmd extends Command { export default class FleetListCmd extends Command {
public static aliases = ['fleets']; public static aliases = ['fleets'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List all fleets. List all fleets.
@ -41,7 +42,6 @@ export default class FleetListCmd extends Command {
public static examples = ['$ balena fleet list']; public static examples = ['$ balena fleet list'];
public static flags = { public static flags = {
help: cf.help,
json: cf.json, json: cf.json,
}; };

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { getExpandedProp } from '../../utils/pine'; import { getExpandedProp } from '../../utils/pine';
@ -43,10 +42,6 @@ export default class FleetPinCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import * as ca from '../../utils/common-args'; import * as ca from '../../utils/common-args';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { applicationIdInfo } from '../../utils/messages'; import { applicationIdInfo } from '../../utils/messages';
@ -40,10 +39,6 @@ export default class FleetPurgeCmd extends Command {
fleet: ca.fleetRequired, fleet: ca.fleetRequired,
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import * as ca from '../../utils/common-args'; import * as ca from '../../utils/common-args';
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy'; import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
import { applicationIdInfo } from '../../utils/messages'; import { applicationIdInfo } from '../../utils/messages';
@ -46,10 +45,6 @@ export default class FleetRenameCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import * as ca from '../../utils/common-args'; import * as ca from '../../utils/common-args';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { applicationIdInfo } from '../../utils/messages'; import { applicationIdInfo } from '../../utils/messages';
@ -39,10 +38,6 @@ export default class FleetRestartCmd extends Command {
fleet: ca.fleetRequired, fleet: ca.fleetRequired,
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -44,7 +44,6 @@ export default class FleetRmCmd extends Command {
public static flags = { public static flags = {
yes: cf.yes, yes: cf.yes,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class FleetTrackLatestCmd extends Command { export default class FleetTrackLatestCmd extends Command {
@ -37,10 +36,6 @@ export default class FleetTrackLatestCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -65,7 +65,6 @@ export default class JoinCmd extends Command {
description: 'the interval in minutes to check for updates', description: 'the interval in minutes to check for updates',
char: 'i', char: 'i',
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { stripIndent } from '../../utils/lazy'; import { stripIndent } from '../../utils/lazy';
import { parseAsLocalHostnameOrIp } from '../../utils/validation'; import { parseAsLocalHostnameOrIp } from '../../utils/validation';
@ -49,10 +48,6 @@ export default class LeaveCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public static primary = true; public static primary = true;

View File

@ -17,7 +17,6 @@
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import { promisify } from 'util'; import { promisify } from 'util';
import * as cf from '../../utils/common-flags';
import { stripIndent } from '../../utils/lazy'; import { stripIndent } from '../../utils/lazy';
export default class LocalConfigureCmd extends Command { export default class LocalConfigureCmd extends Command {
@ -39,10 +38,6 @@ export default class LocalConfigureCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static root = true; public static root = true;
public static offlineCompatible = true; public static offlineCompatible = true;

View File

@ -48,7 +48,6 @@ export default class LocalFlashCmd extends Command {
public static flags = { public static flags = {
drive: cf.drive, drive: cf.drive,
yes: cf.yes, yes: cf.yes,
help: cf.help,
}; };
public static offlineCompatible = true; public static offlineCompatible = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy'; import { getBalenaSdk, stripIndent, getCliForm } from '../../utils/lazy';
import { ExpectedError } from '../../errors'; import { ExpectedError } from '../../errors';
import type { WhoamiResult } from 'balena-sdk'; import type { WhoamiResult } from 'balena-sdk';
@ -29,7 +28,6 @@ interface FlagsDef {
user?: string; user?: string;
password?: string; password?: string;
port?: number; port?: number;
help: void;
hideExperimentalWarning: boolean; hideExperimentalWarning: boolean;
} }
@ -111,7 +109,6 @@ export default class LoginCmd extends Command {
default: false, default: false,
description: 'Hides warning for experimental features', description: 'Hides warning for experimental features',
}), }),
help: cf.help,
}; };
public static primary = true; public static primary = true;

View File

@ -16,11 +16,11 @@
*/ */
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
export default class OrganizationListCmd extends Command { export default class OrganizationListCmd extends Command {
public static aliases = ['orgs']; public static aliases = ['orgs'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List all organizations. List all organizations.
@ -29,10 +29,6 @@ export default class OrganizationListCmd extends Command {
`; `;
public static examples = ['$ balena organization list']; public static examples = ['$ balena organization list'];
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getCliForm, stripIndent } from '../../utils/lazy'; import { getCliForm, stripIndent } from '../../utils/lazy';
import * as _ from 'lodash'; import * as _ from 'lodash';
import type { DeviceTypeJson } from 'balena-sdk'; import type { DeviceTypeJson } from 'balena-sdk';
@ -55,7 +54,6 @@ export default class OsBuildConfigCmd extends Command {
char: 'o', char: 'o',
required: true, required: true,
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -154,7 +154,6 @@ export default class OsConfigureCmd extends Command {
'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)', 'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)',
exclusive: ['config', 'device'], exclusive: ['config', 'device'],
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { stripIndent } from '../../utils/lazy'; import { stripIndent } from '../../utils/lazy';
export default class OsDownloadCmd extends Command { export default class OsDownloadCmd extends Command {
@ -78,7 +77,6 @@ export default class OsDownloadCmd extends Command {
or 'menu-esr' (interactive menu, ESR versions) or 'menu-esr' (interactive menu, ESR versions)
`, `,
}), }),
help: cf.help,
}; };
public async run() { public async run() {

View File

@ -51,7 +51,6 @@ export default class OsInitializeCmd extends Command {
type: cf.deviceType, type: cf.deviceType,
drive: cf.drive, drive: cf.drive,
yes: cf.yes, yes: cf.yes,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { stripIndent } from '../../utils/lazy'; import { stripIndent } from '../../utils/lazy';
export default class OsVersionsCmd extends Command { export default class OsVersionsCmd extends Command {
@ -40,7 +39,6 @@ export default class OsVersionsCmd extends Command {
}; };
public static flags = { public static flags = {
help: cf.help,
esr: Flags.boolean({ esr: Flags.boolean({
description: 'select balenaOS ESR versions', description: 'select balenaOS ESR versions',
default: false, default: false,

View File

@ -84,9 +84,9 @@ export default class PreloadCmd extends Command {
description: `\ description: `\
The commit hash of the release to preload. Use "current" to specify the current The commit hash of the release to preload. Use "current" to specify the current
release (ignored if no appId is given). The current release is usually also the release (ignored if no appId is given). The current release is usually also the
latest, but can be pinned to a specific release. See: latest, but can be pinned to a specific release. See:
https://www.balena.io/docs/learn/deploy/release-strategy/release-policy/ https://www.balena.io/docs/learn/deploy/release-strategy/release-policy/
https://www.balena.io/docs/learn/more/masterclasses/fleet-management/#63-pin-using-the-api https://www.balena.io/docs/learn/more/masterclasses/fleet-management/#63-pin-using-the-api
https://github.com/balena-io-examples/staged-releases\ https://github.com/balena-io-examples/staged-releases\
`, `,
char: 'c', char: 'c',
@ -128,9 +128,6 @@ Can be repeated to add multiple certificates.\
'Docker daemon TCP port number (hint: 2375 for balena devices)', 'Docker daemon TCP port number (hint: 2375 for balena devices)',
parse: async (p) => parseAsInteger(p, 'dockerPort'), parse: async (p) => parseAsInteger(p, 'dockerPort'),
}), }),
// Not supporting -h for help, because of clash with -h in DockerCliFlags
// Revisit this in future release.
help: Flags.help({}),
}; };
public static authenticated = true; public static authenticated = true;
@ -413,6 +410,8 @@ Can be repeated to add multiple certificates.\
const DEFAULT_CHOICE = { name: 'current', value: 'current' }; const DEFAULT_CHOICE = { name: 'current', value: 'current' };
const choices = [DEFAULT_CHOICE].concat( const choices = [DEFAULT_CHOICE].concat(
releases.map((release) => ({ releases.map((release) => ({
// TODO: [next-major] consider changing this to use the release semver
// and maybe the commit as well
name: `${release.end_timestamp} - ${release.commit}`, name: `${release.end_timestamp} - ${release.commit}`,
value: release.commit, value: release.commit,
})), })),

View File

@ -17,7 +17,6 @@
import { Flags, Args, Command } from '@oclif/core'; import { Flags, Args, Command } from '@oclif/core';
import type { Interfaces } from '@oclif/core'; import type { Interfaces } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
import { dockerignoreHelp, registrySecretsHelp } from '../../utils/messages'; import { dockerignoreHelp, registrySecretsHelp } from '../../utils/messages';
import type { BalenaSDK } from 'balena-sdk'; import type { BalenaSDK } from 'balena-sdk';
@ -218,7 +217,6 @@ export default class PushCmd extends Command {
default: false, default: false,
}), }),
note: Flags.string({ description: 'The notes for this release' }), note: Flags.string({ description: 'The notes for this release' }),
help: cf.help,
}; };
public static primary = true; public static primary = true;

View File

@ -17,7 +17,6 @@
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import { commitOrIdArg } from '.'; import { commitOrIdArg } from '.';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class ReleaseFinalizeCmd extends Command { export default class ReleaseFinalizeCmd extends Command {
@ -40,10 +39,6 @@ export default class ReleaseFinalizeCmd extends Command {
'$ balena release finalize 1234567', '$ balena release finalize 1234567',
]; ];
public static flags = {
help: cf.help,
};
public static args = { public static args = {
commitOrId: commitOrIdArg({ commitOrId: commitOrIdArg({
description: 'the commit or ID of the release to finalize', description: 'the commit or ID of the release to finalize',

View File

@ -43,7 +43,6 @@ export default class ReleaseCmd extends Command {
public static flags = { public static flags = {
json: cf.json, json: cf.json,
help: cf.help,
composition: Flags.boolean({ composition: Flags.boolean({
default: false, default: false,
char: 'c', char: 'c',

View File

@ -17,7 +17,6 @@
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import { commitOrIdArg } from '.'; import { commitOrIdArg } from '.';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class ReleaseInvalidateCmd extends Command { export default class ReleaseInvalidateCmd extends Command {
@ -35,10 +34,6 @@ export default class ReleaseInvalidateCmd extends Command {
'$ balena release invalidate 1234567', '$ balena release invalidate 1234567',
]; ];
public static flags = {
help: cf.help,
};
public static args = { public static args = {
commitOrId: commitOrIdArg({ commitOrId: commitOrIdArg({
description: 'the commit or ID of the release to invalidate', description: 'the commit or ID of the release to invalidate',

View File

@ -24,6 +24,7 @@ import { jsonInfo } from '../../utils/messages';
export default class ReleaseListCmd extends Command { export default class ReleaseListCmd extends Command {
public static aliases = ['releases']; public static aliases = ['releases'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List all releases of a fleet. List all releases of a fleet.
@ -41,7 +42,6 @@ export default class ReleaseListCmd extends Command {
public static flags = { public static flags = {
json: cf.json, json: cf.json,
help: cf.help,
}; };
public static args = { public static args = {

View File

@ -17,7 +17,6 @@
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import { commitOrIdArg } from '.'; import { commitOrIdArg } from '.';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class ReleaseValidateCmd extends Command { export default class ReleaseValidateCmd extends Command {
@ -34,10 +33,6 @@ export default class ReleaseValidateCmd extends Command {
'$ balena release validate 1234567', '$ balena release validate 1234567',
]; ];
public static flags = {
help: cf.help,
};
public static args = { public static args = {
commitOrId: commitOrIdArg({ commitOrId: commitOrIdArg({
description: 'the commit or ID of the release to validate', description: 'the commit or ID of the release to validate',

View File

@ -16,7 +16,6 @@
*/ */
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class SettingsCmd extends Command { export default class SettingsCmd extends Command {
@ -27,10 +26,6 @@ export default class SettingsCmd extends Command {
`; `;
public static examples = ['$ balena settings']; public static examples = ['$ balena settings'];
public static flags = {
help: cf.help,
};
public async run() { public async run() {
await this.parse(SettingsCmd); await this.parse(SettingsCmd);

View File

@ -17,11 +17,11 @@
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import { ExpectedError } from '../../errors'; import { ExpectedError } from '../../errors';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, stripIndent } from '../../utils/lazy';
export default class SSHKeyAddCmd extends Command { export default class SSHKeyAddCmd extends Command {
public static aliases = ['key add']; public static aliases = ['key add'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Add an SSH key to balenaCloud. Add an SSH key to balenaCloud.
@ -62,10 +62,6 @@ export default class SSHKeyAddCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,12 +16,12 @@
*/ */
import { Args, Command } from '@oclif/core'; import { Args, Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
import { parseAsInteger } from '../../utils/validation'; import { parseAsInteger } from '../../utils/validation';
export default class SSHKeyCmd extends Command { export default class SSHKeyCmd extends Command {
public static aliases = ['key']; public static aliases = ['key'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Display an SSH key. Display an SSH key.
@ -39,10 +39,6 @@ export default class SSHKeyCmd extends Command {
}), }),
}; };
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -16,11 +16,11 @@
*/ */
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy'; import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy';
export default class SSHKeyListCmd extends Command { export default class SSHKeyListCmd extends Command {
public static aliases = ['keys', 'key list']; public static aliases = ['keys', 'key list'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List the SSH keys in balenaCloud. List the SSH keys in balenaCloud.
@ -29,10 +29,6 @@ export default class SSHKeyListCmd extends Command {
`; `;
public static examples = ['$ balena ssh-key list']; public static examples = ['$ balena ssh-key list'];
public static flags = {
help: cf.help,
};
public static authenticated = true; public static authenticated = true;
public async run() { public async run() {

View File

@ -22,6 +22,7 @@ import { parseAsInteger } from '../../utils/validation';
export default class SSHKeyRmCmd extends Command { export default class SSHKeyRmCmd extends Command {
public static aliases = ['key rm']; public static aliases = ['key rm'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
Remove an SSH key from balenaCloud. Remove an SSH key from balenaCloud.
@ -46,7 +47,6 @@ export default class SSHKeyRmCmd extends Command {
public static flags = { public static flags = {
yes: cf.yes, yes: cf.yes,
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -66,7 +66,6 @@ export default class SupportCmd extends Command {
'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',
char: 't', char: 't',
}), }),
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -23,6 +23,7 @@ import { applicationIdInfo } from '../../utils/messages';
export default class TagListCmd extends Command { export default class TagListCmd extends Command {
public static aliases = ['tags']; public static aliases = ['tags'];
public static deprecateAliases = true;
public static description = stripIndent` public static description = stripIndent`
List all tags for a fleet, device or release. List all tags for a fleet, device or release.
@ -53,7 +54,6 @@ export default class TagListCmd extends Command {
...cf.release, ...cf.release,
exclusive: ['fleet', 'device'], exclusive: ['fleet', 'device'],
}, },
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -57,7 +57,6 @@ export default class TagRmCmd extends Command {
...cf.release, ...cf.release,
exclusive: ['fleet', 'device'], exclusive: ['fleet', 'device'],
}, },
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -71,7 +71,6 @@ export default class TagSetCmd extends Command {
...cf.release, ...cf.release,
exclusive: ['fleet', 'device'], exclusive: ['fleet', 'device'],
}, },
help: cf.help,
}; };
public static authenticated = true; public static authenticated = true;

View File

@ -16,7 +16,6 @@
*/ */
import { Command } from '@oclif/core'; import { Command } from '@oclif/core';
import * as cf from '../../utils/common-flags';
import { stripIndent, getChalk, getVisuals } from '../../utils/lazy'; import { stripIndent, getChalk, getVisuals } from '../../utils/lazy';
export default class UtilAvailableDrivesCmd extends Command { export default class UtilAvailableDrivesCmd extends Command {
@ -27,10 +26,6 @@ export default class UtilAvailableDrivesCmd extends Command {
Does not list system drives. Does not list system drives.
`; `;
public static flags = {
help: cf.help,
};
public static offlineCompatible = true; public static offlineCompatible = true;
public async run() { public async run() {

View File

@ -63,7 +63,6 @@ export default class VersionCmd extends Command {
description: description:
'output version information in JSON format for programmatic use', 'output version information in JSON format for programmatic use',
}), }),
help: Flags.help({ char: 'h' }),
}; };
public async run() { public async run() {

View File

@ -28,7 +28,7 @@ function getHelpSubject(args: string[]): string | undefined {
if (arg === '--') { if (arg === '--') {
return; return;
} }
if (arg === 'help' || arg === '--help' || arg === '-h') { if (arg === 'help' || arg === '--help') {
continue; continue;
} }
if (arg.startsWith('-')) { if (arg.startsWith('-')) {
@ -135,7 +135,7 @@ export default class BalenaHelp extends Help {
} }
const globalOps = [ const globalOps = [
['--help, -h', 'display command help'], ['--help', 'display command help'],
['--debug', 'enable debug output'], ['--debug', 'enable debug output'],
[ [
'--unsupported', '--unsupported',

View File

@ -40,8 +40,8 @@ export async function preparseArgs(argv: string[]): Promise<string[]> {
if (['--version', '-v'].includes(cmdSlice[0])) { if (['--version', '-v'].includes(cmdSlice[0])) {
cmdSlice[0] = 'version'; cmdSlice[0] = 'version';
} }
// convert 'balena --help' or 'balena -h' to 'balena help' // convert 'balena --help' to 'balena help'
else if (['--help', '-h'].includes(cmdSlice[0])) { else if ('--help' === cmdSlice[0]) {
cmdSlice[0] = 'help'; cmdSlice[0] = 'help';
} }
// convert e.g. 'balena help env set' to 'balena env set --help' // convert e.g. 'balena help env set' to 'balena env set --help'
@ -110,14 +110,9 @@ export function checkDeletedCommand(argvSlice: string[]): void {
if (argvSlice[0] === 'help') { if (argvSlice[0] === 'help') {
argvSlice = argvSlice.slice(1); argvSlice = argvSlice.slice(1);
} }
function replaced( function replaced(oldCmd: string, alternative: string, version: string) {
oldCmd: string,
alternative: string,
version: string,
verb = 'replaced',
) {
throw new ExpectedError(`\ throw new ExpectedError(`\
Note: the command "balena ${oldCmd}" was ${verb} in CLI version ${version}. Note: the command "balena ${oldCmd}" was replaced in CLI version ${version}.
Please use "balena ${alternative}" instead.`); Please use "balena ${alternative}" instead.`);
} }
function removed(oldCmd: string, alternative: string, version: string) { function removed(oldCmd: string, alternative: string, version: string) {
@ -127,22 +122,7 @@ Please use "balena ${alternative}" instead.`);
} }
throw new ExpectedError(msg); throw new ExpectedError(msg);
} }
const stopAlternative = const cmds: { [cmd: string]: ['replaced' | 'removed', string, string] } = {};
'Please use "balena device ssh -s" to access the host OS, then use `balena-engine stop`.';
const cmds: { [cmd: string]: [(...args: any) => void, ...string[]] } = {
sync: [replaced, 'push', 'v11.0.0', 'removed'],
'local logs': [replaced, 'logs', 'v11.0.0'],
'local push': [replaced, 'push', 'v11.0.0'],
'local scan': [replaced, 'scan', 'v11.0.0'],
'local ssh': [replaced, 'ssh', 'v11.0.0'],
'local stop': [removed, stopAlternative, 'v11.0.0'],
app: [replaced, 'fleet', 'v13.0.0'],
apps: [replaced, 'fleets', 'v13.0.0'],
'app purge': [replaced, 'fleet purge', 'v13.0.0'],
'app rename': [replaced, 'fleet rename', 'v13.0.0'],
'app restart': [replaced, 'fleet restart', 'v13.0.0'],
'app rm': [replaced, 'fleet rm', 'v13.0.0'],
};
let cmd: string | undefined; let cmd: string | undefined;
if (argvSlice.length > 1) { if (argvSlice.length > 1) {
cmd = [argvSlice[0], argvSlice[1]].join(' '); cmd = [argvSlice[0], argvSlice[1]].join(' ');
@ -150,7 +130,9 @@ Please use "balena ${alternative}" instead.`);
cmd = argvSlice[0]; cmd = argvSlice[0];
} }
if (cmd && Object.getOwnPropertyNames(cmds).includes(cmd)) { if (cmd && Object.getOwnPropertyNames(cmds).includes(cmd)) {
cmds[cmd][0](cmd, ...cmds[cmd].slice(1)); const changeType = cmds[cmd][0];
const changeTypeFn = changeType === 'replaced' ? replaced : removed;
changeTypeFn(cmd, cmds[cmd][1], cmds[cmd][2]);
} }
} }

View File

@ -4,7 +4,6 @@ import { getBalenaSdk } from './lazy';
export interface FlagsDef { export interface FlagsDef {
organization?: string; organization?: string;
type?: string; // application device type type?: string; // application device type
help: void;
} }
export interface ArgsDef { export interface ArgsDef {

View File

@ -30,8 +30,6 @@ export const device = Flags.string({
description: 'device UUID', description: 'device UUID',
}); });
export const help = Flags.help({ char: 'h' });
export const quiet = Flags.boolean({ export const quiet = Flags.boolean({
char: 'q', char: 'q',
description: 'suppress warning messages', description: 'suppress warning messages',

View File

@ -95,7 +95,7 @@ export interface Release {
| 'end_timestamp' | 'end_timestamp'
>; >;
serviceImages: Dictionary< serviceImages: Dictionary<
Omit<ImageModel, 'created_at' | 'is_a_build_of__service' | '__metadata'> Omit<ImageModel, 'created_at' | 'is_a_build_of__service'>
>; >;
} }

View File

@ -127,7 +127,7 @@ export const createRelease = async function (
composition: Composition, composition: Composition,
draft: boolean, draft: boolean,
semver: string | undefined, semver: string | undefined,
contract: string | undefined, contract: import('@balena/compose/dist/release/models').ReleaseModel['contract'],
): Promise<Release> { ): Promise<Release> {
const _ = require('lodash') as typeof import('lodash'); const _ = require('lodash') as typeof import('lodash');
const crypto = require('crypto') as typeof import('crypto'); const crypto = require('crypto') as typeof import('crypto');
@ -152,8 +152,7 @@ export const createRelease = async function (
}, },
}, },
{ {
// @balena/compose atm works with v6, bump it once @balena/compose moves to v7. apiVersion: 'v7',
apiVersion: 'v6',
}, },
); );
@ -187,13 +186,9 @@ export const createRelease = async function (
serviceImages: _.mapValues( serviceImages: _.mapValues(
serviceImages, serviceImages,
(serviceImage) => (serviceImage) =>
_.omit(serviceImage, [ _.omit(serviceImage, ['created_at', 'is_a_build_of__service']) as Omit<
'created_at',
'is_a_build_of__service',
'__metadata',
]) as Omit<
typeof serviceImage, typeof serviceImage,
'created_at' | 'is_a_build_of__service' | '__metadata' 'created_at' | 'is_a_build_of__service'
>, >,
), ),
}; };

View File

@ -1292,7 +1292,7 @@ async function pushAndUpdateServiceImages(
localImage.inspect(), localImage.inspect(),
pushImage(localImage, index), pushImage(localImage, index),
]); ]);
serviceImage.image_size = imgInfo.Size; serviceImage.image_size = `${imgInfo.Size}`;
serviceImage.content_hash = imgDigest; serviceImage.content_hash = imgDigest;
serviceImage.build_log = logs; serviceImage.build_log = logs;
serviceImage.dockerfile = props.dockerfile; serviceImage.dockerfile = props.dockerfile;
@ -1404,7 +1404,7 @@ export async function deployProject(
composition, composition,
isDraft, isDraft,
contract?.version, contract?.version,
contract ? JSON.stringify(contract) : undefined, contract,
), ),
); );
const { client: pineClient, release, serviceImages } = $release; const { client: pineClient, release, serviceImages } = $release;
@ -1500,7 +1500,9 @@ export function createRunLoop(tick: (...args: any[]) => void) {
async function getContractContent( async function getContractContent(
filePath: string, filePath: string,
): Promise<Dictionary<any> | undefined> { ): Promise<
import('@balena/compose/dist/release/models').ReleaseModel['contract']
> {
let fileContentAsString; let fileContentAsString;
try { try {
fileContentAsString = await fs.readFile(filePath, 'utf8'); fileContentAsString = await fs.readFile(filePath, 'utf8');

View File

@ -208,9 +208,8 @@ export async function validateSecureBootOptionAndWarn(
throw new ExpectedError(`Error: No ${version} release for ${slug}`); throw new ExpectedError(`Error: No ${version} release for ${slug}`);
} }
const contract = osRelease.contract ? JSON.parse(osRelease.contract) : null;
if ( if (
contract?.provides.some((entry: Dictionary<string>) => { osRelease.contract?.provides.some((entry: Dictionary<string>) => {
return entry.type === 'sw.feature' && entry.slug === 'secureboot'; return entry.type === 'sw.feature' && entry.slug === 'secureboot';
}) })
) { ) {

View File

@ -93,7 +93,7 @@ export class DeviceAPI {
); );
} }
public async getTargetState(): Promise<any> { public async getTargetState() {
const url = this.getUrlForAction('getTargetState'); const url = this.getUrlForAction('getTargetState');
return DeviceAPI.promisifiedRequest( return DeviceAPI.promisifiedRequest(

View File

@ -636,6 +636,7 @@ export function generateTargetState(
services[idx] = { services[idx] = {
...defaults, ...defaults,
...opts, ...opts,
// TODO: is this affected by the `contract` typing change?
...(contract != null ? { contract } : {}), ...(contract != null ? { contract } : {}),
...{ ...{
imageId: idx, imageId: idx,

View File

@ -30,9 +30,8 @@ import {
ExpectedError, ExpectedError,
NotAvailableInOfflineModeError, NotAvailableInOfflineModeError,
} from '../errors'; } from '../errors';
import { getBalenaSdk, getVisuals, stripIndent, getCliForm } from './lazy'; import { getBalenaSdk, stripIndent, getCliForm } from './lazy';
import validation = require('./validation'); import validation = require('./validation');
import { delay } from './helpers';
export function authenticate(options: object): Promise<void> { export function authenticate(options: object): Promise<void> {
const balena = getBalenaSdk(); const balena = getBalenaSdk();
@ -286,51 +285,6 @@ export async function getAndSelectOrganization() {
} }
} }
export async function awaitDeviceOsUpdate(
uuid: string,
targetOsVersion: string,
) {
const balena = getBalenaSdk();
const deviceName = await balena.models.device.getName(uuid);
const visuals = getVisuals();
const progressBar = new visuals.Progress(
`Updating the OS of ${deviceName} to v${targetOsVersion}`,
);
progressBar.update({ percentage: 0 });
const poll = async (): Promise<void> => {
const [osUpdateStatus, { overall_progress: osUpdateProgress }] =
await Promise.all([
balena.models.device.getOsUpdateStatus(uuid),
balena.models.device.get(uuid, { $select: 'overall_progress' }),
]);
if (osUpdateStatus.status === 'done') {
console.info(
`The device ${deviceName} has been updated to v${targetOsVersion} and will restart shortly!`,
);
return;
}
if (osUpdateStatus.error) {
throw new ExpectedError(
`Failed to complete Host OS update on device ${deviceName}\n${osUpdateStatus.error}`,
);
}
if (osUpdateProgress !== null) {
// Avoid resetting to 0% at end of process when device goes offline.
progressBar.update({ percentage: osUpdateProgress });
}
await delay(3000);
await poll();
};
await poll();
return uuid;
}
/* /*
* Given fleetOrDevice, which may be * Given fleetOrDevice, which may be
* - a fleet name * - a fleet name
@ -358,7 +312,9 @@ export async function getOnlineTargetDeviceUuid(
}); });
if (!device.is_online) { if (!device.is_online) {
throw new ExpectedError(`Device with UUID ${fleetOrDevice} is offline`); throw new ExpectedError(
`Device with UUID ${fleetOrDevice} is disconnected`,
);
} }
return device.uuid; return device.uuid;

View File

@ -1,46 +0,0 @@
/**
* @license
* Copyright 2019-2020 Balena Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { expect } from 'chai';
import { BalenaAPIMock } from '../../nock/balena-api-mock';
import { cleanOutput, runCommand } from '../../helpers';
const HELP_MESSAGE = '';
describe('balena app create', function () {
let api: BalenaAPIMock;
beforeEach(() => {
api = new BalenaAPIMock();
});
afterEach(() => {
// Check all expected api calls have been made and clean up.
api.done();
});
// Temporarily skipped because of parse/checking order issue with -h
it.skip('should print help text with the -h flag', async () => {
api.expectGetWhoAmI({ optional: true });
const { out, err } = await runCommand('app create -h');
expect(cleanOutput(out)).to.deep.equal(cleanOutput([HELP_MESSAGE]));
expect(err).to.eql([]);
});
});

View File

@ -183,9 +183,11 @@ describe('balena deploy', function () {
api.expectPostRelease({ api.expectPostRelease({
inspectRequest: (_uri: string, requestBody: nock.Body) => { inspectRequest: (_uri: string, requestBody: nock.Body) => {
const body = requestBody.valueOf() as Partial<ReleaseRequest>; const body = requestBody.valueOf() as Partial<ReleaseRequest>;
expect(body.contract).to.be.equal( expect(body.contract).to.deep.equal({
'{"name":"testContract","type":"sw.application","version":"1.5.2"}', name: 'testContract',
); type: 'sw.application',
version: '1.5.2',
});
expect(body.is_final).to.be.true; expect(body.is_final).to.be.true;
}, },
}); });
@ -232,9 +234,11 @@ describe('balena deploy', function () {
api.expectPostRelease({ api.expectPostRelease({
inspectRequest: (_uri: string, requestBody: nock.Body) => { inspectRequest: (_uri: string, requestBody: nock.Body) => {
const body = requestBody.valueOf() as Partial<ReleaseRequest>; const body = requestBody.valueOf() as Partial<ReleaseRequest>;
expect(body.contract).to.be.equal( expect(body.contract).to.deep.equal({
'{"name":"testContract","type":"sw.application","version":"1.5.2"}', name: 'testContract',
); type: 'sw.application',
version: '1.5.2',
});
expect(body.semver).to.be.equal('1.5.2'); expect(body.semver).to.be.equal('1.5.2');
expect(body.is_final).to.be.false; expect(body.is_final).to.be.false;
}, },
@ -384,7 +388,7 @@ describe('balena deploy', function () {
let failedImagePatchRequests = 0; let failedImagePatchRequests = 0;
let succesfullImagePatchRequests = 0; let succesfullImagePatchRequests = 0;
api api
.optPatch(/^\/v6\/image($|[(?])/, { times: maxRequestRetries }) .optPatch(/^\/v7\/image($|[(?])/, { times: maxRequestRetries })
.reply((_uri, requestBody) => { .reply((_uri, requestBody) => {
const imageBody = requestBody as Partial< const imageBody = requestBody as Partial<
import('@balena/compose/dist/release/models').ImageModel import('@balena/compose/dist/release/models').ImageModel

View File

@ -33,8 +33,8 @@ describe('balena device-type list', function () {
api.done(); api.done();
}); });
it('should print help text with the -h flag', async () => { it('should print help text with the --help flag', async () => {
const { out, err } = await runCommand('device-type list -h'); const { out, err } = await runCommand('device-type list --help');
expect(cleanOutput(out)).to.contain('$ balena device-type list'); expect(cleanOutput(out)).to.contain('$ balena device-type list');

View File

@ -46,7 +46,7 @@ describe('balena device', function () {
it('should list device details for provided uuid', async () => { it('should list device details for provided uuid', async () => {
api.scope api.scope
.get( .get(
/^\/v6\/device\?.+&\$expand=belongs_to__application\(\$select=app_name,slug\)/, /^\/v7\/device\?.+&\$expand=belongs_to__application\(\$select=app_name,slug\)/,
) )
.replyWithFile(200, path.join(apiResponsePath, 'device.json'), { .replyWithFile(200, path.join(apiResponsePath, 'device.json'), {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -64,7 +64,7 @@ describe('balena device', function () {
it.skip('correctly handles devices with missing fields', async () => { it.skip('correctly handles devices with missing fields', async () => {
api.scope api.scope
.get( .get(
/^\/v6\/device\?.+&\$expand=belongs_to__application\(\$select=app_name,slug\)/, /^\/v7\/device\?.+&\$expand=belongs_to__application\(\$select=app_name,slug\)/,
) )
.replyWithFile( .replyWithFile(
200, 200,
@ -88,7 +88,7 @@ describe('balena device', function () {
// e.g. When user has a device associated with app that user is no longer a collaborator of. // e.g. When user has a device associated with app that user is no longer a collaborator of.
api.scope api.scope
.get( .get(
/^\/v6\/device\?.+&\$expand=belongs_to__application\(\$select=app_name,slug\)/, /^\/v7\/device\?.+&\$expand=belongs_to__application\(\$select=app_name,slug\)/,
) )
.replyWithFile( .replyWithFile(
200, 200,
@ -109,7 +109,7 @@ describe('balena device', function () {
it('outputs device as JSON with the -j/--json flag', async () => { it('outputs device as JSON with the -j/--json flag', async () => {
api.scope api.scope
.get(/^\/v6\/device\?.+&\$expand=device_tag\(\$select=tag_key,value\)/) .get(/^\/v7\/device\?.+&\$expand=device_tag\(\$select=tag_key,value\)/)
.replyWithFile(200, path.join(apiResponsePath, 'device.json'), { .replyWithFile(200, path.join(apiResponsePath, 'device.json'), {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}); });
@ -125,7 +125,7 @@ describe('balena device', function () {
it('should list devices from own and collaborator apps', async () => { it('should list devices from own and collaborator apps', async () => {
api.scope api.scope
.get( .get(
'/v6/device?$orderby=device_name%20asc&$select=id,uuid,device_name,status,is_online,supervisor_version,os_version&$expand=belongs_to__application($select=app_name,slug),is_of__device_type($select=slug),is_running__release($select=commit)', '/v7/device?$orderby=device_name%20asc&$select=id,uuid,device_name,status,is_online,supervisor_version,os_version&$expand=belongs_to__application($select=app_name,slug),is_of__device_type($select=slug),is_running__release($select=commit)',
) )
.replyWithFile(200, path.join(apiResponsePath, 'devices.json'), { .replyWithFile(200, path.join(apiResponsePath, 'devices.json'), {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

Some files were not shown because too many files have changed in this diff Show More