balena-cli 23.2.8-build-renovate-apple-actions-import-codesign-certs-4-x-0c66c774af30a7e13043e4daae9146e9a72a1865-1 → 23.2.8-build-validate-installer-secureboot-b138ce3c6f2c34d53689a364b809e6dd2ae5b203-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,7 +6,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
7
  ## 23.2.8 - 2025-12-08
8
8
 
9
- * Update apple-actions/import-codesign-certs action to v4 [balena-renovate[bot]]
9
+ * Add test for os configure --config using secureboot [Thodoris Greasidis]
10
+ * os configure, device init: Validate that the config.json's installer.secureboot is a boolean when set [Thodoris Greasidis]
10
11
 
11
12
  ## 23.2.7 - 2025-12-08
12
13
 
@@ -47,6 +47,7 @@ function populateDeviceConfig(config, device, deviceApiKey) {
47
47
  config.uuid = device.uuid;
48
48
  }
49
49
  async function readAndValidateConfigJson(path) {
50
+ var _a;
50
51
  const fs = await Promise.resolve().then(() => require('fs/promises'));
51
52
  const [rawConfig, { ExpectedError }] = await Promise.all([
52
53
  fs.readFile(path, 'utf8'),
@@ -63,6 +64,10 @@ async function readAndValidateConfigJson(path) {
63
64
  configJson.deviceType === '') {
64
65
  throw new ExpectedError('Missing or invalid deviceType in config.json');
65
66
  }
67
+ const secureboot = (_a = configJson.installer) === null || _a === void 0 ? void 0 : _a.secureboot;
68
+ if (secureboot != null && typeof secureboot !== 'boolean') {
69
+ throw new ExpectedError(`Invalid installer.secureboot in config.json: value must be a boolean, found ${typeof secureboot}: '${secureboot}'`);
70
+ }
66
71
  return configJson;
67
72
  }
68
73
  async function validateDevOptionAndWarn(dev, version, logger) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "balena-cli",
3
- "version": "23.2.8-build-renovate-apple-actions-import-codesign-certs-4-x-0c66c774af30a7e13043e4daae9146e9a72a1865-1",
3
+ "version": "23.2.8-build-validate-installer-secureboot-b138ce3c6f2c34d53689a364b809e6dd2ae5b203-2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "balena-cli",
9
- "version": "23.2.8-build-renovate-apple-actions-import-codesign-certs-4-x-0c66c774af30a7e13043e4daae9146e9a72a1865-1",
9
+ "version": "23.2.8-build-validate-installer-secureboot-b138ce3c6f2c34d53689a364b809e6dd2ae5b203-2",
10
10
  "hasInstallScript": true,
11
11
  "license": "Apache-2.0",
12
12
  "dependencies": {
@@ -160,56 +160,6 @@
160
160
  "create.js"
161
161
  ]
162
162
  },
163
- "block:create": {
164
- "aliases": [],
165
- "args": {
166
- "name": {
167
- "description": "block name",
168
- "name": "name",
169
- "required": true
170
- }
171
- },
172
- "description": "Create an block.\n\nCreate a new balena block.\n\nYou can specify the organization the block should belong to using\nthe `--organization` option. The organization's handle, not its name,\nshould be provided. Organization handles can be listed with the\n`balena organization list` command.\n\nThe block's default device type is specified with the `--type` option.\nThe `balena device-type list` command can be used to list the available\ndevice types.\n\nInteractive dropdowns will be shown for selection if no device type or\norganization is specified and there are multiple options to choose from.\nIf there is a single option to choose from, it will be chosen automatically.\nThis interactive behavior can be disabled by explicitly specifying a device\ntype and organization.",
173
- "examples": [
174
- "$ balena block create MyBlock",
175
- "$ balena block create MyBlock --organization mmyorg",
176
- "$ balena block create MyBlock -o myorg --type raspberry-pi"
177
- ],
178
- "flags": {
179
- "organization": {
180
- "char": "o",
181
- "description": "handle of the organization the block should belong to",
182
- "name": "organization",
183
- "hasDynamicHelp": false,
184
- "multiple": false,
185
- "type": "option"
186
- },
187
- "type": {
188
- "char": "t",
189
- "description": "block device type (Check available types with `balena device-type list`)",
190
- "name": "type",
191
- "hasDynamicHelp": false,
192
- "multiple": false,
193
- "type": "option"
194
- }
195
- },
196
- "hasDynamicHelp": false,
197
- "hiddenAliases": [],
198
- "id": "block:create",
199
- "pluginAlias": "balena-cli",
200
- "pluginName": "balena-cli",
201
- "pluginType": "core",
202
- "strict": true,
203
- "enableJsonFlag": false,
204
- "authenticated": true,
205
- "isESM": false,
206
- "relativePath": [
207
- "build",
208
- "commands",
209
- "block",
210
- "create.js"
211
- ]
212
- },
213
163
  "build": {
214
164
  "aliases": [],
215
165
  "args": {
@@ -412,6 +362,56 @@
412
362
  "index.js"
413
363
  ]
414
364
  },
365
+ "block:create": {
366
+ "aliases": [],
367
+ "args": {
368
+ "name": {
369
+ "description": "block name",
370
+ "name": "name",
371
+ "required": true
372
+ }
373
+ },
374
+ "description": "Create an block.\n\nCreate a new balena block.\n\nYou can specify the organization the block should belong to using\nthe `--organization` option. The organization's handle, not its name,\nshould be provided. Organization handles can be listed with the\n`balena organization list` command.\n\nThe block's default device type is specified with the `--type` option.\nThe `balena device-type list` command can be used to list the available\ndevice types.\n\nInteractive dropdowns will be shown for selection if no device type or\norganization is specified and there are multiple options to choose from.\nIf there is a single option to choose from, it will be chosen automatically.\nThis interactive behavior can be disabled by explicitly specifying a device\ntype and organization.",
375
+ "examples": [
376
+ "$ balena block create MyBlock",
377
+ "$ balena block create MyBlock --organization mmyorg",
378
+ "$ balena block create MyBlock -o myorg --type raspberry-pi"
379
+ ],
380
+ "flags": {
381
+ "organization": {
382
+ "char": "o",
383
+ "description": "handle of the organization the block should belong to",
384
+ "name": "organization",
385
+ "hasDynamicHelp": false,
386
+ "multiple": false,
387
+ "type": "option"
388
+ },
389
+ "type": {
390
+ "char": "t",
391
+ "description": "block device type (Check available types with `balena device-type list`)",
392
+ "name": "type",
393
+ "hasDynamicHelp": false,
394
+ "multiple": false,
395
+ "type": "option"
396
+ }
397
+ },
398
+ "hasDynamicHelp": false,
399
+ "hiddenAliases": [],
400
+ "id": "block:create",
401
+ "pluginAlias": "balena-cli",
402
+ "pluginName": "balena-cli",
403
+ "pluginType": "core",
404
+ "strict": true,
405
+ "enableJsonFlag": false,
406
+ "authenticated": true,
407
+ "isESM": false,
408
+ "relativePath": [
409
+ "build",
410
+ "commands",
411
+ "block",
412
+ "create.js"
413
+ ]
414
+ },
415
415
  "config:generate": {
416
416
  "aliases": [],
417
417
  "args": {},
@@ -979,45 +979,6 @@
979
979
  "index.js"
980
980
  ]
981
981
  },
