Versioning scheme #983
Replies: 6 comments
-
I'm gonna pick out a few statements for comment. Everything else, consider accepted. 1) "In terms of versions, if component n changes version, then components >n must also change version." I think between LuxCoreDeps and LuxCore this is probably right, since LuxCoreDeps is not something that would be used standalone. To go further on this, How often will we even push out releases? In the past, (Blend)LuxCore was patching via nightly builds. Do we continue this at all? Will it be feasible? Probably not if it depends on the changes to pyluxcore being available on PyPi. Alternatively, there must be a simpler method for users to use a local wheel compared to the environment variable. 2) "it seems consistent to share the same Major/Minor between the 3 components" This might not work. For BlendLuxCore in particular, we should discuss further how we will be managing the support for Blender versions in the future. Do we even have to reflect the LuxCore version in the BlendLuxCore version at all? Why not base it on Blender directly: Or, something rather excessive: Does anything speak against a longer patch counter? As a variation of the above: 3) "For deps: patch = deps_counter, alphabetical" I'm not actually opposed to this, I do see the appeal in avoiding confusion with numbers. I just think this is one to consider carefully if we really won't shoot ourselves in the foot in the long-term if our internal semantics are not 100% identical. [Edited Item 1 because I forgot to finish it] |
Beta Was this translation helpful? Give feedback.
-
Hello, This a very dense, but most interesting, answer! Following your manner, I've quoted your points and brought my answers below.
OK, then we should use pure semver for each component (https://semver.org/), it's well-documented, proven and best practice. LuxCoreDeps will start from 1.0.0, as required by the standard and, from that starting point, it will follow its way.
First of all, we shouldn't mix release and branch subjects. First thing to set is the release policy.
In terms of branches, I would say:
If we need to write a hotfix for stable, we should checkout master in a new branch, write the fix in the new branch, merge it to master, make release X.Y.Z' in master, and rebase 'for_vX.Y'.0 branch on master. Pyluxcore alpha releases should be published on Pypi, under their semver version.
Depends on type of release:
It's possible, but I think we could/should rather rely on continuous integration.
Sure, we should follow our own timeline! As an addition, an important thing I've just recalled: At the moment, pyluxcore (and subsequently LuxCoreDeps) has Blender as a dependency. It's due to this file: If we want pyluxcore to be Blender independent (and we should want it, IMHO), I see 2 solutions:
2nd option is my preferred one, for 2 reasons at least:
It's not an urgent matter, but it should be done in next version (I will do it). |
Beta Was this translation helpful? Give feedback.
-
OK
Your description of the branch- and tag-workflow sounds good to me. An implication for maintenance across Blender LTS-versions remains, will we support multiple versions in one branch (lots of
Just to clarify my intention, this was rather a philosophical look in the glass ball, along the lines of "what will the ratio between releases (alpha/beta/rc/stable) and nightly builds turn out to be". No need for me to put fixed numbers behind it yet, though your response is undoubtedly reasonable.
See also the next discussion I just opened https://github.com/orgs/LuxCoreRender/discussions/984
Very good point, and I agree that it sounds like a good idea to outsource this. Regarding doing this all in python: I suspect some of this is performance critical. I do know that it was a topic for custom normals, see e.g. #451 BlendLuxCore/export/mesh_converter.py Line 18 in 7ba0f00 It might therefore be better to target a separate C++-based library. |
Beta Was this translation helpful? Give feedback.
-
Thank you for your feedback! I'm gonna have a look at the discussion you point at.
I don't agree at all! The current implementation is very naive, but a good, pythonic application of Numpy could make it a lot faster, even faster perhaps than an average implementation in C++. As Numpy usually releases the GIL, there even may be room for multithreading in this computation. For an example of normals computation with Numpy, please allow me to quote myself: |
Beta Was this translation helpful? Give feedback.
-
@howetuft Reviewing if this Discussion can be closed or should remain open. As we have reached v2.10 stable with LuxCoreDeps and LuxCore, and BlendLuxCore in release-candidate state, I would say this proposal has been implemented. Do we have any open actions here? |
Beta Was this translation helpful? Give feedback.
-
I don't see any remaining point, so I close. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Problem statement
To build a new version of BlendLuxCore, we need three components:
Problem is: how to define the rules for constructing version numbers for these components.
Observations
Top-down propagation
In terms of versions, if component n changes version, then components >n must also change version.
For example, if we fix a bug in the dependencies, then the wheels, which are based on these dependencies, must change version too. And similarly, BlendLuxCore, which is based on these wheels, will have to change version as well.
On the other hand, if we fix a bug in BlendLuxCore, but keep the wheels unchanged, there is no need to version pyluxcore/wheels, and even less need to version the dependencies. To the contrary, we should avoid to stamp new release numbers on a top component (deps, for example), if it remains stable.
So we need a versioning system that is flexible enough to allow us to version a fix in BlendLuxCore without having to change the version of the dependencies.
Python package versioning - standard
Python package versioning is standardized: https://packaging.python.org/en/latest/discussions/versioning/.
Following the standard is not only a recommendation, it is also necessary for the wheel mechanism (pip etc.) to work correctly.
Pypi "no way back"
On Pypi, once a wheel has been published, there is no way to reuse its name, meaning:
Rules and rationale are exposed here: https://pypi.org/help/#file-name-reuse
Confusing situations
Problem is: we should prevent confusing situations, both for users and developpers, such this one:
Proposed rules
Semantic versioning
Historically, LuxCore has followed a
major.minor
scheme. However, best practices recommend adding a patch (or bugfix) to this scheme.The result is a 3-part version numbers,
major.minor.patch
, where the project author increments:major
when they make incompatible API changes,minor
when they add functionality in a backwards-compatible manner, andpatch
, when they make backwards-compatible bug fixes.This is called Semantic Versioning. We propose to adopt this de facto standard.
Major/Minor sharing
As Major.Minor deals with feature evolutions, it seems consistent to share the same Major/Minor between the 3 components.
If needed, some upgrades on deps versions could be searched for each Major/Minor increment, so that version increment does correspond to actual changes in deps (in addition to new features in pyluxcore or BlendLuxCore).
Patch
Example
As an example, we could have:
Feedback welcome!
Beta Was this translation helpful? Give feedback.
All reactions