Compare commits

...

18 Commits

Author SHA1 Message Date
7325c79888 v12.51.3 2021-11-16 19:10:36 +02:00
2a29b386eb Merge pull request #2375 from balena-io/missing-digest
deploy: Ensure the release fails if an image's digest (hash) is missing
2021-11-16 17:08:41 +00:00
23b07f8a41 deploy: Ensure the release fails if an image's digest (hash) is missing
Change-type: patch
2021-11-16 11:55:07 +00:00
6d641b4841 v12.51.2 2021-11-16 13:50:52 +02:00
7b498149b1 Merge pull request #2379 from balena-io/remove-node10-from-resinci.yml
Update balena CI configuration (remove Node v10 from npm pipeline list)
2021-11-16 11:49:36 +00:00
ae5ea0f4e8 Update balena CI configuration (remove Node v10 from npm pipeline list)
Change-type: patch
2021-11-15 23:51:15 +00:00
f635f648da v12.51.1 2021-10-25 20:54:12 +03:00
3d4e2cf823 Merge pull request #2256 from balena-io/forum-link
Fix forums support link in README.md
2021-10-25 17:52:15 +00:00
ef3b630887 v12.51.0 2021-10-22 22:13:44 +03:00
19040ccb6c Merge pull request #2367 from balena-io/support-for-fragments
Add support for YAML anchors and aliases in 'docker-compose.yml'
2021-10-22 19:11:47 +00:00
8e712ac910 Add support for YAML anchors and aliases in 'docker-compose.yml'
This allows project files to define services from generic fragments by leveraging YAML's anchors and aliases. See here for an example: 43f6537b2c/spec.md (fragments)

Removing the FAILSAFE_SCHEMA flag is not expected to break existing project files, since the default behaviour is more liberal, or cause problems down the road given we perform validation immediately after. Docs for the flag: https://github.com/nodeca/js-yaml#load-string---options-

Change-type: minor
2021-10-22 16:42:29 +03:00
c401ed35ac v12.50.3 2021-10-20 19:33:37 +03:00
94be97313b Merge pull request #2359 from balena-io/klutchell/preload-11
preload: Avoid possible ValueError when parsing storage driver
2021-10-20 16:31:34 +00:00
48053ecefc preload: Avoid possible ValueError when parsing storage driver
Update balena-preload from 10.5.0 to 11.0.0

Change-type: patch
Signed-off-by: Kyle Harding <kyle@balena.io>
2021-10-15 09:44:27 -04:00
cc60e86507 v12.50.2 2021-10-05 13:32:02 +03:00
bd774e8553 Merge pull request #2357 from balena-io/fix-fleet-rename-error-message
Error message when renaming a fleet now mentions the target name.
2021-10-05 10:27:51 +00:00
c493c33e38 Error message when renaming a fleet now mentions the target name.
Change-type: patch
Signed-off-by: Carlo Miguel F. Cruz <carloc@balena.io>
2021-10-05 17:01:07 +08:00
112a7b8194 Fix forums support link in README.md
Change-type: patch
Signed-off-by: Scott Lowe <scott@balena.io>
2021-04-21 06:57:28 +00:00
13 changed files with 325 additions and 119 deletions

View File

@ -3,5 +3,8 @@ module.exports = {
require: 'ts-node/register/transpile-only',
file: './tests/config-tests',
timeout: 12000,
// To test only, say, 'push.spec.ts', do it as follows so that
// requests are authenticated:
// spec: ['tests/auth/*.spec.ts', 'tests/**/deploy.spec.ts'],
spec: 'tests/**/*.spec.ts',
};

View File

@ -5,13 +5,11 @@ npm:
os: ubuntu
architecture: x86_64
node_versions:
- "10"
- "12"
- "14"
- name: linux
os: alpine
architecture: x86_64
node_versions:
- "10"
- "12"
- "14"

View File

