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 }));