Notify MSI and portable users when a newer release exists - #47
Merged
Conversation
An MSI or portable copy has no updater behind it, so the only way to learn a new version exists was to go looking. It now checks once a day and says so in the tab strip and in About, with a download link. A Microsoft Store install never checks: the Store already updates it. Reworked onto the release manifests that main now publishes. The branch wrote its own stable.json and dev.json as release assets from collect-release-assets.yml, carrying only a version, and read them from releases/latest/download. Two files with the same names, two schemas and two URLs is the drift a shared manifest exists to prevent, so the pipeline change is dropped and the client reads the manifests the download page and the winget submission already read. That also fixes the pre-release side, which could not have worked as written. releases/latest/download resolves only to the newest full release, so a dev.json published as a release asset is unreachable; the branch wrote one on every pre-release and never read it. Reading from the site makes it reachable, and the client now picks the file by channel: a released copy asks stable.json, a pre-release copy asks dev.json, which is the only one that can ever be ahead of it. The manifest parser needed no change. It deserializes a version property and ignores what it does not know, and the published manifests carry that property alongside the installer metadata the page and winget use. Versions still compare on major.minor.patch, with the -dev.<build> suffix ignored, which is what this branch's own tests assert. A pre-release copy is therefore told about the next version rather than about every rebuild of its own. site/privacy.html named github.com as the host contacted. It is now whiteboard.sqlbi.com, with github.com only as the fallback, and a privacy page naming the wrong host is worse than one saying nothing. Both requests are described. Verified: build clean, core smoke tests pass. Against the live site, both manifests return 200 with a version, and a second request carrying If-None-Match returns 304 - so the conditional GET this relies on works where it will actually run. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
marcosqlbi
force-pushed
the
feature/update-check
branch
from
August 20, 2026 14:13
5a36792 to
93f550c
Compare
marcosqlbi
added a commit
that referenced
this pull request
Aug 21, 2026
The privacy lede had become a summary of the whole page. That was the update-check work in #47: the facts belonged, the extra reassurance did not. This puts the two-sentence lede back (telemetry, then what the page is), keeps the version-check facts in shorter sentences, and names the hosts the client actually talks to. The home page now reads stable.json first, so the website section says that instead of claiming every download click hits api.github.com. The FAQ and changelog had the same drift: they still named GitHub as the check host, and they still said no stable release exists. Both are now false. The FAQ account answer now points at this site, and the changelog no-JS note no longer pretends 0.9.5 is not out. Home, Guide, Compare, Contribute, Shortcuts, and the import format are left alone. Home is the campaign, Guide is the session stories; the others were already in this voice.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
An MSI or portable copy has no updater behind it, so the only way to learn a new version exists was to go looking. It now checks once a day and says so in the tab strip and in About, with a download link. A Microsoft Store install never checks — the Store already updates it.
Reworked onto the shared release manifests
This branch originally wrote its own
stable.json/dev.jsonas release assets fromcollect-release-assets.yml, carrying only a version, and read them fromreleases/latest/download.mainhas since published manifests of the same names from the site, carrying full installer metadata, which the download page and the winget submission both read.Two files with the same names, two schemas and two URLs is exactly the drift a shared manifest exists to prevent. The pipeline change is dropped, and the client reads the manifests that already exist.
This also fixes the pre-release side, which could not have worked as written.
releases/latest/download/resolves only to the newest full release, so adev.jsonpublished as a release asset is unreachable — the branch wrote one on every pre-release and never read it. Serving it from the site makes it reachable, and the client now picks the file by channel: a released copy asksstable.json, a pre-release copy asksdev.json, which is the only one that can ever be ahead of it.The manifest parser needed no change: it deserializes a
versionproperty and ignores what it does not recognise, and the published manifests carry that property alongside the installer metadata.Kept as the branch had it
Versions compare on
major.minor.patch, with the-dev.<build>suffix ignored — this branch's own tests assert that. So a pre-release copy is told about the next version rather than about every rebuild of its own. Worth knowing, not worth changing here.Privacy copy corrected
site/privacy.htmlnamedgithub.comas the host contacted. It is nowwhiteboard.sqlbi.com, withgithub.comonly as the fallback. A privacy page naming the wrong host is worse than one saying nothing, so both requests are now described.Verification
Build clean, core smoke tests pass.
Against the live site: both manifests return 200 with a version (
stable.json→0.9.2,dev.json→0.9.3-dev.3237), and a second request carryingIf-None-Matchreturns 304 — so the conditional GET this depends on works where it will actually run, not just in principle.Not verified: the UI itself. The tab-strip and About notice need a run on Windows with a version older than the manifest reports.