From e8a95e26f61eb934ae096b886bca78ac5b9f0dbf Mon Sep 17 00:00:00 2001 From: Xavier Michelon Date: Tue, 24 Sep 2024 12:54:04 +0200 Subject: [PATCH] feat(BRIDGE-207): failure to download or verify an update now fails silently. --- internal/bridge/updates.go | 12 ++++++++++++ internal/updater/updater.go | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/internal/bridge/updates.go b/internal/bridge/updates.go index edd17a42..eb1a55c4 100644 --- a/internal/bridge/updates.go +++ b/internal/bridge/updates.go @@ -21,6 +21,7 @@ import ( "context" "errors" + "github.com/ProtonMail/gluon/reporter" "github.com/ProtonMail/proton-bridge/v3/internal/events" "github.com/ProtonMail/proton-bridge/v3/internal/safe" "github.com/ProtonMail/proton-bridge/v3/internal/updater" @@ -115,6 +116,17 @@ func (bridge *Bridge) installUpdate(ctx context.Context, job installJob) { err := bridge.updater.InstallUpdate(ctx, bridge.api, job.version) switch { + case errors.Is(err, updater.ErrDownloadVerify): + // BRIDGE-207: if download or verification fails, we do not want to trigger a manual update. We report in the log and to Sentry + // and we fail silently. + log.WithError(err).Error("The update could not be installed, but we will fail silently") + if reporterErr := bridge.reporter.ReportMessageWithContext( + "Cannot download or verify update", + reporter.Context{"error": err}, + ); reporterErr != nil { + log.WithError(reporterErr).Error("Failed to report update error") + } + case errors.Is(err, updater.ErrUpdateAlreadyInstalled): log.Info("The update was already installed") diff --git a/internal/updater/updater.go b/internal/updater/updater.go index 521ee8e4..89438e99 100644 --- a/internal/updater/updater.go +++ b/internal/updater/updater.go @@ -101,7 +101,7 @@ func (u *Updater) InstallUpdate(ctx context.Context, downloader Downloader, upda update.Package+".sig", ) if err != nil { - return ErrDownloadVerify + return fmt.Errorf("%w: %w", ErrDownloadVerify, err) } if err := u.installer.InstallUpdate(update.Version, bytes.NewReader(b)); err != nil {