Skip to content
This repository has been archived by the owner on Oct 4, 2023. It is now read-only.

[C-838] Fix desktop update banner flow #1719

Merged
merged 3 commits into from
Sep 14, 2022
Merged

[C-838] Fix desktop update banner flow #1719

merged 3 commits into from
Sep 14, 2022

Conversation

raymondjacobson
Copy link
Member

@raymondjacobson raymondjacobson commented Aug 16, 2022

Description

Redid this PR from scratch. @sliptype / @Kyle-Shanks could use extra scrutiny here.

I think there are still two issues with the desktop update flow that prevent "web app" updates from working:

  1. we trigger an electron banner update and a web banner update at the same time
  2. we are using some state variable showWebUpdate to determine whether to show the web update banner, and i'm pretty sure that never gets set to true (it's showWebUpdateBanner), so #1 isn't actually an issue we observe

These changes are set up in a way such though that when we download the electron changes in the background, on restarting, the user will still get the full electron update.

Dragons

Is there anything the reviewer should be on the lookout for? Are there any dangerous changes?

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide repro instructions & any configuration.

Will test after merge to main via the staging desktop app

How will this change be monitored?

For features that are critical or could fail silently please describe the monitoring/alerting being added.

Feature Flags

Are all new features properly feature flagged? Describe added feature flags.

@audius-infra
Copy link
Collaborator

Preview this change https://demo.audius.co/rj-c-838

Copy link
Contributor

@sliptype sliptype left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kinda confused on how this is working. Doesn't this conditional conflict with the one we have in the handler? https://github.com/AudiusProject/audius-client/blob/main/packages/web/src/pages/App.js#L287

Are we losing the forced major version updates with this?

@raymondjacobson
Copy link
Member Author

Kinda confused on how this is working. Doesn't this conditional conflict with the one we have in the handler? https://github.com/AudiusProject/audius-client/blob/main/packages/web/src/pages/App.js#L287

Are we losing the forced major version updates with this?

Based on the code in this change--

If we are running 1.0.1 and 1.0.2 exists, electron will recognize an update, but because major and minor are the same, will not send an updateAvailable message to web. When quitting & restarting the app, the update will be installed. The separate webUpdateAvailable code will run though and trigger a patch version refresh update.

If we are running 1.0.1 and 1.1.0 exists, electron will recognize an update, and because minor version is different, it will send an updateAvailable message to web. Web will then see the updateAvailable and see semver.minor(currentVersion) < semver.minor(version) and pop up the message that forces an update.

@sliptype
Copy link
Contributor

Kinda confused on how this is working. Doesn't this conditional conflict with the one we have in the handler? https://github.com/AudiusProject/audius-client/blob/main/packages/web/src/pages/App.js#L287
Are we losing the forced major version updates with this?

Based on the code in this change--

If we are running 1.0.1 and 1.0.2 exists, electron will recognize an update, but because major and minor are the same, will not send an updateAvailable message to web. When quitting & restarting the app, the update will be installed. The separate webUpdateAvailable code will run though and trigger a patch version refresh update.

If we are running 1.0.1 and 1.1.0 exists, electron will recognize an update, and because minor version is different, it will send an updateAvailable message to web. Web will then see the updateAvailable and see semver.minor(currentVersion) < semver.minor(version) and pop up the message that forces an update.

But doesn't the handler in App.tsx already only show the banner if it's a minor or major version update? Won't auto-updater still download the patch version in the background anyway? Maybe I'm still not quite understanding, lets chat in our 1 on 1

@pull-request-size pull-request-size bot added size/M and removed size/S labels Sep 8, 2022
@raymondjacobson raymondjacobson changed the title [C-838] Avoid sending auto update when only patch [C-838] Fix desktop update banner flow Sep 8, 2022
@raymondjacobson
Copy link
Member Author

Kinda confused on how this is working. Doesn't this conditional conflict with the one we have in the handler? https://github.com/AudiusProject/audius-client/blob/main/packages/web/src/pages/App.js#L287
Are we losing the forced major version updates with this?