@ -1,3 +1,165 @@
- commits:
- subject: 'deploy: Ensure the release fails if an image''s digest (hash) is missing'
hash: 23b07f8a41c82c0b23a38bac55cbd3874300dd58
body: ''
footer:
Change-type: patch
change-type: patch
author: Paulo Castro
nested: []
version: 12.51.3
date: 2021-11-16T11:58:31.895Z
- commits:
- subject: Update balena CI configuration (remove Node v10 from npm pipeline list)
hash: ae5ea0f4e85008624ff46fe10998fadbd8a48b15
body: ''
footer:
Change-type: patch
change-type: patch
author: Paulo Castro
nested: []
version: 12.51.2
date: 2021-11-16T00:07:56.053Z
- commits:
- subject: Fix forums support link in README.md
hash: 112a7b8194d098e9c66754eb256590e13f54fe29
body: ''
footer:
Change-type: patch
change-type: patch
Signed-off-by: Scott Lowe <scott@balena.io>
signed-off-by: Scott Lowe <scott@balena.io>
author: Scott Lowe
nested: []
version: 12.51.1
date: 2021-10-25T17:29:36.975Z
- commits:
- subject: Add support for YAML anchors and aliases in 'docker-compose.yml'
hash: 8e712ac91055c4efde885854488000a27c6b483d
body: >
This allows project files to define services from generic fragments by
leveraging YAML's anchors and aliases. See here for an example:
https://github.com/compose-spec/compose-spec/blob/43f6537b2c8f01b6d3f0e184d13a0f3cb93d38d7/spec.md#fragments
Removing the FAILSAFE_SCHEMA flag is not expected to break existing
project files, since the default behaviour is more liberal, or cause
problems down the road given we perform validation immediately after.
Docs for the flag:
https://github.com/nodeca/js-yaml#load-string---options-
footer:
Change-type: minor
change-type: minor
author: dfunckt
nested: []
version: 12.51.0
date: 2021-10-22T16:50:50.004Z
- commits:
- subject: 'preload: Avoid possible ValueError when parsing storage driver'
hash: 48053ecefc00e451f3ee5c9b82b2b398978ec229
body: |
Update balena-preload from 10.5.0 to 11.0.0
footer:
Change-type: patch
change-type: patch
Signed-off-by: Kyle Harding <kyle@balena.io>
signed-off-by: Kyle Harding <kyle@balena.io>
author: Kyle Harding
nested:
- commits:
- subject: Avoid creating multiple preload containers
hash: 6b5b6428833ce2cd5c53c2051d6f515f1b3e4c37
body: |
This was only caught when we started correctly naming
the preload container by switching from `Name` to `name` in
our createContainer options.
Previously we were creating two containers but they had unique
random names so we never saw the conflict.
footer:
Change-type: patch
change-type: patch
Signed-off-by: Kyle Harding <kyle@balena.io>
signed-off-by: Kyle Harding <kyle@balena.io>
author: Kyle Harding
nested: []
- subject: 'major: Remove balena-preload script in favor of use with CLI'
hash: 7de06434155913b199024683e62c85e94f1d1cb1
body: ''
footer:
Signed-off-by: >-
Lorenzo Alberto Maria Ambrosi
<lorenzothunder.ambrosi@gmail.com>
signed-off-by: >-
Lorenzo Alberto Maria Ambrosi
<lorenzothunder.ambrosi@gmail.com>
author: Lorenzo Alberto Maria Ambrosi
nested: []
- subject: Fix missing 'await' for getEdisonPartitions()
hash: 9a2ebfdb2a5375304ee5cf2ba6321b93f93886ed
body: ''
footer:
Change-type: patch
change-type: patch
author: Paulo Castro
nested: []
- subject: Add extra type information (refactor bind mount array)
hash: 5b8d21e68d9da902f7304a210cb1abe22420d1d0
body: ''
footer:
Change-type: patch
change-type: patch
author: Paulo Castro
nested: []
- subject: Run linter
hash: 456c727e6518317588b31e28ffb734377fb85e76
body: ''
footer:
Change-type: patch
change-type: patch
author: Paulo Castro
nested: []
- subject: 'major: Convert to typescript'
hash: ce241be0a780bdff87f4513e4d5a0ec63d72ac7e
body: ''
footer:
Signed-off-by: >-
Lorenzo Alberto Maria Ambrosi
<lorenzothunder.ambrosi@gmail.com>
signed-off-by: >-
Lorenzo Alberto Maria Ambrosi
<lorenzothunder.ambrosi@gmail.com>
author: Lorenzo Alberto Maria Ambrosi
nested: []
- subject: 'patch: Fix incorrect python List index check'
hash: 85d404000ac6e9b4ac83ce1feed33789deca182b
body: ''
footer:
Signed-off-by: >-
Lorenzo Alberto Maria Ambrosi
<lorenzothunder.ambrosi@gmail.com>
signed-off-by: >-
Lorenzo Alberto Maria Ambrosi
<lorenzothunder.ambrosi@gmail.com>
author: Lorenzo Alberto Maria Ambrosi
nested: []
version: balena-preload-11.0.0
date: 2021-10-13T18:20:43.867Z
version: 12.50.3
date: 2021-10-20T15:30:14.694Z
- commits:
- subject: Error message when renaming a fleet now mentions the target name.
hash: c493c33e3896784ee60c9d4ac79721ca6b96a778
body: ''
footer:
Change-type: patch
change-type: patch
Signed-off-by: Carlo Miguel F. Cruz <carloc@balena.io>
signed-off-by: Carlo Miguel F. Cruz <carloc@balena.io>
author: Carlo Miguel F. Cruz
nested: []
version: 12.50.2
date: 2021-10-05T09:04:40.995Z
- commits:
- subject: Update dependencies (@sentry/node error reporting)
hash: 08dfc945f3ed1c518a7d1830a5a37d72fd5739fd

