On Tue, Dec 06, 2022 at 06:59:30PM +0100, Tim Düsterhus wrote: > William, > > On 12/6/22 15:37, William Lallemand wrote: > > As I already mentionned, I don't really like the "latest" keyword for > > the OpenSSL version as it prevent us to have reproducible builds. > > It updates versions without warning, even major ones. > > I agree and also was not really happy with the 'latest' back when it was > introduced in the first place, but didn't care strongly enough to speak up > then.
No problem, it's always easier to see what we've missed after it reaches its limits :-) > > What I suggest is to stop using "latest" for the "git push" CI, but > > using it only in a separate CI (once a day/week I don't know). And only > > use fixed version of the libraries on the CI so builds are not broken by > > external components. Because in my opinion the "git push" CI is to test > > our code, not the libraries. > > > > I don't even think such a weekly job is necessary [1]. Add an item to the > release checklist "check if any new SSL versions are available and add them > to matrix.py" and this should be fine, all SSL versions will then be updated > every 6 months and can also be updated on demand for important releases. > It's similar to how I simply rerun the Coccinelle patches from time to time > to fix whatever crept in since the last release. I'm seeing a slightly different approach here. We need to keep in mind that: - dev must be as forward-thinking as possible; as such, being aware that something is going to break soon is useful, particularly when it comes to forthcoming changes in third party dependencies. I.e. openssl 3 breakage was reported upfront and that was fortunate because a lot of changes were required to adapt to it, long before it was even released. So I don't know if the weekly job is the best option or not, but right now, watching form time to time how it goes with openssl 3.1-dev is useful. Here I'm speaking about a branch, it thus means that we're following what significant changes may bother us. It's purely integration testing, and we could decide that one major upgrade will not be the target for the current version because it requires too much work. But if we focus on such a target we should be as up-to-date as possible (no need to alarm on past breakage if the issue is since fixed). That's where following a -latest from a lib can be useful. - dev must also tell us if we're going to cause breakage on what we expect to support. E.g. once we see that 3.1-dev looks good and we decide to enable it, we'll also need to be able to quickly follow it, because until it's released, it may revert some changes or change its API and cause breakage. It's not like a stable version we can trust, and we need to know as well if we finally prefer to give up because going back-and-forth indicates a third-party dependency is not stable enough for example, or we could mention before the release that it's only experimental for now. - even when adopting a stable release, we'll suffer from bugs in third party dependencies just like we suffer from our own bugs. If OpenSSL 3.1.0 is released and we decide to follow its stable branch, maybe some tests will randomly fail from time to time. And we probably don't want to manually change its version every week to follow the first post-release fixes that we may need to stabilize the CI. In this case again, following the latest from a given branch would be useful, but it becomes less critical. Indeed, generally the most annoying issues should stabilize during the very first versions, and we don't need to care as much about updating the lib once the CI works fine again. - however, once we release a version, the most important is to make sure there are as few moving parts as possible. We should not change any dependency automatically for the CI. Triggering the build on the same release two weeks apart should execute the same tests, otherwise we can think that we broke something during a backport while it's not the case (that's in fact how we first noticed the problem). Thus I think that: - for dev, adopting the latest version of a chosen branch (released or dev) if possible would be desirable so that we're informed ASAP that the branch we're expecting to support is experiencing/causing some trouble ; - for dev, watching weekly or so the level of support of future versions that we have not yet planed to support would help prepare internals where needed ; - for stable, we'd just stick to the version that was in effect that the moment of the release (i.e. the version the tests were run on during dev). And that would make sense considering that a release is nothing more than freezing changes between dev and stable. I'm particularly conscious that there may be technical limitations for the -latest stuff and am not firmly sold on that. I'm just explaining some principles that should IMHO help us orient our choices when facing constraints (and I think that what we have right now is already quite good for -dev, though it could indeed possibly be improved). Just my two cents, Willy