Based on the code in this change--
If we are running 1.0.1 and 1.0.2 exists, electron will recognize an update, but because major and minor are the same, will not send an updateAvailable message to web. When quitting & restarting the app, the update will be installed. The separate webUpdateAvailable code will run though and trigger a patch version refresh update.
If we are running 1.0.1 and 1.1.0 exists, electron will recognize an update, and because minor version is different, it will send an updateAvailable message to web. Web will then see the updateAvailable and see semver.minor(currentVersion) < semver.minor(version) and pop up the message that forces an update.

But doesn't the handler in App.tsx already only show the banner if it's a minor or major version update? Won't auto-updater still download the patch version in the background anyway? Maybe I'm still not quite understanding, lets chat in our 1 on 1

Redid this PR

@audius-infra
Copy link
Collaborator

Preview this change https://demo.audius.co/rj-c-838

Copy link
Contributor

@sliptype sliptype left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This mostly makes sense but we are still setting showWebUpdate to true:

this.setState({ showWebUpdate: true })

@raymondjacobson
Copy link
Member Author

This mostly makes sense but we are still setting showWebUpdate to true:

this.setState({ showWebUpdate: true })

Yeah great catch. That's how it was working before

@audius-infra
Copy link
Collaborator

Preview this change https://demo.audius.co/rj-c-838

