When, exactly, is a Julia version released, and how can I tell?

As Oscar alluded to, there are a number of steps in the process. The process starts with the tag and ends with the announcement, but there’s plenty of stuff that happens in between (including that the people who work on these things also have day jobs :grinning_face_with_smiling_eyes:). This one actually came together quicker than usual.

The process is:

  1. VERSION gets updated on the release branch via PR
  2. A tag is made based on the release branch once that’s merged
  3. The buildbot infrastructure generates and GPG signs tarballs
  4. Download those and create a GitHub release based on the tag with the tarballs as release artifacts
  5. Submit the tag SHA to the buildbots to build binaries for most platforms
  6. Someone has to manually turn on the musl buildbot, job gets submitted there
  7. For Julia 1.7+, someone has to manually build the macOS M1 binary
  8. The macOS binaries are submitted to Apple for notarization
  9. All of the binaries get put into the right places with the right names and permissions in AWS S3
  10. The binaries are downloaded locally to compute the checksums, then the checksums are uploaded to S3
  11. A GitHub Actions CI run is submitted to regenerate the JSON file of versions
  12. The website is updated via PR
  13. An announcement is made on Discourse

Depending on the current size of the buildbot queue, step 5 in particular can take a pretty long time. Aside from human bandwidth, that’s often the largest limiting factor. None of the others is exactly instantaneous either though.

Regarding the JSON file, as far as I know, the claim that it’s updated every 24 hours is outdated; I believe it is now only updated manually. (Is that right, @SaschaMann?) If I recall, we did that because there were cases where an automated run happened before a particular component was ready, e.g. between when the raw macOS dmg made it into S3 and when a notarized version of it was uploaded, which would then record the wrong checksum in the JSON file. Something like that, anyway.

When I do the release announcements on Discourse, if the CI run that regenerates that JSON file hasn’t completed by the time the post is ready, I link to the in-progress CI log. That’s the one you may occasionally see linked to “soon” when I say “and (soon) GitHub Actions” when talking about the availability of the released version on CI providers.

Perhaps not the answer you’re hoping for, but from my perspective as one who does a non-insignificant number of the aforementioned steps of the process, a release is really only ready for general use once it’s announced on Discourse. That’s the only way to guarantee that the process as laid out has been completed, that binaries are ready for use, and that users who want to grab the new version and go will have an experience that we feel good about.

24 Likes