diff --git a/dashboard/src/components/SystemUpdate.vue b/dashboard/src/components/SystemUpdate.vue index 4a0292b37..d9c542c80 100644 --- a/dashboard/src/components/SystemUpdate.vue +++ b/dashboard/src/components/SystemUpdate.vue @@ -64,6 +64,7 @@ const updateCheckError = ref({}); const checkingBusy = ref(false); const pendingUpdate = ref(null); const skipBackup = ref(false); +const lastTask = ref({}); const canUpdate = computed(() => { return apps.value.every(function (app) { @@ -103,7 +104,7 @@ async function refreshApps() { apps.value = result; } -async function refreshInfo() { +async function refreshPendingUpdateInfo() { const [error, result] = await updaterModel.getBoxUpdate(); if (error) return console.error(error); @@ -165,18 +166,21 @@ async function onShowUpdate() { updateDialog.value.open(); } -const lastTask = ref({}); async function waitForTask() { if (!lastTask.value.id) return; const [error, result] = await tasksModel.get(lastTask.value.id); - if (error) return console.error(error); + + if (error) { + setTimeout(waitForTask, 2000); + return console.error(error); + } lastTask.value = result; // task done, refresh menu if (!result.active) { - refreshInfo(); + refreshPendingUpdateInfo(); refreshTasks(); return; } @@ -198,6 +202,8 @@ async function refreshTasks() { }; }); + updateBusy.value = lastTask.value.active; + // if last task is currently active, start polling if (lastTask.value.active) waitForTask(); } @@ -229,7 +235,7 @@ async function onCheck() { return; } - await refreshInfo(); + await refreshPendingUpdateInfo(); checkingBusy.value = false; } @@ -255,7 +261,7 @@ onMounted(async () => { version.value = result.version; ubuntuVersion.value = result.ubuntuVersion; - await refreshInfo(); + await refreshPendingUpdateInfo(); await refreshAutoupdatePattern(); await refreshTasks(); }); @@ -285,7 +291,7 @@ onMounted(async () => { - +

{{ updateError.generic }}

@@ -374,4 +380,8 @@ onMounted(async () => { margin-bottom: 10px; } +.skip-backup { + padding-top: 10px; +} + diff --git a/src/updater.js b/src/updater.js index 466609072..381566ca3 100644 --- a/src/updater.js +++ b/src/updater.js @@ -187,7 +187,7 @@ async function updateBox(boxUpdateInfo, options, progressCallback) { await locks.wait(locks.TYPE_BOX_UPDATE); debug(`Updating box with ${boxUpdateInfo.sourceTarballUrl}`); - progressCallback({ percent: 70, message: 'Installing update' }); + progressCallback({ percent: 70, message: 'Installing update...' }); const [error] = await safe(shell.sudo([ UPDATE_CMD, packageInfo.file, process.stdout.logFile ], {})); // run installer.sh from new box code as a separate service if (error) await locks.release(locks.TYPE_BOX_UPDATE); @@ -252,9 +252,12 @@ async function notifyBoxUpdate() { const version = safe.fs.readFileSync(paths.VERSION_FILE, 'utf8'); if (version === constants.VERSION) return; + safe.fs.unlinkSync(paths.BOX_UPDATE_FILE); + if (!version) { await eventlog.add(eventlog.ACTION_INSTALL_FINISH, AuditSource.CRON, { version: constants.VERSION }); } else { + debug(`notifyBoxUpdate: update finished from ${version} to ${constants.VERSION}`); await eventlog.add(eventlog.ACTION_UPDATE_FINISH, AuditSource.CRON, { errorMessage: '', oldVersion: version || 'dev', newVersion: constants.VERSION }); await notifications.unpin(notifications.TYPE_BOX_UPDATE, { context: constants.VERSION }); const [error] = await safe(tasks.setCompletedByType(tasks.TASK_BOX_UPDATE, { error: null }));