Racket v8.7 Release Thread

All I know about version/check is that it once gave me trouble when I had network issues :slight_smile: (I can't find the bug report I thought I'd written at the time, but here's the PR that fixed it: version/check: use https; actually enforce timeout; guard reading params by LiberalArtist · Pull Request #3713 · racket/racket · GitHub)

You inspired me to do a bit more Git sleuthing. From what I can see, it looks like the current code dates from 2005 (PLT Scheme v300), when it replaced some older code that also dealt with package versions (for PLaneT packages, I guess?) and other stuff: Removed old version code, new version is greatly simplified. · racket/racket@88bb2b3 · GitHub

The only use of check-version I know about is in:

which is supported by string constants from:

From all of that, it seems like, of the possible results from get-version, the `ok, `(newer ,version), and `(error ,message [,additional-info]) cases aren't affected at all by whether we use the alpha field at https://download.racket-lang.org/version.txt, and DrRacket doesn't distinguish the `(newer ,version ,alpha) case (meaning You have an old version, please upgrade to `version' you may consider also the alpha version) from the `(newer ,version) case.

That leaves only the `(ok-but ,version) case, meaning You have a fine stable version, but note that there is a newer alpha. Note that this is not the result you would get running 8.6.900 if 8.6.901 became available! DrRacket does have UI for this case, but it is used only when the Help|Check for Updates… menu item is explicitly invoked, never for automatic checks, even if the user has enabled them.

More broadly, the string constant, code, and documentation talks about a newer alpha-release, but that's not really a term we use outside of this library. (I don't know about the c. PLT Scheme v300 era.) I've been mentally translating it as "release candidate" (a.k.a. "pre-release"), but it could also conceivably mean "snapshot build" or something.

I haven't found the code that actually creates or updates the https://download.racket-lang.org/version.txt file, so I'm not sure how easy or difficult it would be to change things, if changes were wanted.


I don't have a strong opinion about this.

I can see it being mildly useful to be able to programmatically tell if there's a release candidate out. If https://download.racket-lang.org/version.txt answered that question, I would make the answer usable in Guix tooling—but I wouldn't change the status quo on my account! If that is indeed the functionality in question, it seems like there are other ways to get that information, maybe from https://pre-release.racket-lang.org/installers/table.rktd or by checking if a release branch exists.

One thing we definitely should not do is change https://download.racket-lang.org/version.txt to no longer list an alpha version at all (even if we continue to list a redundant one): that would cause errors in old versions of Racket.

Unless anyone has other thoughts, I'd be inclined to just document that check-version is not currently a reliable way to find out about "release candidate", "pre-release", or "snapshot" versions and leave the release process as-is.