982
- "device-type:list": {
983
- "aliases": [],
984
- "args": {},
985
- "description": "List the device types supported by balena (like 'raspberrypi3' or 'intel-nuc').\n\nList the device types supported by balena (like 'raspberrypi3' or 'intel-nuc').\n\nBy default, only actively supported device types are listed.\nThe --all option can be used to list all device types, including those that are\nno longer supported by balena.",
986
- "examples": [
987
- "$ balena device-type list",
988
- "$ balena device-type list --all"
989
- ],
990
- "flags": {
991
- "json": {
992
- "description": "Format output as json.",
993
- "helpGroup": "GLOBAL",
994
- "name": "json",
995
- "allowNo": false,
996
- "type": "boolean"
997
- },
998
- "all": {
999
- "description": "include device types no longer supported by balena",
1000
- "name": "all",
1001
- "allowNo": false,
1002
- "type": "boolean"
1003
- }
1004
- },
1005
- "hasDynamicHelp": false,
1006
- "hiddenAliases": [],
1007
- "id": "device-type:list",
1008
- "pluginAlias": "balena-cli",
1009
- "pluginName": "balena-cli",
1010
- "pluginType": "core",
1011
- "strict": true,
1012
- "enableJsonFlag": true,
1013
- "isESM": false,
1014
- "relativePath": [
1015
- "build",
1016
- "commands",
1017
- "device-type",
1018
- "list.js"
1019
- ]
1020
- },
1021
982
  "device:deactivate": {
1022
983
  "aliases": [],
1023
984
  "args": {
@@ -2238,6 +2199,45 @@
2238
2199
  "tunnel.js"
2239
2200
  ]
2240
2201
  },
2202
+ "device-type:list": {
2203
+ "aliases": [],
2204
+ "args": {},
2205
+ "description": "List the device types supported by balena (like 'raspberrypi3' or 'intel-nuc').\n\nList the device types supported by balena (like 'raspberrypi3' or 'intel-nuc').\n\nBy default, only actively supported device types are listed.\nThe --all option can be used to list all device types, including those that are\nno longer supported by balena.",
2206
+ "examples": [
2207
+ "$ balena device-type list",
2208
+ "$ balena device-type list --all"
2209
+ ],
2210
+ "flags": {
2211
+ "json": {
2212
+ "description": "Format output as json.",
2213
+ "helpGroup": "GLOBAL",
2214
+ "name": "json",
2215
+ "allowNo": false,
2216
+ "type": "boolean"
2217
+ },
2218
+ "all": {
2219
+ "description": "include device types no longer supported by balena",
2220
+ "name": "all",
2221
+ "allowNo": false,
2222
+ "type": "boolean"
2223
+ }
2224
+ },
2225
+ "hasDynamicHelp": false,
2226
+ "hiddenAliases": [],
2227
+ "id": "device-type:list",
2228
+ "pluginAlias": "balena-cli",
2229
+ "pluginName": "balena-cli",
2230
+ "pluginType": "core",
2231
+ "strict": true,
2232
+ "enableJsonFlag": true,
2233
+ "isESM": false,
2234
+ "relativePath": [
2235
+ "build",
2236
+ "commands",
2237
+ "device-type",
2238
+ "list.js"
2239
+ ]
2240
+ },
2241
2241
  "env:list": {
2242
2242
  "aliases": [],
2243
2243
  "args": {},
@@ -3388,211 +3388,46 @@
3388
3388
  "index.js"
3389
3389
  ]
3390
3390
  },
