balena-cli 23.2.15-build-update-compose-tar-dependencies-132ab39d4a4a27c2766acc7a6aee1cedfbe13a2c-1 → 23.2.15-build-mockttp-bf5ce35034d52be121edf75a0bf37797d46e3374-1

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.
@@ -3258,136 +3258,6 @@
3258
3258
  "list.js"
3259
3259
  ]
3260
3260
  },
3261
- "preload": {
3262
- "aliases": [],
3263
- "args": {
3264
- "image": {
3265
- "description": "the image file path",
3266
- "name": "image",
3267
- "required": true
3268
- }
3269
- },
3270
- "description": "Preload a release on a disk image (or Edison zip archive).\n\nPreload a release (service images/containers) from a balena fleet, and optionally\na balenaOS splash screen, in a previously downloaded '.img' balenaOS image file\nin the local disk (a zip file is only accepted for the Intel Edison device type).\nAfter preloading, the balenaOS image file can be flashed to a device's SD card.\nWhen the device boots, it will not need to download the release, as it was\npreloaded. This is usually combined with release pinning\n(https://www.balena.io/docs/learn/deploy/release-strategy/release-policy/)\nto avoid the device downloading a newer release straight away, if available.\nCheck also the Preloading and Preregistering section of the balena CLI's advanced\nmasterclass document:\nhttps://www.balena.io/docs/learn/more/masterclasses/advanced-cli/#5-preloading-and-preregistering\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).\n\nNote that the this command requires Docker to be installed, as further detailed\nin the balena CLI's installation instructions:\nhttps://github.com/balena-io/balena-cli/blob/master/INSTALL.md\nThe `--dockerHost` and `--dockerPort` flags allow a remote Docker engine to\nbe used, however the image file must be accessible to the remote Docker engine\non the same path given on the command line. This is because Docker's bind mount\nfeature is used to \"share\" the image with a container that performs the preload.",
3271
- "examples": [
3272
- "$ balena preload balena.img --fleet MyFleet --commit e1f2592fc6ee949e68756d4f4a48e49bff8d72a0",
3273
- "$ balena preload balena.img --fleet myorg/myfleet --splash-image image.png",
3274
- "$ balena preload balena.img"
3275
- ],
3276
- "flags": {
3277
- "fleet": {
3278
- "char": "f",
3279
- "description": "fleet name or slug (preferred)",
3280
- "name": "fleet",
3281
- "hasDynamicHelp": false,
3282
- "multiple": false,
3283
- "type": "option"
3284
- },
3285
- "commit": {
3286
- "char": "c",
3287
- "description": "The commit hash of the release to preload. Use \"current\" to specify the current\nrelease (ignored if no appId is given). The current release is usually also the\nlatest, but can be pinned to a specific release. See:\nhttps://www.balena.io/docs/learn/deploy/release-strategy/release-policy/\nhttps://www.balena.io/docs/learn/more/masterclasses/fleet-management/#63-pin-using-the-api\nhttps://github.com/balena-io-examples/staged-releases",
3288
- "name": "commit",
3289
- "hasDynamicHelp": false,
3290
- "multiple": false,
3291
- "type": "option"
3292
- },
3293
- "splash-image": {
3294
- "char": "s",
3295
- "description": "path to a png image to replace the splash screen",
3296
- "name": "splash-image",
3297
- "hasDynamicHelp": false,
3298
- "multiple": false,
3299
- "type": "option"
3300
- },
3301
- "dont-check-arch": {
3302
- "description": "disable architecture compatibility check between image and fleet",
3303
- "name": "dont-check-arch",
3304
- "allowNo": false,
3305
- "type": "boolean"
3306
- },
3307
- "pin-device-to-release": {
3308
- "char": "p",
3309
- "description": "pin the preloaded device to the preloaded release on provision",
3310
- "name": "pin-device-to-release",
3311
- "allowNo": true,
3312
- "type": "boolean"
3313
- },
3314
- "additional-space": {
3315
- "description": "expand the image by this amount of bytes instead of automatically estimating the required amount",
3316
- "name": "additional-space",
3317
- "hasDynamicHelp": false,
3318
- "multiple": false,
3319
- "type": "option"
3320
- },
3321
- "add-certificate": {
3322
- "description": "Add the given certificate (in PEM format) to /etc/ssl/certs in the preloading container.\nThe file name must end with '.crt' and must not be already contained in the preloader's\n/etc/ssl/certs folder.\nCan be repeated to add multiple certificates.",
3323
- "name": "add-certificate",
3324
- "hasDynamicHelp": false,
3325
- "multiple": true,
3326
- "type": "option"
3327
- },
3328
- "docker": {
3329
- "char": "P",
3330
- "description": "Path to a local docker socket (e.g. /var/run/docker.sock)",
3331
- "name": "docker",
3332
- "hasDynamicHelp": false,
3333
- "multiple": false,
3334
- "type": "option"
3335
- },
3336
- "dockerHost": {
3337
- "char": "h",
3338
- "description": "Docker daemon hostname or IP address (dev machine or balena device) ",
3339
- "name": "dockerHost",
3340
- "hasDynamicHelp": false,
3341
- "multiple": false,
3342
- "type": "option"
3343
- },
3344
- "dockerPort": {
3345
- "description": "Docker daemon TCP port number (hint: 2375 for balena devices)",
3346
- "name": "dockerPort",
3347
- "hasDynamicHelp": false,
3348
- "multiple": false,
3349
- "type": "option"
3350
- },
3351
- "ca": {
3352
- "description": "Docker host TLS certificate authority file",
3353
- "name": "ca",
3354
- "hasDynamicHelp": false,
3355
- "multiple": false,
3356
- "type": "option"
3357
- },
3358
- "cert": {
3359
- "description": "Docker host TLS certificate file",
3360
- "name": "cert",
3361
- "hasDynamicHelp": false,
3362
- "multiple": false,
3363
- "type": "option"
3364
- },
3365
- "key": {
3366
- "description": "Docker host TLS key file",
3367
- "name": "key",
3368
- "hasDynamicHelp": false,
3369
- "multiple": false,
3370
- "type": "option"
3371
- }
3372
- },
3373
- "hasDynamicHelp": false,
3374
- "hiddenAliases": [],
3375
- "id": "preload",
3376
- "pluginAlias": "balena-cli",
3377
- "pluginName": "balena-cli",
3378
- "pluginType": "core",
3379
- "strict": true,
3380
- "enableJsonFlag": false,
3381
- "authenticated": true,
3382
- "primary": true,
3383
- "isESM": false,
3384
- "relativePath": [
3385
- "build",
3386
- "commands",
3387
- "preload",
3388
- "index.js"
3389
- ]
3390
- },
3391
3261
  "os:configure": {
3392
3262
  "aliases": [],
3393
3263
  "args": {
@@ -3727,6 +3597,136 @@
3727
3597
  "versions.js"
3728
3598
  ]
3729
3599
  },
