Deploying LuxCoreRender: Difference between revisions
| (60 intermediate revisions by one other user not shown) | |||
| Line 1: | Line 1: | ||
= Audience and Scope = | = Audience, Definitions and Scope = | ||
This document is intended | This document is intended for <i>LuxCoreRender administrators</i> only. | ||
The process requires that the administrator running Release and Deploy be: | |||
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc. | |||
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions | |||
* skilled enough in Github administration and, especially, able to run Github actions | |||
* and skilled enough in PyPI administration | |||
Please check that you meet these criteria before reading further. | |||
| Line 20: | Line 27: | ||
= Prequisites = | = Prequisites = | ||
== Clean Branches == | == Clean Branches == | ||
The | The procedure assumes the releases can be created from the <i>default branches</i> in each repository, namely (2026-04-19): | ||
* <code>master</code> for LuxCore | * <code>master</code> for LuxCore | ||
* <code>main</code> for BlendLuxCore | * <code>main</code> for BlendLuxCore | ||
Please check the above branches contain all the history you target for your releases and, if not, make the required git plumbing. | Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing. | ||
== LuxCore Buildability == | == LuxCore Buildability == | ||
The | The procedure requires that targeted LuxCore components be <i>buildable</i> by <i>Continuous Integration</i>. | ||
This can be checked by running the following Github Actions: | This can be checked by running the following Github Actions: | ||
* Wheels: <code>LuxCore Python Wheel Builder</code> (in LuxCore repository) | * Wheels: <code>LuxCore Python Wheel Builder</code> (in LuxCore repository) | ||
| Line 47: | Line 45: | ||
* BlendLuxCore: <code>BlendLuxCore Build Bundle</code> (in BlendLuxCore) | * BlendLuxCore: <code>BlendLuxCore Build Bundle</code> (in BlendLuxCore) | ||
Please check the components | Please check the components meet those requirements before any Release/Deploy task is engaged. | ||
== Change Log readiness == | == Change Log readiness == | ||
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. | At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however. | ||
== Consistent Version Numbers == | == Consistent Version Numbers == | ||
First, note you'll need 2 version numbers: | |||
* One for LuxCore | * One for LuxCore | ||
* One for BlendLuxCore | * One for BlendLuxCore | ||
There is no reason why these 2 version numbers should be the same. | |||
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]] | These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]] | ||
| Line 65: | Line 65: | ||
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19). | The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19). | ||
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed. | |||
Nota: this check is <i>critical</i> and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available. | |||
= Procedure = | = Procedure = | ||
| Line 73: | Line 75: | ||
* Ensure the default branches are up-to-date | * Ensure the default branches are up-to-date | ||
* Check LuxCore buildability: run the 3 actions listed above. | * Check LuxCore buildability: run the 3 actions listed above. | ||
* Define and | * Ensure the change log is available | ||
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI. | |||
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions. | * Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions. | ||
== Wheels | Afterwards, you are ready to start the core process. | ||
== Wheels Release and Deployment == | |||
* Set the <code>version</code> parameter in <code>build-system/conan/conanfile.py</code> to the targeted version number for LuxCore. | |||
* Run action <code>LuxCore Python Wheels Releaser</code>, with the following settings: | * Run action <code>LuxCore Python Wheels Releaser</code>, with the following settings: | ||
* Branch: <code>master</code> | Branch: <i><code>master</code></i> | ||
* Version: the version number you selected before | Version: <i>the version number you selected before</i> | ||
* Update existing release (if any): <i> | Update existing release (if any): <i>unchecked</i> | ||
Rebuild all: <i>checked</i> | |||
This will build the wheels and create a release in draft mode. | |||
* Open the draft release and set its status to <code>prerelease</code> or <code>latest release</code>. Also, insert the change log in the release text. Save the release. | |||
At this stage, the wheels are released, but we still have to deploy them through PyPI. | |||
* Run action <code>LuxCore Python Wheels Publisher</code>, with the following settings: | |||
Branch: <i><code>master</code></i> | |||
Version: <i>the version number you selected before</i> | |||
Run on PyPI test: <i>checked</i> | |||
This will upload the wheels to PyPI test (deployment - test). | |||
This is a test step, to check everything is fine before uploadig to real PyPI. | |||
* Run action <code>LuxCore Python Wheels Publisher</code>, with the following settings: | |||
Branch: <code>master</code> | |||
Version: <i>the version number you selected before</i> | |||
Run on PyPI test: <i>unchecked</i> | |||
This will upload the wheels to PyPI (deployment). | |||
At this stage, if everything succeeded, wheels are available for any user, with <code>pip install pyluxcore == <version> </code>. You may want to test and/or have a look on PyPI. | |||
== Samples Release and Deployment == | |||
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context... | |||
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing 'rebuild all' in the following action. | |||
* Run Github action named <code>LuxCore Samples Releaser</code>, with the following settings: | |||
Branch: <i>main</i> | |||
Version: <i>the version number you selected before</i> | |||
Update existing release (if any): <i>unchecked</i> | |||
Rebuild all: <i>unchecked</i> | |||
At this stage, a <i>draft release</i> should have been created. | |||
* Open the draft release, insert change log and set release status to <i><code>prerelease</code></i> or <i><code>latest release</code></i>. | |||
* For latest releases, publish the files on the website | |||
== BlendLuxCore Release and Deployment == | |||
Important warning: BLC should <b>not</b> be released while related wheels have not been deployed yet. Indeed, <code>pyluxcore</code> version must be known before starting any release or deploy action of BLC.Once that requirement is met: | |||
* In <code>luxloader/__init__.py</code>, set <code>PYLUXCORE_VERSION</code> to the version of related <code>pyluxcore</code>. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading. | |||
* In <code>blender_manifest.toml</code>, set <code>version</code> parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above. | |||
* Commit your changes and push to BlendLuxCore repository, if needed. | |||
* Run Github action named <code>BlendLuxCore Create Release</code>, with the following settings: | |||
Branch: <i>main</i> | |||
Version: <i>the version number you selected before</i> | |||
Update existing release (if any): <i>Unchecked</i> | |||
At this stage, a <i>draft release</i> should have been created. | |||
* Open the draft release, insert change log and set release status to <i><code>prerelease</code></i> or <i><code>latest release</code></i>. | |||
* For latest releases, publish the files on the website | |||
== Documentation and Announcements == | |||
'''THIS SECTION IS WORK IN PROGRESS (CodeHD, 23.04.2026)''' | |||
Part of the process of releasing a software is to create a proper documentation, both to support future development and to provide users with the necessary information to work efficiently with the software. | |||
Furthermore, the final step after release and deployment is to announce the release to the communicate. | |||
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release: | |||
* This wiki | |||
** particularly the pages linked on the front page | |||
* The project website | |||
** particularly the downloads section | |||
* The README files in all active code repositories | |||
* The AUTHORS file and credits list | |||
** specifically regarding 3rd-party modules that may have been added to the code | |||
* Announcement on the forums | |||
* Announcement in the discord channel | |||
* Announcement on Blenderartist | |||
During the various release steps (alpha, beta, release candidate, stable and subsequent bugfixes), the different items may be completed to varying degrees, reaching maturity towards the stable release. The following are suggestions based on past experience. You can always look at past releases for inspiration. | |||
==== Alpha ==== | |||
==== Beta ==== | |||
==== Release Candidate ==== | |||
==== Stable (X.Y.0) ==== | |||
At this point, all | |||
== | ==== Bugfix (X.Y.Z) ==== | ||
For bugfix releases, prepare the following | |||
* Update the Release Notes on this wiki | |||
* Prepare a summary release notes targeted at users | |||
** This needs to only include the incremental changes from the previous version | |||
* Make a short announcement on the same channels as the Stable release | |||
Latest revision as of 20:21, 23 April 2026
Audience, Definitions and Scope
This document is intended for LuxCoreRender administrators only.
The process requires that the administrator running Release and Deploy be:
- granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.
- granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions
- skilled enough in Github administration and, especially, able to run Github actions
- and skilled enough in PyPI administration
Please check that you meet these criteria before reading further.
In this document:
- Releasing refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.
- Deployment refers to the process of making a new release of LuxCoreRender available to end-users.
The scope of Deployment includes the following components:
- Python Wheels (aka
pyluxcore) - Samples (aka
luxcoreuiandluxcoreconsole) - BlendLuxCore
Please note we deliberately exclude the dependencies (aka LuxCoreDeps) from the deployment scope. Indeed:
- Dependencies are not intended for end-users, so deployment is not applicable.
- Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.
Prequisites
Clean Branches
The procedure assumes the releases can be created from the default branches in each repository, namely (2026-04-19):
masterfor LuxCoremainfor BlendLuxCore
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.
LuxCore Buildability
The procedure requires that targeted LuxCore components be buildable by Continuous Integration.
This can be checked by running the following Github Actions:
- Wheels:
LuxCore Python Wheel Builder(in LuxCore repository) - Samples:
LuxCore Python Sample Builder(in LuxCore repository) - BlendLuxCore:
BlendLuxCore Build Bundle(in BlendLuxCore)
Please check the components meet those requirements before any Release/Deploy task is engaged.
Change Log readiness
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.
Consistent Version Numbers
First, note you'll need 2 version numbers:
- One for LuxCore
- One for BlendLuxCore
There is no reason why these 2 version numbers should be the same.
These version numbers must enforce Semantic Versioning, as stated in Building LuxCoreRender
Please note also that the version numbers should not have been used in anyway in previous releases. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.
Sufficient space on PyPI and PyPI-test
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.
Nota: this check is critical and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.
Procedure
Pre-Flight Review
As stated above, before starting the core procedure, carry out the following actions:
- Ensure the default branches are up-to-date
- Check LuxCore buildability: run the 3 actions listed above.
- Ensure the change log is available
- Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.
- Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.
Afterwards, you are ready to start the core process.
Wheels Release and Deployment
- Set the
versionparameter inbuild-system/conan/conanfile.pyto the targeted version number for LuxCore.
- Run action
LuxCore Python Wheels Releaser, with the following settings:
Branch: master
Version: the version number you selected before
Update existing release (if any): unchecked
Rebuild all: checked
This will build the wheels and create a release in draft mode.
- Open the draft release and set its status to
prereleaseorlatest release. Also, insert the change log in the release text. Save the release.
At this stage, the wheels are released, but we still have to deploy them through PyPI.
- Run action
LuxCore Python Wheels Publisher, with the following settings:
Branch: master
Version: the version number you selected before
Run on PyPI test: checked
This will upload the wheels to PyPI test (deployment - test). This is a test step, to check everything is fine before uploadig to real PyPI.
- Run action
LuxCore Python Wheels Publisher, with the following settings:
Branch: master
Version: the version number you selected before
Run on PyPI test: unchecked
This will upload the wheels to PyPI (deployment).
At this stage, if everything succeeded, wheels are available for any user, with pip install pyluxcore == <version> . You may want to test and/or have a look on PyPI.
Samples Release and Deployment
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing 'rebuild all' in the following action.
- Run Github action named
LuxCore Samples Releaser, with the following settings:
Branch: main Version: the version number you selected before Update existing release (if any): unchecked Rebuild all: unchecked
At this stage, a draft release should have been created.
- Open the draft release, insert change log and set release status to
prereleaseorlatest release.
- For latest releases, publish the files on the website
BlendLuxCore Release and Deployment
Important warning: BLC should not be released while related wheels have not been deployed yet. Indeed, pyluxcore version must be known before starting any release or deploy action of BLC.Once that requirement is met:
- In
luxloader/__init__.py, setPYLUXCORE_VERSIONto the version of relatedpyluxcore. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.
- In
blender_manifest.toml, setversionparameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.
- Commit your changes and push to BlendLuxCore repository, if needed.
- Run Github action named
BlendLuxCore Create Release, with the following settings:
Branch: main Version: the version number you selected before Update existing release (if any): Unchecked
At this stage, a draft release should have been created.
- Open the draft release, insert change log and set release status to
prereleaseorlatest release.
- For latest releases, publish the files on the website
Documentation and Announcements
THIS SECTION IS WORK IN PROGRESS (CodeHD, 23.04.2026)
Part of the process of releasing a software is to create a proper documentation, both to support future development and to provide users with the necessary information to work efficiently with the software. Furthermore, the final step after release and deployment is to announce the release to the communicate.
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:
- This wiki
- particularly the pages linked on the front page
- The project website
- particularly the downloads section
- The README files in all active code repositories
- The AUTHORS file and credits list
- specifically regarding 3rd-party modules that may have been added to the code
- Announcement on the forums
- Announcement in the discord channel
- Announcement on Blenderartist
During the various release steps (alpha, beta, release candidate, stable and subsequent bugfixes), the different items may be completed to varying degrees, reaching maturity towards the stable release. The following are suggestions based on past experience. You can always look at past releases for inspiration.
Alpha
Beta
Release Candidate
Stable (X.Y.0)
At this point, all
Bugfix (X.Y.Z)
For bugfix releases, prepare the following
- Update the Release Notes on this wiki
- Prepare a summary release notes targeted at users
- This needs to only include the incremental changes from the previous version
- Make a short announcement on the same channels as the Stable release