3391
- "push": {
3391
+ "os:configure": {
3392
3392
  "aliases": [],
3393
3393
  "args": {
3394
- "fleetOrDevice": {
3395
- "description": "fleet name or slug, or local device IP address or \".local\" hostname",
3396
- "name": "fleetOrDevice",
3394
+ "image": {
3395
+ "description": "path to a balenaOS image file, e.g. \"rpi3.img\"",
3396
+ "name": "image",
3397
3397
  "required": true
3398
3398
  }
3399
3399
  },
3400
- "description": "Build release images on balenaCloud servers or on a local mode device.\n\nBuild release images on balenaCloud servers or on a local mode device.\n\nWhen building on the balenaCloud servers, the given source directory will be\nsent to the remote server. This can be used as a drop-in replacement for the\n\"git push\" deployment method.\n\nWhen building on a local mode device, the given source directory will be\nbuilt on the device, and the resulting containers will be run on the device.\nLogs will be streamed back from the device as part of the same invocation.\nThe web dashboard can be used to switch a device to local mode:\nhttps://www.balena.io/docs/learn/develop/local-mode/\nNote that local mode requires a supervisor version of at least v7.21.0.\nThe logs from only a single service can be shown with the --service flag, and\nshowing only the system logs can be achieved with --system. Note that these\nflags can be used together.\n\nWhen pushing to a local device a live session will be started.\nThe project source folder is watched for filesystem events, and changes\nto files and folders are automatically synchronized to the running\ncontainers. The synchronization is only in one direction, from this machine to\nthe device, and changes made on the device itself may be overwritten.\nThis feature requires a device running supervisor version v9.7.0 or greater.\n\nREGISTRY SECRETS \nThe --registry-secrets option specifies a JSON or YAML file containing private\nDocker registry usernames and passwords to be used when pulling base images.\nSample registry-secrets YAML file:\n```\n\t'my-registry-server.com:25000':\n\t\tusername: ann\n\t\tpassword: hunter2\n\t'': # Use the empty string to refer to the Docker Hub\n\t\tusername: mike\n\t\tpassword: cze14\n\t'eu.gcr.io': # Google Container Registry\n\t\tusername: '_json_key'\n\t\tpassword: '{escaped contents of the GCR keyfile.json file}'\n```\nFor a sample project using registry secrets with the Google Container Registry,\ncheck: https://github.com/balena-io-examples/sample-gcr-registry-secrets\n\nIf the --registry-secrets option is not specified, and a secrets.yml or\nsecrets.json file exists in the balena directory (usually $HOME/.balena),\nthis file will be used instead.\n\nDOCKERIGNORE AND GITIGNORE FILES \nBy default, the balena CLI will use a single \".dockerignore\" file (if any) at\nthe project root (--source directory) in order to decide which source files to\nexclude from the \"build context\" (tar stream) sent to balenaCloud, Docker\ndaemon or balenaEngine. In a microservices (multicontainer) fleet, the\nsource directory is the directory that contains the \"docker-compose.yml\" file.\n\nThe --multi-dockerignore (-m) option may be used with microservices\n(multicontainer) fleets that define a docker-compose.yml file. When this\noption is used, each service subdirectory (defined by the `build` or\n`build.context` service properties in the docker-compose.yml file) is\nfiltered separately according to a .dockerignore file defined in the service\nsubdirectory. If no .dockerignore file exists in a service subdirectory, then\nonly the default .dockerignore patterns (see below) apply for that service\nsubdirectory.\n\nWhen the --multi-dockerignore (-m) option is used, the .dockerignore file (if\nany) defined at the overall project root will be used to filter files and\nsubdirectories other than service subdirectories. It will not have any effect\non service subdirectories, whether or not a service subdirectory defines its\nown .dockerignore file. Multiple .dockerignore files are not merged or added\ntogether, and cannot override or extend other files. This behavior maximizes\ncompatibility with the standard docker-compose tool, while still allowing a\nroot .dockerignore file (at the overall project root) to filter files and\nfolders that are outside service subdirectories.\n\nbalena CLI v11 also took .gitignore files into account. This behavior was\ndeprecated in CLI v12 and removed in CLI v13. Please use .dockerignore files\ninstead.\n\nDefault .dockerignore patterns \nA few default/hardcoded dockerignore patterns are \"merged\" (in memory) with the\npatterns found in the applicable .dockerignore files, in the following order:\n```\n **/.git\n < user's patterns from the applicable '.dockerignore' file, if any >\n !**/.balena\n !**/.resin\n !**/Dockerfile\n !**/Dockerfile.*\n !**/docker-compose.yml\n```\nThese patterns always apply, whether or not .dockerignore files exist in the\nproject. If necessary, the effect of the `**/.git` pattern may be modified by\nadding exception patterns to the applicable .dockerignore file(s), for example\n`!mysubmodule/.git`. For documentation on pattern format, see:\n- https://docs.docker.com/engine/reference/builder/#dockerignore-file\n- https://www.npmjs.com/package/@balena/dockerignore\n\nNote: the --service and --env flags must come after the fleetOrDevice\nparameter, as per examples.",
3400
+ "description": "Configure a previously downloaded balenaOS image.\n\nConfigure a previously downloaded balenaOS image for a specific device type\nor fleet.\n\nConfiguration settings such as WiFi authentication will be taken from the\nfollowing sources, in precedence order:\n1. Command-line options like `--config-wifi-ssid`\n2. A given `config.json` file specified with the `--config` option.\n3. User input through interactive prompts (text menus).\n\nThe --device-type option is used to override the fleet's default device type,\nin case of a fleet with mixed device types.\n\nThe '--dev' option is used to configure balenaOS to operate in development mode,\nallowing unauthenticated root ssh access and exposing network ports such as\nbalenaEngine's 2375 (unencrypted). This option causes `\"developmentMode\": true`\nto be inserted in the 'config.json' file in the image's boot partition. Development\nmode (as a configurable option) is applicable to balenaOS releases from early\n2022. Older releases have separate development and production balenaOS images\nthat cannot be reconfigured through 'config.json' or the '--dev' option. Do not\nconfuse the balenaOS \"development mode\" with a device's \"local mode\", the latter\nbeing a supervisor feature that allows the \"balena push\" command to push a user's\napplication directly to a device in the local network.\n\nThe '--secureBoot' option is used to configure a balenaOS installer image to opt-in\nsecure boot and disk encryption.\n\nThe --system-connection (-c) option is used to inject NetworkManager connection\nprofiles for additional network interfaces, such as cellular/GSM or additional\nWiFi or ethernet connections. This option may be passed multiple times in case there\nare multiple files to inject. See connection profile examples and reference at:\nhttps://www.balena.io/docs/reference/OS/network/2.x/\nhttps://developer.gnome.org/NetworkManager/stable/ref-settings.html\n\nFleets may be specified by fleet name or slug. Fleet slugs are\nthe recommended option, as they are unique and unambiguous. Slugs can be\nlisted with the `balena fleet list` command. Note that slugs may change if the\nfleet is renamed. Fleet names are not unique and may result in \"Fleet is\nambiguous\" errors at any time (even if it \"used to work in the past\"), for\nexample if the name clashes with a newly created public fleet, or with fleets\nfrom other balena accounts that you may be invited to join under any role.\nFor this reason, fleet names are especially discouraged in scripts (e.g. CI\nenvironments).",
3401
3401
  "examples": [
3402
- "$ balena push myFleet",
3403
- "$ balena push myFleet --source <source directory>",
3404
- "$ balena push myFleet -s <source directory>",
3405
- "$ balena push myFleet --source <source directory> --note \"this is the note for this release\"",
3406
- "$ balena push myFleet --release-tag key1 \"\" key2 \"value2 with spaces\"",
3407
- "$ balena push myorg/myfleet",
3408
- "",
3409
- "$ balena push 10.0.0.1",
3410
- "$ balena push 10.0.0.1 --source <source directory>",
3411
- "$ balena push 10.0.0.1 --service my-service",
3412
- "$ balena push 10.0.0.1 --env MY_ENV_VAR=value --env my-service:SERVICE_VAR=value",
3413
- "$ balena push 10.0.0.1 --nolive",
3414
- "",
3415
- "$ balena push 23c73a1.local --system",
3416
- "$ balena push 23c73a1.local --system --service my-service"
3402
+ "$ balena os configure ../path/rpi3.img --device 7cf02a6",
3403
+ "$ balena os configure ../path/rpi3.img --fleet myorg/myfleet",
3404
+ "$ balena os configure ../path/rpi3.img -f myorg/myfleet --device-type raspberrypi3",
3405
+ "$ balena os configure ../path/rpi3.img --config myWifiConfig.json"
3417
3406
  ],
3418
3407
  "flags": {
3419
- "source": {
3420
- "char": "s",
3421
- "description": "Source directory to be sent to balenaCloud or balenaOS device\n(default: current working dir)",
3422
- "name": "source",
3423
- "default": ".",
3408
+ "fleet": {
3409
+ "char": "f",
3410
+ "description": "fleet name or slug (preferred)",
3411
+ "exclusive": [
3412
+ "device",
3413
+ "config"
3414
+ ],
3415
+ "name": "fleet",
3424
3416
  "hasDynamicHelp": false,
3425
3417
  "multiple": false,
3426
3418
  "type": "option"
3427
3419
  },
3428
- "emulated": {
3429
- "char": "e",
3430
- "description": "Don't use the faster, native balenaCloud ARM builders; force slower QEMU ARM\nemulation on Intel x86-64 builders. This flag is sometimes used to investigate\nsuspected issues with the balenaCloud backend.",
3431
- "name": "emulated",
3432
- "allowNo": false,
3433
- "type": "boolean"
3434
- },
3435
- "dockerfile": {
3436
- "description": "Alternative Dockerfile name/path, relative to the source folder",
3437
- "name": "dockerfile",
3438
- "hasDynamicHelp": false,
3439
- "multiple": false,
3440
- "type": "option"
3441
- },
3442
- "nocache": {
3443
- "char": "c",
3444
- "description": "Don't use cached layers of previously built images for this project. This\nensures that the latest base image and packages are pulled. Note that build\nlogs may still display the message _\"Pulling previous images for caching\npurposes\" (as the cloud builder needs previous images to compute delta\nupdates), but the logs will not display the \"Using cache\" lines for each\nbuild step of a Dockerfile.",
3445
- "name": "nocache",
3446
- "allowNo": false,
3447
- "type": "boolean"
3448
- },
3449
- "pull": {
3450
- "description": "When pushing to a local device, force the base images to be pulled again.\nCurrently this option is ignored when pushing to the balenaCloud builders.",
3451
- "name": "pull",
3452
- "allowNo": false,
3453
- "type": "boolean"
3454
- },
3455
- "noparent-check": {
3456
- "description": "Disable project validation check of 'docker-compose.yml' file in parent folder",
3457
- "name": "noparent-check",
3458
- "allowNo": false,
3459
- "type": "boolean"
3460
- },
3461
- "registry-secrets": {
3462
- "char": "R",
3463
- "description": "Path to a local YAML or JSON file containing Docker registry passwords used\nto pull base images. Note that if registry-secrets are not provided on the\ncommand line, a secrets configuration file from the balena directory will be\nused (usually $HOME/.balena/secrets.yml|.json)",
3464
- "name": "registry-secrets",
3465
- "hasDynamicHelp": false,
3466
- "multiple": false,
3467
- "type": "option"
3468
- },
3469
- "nolive": {
3470
- "description": "Don't run a live session on this push. The filesystem will not be monitored,\nand changes will not be synchronized to any running containers. Note that both\nthis flag and --detached are required to cause the process to end once the\ninitial build has completed.",
3471
- "name": "nolive",
3472
- "allowNo": false,
3473
- "type": "boolean"
3474
- },
3475
- "detached": {
3476
- "char": "d",
3477
- "description": "When pushing to the cloud, this option will cause the build to start, then\nreturn execution back to the shell, with the status and release ID (if\napplicable). When pushing to a local mode device, this option will cause\nthe command to not tail logs when the build has completed.",
3478
- "name": "detached",
3479
- "allowNo": false,
3480
- "type": "boolean"
3481
- },
3482
- "service": {
3483
- "description": "Reject logs not originating from this service.\nThis can be used in combination with --system and other --service flags.\nOnly valid when pushing to a local mode device.",
3484
- "name": "service",
3485
- "hasDynamicHelp": false,
3486
- "multiple": true,
3487
- "type": "option"
3488
- },
3489
- "system": {
3490
- "description": "Only show system logs. This can be used in combination with --service.\nOnly valid when pushing to a local mode device.",
3491
- "name": "system",
3492
- "allowNo": false,
3493
- "type": "boolean"
3494
- },
3495
- "env": {
3496
- "description": "When performing a push to device, run the built containers with environment\nvariables provided with this argument. Environment variables can be applied\nto individual services by adding their service name before the argument,\nseparated by a colon, e.g:\n\t--env main:MY_ENV=value\nNote that if the service name cannot be found in the composition, the entire\nleft hand side of the = character will be treated as the variable name.",
3497
- "name": "env",
3498
- "hasDynamicHelp": false,
3499
- "multiple": true,
3500
- "type": "option"
3501
- },
3502
- "noconvert-eol": {
3503
- "description": "Don't convert line endings from CRLF (Windows format) to LF (Unix format).",
3504
- "name": "noconvert-eol",
3505
- "allowNo": false,
3506
- "type": "boolean"
3507
- },
3508
- "multi-dockerignore": {
3509
- "char": "m",
3510
- "description": "Have each service use its own .dockerignore file. See \"balena help push\".",
3511
- "name": "multi-dockerignore",
3512
- "allowNo": false,
3513
- "type": "boolean"
3514
- },
3515
- "release-tag": {
3516
- "description": "Set release tags if the image build is successful (balenaCloud only). Multiple\narguments may be provided, alternating tag keys and values (see examples).\nHint: Empty values may be specified with \"\" (bash, cmd.exe) or '\"\"' (PowerShell).",
3517
- "exclusive": [
3518
- "detached"
3519
- ],
3520
- "name": "release-tag",
3521
- "hasDynamicHelp": false,
3522
- "multiple": true,
3523
- "type": "option"
3524
- },
3525
- "draft": {
3526
- "description": "Instruct the builder to create the release as a draft. Draft releases are ignored\nby the 'track latest' release policy but can be used through release pinning.\nDraft releases can be marked as final through the API. Releases are created\nas final by default unless this option is given.",
3527
- "name": "draft",
3528
- "allowNo": false,
3529
- "type": "boolean"
3530
- },
3531
- "note": {
3532
- "description": "The notes for this release",
3533
- "name": "note",
3534
- "hasDynamicHelp": false,
3535
- "multiple": false,
3536
- "type": "option"
3537
- }
3538
- },
3539
- "hasDynamicHelp": false,
3540
- "hiddenAliases": [],
3541
- "id": "push",
3542
- "pluginAlias": "balena-cli",
3543
- "pluginName": "balena-cli",
3544
- "pluginType": "core",
3545
- "strict": true,
3546
- "enableJsonFlag": false,
3547
- "primary": true,
3548
- "isESM": false,
3549
- "relativePath": [
3550
- "build",
3551
- "commands",
3552
- "push",
3553
- "index.js"
3554
- ]
3555
- },
3556
- "os:configure": {
3557
- "aliases": [],
3558
- "args": {
3559
- "image": {
3560
- "description": "path to a balenaOS image file, e.g. \"rpi3.img\"",
3561
- "name": "image",
3562
- "required": true
3563
- }
3564
- },
3565
- "description": "Configure a previously downloaded balenaOS image.\n\nConfigure a previously downloaded balenaOS image for a specific device type\nor fleet.\n\nConfiguration settings such as WiFi authentication will be taken from the\nfollowing sources, in precedence order:\n1. Command-line options like `--config-wifi-ssid`\n2. A given `config.json` file specified with the `--config` option.\n3. User input through interactive prompts (text menus).\n\nThe --device-type option is used to override the fleet's default device type,\nin case of a fleet with mixed device types.\n\nThe '--dev' option is used to configure balenaOS to operate in development mode,\nallowing unauthenticated root ssh access and exposing network ports such as\nbalenaEngine's 2375 (unencrypted). This option causes `\"developmentMode\": true`\nto be inserted in the 'config.json' file in the image's boot partition. Development\nmode (as a configurable option) is applicable to balenaOS releases from early\n2022. Older releases have separate development and production balenaOS images\nthat cannot be reconfigured through 'config.json' or the '--dev' option. Do not\nconfuse the balenaOS \"development mode\" with a device's \"local mode\", the latter\nbeing a supervisor feature that allows the \"balena push\" command to push a user's\napplication directly to a device in the local network.\n\nThe '--secureBoot' option is used to configure a balenaOS installer image to opt-in\nsecure boot and disk encryption.\n\nThe --system-connection (-c) option is used to inject NetworkManager connection\nprofiles for additional network interfaces, such as cellular/GSM or additional\nWiFi or ethernet connections. This option may be passed multiple times in case there\nare multiple files to inject. See connection profile examples and reference at:\nhttps://www.balena.io/docs/reference/OS/network/2.x/\nhttps://developer.gnome.org/NetworkManager/stable/ref-settings.html\n\nFleets may be specified by fleet name or slug. Fleet slugs are\nthe recommended option, as they are unique and unambiguous. Slugs can be\nlisted with the `balena fleet list` command. Note that slugs may change if the\nfleet is renamed. Fleet names are not unique and may result in \"Fleet is\nambiguous\" errors at any time (even if it \"used to work in the past\"), for\nexample if the name clashes with a newly created public fleet, or with fleets\nfrom other balena accounts that you may be invited to join under any role.\nFor this reason, fleet names are especially discouraged in scripts (e.g. CI\nenvironments).",
3566
- "examples": [
3567
- "$ balena os configure ../path/rpi3.img --device 7cf02a6",
3568
- "$ balena os configure ../path/rpi3.img --fleet myorg/myfleet",
3569
- "$ balena os configure ../path/rpi3.img -f myorg/myfleet --device-type raspberrypi3",
3570
- "$ balena os configure ../path/rpi3.img --config myWifiConfig.json"
3571
- ],
3572
- "flags": {
3573
- "fleet": {
3574
- "char": "f",
3575
- "description": "fleet name or slug (preferred)",
3576
- "exclusive": [
3577
- "device",
3578
- "config"
3579
- ],
3580
- "name": "fleet",
3581
- "hasDynamicHelp": false,
3582
- "multiple": false,
3583
- "type": "option"
3584
- },
3585
- "device": {
3586
- "char": "d",
3587
- "description": "device UUID",
3588
- "exclusive": [
3589
- "fleet",
3590
- "device-type",
3591
- "config",
3592
- "provisioning-key-name",
3593
- "provisioning-key-expiry-date"
3594
- ],
3595
- "name": "device",
3420
+ "device": {
3421
+ "char": "d",
3422
+ "description": "device UUID",
3423
+ "exclusive": [
3424
+ "fleet",
3425
+ "device-type",
3426
+ "config",
3427
+ "provisioning-key-name",
3428
+ "provisioning-key-expiry-date"
3429
+ ],
3430
+ "name": "device",
3596
3431
  "hasDynamicHelp": false,
3597
3432
  "multiple": false,
3598
3433
  "type": "option"
@@ -3892,6 +3727,171 @@
3892
3727
  "versions.js"
3893
3728
  ]
3894
3729
  },
3730
+ "push": {
3731
+ "aliases": [],
3732
+ "args": {
3733
+ "fleetOrDevice": {
3734
+ "description": "fleet name or slug, or local device IP address or \".local\" hostname",
3735
+ "name": "fleetOrDevice",
3736
+ "required": true
3737
+ }
3738
+ },
3739
+ "description": "Build release images on balenaCloud servers or on a local mode device.\n\nBuild release images on balenaCloud servers or on a local mode device.\n\nWhen building on the balenaCloud servers, the given source directory will be\nsent to the remote server. This can be used as a drop-in replacement for the\n\"git push\" deployment method.\n\nWhen building on a local mode device, the given source directory will be\nbuilt on the device, and the resulting containers will be run on the device.\nLogs will be streamed back from the device as part of the same invocation.\nThe web dashboard can be used to switch a device to local mode:\nhttps://www.balena.io/docs/learn/develop/local-mode/\nNote that local mode requires a supervisor version of at least v7.21.0.\nThe logs from only a single service can be shown with the --service flag, and\nshowing only the system logs can be achieved with --system. Note that these\nflags can be used together.\n\nWhen pushing to a local device a live session will be started.\nThe project source folder is watched for filesystem events, and changes\nto files and folders are automatically synchronized to the running\ncontainers. The synchronization is only in one direction, from this machine to\nthe device, and changes made on the device itself may be overwritten.\nThis feature requires a device running supervisor version v9.7.0 or greater.\n\nREGISTRY SECRETS \nThe --registry-secrets option specifies a JSON or YAML file containing private\nDocker registry usernames and passwords to be used when pulling base images.\nSample registry-secrets YAML file:\n```\n\t'my-registry-server.com:25000':\n\t\tusername: ann\n\t\tpassword: hunter2\n\t'': # Use the empty string to refer to the Docker Hub\n\t\tusername: mike\n\t\tpassword: cze14\n\t'eu.gcr.io': # Google Container Registry\n\t\tusername: '_json_key'\n\t\tpassword: '{escaped contents of the GCR keyfile.json file}'\n```\nFor a sample project using registry secrets with the Google Container Registry,\ncheck: https://github.com/balena-io-examples/sample-gcr-registry-secrets\n\nIf the --registry-secrets option is not specified, and a secrets.yml or\nsecrets.json file exists in the balena directory (usually $HOME/.balena),\nthis file will be used instead.\n\nDOCKERIGNORE AND GITIGNORE FILES \nBy default, the balena CLI will use a single \".dockerignore\" file (if any) at\nthe project root (--source directory) in order to decide which source files to\nexclude from the \"build context\" (tar stream) sent to balenaCloud, Docker\ndaemon or balenaEngine. In a microservices (multicontainer) fleet, the\nsource directory is the directory that contains the \"docker-compose.yml\" file.\n\nThe --multi-dockerignore (-m) option may be used with microservices\n(multicontainer) fleets that define a docker-compose.yml file. When this\noption is used, each service subdirectory (defined by the `build` or\n`build.context` service properties in the docker-compose.yml file) is\nfiltered separately according to a .dockerignore file defined in the service\nsubdirectory. If no .dockerignore file exists in a service subdirectory, then\nonly the default .dockerignore patterns (see below) apply for that service\nsubdirectory.\n\nWhen the --multi-dockerignore (-m) option is used, the .dockerignore file (if\nany) defined at the overall project root will be used to filter files and\nsubdirectories other than service subdirectories. It will not have any effect\non service subdirectories, whether or not a service subdirectory defines its\nown .dockerignore file. Multiple .dockerignore files are not merged or added\ntogether, and cannot override or extend other files. This behavior maximizes\ncompatibility with the standard docker-compose tool, while still allowing a\nroot .dockerignore file (at the overall project root) to filter files and\nfolders that are outside service subdirectories.\n\nbalena CLI v11 also took .gitignore files into account. This behavior was\ndeprecated in CLI v12 and removed in CLI v13. Please use .dockerignore files\ninstead.\n\nDefault .dockerignore patterns \nA few default/hardcoded dockerignore patterns are \"merged\" (in memory) with the\npatterns found in the applicable .dockerignore files, in the following order:\n```\n **/.git\n < user's patterns from the applicable '.dockerignore' file, if any >\n !**/.balena\n !**/.resin\n !**/Dockerfile\n !**/Dockerfile.*\n !**/docker-compose.yml\n```\nThese patterns always apply, whether or not .dockerignore files exist in the\nproject. If necessary, the effect of the `**/.git` pattern may be modified by\nadding exception patterns to the applicable .dockerignore file(s), for example\n`!mysubmodule/.git`. For documentation on pattern format, see:\n- https://docs.docker.com/engine/reference/builder/#dockerignore-file\n- https://www.npmjs.com/package/@balena/dockerignore\n\nNote: the --service and --env flags must come after the fleetOrDevice\nparameter, as per examples.",
3740
+ "examples": [
3741
+ "$ balena push myFleet",
3742
+ "$ balena push myFleet --source <source directory>",
3743
+ "$ balena push myFleet -s <source directory>",
3744
+ "$ balena push myFleet --source <source directory> --note \"this is the note for this release\"",
3745
+ "$ balena push myFleet --release-tag key1 \"\" key2 \"value2 with spaces\"",
3746
+ "$ balena push myorg/myfleet",
3747
+ "",
3748
+ "$ balena push 10.0.0.1",
3749
+ "$ balena push 10.0.0.1 --source <source directory>",
3750
+ "$ balena push 10.0.0.1 --service my-service",
3751
+ "$ balena push 10.0.0.1 --env MY_ENV_VAR=value --env my-service:SERVICE_VAR=value",
3752
+ "$ balena push 10.0.0.1 --nolive",
3753
+ "",
3754
+ "$ balena push 23c73a1.local --system",
3755
+ "$ balena push 23c73a1.local --system --service my-service"
3756
+ ],
3757
+ "flags": {
3758
+ "source": {
3759
+ "char": "s",
3760
+ "description": "Source directory to be sent to balenaCloud or balenaOS device\n(default: current working dir)",
3761
+ "name": "source",
3762
+ "default": ".",
3763
+ "hasDynamicHelp": false,
3764
+ "multiple": false,
3765
+ "type": "option"
3766
+ },
3767
+ "emulated": {
3768
+ "char": "e",
3769
+ "description": "Don't use the faster, native balenaCloud ARM builders; force slower QEMU ARM\nemulation on Intel x86-64 builders. This flag is sometimes used to investigate\nsuspected issues with the balenaCloud backend.",
3770
+ "name": "emulated",
3771
+ "allowNo": false,
3772
+ "type": "boolean"
3773
+ },
3774
+ "dockerfile": {
3775
+ "description": "Alternative Dockerfile name/path, relative to the source folder",
3776
+ "name": "dockerfile",
3777
+ "hasDynamicHelp": false,
3778
+ "multiple": false,
3779
+ "type": "option"
3780
+ },
3781
+ "nocache": {
3782
+ "char": "c",
3783
+ "description": "Don't use cached layers of previously built images for this project. This\nensures that the latest base image and packages are pulled. Note that build\nlogs may still display the message _\"Pulling previous images for caching\npurposes\" (as the cloud builder needs previous images to compute delta\nupdates), but the logs will not display the \"Using cache\" lines for each\nbuild step of a Dockerfile.",
3784
+ "name": "nocache",
3785
+ "allowNo": false,
3786
+ "type": "boolean"
3787
+ },
3788
+ "pull": {
3789
+ "description": "When pushing to a local device, force the base images to be pulled again.\nCurrently this option is ignored when pushing to the balenaCloud builders.",
3790
+ "name": "pull",
3791
+ "allowNo": false,
3792
+ "type": "boolean"
3793
+ },
3794
+ "noparent-check": {
3795
+ "description": "Disable project validation check of 'docker-compose.yml' file in parent folder",
3796
+ "name": "noparent-check",
3797
+ "allowNo": false,
3798
+ "type": "boolean"
3799
+ },
3800
+ "registry-secrets": {
3801
+ "char": "R",
3802
+ "description": "Path to a local YAML or JSON file containing Docker registry passwords used\nto pull base images. Note that if registry-secrets are not provided on the\ncommand line, a secrets configuration file from the balena directory will be\nused (usually $HOME/.balena/secrets.yml|.json)",
3803
+ "name": "registry-secrets",
3804
+ "hasDynamicHelp": false,
3805
+ "multiple": false,
3806
+ "type": "option"
3807
+ },
3808
+ "nolive": {
3809
+ "description": "Don't run a live session on this push. The filesystem will not be monitored,\nand changes will not be synchronized to any running containers. Note that both\nthis flag and --detached are required to cause the process to end once the\ninitial build has completed.",
3810
+ "name": "nolive",
3811
+ "allowNo": false,
3812
+ "type": "boolean"
3813
+ },
3814
+ "detached": {
3815
+ "char": "d",
3816
+ "description": "When pushing to the cloud, this option will cause the build to start, then\nreturn execution back to the shell, with the status and release ID (if\napplicable). When pushing to a local mode device, this option will cause\nthe command to not tail logs when the build has completed.",
3817
+ "name": "detached",
3818
+ "allowNo": false,
3819
+ "type": "boolean"
3820
+ },
3821
+ "service": {
3822
+ "description": "Reject logs not originating from this service.\nThis can be used in combination with --system and other --service flags.\nOnly valid when pushing to a local mode device.",
3823
+ "name": "service",
3824
+ "hasDynamicHelp": false,
3825
+ "multiple": true,
3826
+ "type": "option"
3827
+ },
3828
+ "system": {
3829
+ "description": "Only show system logs. This can be used in combination with --service.\nOnly valid when pushing to a local mode device.",
3830
+ "name": "system",
3831
+ "allowNo": false,
3832
+ "type": "boolean"
3833
+ },
3834
+ "env": {
3835
+ "description": "When performing a push to device, run the built containers with environment\nvariables provided with this argument. Environment variables can be applied\nto individual services by adding their service name before the argument,\nseparated by a colon, e.g:\n\t--env main:MY_ENV=value\nNote that if the service name cannot be found in the composition, the entire\nleft hand side of the = character will be treated as the variable name.",
3836
+ "name": "env",
3837
+ "hasDynamicHelp": false,
3838
+ "multiple": true,
3839
+ "type": "option"
3840
+ },
3841
+ "noconvert-eol": {
3842
+ "description": "Don't convert line endings from CRLF (Windows format) to LF (Unix format).",
3843
+ "name": "noconvert-eol",
3844
+ "allowNo": false,
3845
+ "type": "boolean"
3846
+ },
3847
+ "multi-dockerignore": {
3848
+ "char": "m",
3849
+ "description": "Have each service use its own .dockerignore file. See \"balena help push\".",
3850
+ "name": "multi-dockerignore",
3851
+ "allowNo": false,
3852
+ "type": "boolean"
3853
+ },
3854
+ "release-tag": {
3855
+ "description": "Set release tags if the image build is successful (balenaCloud only). Multiple\narguments may be provided, alternating tag keys and values (see examples).\nHint: Empty values may be specified with \"\" (bash, cmd.exe) or '\"\"' (PowerShell).",
3856
+ "exclusive": [
3857
+ "detached"
3858
+ ],
3859
+ "name": "release-tag",
3860
+ "hasDynamicHelp": false,
3861
+ "multiple": true,
3862
+ "type": "option"
3863
+ },
3864
+ "draft": {
3865
+ "description": "Instruct the builder to create the release as a draft. Draft releases are ignored\nby the 'track latest' release policy but can be used through release pinning.\nDraft releases can be marked as final through the API. Releases are created\nas final by default unless this option is given.",
3866
+ "name": "draft",
3867
+ "allowNo": false,
3868
+ "type": "boolean"
3869
+ },
3870
+ "note": {
3871
+ "description": "The notes for this release",
3872
+ "name": "note",
3873
+ "hasDynamicHelp": false,
3874
+ "multiple": false,
3875
+ "type": "option"
3876
+ }
3877
+ },
3878
+ "hasDynamicHelp": false,
3879
+ "hiddenAliases": [],
3880
+ "id": "push",
3881
+ "pluginAlias": "balena-cli",
3882
+ "pluginName": "balena-cli",
3883
+ "pluginType": "core",
3884
+ "strict": true,
3885
+ "enableJsonFlag": false,
3886
+ "primary": true,
3887
+ "isESM": false,
3888
+ "relativePath": [
3889
+ "build",
3890
+ "commands",
3891
+ "push",
3892
+ "index.js"
3893
+ ]
3894
+ },
3895
3895
  "release:finalize": {
3896
3896
  "aliases": [],
3897
3897
  "args": {
@@ -4509,28 +4509,6 @@
4509
4509
  "index.js"
4510
4510
  ]
4511
4511
  },
4512
- "util:available-drives": {
4513
- "aliases": [],
4514
- "args": {},
4515
- "description": "List available drives.\n\nList available drives which are usable for writing an OS image to.\nDoes not list system drives.",
4516
- "flags": {},
4517
- "hasDynamicHelp": false,
4518
- "hiddenAliases": [],
4519
- "id": "util:available-drives",
4520
- "pluginAlias": "balena-cli",
4521
- "pluginName": "balena-cli",
4522
- "pluginType": "core",
4523
- "strict": true,
4524
- "enableJsonFlag": false,
4525
- "offlineCompatible": true,
4526
- "isESM": false,
4527
- "relativePath": [
4528
- "build",
4529
- "commands",
4530
- "util",
4531
- "available-drives.js"
4532
- ]
4533
- },
4534
4512
  "tag:list": {
4535
4513
  "aliases": [],
4536
4514
  "args": {},
@@ -4751,6 +4729,28 @@
4751
4729
  "set.js"
4752
4730
  ]
4753
4731
  },
4732
+ "util:available-drives": {
4733
+ "aliases": [],
4734
+ "args": {},
4735
+ "description": "List available drives.\n\nList available drives which are usable for writing an OS image to.\nDoes not list system drives.",
4736
+ "flags": {},
4737
+ "hasDynamicHelp": false,
4738
+ "hiddenAliases": [],
4739
+ "id": "util:available-drives",
4740
+ "pluginAlias": "balena-cli",
4741
+ "pluginName": "balena-cli",
4742
+ "pluginType": "core",
4743
+ "strict": true,
4744
+ "enableJsonFlag": false,
4745
+ "offlineCompatible": true,
4746
+ "isESM": false,
4747
+ "relativePath": [
4748
+ "build",
4749
+ "commands",
4750
+ "util",
4751
+ "available-drives.js"
4752
+ ]
4753
+ },
4754
4754
  "whoami": {
4755
4755
  "aliases": [],
4756
4756
  "args": {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "balena-cli",
3
- "version": "23.2.8-build-renovate-apple-actions-import-codesign-certs-4-x-0c66c774af30a7e13043e4daae9146e9a72a1865-1",
3
+ "version": "23.2.8-build-validate-installer-secureboot-b138ce3c6f2c34d53689a364b809e6dd2ae5b203-2",
4
4
  "description": "The official balena Command Line Interface",
5
5
  "main": "./build/app.js",
6
6
  "homepage": "https://github.com/balena-io/balena-cli",
@@ -262,6 +262,6 @@
262
262
  "balena-request": "14.0.6"
263
263
  },
264
264
  "versionist": {
265
- "publishedAt": "2025-12-08T17:56:48.253Z"
265
+ "publishedAt": "2025-12-08T18:19:12.318Z"
266
266
  }
267
267
  }
@@ -166,6 +166,12 @@ export async function readAndValidateConfigJson(path: string) {
166
166
  ) {
167
167
  throw new ExpectedError('Missing or invalid deviceType in config.json');
168
168
  }
169
+ const secureboot = configJson.installer?.secureboot;
170
+ if (secureboot != null && typeof secureboot !== 'boolean') {
171
+ throw new ExpectedError(
172
+ `Invalid installer.secureboot in config.json: value must be a boolean, found ${typeof secureboot}: '${secureboot}'`,
173
+ );
174
+ }
169
175
  return configJson;
170
176
  }
171
177