3600
+ "preload": {
3601
+ "aliases": [],
3602
+ "args": {
3603
+ "image": {
3604
+ "description": "the image file path",
3605
+ "name": "image",
3606
+ "required": true
3607
+ }
3608
+ },
3609
+ "description": "Preload a release on a disk image (or Edison zip archive).\n\nPreload a release (service images/containers) from a balena fleet, and optionally\na balenaOS splash screen, in a previously downloaded '.img' balenaOS image file\nin the local disk (a zip file is only accepted for the Intel Edison device type).\nAfter preloading, the balenaOS image file can be flashed to a device's SD card.\nWhen the device boots, it will not need to download the release, as it was\npreloaded. This is usually combined with release pinning\n(https://www.balena.io/docs/learn/deploy/release-strategy/release-policy/)\nto avoid the device downloading a newer release straight away, if available.\nCheck also the Preloading and Preregistering section of the balena CLI's advanced\nmasterclass document:\nhttps://www.balena.io/docs/learn/more/masterclasses/advanced-cli/#5-preloading-and-preregistering\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).\n\nNote that the this command requires Docker to be installed, as further detailed\nin the balena CLI's installation instructions:\nhttps://github.com/balena-io/balena-cli/blob/master/INSTALL.md\nThe `--dockerHost` and `--dockerPort` flags allow a remote Docker engine to\nbe used, however the image file must be accessible to the remote Docker engine\non the same path given on the command line. This is because Docker's bind mount\nfeature is used to \"share\" the image with a container that performs the preload.",
3610
+ "examples": [
3611
+ "$ balena preload balena.img --fleet MyFleet --commit e1f2592fc6ee949e68756d4f4a48e49bff8d72a0",
3612
+ "$ balena preload balena.img --fleet myorg/myfleet --splash-image image.png",
3613
+ "$ balena preload balena.img"
3614
+ ],
3615
+ "flags": {
3616
+ "fleet": {
3617
+ "char": "f",
3618
+ "description": "fleet name or slug (preferred)",
3619
+ "name": "fleet",
3620
+ "hasDynamicHelp": false,
3621
+ "multiple": false,
3622
+ "type": "option"
3623
+ },
3624
+ "commit": {
3625
+ "char": "c",
3626
+ "description": "The commit hash of the release to preload. Use \"current\" to specify the current\nrelease (ignored if no appId is given). The current release is usually also the\nlatest, but can be pinned to a specific release. See:\nhttps://www.balena.io/docs/learn/deploy/release-strategy/release-policy/\nhttps://www.balena.io/docs/learn/more/masterclasses/fleet-management/#63-pin-using-the-api\nhttps://github.com/balena-io-examples/staged-releases",
3627
+ "name": "commit",
3628
+ "hasDynamicHelp": false,
3629
+ "multiple": false,
3630
+ "type": "option"
3631
+ },
3632
+ "splash-image": {
3633
+ "char": "s",
3634
+ "description": "path to a png image to replace the splash screen",
3635
+ "name": "splash-image",
3636
+ "hasDynamicHelp": false,
3637
+ "multiple": false,
3638
+ "type": "option"
3639
+ },
3640
+ "dont-check-arch": {
3641
+ "description": "disable architecture compatibility check between image and fleet",
3642
+ "name": "dont-check-arch",
3643
+ "allowNo": false,
3644
+ "type": "boolean"
3645
+ },
3646
+ "pin-device-to-release": {
3647
+ "char": "p",
3648
+ "description": "pin the preloaded device to the preloaded release on provision",
3649
+ "name": "pin-device-to-release",
3650
+ "allowNo": true,
3651
+ "type": "boolean"
3652
+ },
3653
+ "additional-space": {
3654
+ "description": "expand the image by this amount of bytes instead of automatically estimating the required amount",
3655
+ "name": "additional-space",
3656
+ "hasDynamicHelp": false,
3657
+ "multiple": false,
3658
+ "type": "option"
3659
+ },
3660
+ "add-certificate": {
3661
+ "description": "Add the given certificate (in PEM format) to /etc/ssl/certs in the preloading container.\nThe file name must end with '.crt' and must not be already contained in the preloader's\n/etc/ssl/certs folder.\nCan be repeated to add multiple certificates.",
3662
+ "name": "add-certificate",
3663
+ "hasDynamicHelp": false,
3664
+ "multiple": true,
3665
+ "type": "option"
3666
+ },
3667
+ "docker": {
3668
+ "char": "P",
3669
+ "description": "Path to a local docker socket (e.g. /var/run/docker.sock)",
3670
+ "name": "docker",
3671
+ "hasDynamicHelp": false,
3672
+ "multiple": false,
3673
+ "type": "option"
3674
+ },
3675
+ "dockerHost": {
3676
+ "char": "h",
3677
+ "description": "Docker daemon hostname or IP address (dev machine or balena device) ",
3678
+ "name": "dockerHost",
3679
+ "hasDynamicHelp": false,
3680
+ "multiple": false,
3681
+ "type": "option"
3682
+ },
3683
+ "dockerPort": {
3684
+ "description": "Docker daemon TCP port number (hint: 2375 for balena devices)",
3685
+ "name": "dockerPort",
3686
+ "hasDynamicHelp": false,
3687
+ "multiple": false,
3688
+ "type": "option"
3689
+ },
3690
+ "ca": {
3691
+ "description": "Docker host TLS certificate authority file",
3692
+ "name": "ca",
3693
+ "hasDynamicHelp": false,
3694
+ "multiple": false,
3695
+ "type": "option"
3696
+ },
3697
+ "cert": {
3698
+ "description": "Docker host TLS certificate file",
3699
+ "name": "cert",
3700
+ "hasDynamicHelp": false,
3701
+ "multiple": false,
3702
+ "type": "option"
3703
+ },
3704
+ "key": {
3705
+ "description": "Docker host TLS key file",
3706
+ "name": "key",
3707
+ "hasDynamicHelp": false,
3708
+ "multiple": false,
3709
+ "type": "option"
3710
+ }
3711
+ },
3712
+ "hasDynamicHelp": false,
3713
+ "hiddenAliases": [],
3714
+ "id": "preload",
3715
+ "pluginAlias": "balena-cli",
3716
+ "pluginName": "balena-cli",
3717
+ "pluginType": "core",
3718
+ "strict": true,
3719
+ "enableJsonFlag": false,
3720
+ "authenticated": true,
3721
+ "primary": true,
3722
+ "isESM": false,
3723
+ "relativePath": [
3724
+ "build",
3725
+ "commands",
3726
+ "preload",
3727
+ "index.js"
3728
+ ]
3729
+ },
3730
3730
  "push": {
3731
3731
  "aliases": [],
3732
3732
  "args": {
@@ -4074,30 +4074,6 @@
4074
4074
  "validate.js"
4075
4075
  ]
4076
4076
  },
