TLDR:
- Problem: there is no way to register a pre-release of a package, which causes too much friction for potential early testers
- Goal: the general registry should allow pre-release candidates along the specification of SemVer 2.0 (e.g.,
-alpha
,-beta
,-rc
with integer suffix for multiple pre-releases) - Why?: a lower-friction pre-release workflow will encourage more users to participate in early testing of libraries
I think that pre-releases ought to be tracked by the registry. There have been various other discussions on this (e.g., 1, 2) though they are a bit outdated.
Here is my current situation:
- I want some users to be able to test out the latest version of SymbolicRegression.jl and PySR before they are released to the broader community. (these are on branches at the moment)
- That version of SR depends on multiple packages (DynamicExpressions.jl, DynamicDiff.jl, BorrowChecker.jl) which are also in an experimental phase.
A workaround could be to tell people to run something like
pkg> add SymbolicRegression#v1.12.0-beta1 DynamicExpressions#v2.0.0-beta3 DynamicDiff#v0.3.0-beta2 BorrowChecker#v0.3.0-rc1
Note the differing -beta1
, -beta3
, -beta2
, -rc1
tags which much be specified explicitly.
I consider this to be too much friction. I want to encourage users to beta-test my software, and have it be easy. Mature software libraries often make this very easy to do, even for users who know nothing about coding. e.g., I just switched to the new Adobe Photoshop beta in CreativeCloud by clicking this high-visibility button:
This it effortless for non-technical users, who can then give feedback on early features and generate crash reports. For me, some PySR users do not know what a git tag is, but their testing and feedback is still quite valuable!
In other package registries like crates.io or pypi.org or conda-forge ā alpha, beta, and release-candidate releases are supported. There are even CLI flags for automatically selecting these (e.g., pip install --pre
; cargo add --prerelease
). Of course you could always look up the right git tag for it, but thatās just another barrier to a user doing free labor for me by testing my package in a pre-release state. Which I really want to encourage.
If I release -rc2
for just DynamicExpressions.jl, I need to instruct users explicitly to re-run the above command with one small change each time a dependency updates. This quickly becomes cumbersome, and lowers the effectiveness of their feedback.
Julia itself clearly recognises the importance of making it easy for the community to experiment with pre-release versions (just downloaded 1.12.0-beta4
to do my part ). So I think we just need the option for the general registry to lower friction for beta testing of packages.
If there were pre-releases, we could also potentially have an option
Pkg.test(prerelease=true)
Which would default to pre-release versions of packages (for any that have been added to the general registry) ā to help generate feedback on early versions of dependencies.
A few tangential notes:
-
One recent update to Pkg is some new Project.toml syntax (
[sources]
) that lets you specify custom sources like:PackageB = {url = "https://github.com/username/PackageB.jl", rev = "v1.0.0-rc1"}
This would be a great solution to this, however, Pkg does not recursively follow sources. So you have to set all the URLs at the top-level repository you want someone to test, and update the Project.toml (and update the git tag) whenever a dependency releases a new beta version. So, itās doable, but too much friction.
-
A āmonorepoā is a good option for many, but not something I can use because these libraries are fundamentally for different things and have different uses. But they often participate in the same release cycle due to the requirement of new features in dependencies.