@devicecloud.dev/dcd 4.4.0 → 4.4.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/dist/commands/cloud.js +4 -8
- package/dist/methods.js +23 -16
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
package/dist/commands/cloud.js
CHANGED
|
@@ -167,14 +167,10 @@ class Cloud extends core_1.Command {
|
|
|
167
167
|
debug,
|
|
168
168
|
logger: this.log.bind(this),
|
|
169
169
|
});
|
|
170
|
-
const
|
|
171
|
-
if (
|
|
172
|
-
this.
|
|
173
|
-
|
|
174
|
-
styling_1.colors.dim(`Maestro version ${resolvedMaestroVersion} is deprecated and will be removed on 27/03/2026. `) +
|
|
175
|
-
styling_1.colors.dim(`Please upgrade to a newer version. See: `) +
|
|
176
|
-
styling_1.colors.info('https://docs.devicecloud.dev/configuration/maestro-versions') + `\n` +
|
|
177
|
-
`${styling_1.dividers.light}\n`);
|
|
170
|
+
const REMOVED_MAESTRO_VERSIONS = ['1.39.2', '1.39.7', '2.0.3'];
|
|
171
|
+
if (REMOVED_MAESTRO_VERSIONS.includes(resolvedMaestroVersion)) {
|
|
172
|
+
this.error(`Maestro version ${resolvedMaestroVersion} is no longer supported. ` +
|
|
173
|
+
`Please upgrade to a newer version. See: https://docs.devicecloud.dev/configuration/maestro-versions`);
|
|
178
174
|
}
|
|
179
175
|
if (retry && retry > 2) {
|
|
180
176
|
this.log(styling_1.colors.warning('⚠') + ' ' + styling_1.colors.dim("Retries are now free of charge but limited to 2. If your test is still failing after 2 retries, please ask for help on Discord."));
|
package/dist/methods.js
CHANGED
|
@@ -326,15 +326,15 @@ async function uploadToSupabase(env, tempPath, file, debug) {
|
|
|
326
326
|
* @returns Upload result with success status and any error
|
|
327
327
|
*/
|
|
328
328
|
async function handleBackblazeUpload(config) {
|
|
329
|
-
const { b2, apiUrl, apiKey, finalPath, file, filePath, debug
|
|
329
|
+
const { b2, apiUrl, apiKey, finalPath, file, filePath, debug } = config;
|
|
330
330
|
if (!b2) {
|
|
331
|
-
if (debug
|
|
332
|
-
console.log('[DEBUG] Backblaze not configured,
|
|
331
|
+
if (debug) {
|
|
332
|
+
console.log('[DEBUG] Backblaze not configured, will fall back to Supabase');
|
|
333
333
|
}
|
|
334
334
|
return { error: null, success: false };
|
|
335
335
|
}
|
|
336
336
|
if (debug) {
|
|
337
|
-
console.log(
|
|
337
|
+
console.log('[DEBUG] Starting Backblaze upload (primary)...');
|
|
338
338
|
}
|
|
339
339
|
try {
|
|
340
340
|
const b2UploadStartTime = Date.now();
|
|
@@ -484,10 +484,7 @@ async function performUpload(config) {
|
|
|
484
484
|
// Extract app metadata
|
|
485
485
|
const metadata = await extractBinaryMetadata(filePath, debug);
|
|
486
486
|
const env = apiUrl === 'https://api.devicecloud.dev' ? 'prod' : 'dev';
|
|
487
|
-
// Upload to
|
|
488
|
-
const supabaseResult = await uploadToSupabase(env, tempPath, file, debug);
|
|
489
|
-
let lastError = supabaseResult.error;
|
|
490
|
-
// Upload to Backblaze
|
|
487
|
+
// Upload to Backblaze first (primary)
|
|
491
488
|
const backblazeResult = await handleBackblazeUpload({
|
|
492
489
|
apiKey,
|
|
493
490
|
apiUrl,
|
|
@@ -496,26 +493,36 @@ async function performUpload(config) {
|
|
|
496
493
|
file,
|
|
497
494
|
filePath,
|
|
498
495
|
finalPath,
|
|
499
|
-
supabaseSuccess: supabaseResult.success,
|
|
500
496
|
});
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
497
|
+
let lastError = backblazeResult.error;
|
|
498
|
+
// Only upload to Supabase if Backblaze failed
|
|
499
|
+
let supabaseResult = { error: null, success: false };
|
|
500
|
+
if (!backblazeResult.success) {
|
|
501
|
+
if (debug) {
|
|
502
|
+
console.log('[DEBUG] Backblaze upload failed, falling back to Supabase...');
|
|
503
|
+
}
|
|
504
|
+
supabaseResult = await uploadToSupabase(env, tempPath, file, debug);
|
|
505
|
+
if (!supabaseResult.success && supabaseResult.error) {
|
|
506
|
+
lastError = supabaseResult.error;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
else if (debug) {
|
|
510
|
+
console.log('[DEBUG] Backblaze upload succeeded, skipping Supabase upload');
|
|
504
511
|
}
|
|
505
512
|
// Validate results
|
|
506
513
|
validateUploadResults(supabaseResult.success, backblazeResult.success, lastError, b2, debug);
|
|
507
514
|
// Log upload summary
|
|
508
515
|
if (debug) {
|
|
509
|
-
const hasWarning =
|
|
510
|
-
console.log(`[DEBUG] Upload summary -
|
|
516
|
+
const hasWarning = supabaseResult.success && !backblazeResult.success;
|
|
517
|
+
console.log(`[DEBUG] Upload summary - Backblaze: ${backblazeResult.success ? '✓' : '✗'}, Supabase: ${supabaseResult.success ? '✓' : '✗ (fallback ' + (backblazeResult.success ? 'not needed' : 'attempted') + ')'}`);
|
|
511
518
|
console.log('[DEBUG] Finalizing upload...');
|
|
512
519
|
console.log(`[DEBUG] Target endpoint: ${apiUrl}/uploads/finaliseUpload`);
|
|
513
520
|
console.log(`[DEBUG] Uploaded to staging path: ${tempPath}`);
|
|
514
521
|
console.log(`[DEBUG] API will move to final path: ${finalPath}`);
|
|
515
|
-
console.log(`[DEBUG] Supabase upload status: ${supabaseResult.success ? 'SUCCESS' : 'FAILED'}`);
|
|
516
522
|
console.log(`[DEBUG] Backblaze upload status: ${backblazeResult.success ? 'SUCCESS' : 'FAILED'}`);
|
|
523
|
+
console.log(`[DEBUG] Supabase upload status: ${supabaseResult.success ? 'SUCCESS (fallback)' : backblazeResult.success ? 'SKIPPED' : 'FAILED'}`);
|
|
517
524
|
if (hasWarning)
|
|
518
|
-
console.log('[DEBUG] ⚠ Warning: File only exists in
|
|
525
|
+
console.log('[DEBUG] ⚠ Warning: File only exists in Supabase (Backblaze failed)');
|
|
519
526
|
}
|
|
520
527
|
// Finalize upload
|
|
521
528
|
const finalizeStartTime = Date.now();
|
package/oclif.manifest.json
CHANGED