4077
- "settings": {
4078
- "aliases": [],
4079
- "args": {},
4080
- "description": "Print current settings.\n\nUse this command to display the current balena CLI settings.",
4081
- "examples": [
4082
- "$ balena settings"
4083
- ],
4084
- "flags": {},
4085
- "hasDynamicHelp": false,
4086
- "hiddenAliases": [],
4087
- "id": "settings",
4088
- "pluginAlias": "balena-cli",
4089
- "pluginName": "balena-cli",
4090
- "pluginType": "core",
4091
- "strict": true,
4092
- "enableJsonFlag": false,
4093
- "isESM": false,
4094
- "relativePath": [
4095
- "build",
4096
- "commands",
4097
- "settings",
4098
- "index.js"
4099
- ]
4100
- },
4101
4077
  "release-asset:delete": {
4102
4078
  "aliases": [],
4103
4079
  "args": {
@@ -4313,64 +4289,27 @@
4313
4289
  "upload.js"
4314
4290
  ]
4315
4291
  },
4316
- "support": {
4292
+ "settings": {
4317
4293
  "aliases": [],
4318
- "args": {
4319
- "action": {
4320
- "description": "enable|disable support access",
4321
- "name": "action",
4322
- "options": [
4323
- "enable",
4324
- "disable"
4325
- ]
4326
- }
4327
- },
4328
- "description": "Grant or revoke support access for devices or fleets.\n\nGrant or revoke balena support agent access to devices or fleets\non balenaCloud. (This command does not apply to openBalena.)\nAccess will be automatically revoked once the specified duration has elapsed.\n\nDuration defaults to 24h, but can be specified using --duration flag in days\nor hours, e.g. '12h', '2d'.\n\nBoth --device and --fleet flags accept multiple values, specified as\na comma-separated list (with no spaces).\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).",
4294
+ "args": {},
4295
+ "description": "Print current settings.\n\nUse this command to display the current balena CLI settings.",
4329
4296
  "examples": [
4330
- "balena support enable --device ab346f,cd457a --duration 3d",
4331
- "balena support enable --fleet myFleet --duration 12h",
4332
- "balena support disable -f myorg/myfleet"
4297
+ "$ balena settings"
4333
4298
  ],
4334
- "flags": {
4335
- "device": {
4336
- "char": "d",
4337
- "description": "comma-separated list (no spaces) of device UUIDs",
4338
- "name": "device",
4339
- "hasDynamicHelp": false,
4340
- "multiple": false,
4341
- "type": "option"
4342
- },
4343
- "fleet": {
4344
- "char": "f",
4345
- "description": "comma-separated list (no spaces) of fleet names or slugs (preferred)",
4346
- "name": "fleet",
4347
- "hasDynamicHelp": false,
4348
- "multiple": false,
4349
- "type": "option"
4350
- },
4351
- "duration": {
4352
- "char": "t",
4353
- "description": "length of time to enable support for, in (h)ours or (d)ays, e.g. 12h, 2d",
4354
- "name": "duration",
4355
- "hasDynamicHelp": false,
4356
- "multiple": false,
4357
- "type": "option"
4358
- }
4359
- },
4299
+ "flags": {},
4360
4300
  "hasDynamicHelp": false,
4361
4301
  "hiddenAliases": [],
4362
- "id": "support",
4302
+ "id": "settings",
4363
4303
  "pluginAlias": "balena-cli",
4364
4304
  "pluginName": "balena-cli",
4365
4305
  "pluginType": "core",
4366
4306
  "strict": true,
4367
4307
  "enableJsonFlag": false,
4368
- "authenticated": true,
4369
4308
  "isESM": false,
4370
4309
  "relativePath": [
4371
4310
  "build",
4372
4311
  "commands",
4373
- "support",
4312
+ "settings",
4374
4313
  "index.js"
4375
4314
  ]
4376
4315
  },
@@ -4509,6 +4448,67 @@
4509
4448
  "rm.js"
4510
4449
  ]
