Merge pull request #2404 from balena-io/2387-os-download-prod-suffix

os download: Assume '.prod' suffix by default for all balenaOS versions
This commit is contained in:
bulldozer-balena[bot] 2021-12-09 21:59:27 +00:00 committed by GitHub
commit cfcace4c99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 49 additions and 10 deletions

View File

@ -2309,9 +2309,11 @@ Examples:
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version 2.60.1+rev1
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version 2.60.1+rev1.dev
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version ^2.60.0
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version 2021.10.1
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version latest
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version default
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version menu
$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version menu-esr
### Arguments

View File

@ -56,9 +56,11 @@ export default class OsDownloadCmd extends Command {
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version 2.60.1+rev1',
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version 2.60.1+rev1.dev',
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version ^2.60.0',
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version 2021.10.1',
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version latest',
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version default',
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version menu',
'$ balena os download raspberrypi3 -o ../foo/bar/raspberry-pi.img --version menu-esr',
];
public static args = [
@ -96,6 +98,26 @@ export default class OsDownloadCmd extends Command {
OsDownloadCmd,
);
// balenaOS ESR versions require user authentication
if (options.version) {
const { isESR } = await import('balena-image-manager');
if (options.version === 'menu-esr' || isESR(options.version)) {
try {
await OsDownloadCmd.checkLoggedIn();
} catch (e) {
const { ExpectedError, NotLoggedInError } = await import(
'../../errors'
);
if (e instanceof NotLoggedInError) {
throw new ExpectedError(stripIndent`
${e.message}
User authentication is required to download balenaOS ESR versions.`);
}
throw e;
}
}
}
const { downloadOSImage } = await import('../../utils/cloud');
try {

View File

@ -199,14 +199,27 @@ async function resolveOSVersion(
deviceType: string,
version: string,
): Promise<string> {
if (!['menu', 'menu-esr'].includes(version)) {
if (version[0] === 'v') {
version = version.slice(1);
}
return version;
if (['menu', 'menu-esr'].includes(version)) {
return await selectOSVersionFromMenu(deviceType, version === 'menu-esr');
}
if (version[0] === 'v') {
version = version.slice(1);
}
// The version must end with either '.dev' or '.prod', as expected
// by `balena-image-manager` and the balena SDK. Note that something
// like '2.88.4.prod' is not valid semver (https://semver.org/),
// so we don't even attempt semver parsing here.
if (!version.endsWith('.dev') && !version.endsWith('.prod')) {
version += '.prod';
}
return version;
}
const vs = await getFormattedOsVersions(deviceType, version === 'menu-esr');
async function selectOSVersionFromMenu(
deviceType: string,
esr: boolean,
): Promise<string> {
const vs = await getFormattedOsVersions(deviceType, esr);
const choices = vs.map((v) => ({
value: v.rawVersion,

6
npm-shrinkwrap.json generated
View File

@ -3783,9 +3783,9 @@
}
},
"balena-image-manager": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/balena-image-manager/-/balena-image-manager-7.1.0.tgz",
"integrity": "sha512-W8Etn0PBQJUlTJ1m1rCuQQ8TTLdkBoNP2SRHQqez2HANQp+T38wFjQXVx9PhQ6J7eqOYuW87SkJiKLpnmlz79Q==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/balena-image-manager/-/balena-image-manager-7.1.1.tgz",
"integrity": "sha512-ny0BrjdK23RFKG0VDk6PceYMtiekyqJEoh91Q/JxjWwayoV+CUajQJYN9YE95i2Qp/iqI97Hlm1V5N4E1YHLEg==",
"requires": {
"balena-sdk": "^15.2.1",
"mime": "^2.4.6",

View File

@ -207,7 +207,7 @@
"balena-device-init": "^6.0.0",
"balena-errors": "^4.7.1",
"balena-image-fs": "^7.0.6",
"balena-image-manager": "^7.1.0",
"balena-image-manager": "^7.1.1",
"balena-preload": "^11.0.0",
"balena-release": "^3.2.0",
"balena-sdk": "^15.51.1",

View File

@ -22,4 +22,6 @@ declare module 'balena-image-manager' {
deviceType: string,
versionOrRange: string,
): Promise<NodeJS.ReadableStream & { mime: string }>;
export function isESR(version: string): boolean;
}