Comment on lines -440 to -442
if (this.state.showUpdateAppBanner) {
this.dismissUpdateAppBanner()
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this no longer necessary because the app is going to restart on update and not show the banner after?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Basically there are two flows for upgrading desktop:

  • An update to entire electron app (you need a new chromium basically)
  • An update to just the static JS for the SPA
    KJ added the latter recently, which lets us basically not worry about showing a banner for the former and letting auto update on quit take care of that behind the scenes. There's still banner that shows that will get dismissed in the below method (acceptWebUpdate) but that's for the latter SPA refresh

@raymondjacobson raymondjacobson merged commit 24d9d3b into main Sep 14, 2022
@raymondjacobson raymondjacobson deleted the rj-c-838 branch September 14, 2022 23:39
audius-infra pushed a commit that referenced this pull request Sep 17, 2022
[3394a06] Fix infinite lineup fetch (#1940) Sebastian Klingler
[19381a3] [C-296] Persist stack history across bottom tabs (#1939) Dylan Jeffers
[6705cb5] [C-1118] Send tip -> send audio (#1937) nicoback2
[9c63ab7] [C-1023] [C-1039] Sync account entropy from webview and improve splashscreen (#1938) Sebastian Klingler
[e3d9cc4] [C-1064] Show "You're Offline" component on mobile (#1936) Andrew Mendelsohn
[16a8b96] [C-1113] Improve native render performance (#1935) Dylan Jeffers
[7f4ede3] Fix broken signup on web (#1934) Michael Piazza
[2373ae0] fix rewards claim (#1933) nicoback2
[54dcd64] [C-1107] Fix push to sign in when identity is down (#1931) Raymond Jacobson
[43222ee] [C-1091] Improve selector performance (#1932) Dylan Jeffers
[eee12c7] Add request pagination for favorites for the new table (#1850) Kyle Shanks
[5d43c12] upgrade sdk (#1929) nicoback2
[2fd28e4] [Reloaded] No more useDispatchWeb, messages C-1089 (#1927) nicoback2
[6fc8709] Merge pull request #1928 from AudiusProject/jn-exporter-default Johannes Naylor
[24d9d3b] [C-838] Fix desktop update banner flow (#1719) Raymond Jacobson
[aace104] remove console exporter and change default to undefined Johannes Naylor
[81e9a4d] Detach mobile reachability state from non existent webview C-938 (#1913) nicoback2
[9c6c067] Merge pull request #1878 from AudiusProject/jn-con-385 Johannes Naylor
[5f335bb] Update mobile readme install instructions (#1926) Dylan Jeffers
[8469883] [C-907] Fix react native push notifications (#1922) Raymond Jacobson
[543b013] Fix pull to refresh (#1925) Sebastian Klingler
[370088e] Fix issue with using `accountUser` handle (#1924) Sebastian Klingler
[5a496fa] fix more by artist lineup (#1921) nicoback2
[cab5181] downgrade node Johannes Naylor
[5602eab] pin deps Johannes Naylor
[7a95b3f] Fix infinite 404 (#1920) Sebastian Klingler
[8cdc9b9] [C-1060] Fix /check page (#1919) Raymond Jacobson
[375c5dd] [PAY-578] Fade in socials on mobile user screen (#1905) Reed
[2b1cc7f] Wait for libs before signing data (#1918) Sebastian Klingler
[d06e2c1] update env var Johannes Naylor
[5efd985] [C-1031] Improve profile expand section touch target (#1911) Dylan Jeffers
[f327636] [C-1053] Fix ios status color in dark/light modes (#1917) Dylan Jeffers
[7a167b6] [C-1050] Fix profile search crash (#1916) Dylan Jeffers
[32b8c82] [C-1057] Fix blank edit-profile screen (#1915) Dylan Jeffers
[406e6c0] no more useselector web (#1914) nicoback2
[98ed3f6] [C-1029] Fix pull-to-refresh (#1912) Dylan Jeffers
[7582351] Migrate useGetFirstOrTopSupporter (#1910) Sebastian Klingler
[b9e4e41] add env vars Johannes Naylor
[44060c1] remove telemetry Johannes Naylor
[53483ef] remove telemetry Johannes Naylor
[ae57626] remove telemetry Johannes Naylor
[0515567] more telemetry Johannes Naylor
[2da8c47] install Johannes Naylor
[379af75] Merge branch 'main' into jn-con-385 merge main Johannes Naylor
[d0deea6] changing things around Johannes Naylor
[22288b1] [C-1012] Remove web build from mobile build (#1907) Raymond Jacobson
[8572ee3] [C-1027] Improve bottom-bar perf (#1909) Dylan Jeffers
[a41d536] the goods Johannes Naylor
[128aa9b] move the instrumentation to the audiusBackend Johannes Naylor
[a27c976] Fix profile clearing (#1908) Dylan Jeffers
[75e6eec] Remove react-nil and NATIVE_NAVIGATION (#1906) Dylan Jeffers
[ebbb561] Update social features to use entity manager (#1853) Isaac Solo
[99952d1] [C-990] Nativefy oauth (#1885) Raymond Jacobson
[c149204] Fix failing CI init (#1904) Sebastian Klingler
[d436adb] [C-1009] Fix misaligned social icons (#1901) Dylan Jeffers
[d21d5d4] [C-1020] Remove web pushes (#1902) Dylan Jeffers
[600f673] [C-711] Change useSize to useMeasure in ProfileBio (#1903) Reed
[497da98] stuff Johannes Naylor
[7f4a144] try a bunch of things Johannes Naylor
[66995fa] Clean up some more instances of useSelectorWeb/useDispatchWeb (#1900) Sebastian Klingler
[3383135] Nativefy remixes screen (#1887) nicoback2
[8b0d1e5] Fix edit profile screen (#1899) Sebastian Klingler
[fb3c189] [C-996] Remove NATIVE_MOBILE references (#1895) Dylan Jeffers
[bb0a03e] Fix lineup state persisting across profile screens sliptype
[5150a58] [PAY-626] Change playlist+tip challenges copy and emoji (#1897) Reed
[e816c64] [PAY-625] Playlist challenge optimistic claiming (#1891) Reed
[f3c02b6] [C-892] Fix multiple menus open at once (#1889) Andrew Mendelsohn
[192c669] run setupTracing Johannes Naylor
[00f3951] add tracer Johannes Naylor
@AudiusProject AudiusProject deleted a comment from linear bot Sep 11, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants