mirror of
https://github.com/balena-io/balena-cli.git
synced 2025-06-24 18:45:07 +00:00
Compare commits
9 Commits
nock15
...
renovate/p
Author | SHA1 | Date | |
---|---|---|---|
40a980929a | |||
3f9288e9d3 | |||
0efa745628 | |||
bddad252f7 | |||
a1a0e4f028 | |||
de74baa2ff | |||
6c12f755c5 | |||
f80b8e63b1 | |||
b32514f5af |
2
.github/actions/publish/action.yml
vendored
2
.github/actions/publish/action.yml
vendored
@ -18,7 +18,7 @@ inputs:
|
||||
default: 'accounts+apple@balena.io'
|
||||
NODE_VERSION:
|
||||
type: string
|
||||
default: '20.x'
|
||||
default: '22.x'
|
||||
VERBOSE:
|
||||
type: string
|
||||
default: 'true'
|
||||
|
2
.github/actions/test/action.yml
vendored
2
.github/actions/test/action.yml
vendored
@ -15,7 +15,7 @@ inputs:
|
||||
# --- custom environment
|
||||
NODE_VERSION:
|
||||
type: string
|
||||
default: '20.x'
|
||||
default: '22.x'
|
||||
VERBOSE:
|
||||
type: string
|
||||
default: "true"
|
||||
|
@ -1,3 +1,54 @@
|
||||
- commits:
|
||||
- subject: "Deploy: Limit the submitted error_message of images that fail to build
|
||||
to 1000 characters"
|
||||
hash: bddad252f7cb412a3d417be1d7bd7e4ed9726b8e
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
See: https://balena.fibery.io/Work/Project/re-pitching-API-Limit-size-of-large-fields-975
|
||||
see: https://balena.fibery.io/Work/Project/re-pitching-API-Limit-size-of-large-fields-975
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: 22.1.1
|
||||
title: ""
|
||||
date: 2025-06-19T09:32:52.976Z
|
||||
- commits:
|
||||
- subject: Add support for node 22
|
||||
hash: f80b8e63b1e5b22dd95b034fe14da0a7e3ab4986
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: Otavio Jacobi
|
||||
nested: []
|
||||
- subject: Bump etcher-sdk to v10.0.0
|
||||
hash: b32514f5afb4fdd12e4a9dca5e2a1d53e727b434
|
||||
body: |
|
||||
Update balena-device-init from 8.1.3 to 8.1.1
|
||||
Update etcher-sdk from 9.1.4 to 10.0.0
|
||||
Update resin-cli-form from 3.0.0 to 4.0.0
|
||||
Update resin-cli-visuals from 2.0.1 to 3.0.0
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Otavio Jacobi
|
||||
nested:
|
||||
- commits:
|
||||
- subject: Drop support to node18 and add support to node 22 & 24
|
||||
hash: 95e577823f642a6c0e500aa29fc150b7807d84f7
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: major
|
||||
change-type: major
|
||||
author: Otavio Jacobi
|
||||
nested: []
|
||||
version: etcher-sdk-10.0.0
|
||||
title: ""
|
||||
date: 2025-06-02T09:12:32.868Z
|
||||
version: 22.1.0
|
||||
title: ""
|
||||
date: 2025-06-09T20:05:08.020Z
|
||||
- commits:
|
||||
- subject: Remove `request` dependency
|
||||
hash: d47abf072ddf1f6529f3d4a14e07436def58df61
|
||||
|
18
CHANGELOG.md
18
CHANGELOG.md
@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file
|
||||
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## 22.1.1 - 2025-06-19
|
||||
|
||||
* Deploy: Limit the submitted error_message of images that fail to build to 1000 characters [Thodoris Greasidis]
|
||||
|
||||
## 22.1.0 - 2025-06-09
|
||||
|
||||
* Add support for node 22 [Otavio Jacobi]
|
||||
|
||||
<details>
|
||||
<summary> Bump etcher-sdk to v10.0.0 [Otavio Jacobi] </summary>
|
||||
|
||||
> ### etcher-sdk-10.0.0 - 2025-06-02
|
||||
>
|
||||
> * Drop support to node18 and add support to node 22 & 24 [Otavio Jacobi]
|
||||
>
|
||||
|
||||
</details>
|
||||
|
||||
## 22.0.6 - 2025-06-02
|
||||
|
||||
* Remove `request` dependency [myarmolinsky]
|
||||
|
@ -77,8 +77,8 @@ If you are a Node.js developer, you may wish to install the balena CLI via [npm]
|
||||
The npm installation involves building native (platform-specific) binary modules, which require
|
||||
some development tools to be installed first, as follows.
|
||||
|
||||
> **The balena CLI currently requires Node.js version ^20.6.0**
|
||||
> **Versions 21 and later are not yet fully supported.**
|
||||
> **The balena CLI currently requires Node.js version >=20.6.0**
|
||||
> **Versions 23 and later are not yet fully supported.**
|
||||
|
||||
### Install development tools
|
||||
|
||||
@ -88,7 +88,7 @@ some development tools to be installed first, as follows.
|
||||
$ sudo apt-get update && sudo apt-get -y install curl python3 git make g++
|
||||
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
|
||||
$ . ~/.bashrc
|
||||
$ nvm install 20
|
||||
$ nvm install 22
|
||||
```
|
||||
|
||||
The `curl` command line above uses
|
||||
@ -105,7 +105,7 @@ recommended.
|
||||
```sh
|
||||
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
|
||||
$ . ~/.bashrc
|
||||
$ nvm install 20
|
||||
$ nvm install 22
|
||||
```
|
||||
|
||||
#### **Windows** (not WSL)
|
||||
@ -113,7 +113,7 @@ $ nvm install 20
|
||||
Install:
|
||||
|
||||
* If you'd like the ability to switch between Node.js versions, install
|
||||
- Node.js v20 from the [Nodejs.org releases page](https://nodejs.org/en/download/releases/).
|
||||
- Node.js v22 from the [Nodejs.org releases page](https://nodejs.org/en/download/releases/).
|
||||
[nvm-windows](https://github.com/coreybutler/nvm-windows#node-version-manager-nvm-for-windows)
|
||||
instead.
|
||||
* The [MSYS2 shell](https://www.msys2.org/), which provides `git`, `make`, `g++` and more:
|
||||
|
798
npm-shrinkwrap.json
generated
798
npm-shrinkwrap.json
generated
File diff suppressed because it is too large
Load Diff
16
package.json
16
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "balena-cli",
|
||||
"version": "22.0.6",
|
||||
"version": "22.1.1",
|
||||
"description": "The official balena Command Line Interface",
|
||||
"main": "./build/app.js",
|
||||
"homepage": "https://github.com/balena-io/balena-cli",
|
||||
@ -72,7 +72,7 @@
|
||||
"author": "Balena Inc. (https://balena.io/)",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": "^20.6.0"
|
||||
"node": ">=20.6.0 <23"
|
||||
},
|
||||
"oclif": {
|
||||
"bin": "balena",
|
||||
@ -100,7 +100,7 @@
|
||||
"@types/chai-as-promised": "^7.1.4",
|
||||
"@types/cli-truncate": "^2.0.0",
|
||||
"@types/common-tags": "^1.8.1",
|
||||
"@types/dockerode": "3.3.23",
|
||||
"@types/dockerode": "3.3.41",
|
||||
"@types/ejs": "^3.1.0",
|
||||
"@types/express": "^4.17.13",
|
||||
"@types/fast-levenshtein": "^0.0.4",
|
||||
@ -170,7 +170,7 @@
|
||||
"@oclif/core": "^4.1.0",
|
||||
"@sentry/node": "^9.0.0",
|
||||
"balena-config-json": "^4.2.7",
|
||||
"balena-device-init": "^8.1.3",
|
||||
"balena-device-init": "^8.1.11",
|
||||
"balena-errors": "^4.7.3",
|
||||
"balena-image-fs": "^7.5.2",
|
||||
"balena-preload": "^18.0.4",
|
||||
@ -191,7 +191,7 @@
|
||||
"docker-progress": "^5.1.3",
|
||||
"dockerode": "^4.0.5",
|
||||
"ejs": "^3.1.6",
|
||||
"etcher-sdk": "^9.1.4",
|
||||
"etcher-sdk": "^10.0.0",
|
||||
"express": "^4.17.2",
|
||||
"fast-boot2": "^1.1.0",
|
||||
"fast-levenshtein": "^3.0.0",
|
||||
@ -219,8 +219,8 @@
|
||||
"prettyjson": "^1.2.5",
|
||||
"progress-stream": "^2.0.0",
|
||||
"reconfix": "^1.0.0-v0-1-0-fork-46760acff4d165f5238bfac5e464256ef1944476",
|
||||
"resin-cli-form": "^3.0.0",
|
||||
"resin-cli-visuals": "^2.0.1",
|
||||
"resin-cli-form": "^4.0.0",
|
||||
"resin-cli-visuals": "^3.0.0",
|
||||
"resin-doodles": "^0.2.0",
|
||||
"resin-stream-logger": "^0.1.2",
|
||||
"rimraf": "^3.0.2",
|
||||
@ -248,6 +248,6 @@
|
||||
}
|
||||
},
|
||||
"versionist": {
|
||||
"publishedAt": "2025-06-02T12:27:11.982Z"
|
||||
"publishedAt": "2025-06-19T09:32:53.877Z"
|
||||
}
|
||||
}
|
||||
|
@ -1322,6 +1322,9 @@ async function pushAndUpdateServiceImages(
|
||||
}
|
||||
}
|
||||
|
||||
// Error messages are limited to 300KB characters in the API, so we truncate longer ones.
|
||||
const MAX_ERROR_MESSAGE_LENGTH = 300_000;
|
||||
|
||||
async function pushServiceImages(
|
||||
docker: Dockerode,
|
||||
logger: Logger,
|
||||
@ -1344,23 +1347,34 @@ async function pushServiceImages(
|
||||
delete serviceImage.build_log;
|
||||
}
|
||||
|
||||
await releaseMod.updateImage(
|
||||
pineClient,
|
||||
serviceImage.id,
|
||||
// These are the only update-able image fields in bC atm, and passing
|
||||
// the whole image object in v7+ would result the allowlist to reject the request.
|
||||
_.pick(serviceImage, [
|
||||
'end_timestamp',
|
||||
'project_type',
|
||||
'error_message',
|
||||
'build_log',
|
||||
'push_timestamp',
|
||||
'status',
|
||||
'content_hash',
|
||||
'dockerfile',
|
||||
'image_size',
|
||||
]),
|
||||
);
|
||||
// These are the only update-able image fields in bC atm, and passing
|
||||
// the whole image object in v7+ would result the allowlist to reject the request.
|
||||
const imagePayload = _.pick(serviceImage, [
|
||||
'end_timestamp',
|
||||
'project_type',
|
||||
'error_message',
|
||||
'build_log',
|
||||
'push_timestamp',
|
||||
'status',
|
||||
'content_hash',
|
||||
'dockerfile',
|
||||
'image_size',
|
||||
]);
|
||||
|
||||
if (
|
||||
typeof imagePayload.error_message === 'string' &&
|
||||
imagePayload.error_message.length > MAX_ERROR_MESSAGE_LENGTH
|
||||
) {
|
||||
logger.logDebug(
|
||||
`Truncating error message of image ${serviceImage.is_stored_at__image_location} to ${MAX_ERROR_MESSAGE_LENGTH} characters.`,
|
||||
);
|
||||
imagePayload.error_message = imagePayload.error_message.substring(
|
||||
0,
|
||||
MAX_ERROR_MESSAGE_LENGTH,
|
||||
);
|
||||
}
|
||||
|
||||
await releaseMod.updateImage(pineClient, serviceImage.id, imagePayload);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
@ -41,23 +41,18 @@ export class BuilderMock extends NockMock {
|
||||
checkBuildRequestBody: (requestBody: string | Buffer) => Promise<void>;
|
||||
}) {
|
||||
this.optPost(/^\/v3\/build($|[(?])/, opts).reply(
|
||||
async function (uri, requestBody, callback) {
|
||||
let error: Error | null = null;
|
||||
try {
|
||||
await opts.checkURI(uri);
|
||||
if (typeof requestBody === 'string') {
|
||||
const gzipped = Buffer.from(requestBody, 'hex');
|
||||
const gunzipped = await gunzipAsync(gzipped);
|
||||
await opts.checkBuildRequestBody(gunzipped);
|
||||
} else {
|
||||
throw new Error(
|
||||
`unexpected requestBody type "${typeof requestBody}"`,
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
error = err;
|
||||
async function (uri, requestBody) {
|
||||
await opts.checkURI(uri);
|
||||
if (typeof requestBody === 'string') {
|
||||
const gzipped = Buffer.from(requestBody, 'hex');
|
||||
const gunzipped = await gunzipAsync(gzipped);
|
||||
await opts.checkBuildRequestBody(gunzipped);
|
||||
return [opts.responseCode, opts.responseBody];
|
||||
} else {
|
||||
throw new Error(
|
||||
`unexpected requestBody type "${typeof requestBody}"`,
|
||||
);
|
||||
}
|
||||
callback(error, [opts.responseCode, opts.responseBody]);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
@ -81,21 +81,14 @@ export class DockerMock extends NockMock {
|
||||
this.optPost(
|
||||
new RegExp(`^/build\\?(|.+&)${qs.stringify({ t: opts.tag })}&`),
|
||||
opts,
|
||||
).reply(async function (uri, requestBody, cb) {
|
||||
let error: Error | null = null;
|
||||
try {
|
||||
await opts.checkURI(uri);
|
||||
if (typeof requestBody === 'string') {
|
||||
await opts.checkBuildRequestBody(requestBody);
|
||||
} else {
|
||||
throw new Error(
|
||||
`unexpected requestBody type "${typeof requestBody}"`,
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
error = err;
|
||||
).reply(async function (uri, requestBody) {
|
||||
await opts.checkURI(uri);
|
||||
if (typeof requestBody === 'string') {
|
||||
await opts.checkBuildRequestBody(requestBody);
|
||||
return [opts.responseCode, opts.responseBody];
|
||||
} else {
|
||||
throw new Error(`unexpected requestBody type "${typeof requestBody}"`);
|
||||
}
|
||||
cb(error, [opts.responseCode, opts.responseBody]);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ describe('detectEncoding() function', function () {
|
||||
it('should correctly detect the encoding of a few selected files', async () => {
|
||||
const sampleBinary = [
|
||||
'drivelist/build/Release/drivelist.node',
|
||||
'mountutils/build/Release/MountUtils.node',
|
||||
'mountutils/prebuilds/linux-x64/mountutils.node',
|
||||
];
|
||||
const sampleText = [
|
||||
'node_modules/.bin/mocha',
|
||||
|
Reference in New Issue
Block a user