4511
4450
  },
4451
+ "support": {
4452
+ "aliases": [],
4453
+ "args": {
4454
+ "action": {
4455
+ "description": "enable|disable support access",
4456
+ "name": "action",
4457
+ "options": [
4458
+ "enable",
4459
+ "disable"
4460
+ ]
4461
+ }
4462
+ },
4463
+ "description": "Grant or revoke support access for devices or fleets.\n\nGrant or revoke balena support agent access to devices or fleets\non balenaCloud. (This command does not apply to openBalena.)\nAccess will be automatically revoked once the specified duration has elapsed.\n\nDuration defaults to 24h, but can be specified using --duration flag in days\nor hours, e.g. '12h', '2d'.\n\nBoth --device and --fleet flags accept multiple values, specified as\na comma-separated list (with no spaces).\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).",
4464
+ "examples": [
4465
+ "balena support enable --device ab346f,cd457a --duration 3d",
4466
+ "balena support enable --fleet myFleet --duration 12h",
4467
+ "balena support disable -f myorg/myfleet"
4468
+ ],
4469
+ "flags": {
4470
+ "device": {
4471
+ "char": "d",
4472
+ "description": "comma-separated list (no spaces) of device UUIDs",
4473
+ "name": "device",
4474
+ "hasDynamicHelp": false,
4475
+ "multiple": false,
4476
+ "type": "option"
4477
+ },
4478
+ "fleet": {
4479
+ "char": "f",
4480
+ "description": "comma-separated list (no spaces) of fleet names or slugs (preferred)",
4481
+ "name": "fleet",
4482
+ "hasDynamicHelp": false,
4483
+ "multiple": false,
4484
+ "type": "option"
4485
+ },
4486
+ "duration": {
4487
+ "char": "t",
4488
+ "description": "length of time to enable support for, in (h)ours or (d)ays, e.g. 12h, 2d",
4489
+ "name": "duration",
4490
+ "hasDynamicHelp": false,
4491
+ "multiple": false,
4492
+ "type": "option"
4493
+ }
4494
+ },
4495
+ "hasDynamicHelp": false,
4496
+ "hiddenAliases": [],
4497
+ "id": "support",
4498
+ "pluginAlias": "balena-cli",
4499
+ "pluginName": "balena-cli",
4500
+ "pluginType": "core",
4501
+ "strict": true,
4502
+ "enableJsonFlag": false,
4503
+ "authenticated": true,
4504
+ "isESM": false,
4505
+ "relativePath": [
4506
+ "build",
4507
+ "commands",
4508
+ "support",
4509
+ "index.js"
4510
+ ]
4511
+ },
4512
4512
  "tag:list": {
4513
4513
  "aliases": [],
4514
4514
  "args": {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "balena-cli",
3
- "version": "23.2.15-build-update-compose-tar-dependencies-132ab39d4a4a27c2766acc7a6aee1cedfbe13a2c-1",
3
+ "version": "23.2.15-build-mockttp-bf5ce35034d52be121edf75a0bf37797d46e3374-1",
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",
@@ -130,7 +130,6 @@
130
130
  "@types/mime": "^3.0.4",
131
131
  "@types/mocha": "^10.0.7",
132
132
  "@types/mock-fs": "^4.13.4",
133
- "@types/mock-require": "^2.0.1",
134
133
  "@types/ndjson": "^2.0.1",
135
134
  "@types/node": "^24.10.1",
136
135
  "@types/node-cleanup": "^2.1.2",
@@ -164,8 +163,7 @@
164
163
  "mkdirp": "^3.0.1",
165
164
  "mocha": "^10.6.0",
166
165
  "mock-fs": "^5.2.0",
167
- "mock-require": "^3.0.3",
168
- "nock": "^14.0.4",
166
+ "mockttp": "^4.2.0",
169
167
  "oclif": "^4.22.61",
170
168
  "rewire": "^7.0.0",
171
169
  "rimraf": "^6.0.1",
@@ -173,10 +171,11 @@
173
171
  "sinon": "^19.0.0",
174
172
  "string-to-stream": "^3.0.1",
175
173
  "ts-node": "^10.4.0",
176
- "typescript": "^5.9.2"
174
+ "typescript": "^5.9.2",
175
+ "undici": "^7.16.0"
177
176
  },
178
177
  "dependencies": {
179
- "@balena/compose": "^7.2.1",
178
+ "@balena/compose": "^7.0.10",
180
179
  "@balena/dockerignore": "^1.0.2",
181
180
  "@balena/env-parsing": "^1.1.8",
182
181
  "@balena/es-version": "^1.0.1",
@@ -243,8 +242,8 @@
243
242
  "stream-to-promise": "^2.2.0",
244
243
  "string-width": "^4.2.3",
245
244
  "strip-ansi-stream": "^1.0.0",
246
- "tar-stream": "^3.1.7",
247
- "tar-utils": "^3.1.1",
245
+ "tar-stream": "^2.1.3",
246
+ "tar-utils": "^3.0.3",
248
247
  "through2": "^2.0.3",
249
248
  "tmp": "^0.2.1",
250
249
  "typed-error": "^3.2.1",
@@ -262,6 +261,6 @@
262
261
  "balena-request": "14.0.6"
263
262
  },
264
263
  "versionist": {
265
- "publishedAt": "2026-01-07T12:07:55.047Z"
264
+ "publishedAt": "2026-01-07T18:53:11.180Z"
266
265
  }
267
266
  }