View File

@ -4,6 +4,44 @@ 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/).
## 12.51.3 - 2021-11-16
* deploy: Ensure the release fails if an image's digest (hash) is missing [Paulo Castro]
## 12.51.2 - 2021-11-16
* Update balena CI configuration (remove Node v10 from npm pipeline list) [Paulo Castro]
## 12.51.1 - 2021-10-25
* Fix forums support link in README.md [Scott Lowe]
## 12.51.0 - 2021-10-22
* Add support for YAML anchors and aliases in 'docker-compose.yml' [dfunckt]
## 12.50.3 - 2021-10-20
<details>
<summary> preload: Avoid possible ValueError when parsing storage driver [Kyle Harding] </summary>
> ### balena-preload-11.0.0 - 2021-10-13
>
> * Avoid creating multiple preload containers [Kyle Harding]
> * major: Remove balena-preload script in favor of use with CLI [Lorenzo Alberto Maria Ambrosi]
> * Fix missing 'await' for getEdisonPartitions() [Paulo Castro]
> * Add extra type information (refactor bind mount array) [Paulo Castro]
> * Run linter [Paulo Castro]
> * major: Convert to typescript [Lorenzo Alberto Maria Ambrosi]
> * patch: Fix incorrect python List index check [Lorenzo Alberto Maria Ambrosi]
>
</details>
## 12.50.2 - 2021-10-05
* Error message when renaming a fleet now mentions the target name. [Carlo Miguel F. Cruz]
## 12.50.1 - 2021-09-30
* Update dependencies (@sentry/node error reporting) [Paulo Castro]

View File

