-
Notifications
You must be signed in to change notification settings - Fork 8.3k
[release/v7.4.15] Delay update notification for one week to ensure all packages become available #27229
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[release/v7.4.15] Delay update notification for one week to ensure all packages become available #27229
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -28,6 +28,9 @@ internal static class UpdatesNotification | |
| private const string StableBuildInfoURL = "https://aka.ms/pwsh-buildinfo-stable"; | ||
| private const string PreviewBuildInfoURL = "https://aka.ms/pwsh-buildinfo-preview"; | ||
|
|
||
| private const int NotificationDelayDays = 7; | ||
| private const int UpdateCheckBackoffDays = 7; | ||
|
|
||
| /// <summary> | ||
| /// The version of new update is persisted using a file, not as the file content, but instead baked in the file name in the following template: | ||
| /// `update{notification-type}_{version}_{publish-date}` -- held by 's_updateFileNameTemplate', | ||
|
|
@@ -89,9 +92,18 @@ internal static void ShowUpdateNotification(PSHostUserInterface hostUI) | |
| if (TryParseUpdateFile( | ||
| updateFilePath: out _, | ||
| out SemanticVersion lastUpdateVersion, | ||
| lastUpdateDate: out _) | ||
| out DateTime lastUpdateDate) | ||
| && lastUpdateVersion != null) | ||
| { | ||
| DateTime today = DateTime.UtcNow; | ||
| if ((today - lastUpdateDate).TotalDays < NotificationDelayDays) | ||
| { | ||
| // The update was out less than 1 week ago and it's possible the packages are still rolling out. | ||
| // We only show the notification when the update is at least 1 week old, to reduce the chance that | ||
| // users see the notification but cannot get the new update when they try to install it. | ||
| return; | ||
| } | ||
|
|
||
| string releaseTag = lastUpdateVersion.ToString(); | ||
|
Comment on lines
+98
to
107
|
||
| string notificationMsgTemplate = s_notificationType == NotificationType.LTS | ||
| ? ManagedEntranceStrings.LTSUpdateNotificationMessage | ||
|
|
@@ -169,7 +181,7 @@ internal static async Task CheckForUpdates() | |
| out DateTime lastUpdateDate); | ||
|
|
||
| DateTime today = DateTime.UtcNow; | ||
| if (parseSuccess && updateFilePath != null && (today - lastUpdateDate).TotalDays < 7) | ||
| if (parseSuccess && updateFilePath != null && (today - lastUpdateDate).TotalDays < UpdateCheckBackoffDays) | ||
| { | ||
| // There is an existing update file, and the last update was less than 1 week ago. | ||
| // It's unlikely a new version is released within 1 week, so we can skip this check. | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lastUpdateDatecomes fromTryParseUpdateFile()which parses a date-only string usingDateTimeStyles.AssumeLocal, but this comparison usesDateTime.UtcNow. That mixes local and UTC day boundaries and can shift the effective delay by up to ~1 day depending on the user's timezone. Consider comparing using a consistent basis (e.g., compareDateTime.TodaytolastUpdateDate.Date, or parse/normalizelastUpdateDateas UTC and compare toUtcNow.Date).