@@ -89,7 +89,10 @@ export class DeprecationChecker {
89
89
  * @param version Semver without 'v' prefix, e.g. '12.0.0.'
90
90
  */
91
91
  protected getNpmUrl(version: string) {
92
- return `https://registry.npmjs.org/balena-cli/${version}`;
92
+ // Allow override for testing with mock servers
93
+ const registryUrl =
94
+ process.env.BALENARC_NPM_REGISTRY ?? 'https://registry.npmjs.org';
95
+ return `${registryUrl}/balena-cli/${version}`;
93
96
  }
94
97
 
95
98
  /**
@@ -15,9 +15,12 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type * as compose from '@balena/compose';
18
+ import type {
19
+ ImageModel,
20
+ ReleaseModel,
21
+ } from '@balena/compose/dist/release/models';
22
+ import type { Composition, ImageDescriptor } from '@balena/compose/dist/parse';
19
23
  import type { Pack } from 'tar-stream';
20
- import type { BalenaModel } from 'balena-sdk';
21
24
 
22
25
  interface Image {
23
26
  context: string;
@@ -39,10 +42,7 @@ export interface BuiltImage {
39
42
 
40
43
  export interface TaggedImage {
41
44
  localImage: import('dockerode').Image;
42
- serviceImage: Omit<
43
- BalenaModel['image']['Read'],
44
- 'created_at' | 'is_a_build_of__service'
45
- >;
45
+ serviceImage: import('@balena/compose/dist/release/models').ImageModel;
46
46
  serviceName: string;
47
47
  logs: string;
48
48
  props: BuiltImage.props;
@@ -75,14 +75,14 @@ export interface ComposeCliFlags {
75
75
  export interface ComposeProject {
76
76
  path: string;
77
77
  name: string;
78
- composition: compose.parse.Composition;
79
- descriptors: compose.parse.ImageDescriptor[];
78
+ composition: Composition;
79
+ descriptors: ImageDescriptor[];
80
80
  }
81
81
 
82
82
  export interface Release {
83
- client: compose.release.Request['client'];
83
+ client: import('@balena/compose').release.Request['client'];
84
84
  release: Pick<
85
- BalenaModel['release']['Read'],
85
+ ReleaseModel,
86
86
  | 'id'
87
87
  | 'status'
88
88
  | 'commit'
@@ -95,12 +95,12 @@ export interface Release {
95
95
  | 'end_timestamp'
96
96
  >;
97
97
  serviceImages: Dictionary<
98
- Omit<BalenaModel['image']['Read'], 'created_at' | 'is_a_build_of__service'>
98
+ Omit<ImageModel, 'created_at' | 'is_a_build_of__service'>
99
99
  >;
100
100
  }
101
101
 
102
102
  interface TarDirectoryOptions {
103
- composition?: compose.parse.Composition;
103
+ composition?: Composition;
104
104
  convertEol?: boolean;
105
105
  multiDockerignore?: boolean;
106
106
  preFinalizeCallback?: (pack: Pack) => void | Promise<void>;
@@ -128,7 +128,7 @@ export const createRelease = async function (
128
128
  composition: Composition,
129
129
  draft: boolean,
130
130
  semver: string | undefined,
131
- contract: import('@balena/compose').release.Request['contract'],
131
+ contract: import('@balena/compose/dist/release/models').ReleaseModel['contract'],
132
132
  imgDescriptors: ImageDescriptor[],
133
133
  ): Promise<Release> {
134
134
  const crypto = require('crypto') as typeof import('crypto');
@@ -156,7 +156,7 @@ export const createRelease = async function (
156
156
  );
157
157
 
158
158
  const { id: userId } = await sdk.auth.getUserInfo();
159
- const { release, serviceImages: $serviceImages } = await releaseMod.create({
159
+ const { release, serviceImages } = await releaseMod.create({
160
160
  client: pinejsClient,
161
161
  user: userId,
162
162
  application: appId,
@@ -169,19 +169,14 @@ export const createRelease = async function (
169
169
  imgDescriptors,
170
170
  });
171
171
 
172
- const serviceImages = Object.fromEntries(
173
- Object.entries($serviceImages).map(([key, serviceImage]) => {
174
- if (
175
- 'created_at' in serviceImage ||
176
- 'is_a_build_of__service' in serviceImage
177
- ) {
178
- // eslint-disable-next-line @typescript-eslint/no-unused-vars -- omit the created_at, is_a_build_of__service props
179
- const { created_at, is_a_build_of__service, ...si } = serviceImage;
180
- return [key, si];
181
- }
182
- return [key, serviceImage];
183
- }),
184
- );
172
+ for (const serviceImage of Object.values(serviceImages)) {
173
+ if ('created_at' in serviceImage) {
174
+ delete serviceImage.created_at;
175
+ }
176
+ if ('is_a_build_of__service' in serviceImage) {
177
+ delete serviceImage.is_a_build_of__service;
178
+ }
179
+ }
185
180
 
186
181
  return {
187
182
  client: pinejsClient,