@ -144,7 +144,7 @@ To learn more, troubleshoot issues, or to contact us for support:
* Check the [masterclass tutorials](https://www.balena.io/docs/learn/more/masterclasses/overview/)
* Check our [FAQ / troubleshooting document](https://github.com/balena-io/balena-cli/blob/master/TROUBLESHOOTING.md)
* Ask us a question through the [balenaCloud forum](https://forums.balena.io/c/balena-cloud)
* Ask us a question in the [balena forums](https://forums.balena.io/c/product-support)
For CLI bug reports or feature requests, check the
[CLI GitHub issues](https://github.com/balena-io/balena-cli/issues/).

View File

@ -132,7 +132,7 @@ To learn more, troubleshoot issues, or to contact us for support:
* Check the [masterclass tutorials](https://www.balena.io/docs/learn/more/masterclasses/overview/)
* Check our [FAQ / troubleshooting document](https://github.com/balena-io/balena-cli/blob/master/TROUBLESHOOTING.md)
* Ask us a question through the [balenaCloud forum](https://forums.balena.io/c/balena-cloud)
* Ask us a question in the [balena forums](https://forums.balena.io/c/product-support)
For CLI bug reports or feature requests, check the
[CLI GitHub issues](https://github.com/balena-io/balena-cli/issues/).

View File

@ -120,7 +120,7 @@ export class FleetRenameCmd extends Command {
} catch (e) {
// BalenaRequestError: Request error: "organization" and "app_name" must be unique.
if ((e.message || '').toLowerCase().includes('unique')) {
throw new ExpectedError(`Error: fleet ${params.fleet} already exists.`);
throw new ExpectedError(`Error: fleet ${newName} already exists.`);
}
throw e;
}

View File

@ -63,9 +63,7 @@ export function createProject(
const compose = require('resin-compose-parse');
// both methods below may throw.
const rawComposition = yml.load(composeStr, {
schema: yml.FAILSAFE_SCHEMA,
});
const rawComposition = yml.load(composeStr);
const composition = compose.normalize(rawComposition);
projectName ||= path.basename(composePath);
@ -356,76 +354,6 @@ export const authorizePush = function (
.catch(() => '');
};
/**
* @param {import('dockerode')} docker
* @param {string} token
* @param {Array<import('./compose-types').TaggedImage>} images
* @param {(serviceImage: import('balena-release/build/models').ImageModel, props: object) => void} afterEach
*/
export const pushAndUpdateServiceImages = function (
docker,
token,
images,
afterEach,
) {
const { DockerProgress } = require('docker-progress');
const { retry } = require('./helpers');
const tty = require('./tty')(process.stdout);
const Bluebird = require('bluebird');
const opts = { authconfig: { registrytoken: token } };
const progress = new DockerProgress({ docker });
const renderer = pushProgressRenderer(
tty,
getChalk().blue('[Push]') + ' ',
);
const reporters = progress.aggregateProgress(images.length, renderer);
return Bluebird.using(tty.cursorHidden(), () =>
Promise.all(
images.map(({ serviceImage, localImage, props, logs }, index) =>
Promise.all([
localImage.inspect().then((img) => img.Size),
retry({
// @ts-ignore
func: () => progress.push(localImage.name, reporters[index], opts),
maxAttempts: 3, // try calling func 3 times (max)
// @ts-ignore
label: localImage.name, // label for retry log messages
initialDelayMs: 2000, // wait 2 seconds before the 1st retry
backoffScaler: 1.4, // wait multiplier for each retry
}).finally(renderer.end),
])
.then(
/** @type {([number, string]) => void} */
function ([size, digest]) {
serviceImage.image_size = size;
serviceImage.content_hash = digest;
serviceImage.build_log = logs;
serviceImage.dockerfile = props.dockerfile;
serviceImage.project_type = props.projectType;
if (props.startTime) {
serviceImage.start_timestamp = props.startTime;
}
if (props.endTime) {
serviceImage.end_timestamp = props.endTime;
}
serviceImage.push_timestamp = new Date();
serviceImage.status = 'success';
},
)
.catch(function (e) {
serviceImage.error_message = '' + e;
serviceImage.status = 'failed';
throw e;
})
.finally(() => afterEach?.(serviceImage, props)),
),
),
);
};
// utilities
const renderProgressBar = function (percentage, stepCount) {
@ -437,7 +365,7 @@ const renderProgressBar = function (percentage, stepCount) {
return `${bar} ${_.padStart(percentage, 3)}%`;
};
var pushProgressRenderer = function (tty, prefix) {
export const pushProgressRenderer = function (tty, prefix) {
const fn = function (e) {
const { error, percentage } = e;
if (error != null) {

View File

@ -1306,15 +1306,101 @@ async function getTokenForPreviousRepos(
return token;
}
async function pushAndUpdateServiceImages(
docker: Dockerode,
token: string,
images: TaggedImage[],
afterEach: (
serviceImage: import('balena-release/build/models').ImageModel,
props: object,
) => void,
) {
const { DockerProgress } = await import('docker-progress');
const { retry } = await import('./helpers');
const { pushProgressRenderer } = await import('./compose');
const tty = (await import('./tty'))(process.stdout);
const opts = { authconfig: { registrytoken: token } };
const progress = new DockerProgress({ docker });
const renderer = pushProgressRenderer(
tty,
getChalk().blue('[Push]') + ' ',
);
const reporters = progress.aggregateProgress(images.length, renderer);
const pushImage = async (
localImage: Dockerode.Image,
index: number,
): Promise<string> => {
try {
// TODO 'localImage as any': find out exactly why tsc warns about
// 'name' that exists as a matter of fact, with a value similar to:
// "name": "registry2.balena-cloud.com/v2/aa27790dff571ec7d2b4fbcf3d4648d5:latest"
const imgName: string = (localImage as any).name || '';
const imageDigest: string = await retry({
func: () => progress.push(imgName, reporters[index], opts),
maxAttempts: 3, // try calling func 3 times (max)
label: imgName, // label for retry log messages
initialDelayMs: 2000, // wait 2 seconds before the 1st retry
backoffScaler: 1.4, // wait multiplier for each retry
});
if (!imageDigest) {
throw new ExpectedError(stripIndent`\
Unable to extract image digest (content hash) from image upload progress stream for image:
${imgName}`);
}
return imageDigest;
} finally {
renderer.end();
}
};
const inspectAndPushImage = async (
{ serviceImage, localImage, props, logs }: TaggedImage,
index: number,
) => {
try {
const [imgInfo, imgDigest] = await Promise.all([
localImage.inspect(),
pushImage(localImage, index),
]);
serviceImage.image_size = imgInfo.Size;
serviceImage.content_hash = imgDigest;
serviceImage.build_log = logs;
serviceImage.dockerfile = props.dockerfile;
serviceImage.project_type = props.projectType;
if (props.startTime) {
serviceImage.start_timestamp = props.startTime;
}
if (props.endTime) {
serviceImage.end_timestamp = props.endTime;
}
serviceImage.push_timestamp = new Date();
serviceImage.status = 'success';
} catch (error) {
serviceImage.error_message = '' + error;
serviceImage.status = 'failed';
throw error;
} finally {
await afterEach(serviceImage, props);
}
};
tty.hideCursor();
try {
await Promise.all(images.map(inspectAndPushImage));
} finally {
tty.showCursor();
}
}
async function pushServiceImages(
docker: import('dockerode'),
docker: Dockerode,
logger: Logger,
pineClient: ReturnType<typeof import('balena-release').createClient>,
taggedImages: TaggedImage[],
token: string,
skipLogUpload: boolean,
): Promise<void> {
const { pushAndUpdateServiceImages } = await import('./compose');
const releaseMod = await import('balena-release');
logger.logInfo('Pushing images to registry...');
await pushAndUpdateServiceImages(
@ -1337,7 +1423,7 @@ async function pushServiceImages(
const PLAIN_SEMVER_REGEX = /^([0-9]+)\.([0-9]+)\.([0-9]+)$/;
export async function deployProject(
docker: import('dockerode'),
docker: Dockerode,
logger: Logger,
composition: Composition,
images: BuiltImage[],

View File

@ -1,3 +1,20 @@
/**
* @license
* Copyright 2018-2021 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.
*/
const windowSize: { width?: number; height?: number } = {};
const updateWindowSize = () => {
@ -29,13 +46,6 @@ export = (stream: NodeJS.WriteStream = process.stdout) => {
const cursorDown = (rows: number = 0) => stream.write(`\u001B[${rows}B`);
const cursorHidden = () => {
const Bluebird = require('bluebird') as typeof import('bluebird');
return Bluebird.try(hideCursor).disposer(() => {
showCursor();
});
};
const write = (str: string) => stream.write(str);
const writeLine = (str: string) => stream.write(`${str}\n`);
@ -54,7 +64,6 @@ export = (stream: NodeJS.WriteStream = process.stdout) => {
currentWindowSize,
hideCursor,
showCursor,
cursorHidden,
cursorUp,
cursorDown,
write,

33
npm-shrinkwrap.json generated
View File

@ -1,6 +1,6 @@
{
"name": "balena-cli",
"version": "12.50.1",
"version": "12.51.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -3814,9 +3814,9 @@
}
},
"balena-preload": {
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/balena-preload/-/balena-preload-10.5.0.tgz",
"integrity": "sha512-tgnTyOSOLB3HxIqlR1NFrTsy1eiiew5Vzmplb82/eZc/vJTrOqal2tFNn6aFay6UQ8+OASUJwANC99zBu1e8mQ==",
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/balena-preload/-/balena-preload-11.0.0.tgz",
"integrity": "sha512-2LuPTw6LoVxuasGhn+cLyA5n7kjvwBtQmBsg08KNhcbEpWLkzrV5jhpNxlMPUuoC2xcMv5Rcg6FWbY87QV5zYQ==",
"requires": {
"archiver": "^3.1.1",
"balena-sdk": "^15.44.0",
@ -3828,6 +3828,7 @@
"get-port": "^3.2.0",
"lodash": "^4.17.21",
"node-cleanup": "^2.1.2",
"request": "^2.88.2",
"request-promise": "^4.2.6",
"resin-cli-visuals": "^1.8.0",
"tar-fs": "^2.1.1",
@ -3885,11 +3886,6 @@
"readable-stream": "^3.4.0"
}
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@ -3900,14 +3896,6 @@
"util-deprecate": "^1.0.1"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"requires": {
"lru-cache": "^6.0.0"
}
},
"tar-fs": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
@ -3933,11 +3921,6 @@
}
}
},
"tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
},
"zip-stream": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz",
@ -4243,9 +4226,9 @@
"dev": true
},
"big-integer": {
"version": "1.6.48",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
"integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w=="
"version": "1.6.50",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz",
"integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ=="
},
"big.js": {
"version": "5.2.2",

View File

@ -1,6 +1,6 @@
{
"name": "balena-cli",
"version": "12.50.1",
"version": "12.51.3",
"description": "The official balena Command Line Interface",
"main": "./build/app.js",
"homepage": "https://github.com/balena-io/balena-cli",
@ -206,7 +206,7 @@
"balena-errors": "^4.7.1",
"balena-image-fs": "^7.0.6",
"balena-image-manager": "^7.0.3",
"balena-preload": "^10.5.0",
"balena-preload": "^11.0.0",
"balena-release": "^3.2.0",
"balena-sdk": "^15.51.1",
"balena-semver": "^2.3.0",
@ -289,6 +289,6 @@
"windosu": "^0.3.0"
},
"versionist": {
"publishedAt": "2021-09-30T00:16:32.621Z"
"publishedAt": "2021-11-16T11:58:32.258Z"
}
}

View File

@ -74,7 +74,6 @@ describe('detectEncoding() function', function () {
'node_modules/.bin/gulp',
'node_modules/.bin/tsc',
'node_modules/.bin/balena-lint',
'node_modules/.bin/balena-preload',
'node_modules/.bin/catch-uncommitted',
];