<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.luxcorerender.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Howetuft</id>
	<title>LuxCoreRender Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.luxcorerender.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Howetuft"/>
	<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/Special:Contributions/Howetuft"/>
	<updated>2026-10-19T18:53:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2915</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2915"/>
		<updated>2026-10-05T03:43:09Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= General Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is &amp;lt;b&amp;gt;&amp;quot;the Single Source of Truth&amp;quot; where all development happens.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
= Details =&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note that we create release branches only for major.minor, not for patches; that is, versions X.Y.0, X.Y.1, etc., will be hosted on the same &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers are not allowed to commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed yet.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;br /&gt;
&lt;br /&gt;
= Appendices =&lt;br /&gt;
&lt;br /&gt;
== Appendix A: A few considerations that oriented our choice  ==&lt;br /&gt;
&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2914</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2914"/>
		<updated>2026-10-05T03:42:35Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is &amp;lt;b&amp;gt;&amp;quot;the Single Source of Truth&amp;quot; where all development happens.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
= Details =&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note that we create release branches only for major.minor, not for patches; that is, versions X.Y.0, X.Y.1, etc., will be hosted on the same &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers are not allowed to commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed yet.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;br /&gt;
&lt;br /&gt;
= Appendices =&lt;br /&gt;
&lt;br /&gt;
== Appendix A: A few considerations that oriented our choice  ==&lt;br /&gt;
&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2913</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2913"/>
		<updated>2026-10-05T03:39:48Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is &amp;lt;b&amp;gt;&amp;quot;the Single Source of Truth&amp;quot; where all development happens.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note that we create release branches only for major.minor, not for patches; that is, versions X.Y.0, X.Y.1, etc., will be hosted on the same &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers are not allowed to commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed yet.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;br /&gt;
&lt;br /&gt;
= Appendix: A few considerations that oriented our choice  =&lt;br /&gt;
&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2912</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2912"/>
		<updated>2026-10-05T03:38:20Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is &amp;lt;b&amp;gt;&amp;quot;the Single Source of Truth&amp;quot; where all development happens.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note that we create release branches only for major.minor, not for patches; that is, versions X.Y.0, X.Y.1, etc., will be hosted on the same &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers are not allowed to commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed yet.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;br /&gt;
&lt;br /&gt;
= Appendix: A few considerations that oriented our choice  =&lt;br /&gt;
&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2911</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2911"/>
		<updated>2026-10-05T03:37:10Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note that we create release branches only for major.minor, not for patches; that is, versions X.Y.0, X.Y.1, etc., will be hosted on the same &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers are not allowed to commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed yet.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;br /&gt;
&lt;br /&gt;
= Appendix: A few considerations that oriented our choice  =&lt;br /&gt;
&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2910</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2910"/>
		<updated>2026-09-20T03:36:31Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Bugfix release v2.11.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bugfix release v2.11.2 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
* Fix an error that indefinitely blocks viewport-GPU rendering&lt;br /&gt;
* Improve dynamic library loading on Linux, fixes tbb-related crashes on Linux with Blender 4.5 LTS&lt;br /&gt;
&lt;br /&gt;
= Bugfix release v2.11.1 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note: LuxCore was directly released as 2.11.1 due to an immediate bug during release, which was not revertible due to PyPIs strict versioning.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BlendLuxCore&#039;&#039;&#039;&lt;br /&gt;
* Point to LuxCore v2.11.2&lt;br /&gt;
* Fix initial assignment of the world cache. Reduces unnecessary viewport restart.&lt;br /&gt;
* Fix an issue with LuxcoreOnlineLibrary preview images in Blender 5.0+&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Use LuxCore internal OIDN (rather than embedding and calling an external OIDN executable)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Fix Blender crash when clicking Copy Material&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space (c.f. section LuxCore)&lt;br /&gt;
* New shape node &amp;quot;MergeOnDistance&amp;quot; (like Blender Merge by Distance)&lt;br /&gt;
* Subdiv: (simple) crease management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: multithreaded version, in order to improve speed&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Adapt CI pipelines to MacOS-15 runners (after deprecation of MacOS-13 runners on Github)&lt;br /&gt;
* Remove direct access to Blender internal objects. Use Blender API instead, more stable.&lt;br /&gt;
* Add support for Python 3.14 (and remove support for 3.9)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Fix various memory-related issues (leaks, potential access violations...). Modernize memory handling (to be continued)&lt;br /&gt;
* Avoid crash if no OpenCL and/or Nvidia API is found&lt;br /&gt;
* Fix several race conditions&lt;br /&gt;
* Fixed an error where paused renderings can&#039;t be stopped anymore&lt;br /&gt;
* 3D-mapping: Fix inconsistent behavior between local and random-local mapping https://github.com/LuxCoreRender/BlendLuxCore/issues/656&lt;br /&gt;
* Add a clamping in SchlickBSDF to avoid (very small) floating point issues&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Make `pyluxcoretools` available again (in the wheels)&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt; https://github.com/LuxCoreRender/LuxCore/issues/671&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space https://github.com/LuxCoreRender/BlendLuxCore/issues/644&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Better dependency pinning (for nvrtc and conan-index)&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2909</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2909"/>
		<updated>2026-09-20T03:35:50Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Bugfix release v2.11.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bugfix release v2.11.2 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
* Fix an error that indefinitely blocks viewport-GPU rendering&lt;br /&gt;
* Improve dynamic library loading on Linux, fixes tbb-related crashes on Linux with Blender 4.5 LTS&lt;br /&gt;
&lt;br /&gt;
= Bugfix release v2.11.1 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
Note: LuxCore was directly released as 2.11.1 due to an immediate bug during release, which was not revertible due to PyPIs strict versioning.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BlendLuxCore&#039;&#039;&#039;&lt;br /&gt;
* Point to LuxCore v2.11.2&lt;br /&gt;
* Fix initial assignment of the world cache. Reduces unnecessary viewport restart.&lt;br /&gt;
* Fix an issue with LuxcoreOnlineLibrary preview images in Blender 5.0+&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Use LuxCore internal OIDN (rather than embedding and calling an external OIDN executable)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Fix Blender crash when clicking Copy Material&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space (c.f. section LuxCore)&lt;br /&gt;
* New shape node &amp;quot;MergeOnDistance&amp;quot; (like Blender Merge by Distance)&lt;br /&gt;
* Subdiv: (simple) crease management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: multithreaded version, in order to improve speed&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Adapt CI pipelines to MacOS-15 runners (after deprecation of MacOS-13 runners on Github)&lt;br /&gt;
* Remove direct access to Blender internal objects. Use Blender API instead, more stable.&lt;br /&gt;
* Add support for Python 3.14 (and remove support for 3.9)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Fix various memory-related issues (leaks, potential access violations...). Modernize memory handling (to be continued)&lt;br /&gt;
* Avoid crash if no OpenCL and/or Nvidia API is found&lt;br /&gt;
* Fix several race conditions&lt;br /&gt;
* Fixed an error where paused renderings can&#039;t be stopped anymore&lt;br /&gt;
* 3D-mapping: Fix inconsistent behavior between local and random-local mapping https://github.com/LuxCoreRender/BlendLuxCore/issues/656&lt;br /&gt;
* Add a clamping in SchlickBSDF to avoid (very small) floating point issues&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Make `pyluxcoretools` available again (in the wheels)&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt; https://github.com/LuxCoreRender/LuxCore/issues/671&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space https://github.com/LuxCoreRender/BlendLuxCore/issues/644&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Better dependency pinning (for nvrtc and conan-index)&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2908</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2908"/>
		<updated>2026-09-20T03:35:35Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Bugfix release v2.10.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bugfix release v2.11.2 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
* Fix an error that indefinitely blocks viewport-GPU rendering&lt;br /&gt;
* Improve dynamic library loading on Linux, fixes tbb-related crashes on Linux with Blender 4.5 LTS&lt;br /&gt;
&lt;br /&gt;
= Bugfix release v2.11.1 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
Note: LuxCore was directly released as 2.10.1 due to an immediate bug during release, which was not revertible due to PyPIs strict versioning.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BlendLuxCore&#039;&#039;&#039;&lt;br /&gt;
* Point to LuxCore v2.11.2&lt;br /&gt;
* Fix initial assignment of the world cache. Reduces unnecessary viewport restart.&lt;br /&gt;
* Fix an issue with LuxcoreOnlineLibrary preview images in Blender 5.0+&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Use LuxCore internal OIDN (rather than embedding and calling an external OIDN executable)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Fix Blender crash when clicking Copy Material&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space (c.f. section LuxCore)&lt;br /&gt;
* New shape node &amp;quot;MergeOnDistance&amp;quot; (like Blender Merge by Distance)&lt;br /&gt;
* Subdiv: (simple) crease management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: multithreaded version, in order to improve speed&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Adapt CI pipelines to MacOS-15 runners (after deprecation of MacOS-13 runners on Github)&lt;br /&gt;
* Remove direct access to Blender internal objects. Use Blender API instead, more stable.&lt;br /&gt;
* Add support for Python 3.14 (and remove support for 3.9)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Fix various memory-related issues (leaks, potential access violations...). Modernize memory handling (to be continued)&lt;br /&gt;
* Avoid crash if no OpenCL and/or Nvidia API is found&lt;br /&gt;
* Fix several race conditions&lt;br /&gt;
* Fixed an error where paused renderings can&#039;t be stopped anymore&lt;br /&gt;
* 3D-mapping: Fix inconsistent behavior between local and random-local mapping https://github.com/LuxCoreRender/BlendLuxCore/issues/656&lt;br /&gt;
* Add a clamping in SchlickBSDF to avoid (very small) floating point issues&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Make `pyluxcoretools` available again (in the wheels)&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt; https://github.com/LuxCoreRender/LuxCore/issues/671&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space https://github.com/LuxCoreRender/BlendLuxCore/issues/644&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Better dependency pinning (for nvrtc and conan-index)&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2907</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2907"/>
		<updated>2026-09-20T03:35:25Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Bugfix release v2.10.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bugfix release v2.11.2 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
* Fix an error that indefinitely blocks viewport-GPU rendering&lt;br /&gt;
* Improve dynamic library loading on Linux, fixes tbb-related crashes on Linux with Blender 4.5 LTS&lt;br /&gt;
&lt;br /&gt;
= Bugfix release v2.10.1 =&lt;br /&gt;
&#039;&#039;&#039;LuxCore&#039;&#039;&#039;&lt;br /&gt;
Note: LuxCore was directly released as 2.10.1 due to an immediate bug during release, which was not revertible due to PyPIs strict versioning.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BlendLuxCore&#039;&#039;&#039;&lt;br /&gt;
* Point to LuxCore v2.11.2&lt;br /&gt;
* Fix initial assignment of the world cache. Reduces unnecessary viewport restart.&lt;br /&gt;
* Fix an issue with LuxcoreOnlineLibrary preview images in Blender 5.0+&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Use LuxCore internal OIDN (rather than embedding and calling an external OIDN executable)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Fix Blender crash when clicking Copy Material&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space (c.f. section LuxCore)&lt;br /&gt;
* New shape node &amp;quot;MergeOnDistance&amp;quot; (like Blender Merge by Distance)&lt;br /&gt;
* Subdiv: (simple) crease management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: multithreaded version, in order to improve speed&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Adapt CI pipelines to MacOS-15 runners (after deprecation of MacOS-13 runners on Github)&lt;br /&gt;
* Remove direct access to Blender internal objects. Use Blender API instead, more stable.&lt;br /&gt;
* Add support for Python 3.14 (and remove support for 3.9)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Fix various memory-related issues (leaks, potential access violations...). Modernize memory handling (to be continued)&lt;br /&gt;
* Avoid crash if no OpenCL and/or Nvidia API is found&lt;br /&gt;
* Fix several race conditions&lt;br /&gt;
* Fixed an error where paused renderings can&#039;t be stopped anymore&lt;br /&gt;
* 3D-mapping: Fix inconsistent behavior between local and random-local mapping https://github.com/LuxCoreRender/BlendLuxCore/issues/656&lt;br /&gt;
* Add a clamping in SchlickBSDF to avoid (very small) floating point issues&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features (of interest for users)&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Make `pyluxcoretools` available again (in the wheels)&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt; https://github.com/LuxCoreRender/LuxCore/issues/671&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space https://github.com/LuxCoreRender/BlendLuxCore/issues/644&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Better dependency pinning (for nvrtc and conan-index)&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2893</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2893"/>
		<updated>2026-09-06T06:36:45Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Make sure you understand the Branching Strategy ==&lt;br /&gt;
&lt;br /&gt;
This procedure stems from the Branching Strategy, which takes precedence over it.&lt;br /&gt;
See [[Branching and Version Control]]&lt;br /&gt;
&lt;br /&gt;
Before releasing, take the time to make sure you fully understand the Branching Strategy as a whole, and in particular the various rules that apply to the release process, including:&lt;br /&gt;
* Building releases on a dedicated branch, so as not to interrupt development in the meantime&lt;br /&gt;
* The prohibition against developing on release branches&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;DefaultVersion&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/build-settings&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;release/X.Y&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;release/X.Y&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2892</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2892"/>
		<updated>2026-09-06T05:13:51Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* BlendLuxCore Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Make sure you understand the Branching Strategy ==&lt;br /&gt;
&lt;br /&gt;
This procedure stems from the Branching Strategy, which takes precedence over it.&lt;br /&gt;
See [[Branching and Version Control]]&lt;br /&gt;
&lt;br /&gt;
Before releasing, take the time to make sure you fully understand the Branching Strategy as a whole, and in particular the various rules that apply to the release process, including:&lt;br /&gt;
* Building releases on a dedicated branch, so as not to interrupt development in the meantime&lt;br /&gt;
* The prohibition against developing on release branches&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;release/X.Y&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;release/X.Y&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2891</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2891"/>
		<updated>2026-09-06T05:13:27Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Samples Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Make sure you understand the Branching Strategy ==&lt;br /&gt;
&lt;br /&gt;
This procedure stems from the Branching Strategy, which takes precedence over it.&lt;br /&gt;
See [[Branching and Version Control]]&lt;br /&gt;
&lt;br /&gt;
Before releasing, take the time to make sure you fully understand the Branching Strategy as a whole, and in particular the various rules that apply to the release process, including:&lt;br /&gt;
* Building releases on a dedicated branch, so as not to interrupt development in the meantime&lt;br /&gt;
* The prohibition against developing on release branches&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;release/X.Y&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2890</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2890"/>
		<updated>2026-09-06T05:13:08Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Make sure you understand the Branching Strategy ==&lt;br /&gt;
&lt;br /&gt;
This procedure stems from the Branching Strategy, which takes precedence over it.&lt;br /&gt;
See [[Branching and Version Control]]&lt;br /&gt;
&lt;br /&gt;
Before releasing, take the time to make sure you fully understand the Branching Strategy as a whole, and in particular the various rules that apply to the release process, including:&lt;br /&gt;
* Building releases on a dedicated branch, so as not to interrupt development in the meantime&lt;br /&gt;
* The prohibition against developing on release branches&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2889</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2889"/>
		<updated>2026-09-06T05:12:40Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Make sure you understand the Branching Strategy ==&lt;br /&gt;
&lt;br /&gt;
This procedure stems from the Branching Strategy, which takes precedence over it.&lt;br /&gt;
See [[Branching and Version Control]]&lt;br /&gt;
&lt;br /&gt;
Before releasing, take the time to make sure you fully understand the Branching Strategy as a whole, and in particular the various rules that apply to the release process, including:&lt;br /&gt;
* Building releases on a dedicated branch, so as not to interrupt development in the meantime&lt;br /&gt;
* The prohibition against developing on release branches&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2888</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2888"/>
		<updated>2026-09-06T05:11:54Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Make sure you understand the Branching Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Make sure you understand the Branching Strategy ==&lt;br /&gt;
&lt;br /&gt;
This procedure stems from the Branching Strategy, which takes precedence over it.&lt;br /&gt;
See [[Branching and Version Control]]&lt;br /&gt;
&lt;br /&gt;
Before releasing, take the time to make sure you fully understand the Branching Strategy as a whole, and in particular the various rules that apply to the release process, including:&lt;br /&gt;
* Building releases on a dedicated branch, so as not to interrupt development in the meantime&lt;br /&gt;
* The prohibition against developing on release branches&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2887</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2887"/>
		<updated>2026-09-06T05:11:23Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Make sure you understand the Branching Strategy ==&lt;br /&gt;
&lt;br /&gt;
This procedure stems from the Branching Strategy, which takes precedence over it.&lt;br /&gt;
See [[Branching and Version Control]]&lt;br /&gt;
&lt;br /&gt;
Before releasing, take the time to make sure you fully understand the branching strategy as a whole, and in particular the various rules that apply to the release process, including:&lt;br /&gt;
* Building releases on a dedicated branch, so as not to interrupt development in the meantime&lt;br /&gt;
* The prohibition against developing on release branches&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2886</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2886"/>
		<updated>2026-09-06T05:03:01Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Release Branch creation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remark: &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;, which do not need to be at HEAD, as soon as it provides the expected features for the release.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2885</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2885"/>
		<updated>2026-09-06T04:59:00Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Procedure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Release Branch creation ==&lt;br /&gt;
&lt;br /&gt;
If not done before, create branch &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;, to host the release, by forking &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A few remarks:&lt;br /&gt;
-  &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; can be cut &amp;lt;i&amp;gt;at any convenient point in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; history&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2884</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2884"/>
		<updated>2026-09-06T04:54:31Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2883</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2883"/>
		<updated>2026-09-06T04:53:57Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Pre-Flight Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
Apply [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2882</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2882"/>
		<updated>2026-09-06T04:53:47Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Pre-Flight Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
See [[#Prerequisites]] above.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2881</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2881"/>
		<updated>2026-09-06T04:53:32Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Pre-Flight Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
See [[#Prerequisites]].&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2880</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2880"/>
		<updated>2026-09-06T04:50:51Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Prequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
See above (prerequisites).&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2879</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2879"/>
		<updated>2026-09-06T04:48:52Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Define Version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version(s) ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
See above (prerequisites).&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2878</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2878"/>
		<updated>2026-09-06T04:48:34Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Check LuxCore is Buildable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
See above (prerequisites).&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2877</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2877"/>
		<updated>2026-09-06T04:48:22Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Prequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Check LuxCore is Buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Ensure that there is no regression ==&lt;br /&gt;
&lt;br /&gt;
Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
See above (prerequisites).&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2876</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2876"/>
		<updated>2026-09-06T04:46:29Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Pre-Flight Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Ensure LuxCore is Buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
&lt;br /&gt;
See above (prerequisites).&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2875</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2875"/>
		<updated>2026-09-06T04:45:41Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Sufficient space on PyPI and PyPI-test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Ensure LuxCore is Buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Ensure space is sufficient on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* 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.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2874</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2874"/>
		<updated>2026-09-06T04:45:12Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Version Consistency */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Ensure LuxCore is Buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Define Version ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* 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.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2873</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2873"/>
		<updated>2026-09-06T04:44:49Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Change Log Readiness */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Ensure LuxCore is Buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Prepare Change Log ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Version Consistency ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* 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.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2872</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2872"/>
		<updated>2026-09-06T04:44:32Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* LuxCore Buildability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== Ensure LuxCore is Buildable ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log Readiness ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Version Consistency ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* 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.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2871</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2871"/>
		<updated>2026-09-06T04:44:05Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Consistent Version Numbers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log Readiness ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Version Consistency ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* 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.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2870</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2870"/>
		<updated>2026-09-06T04:43:49Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Change Log readiness */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log Readiness ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* 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.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2869</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2869"/>
		<updated>2026-09-06T04:42:30Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Prequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
This is normally ensured by the branching strategy. However, it doesn&#039;t hurt to double-check.&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Render all available test scenes and compare the results to previous versions. Delete the OCL/CUDA kernel caches before rendering. If there are visible changes, verify if they are expected due to backend changes introduced in this version.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* 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.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
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 &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2868</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2868"/>
		<updated>2026-09-06T04:31:26Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Release process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note that we create release branches only for major.minor, not for patches; that is, versions X.Y.0, X.Y.1, etc., will be hosted on the same &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers are not allowed to commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed yet.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2867</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2867"/>
		<updated>2026-09-06T04:29:52Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Release process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note that we create release branches only for major.minor, not for patches; that is, versions X.Y.0, X.Y.1, etc., will be hosted on the same &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt;. Developers are not allowed to commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed yet.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2866</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2866"/>
		<updated>2026-09-06T04:18:37Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Release process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch: developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2865</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2865"/>
		<updated>2026-09-06T04:17:48Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Continuous integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasability are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2864</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2864"/>
		<updated>2026-09-06T04:17:23Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Branch naming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2863</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2863"/>
		<updated>2026-09-06T04:16:58Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Release process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2862</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2862"/>
		<updated>2026-09-06T04:12:09Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Long-lived branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2861</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2861"/>
		<updated>2026-09-06T04:11:50Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Long-lived branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2860</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2860"/>
		<updated>2026-09-06T04:11:21Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability for LuxCore varies, which means that some development tasks may take time (and the related development branches may remain active for a long time) as we are busy elsewhere. To the contrary, when we are available, we should not be hampered by excessive admin tasks (git configuration and so on).&lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should apply to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare.&lt;br /&gt;
&lt;br /&gt;
Thus, the first rule is &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible. There are a few techniques to do so:&lt;br /&gt;
* Feature flags for anything mergeable in pieces: https://trunkbaseddevelopment.com/feature-flags/&lt;br /&gt;
* Branch by abstraction (https://trunkbaseddevelopment.com/branch-by-abstraction/). &lt;br /&gt;
&lt;br /&gt;
If there is no other possibility but to create a long-lived branch:&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2859</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2859"/>
		<updated>2026-09-02T01:52:32Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Release process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Status: PROPOSAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability varies, which means that some development tasks may take time (and the related development branches may remain active for a long time). &lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This applies to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare. A few techniques:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible: rather use feature flags for anything mergeable in pieces. If a big feature can be built incrementally, merge the scaffolding into main early behind a flag (if FEATURE_X_ENABLED:) rather than keeping it all on a branch. This is the single best way to avoid branch drift — the branch just stops existing. GitHub, GitLab, and most large projects lean on this heavily for exactly this reason.&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, for instance by branching before HEAD, and also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2858</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2858"/>
		<updated>2026-09-02T01:51:05Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Release process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Status: PROPOSAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability varies, which means that some development tasks may take time (and the related development branches may remain active for a long time). &lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This applies to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare. A few techniques:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible: rather use feature flags for anything mergeable in pieces. If a big feature can be built incrementally, merge the scaffolding into main early behind a flag (if FEATURE_X_ENABLED:) rather than keeping it all on a branch. This is the single best way to avoid branch drift — the branch just stops existing. GitHub, GitLab, and most large projects lean on this heavily for exactly this reason.&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Thus, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
Release branches are allowed to practice cherry-picking and history rewriting, thus making possible to release only a sub-scope of the features present in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, but also to release bug fixes.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2857</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2857"/>
		<updated>2026-09-02T01:35:23Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Branch naming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Status: PROPOSAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability varies, which means that some development tasks may take time (and the related development branches may remain active for a long time). &lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This applies to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare. A few techniques:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible: rather use feature flags for anything mergeable in pieces. If a big feature can be built incrementally, merge the scaffolding into main early behind a flag (if FEATURE_X_ENABLED:) rather than keeping it all on a branch. This is the single best way to avoid branch drift — the branch just stops existing. GitHub, GitLab, and most large projects lean on this heavily for exactly this reason.&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. As a counterpart, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt; : for new feature development&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt; : for bug fixing&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt; : for code refactoring&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; : for new release&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2856</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2856"/>
		<updated>2026-09-01T11:29:37Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Main branch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Status: PROPOSAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability varies, which means that some development tasks may take time (and the related development branches may remain active for a long time). &lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This applies to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare. A few techniques:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible: rather use feature flags for anything mergeable in pieces. If a big feature can be built incrementally, merge the scaffolding into main early behind a flag (if FEATURE_X_ENABLED:) rather than keeping it all on a branch. This is the single best way to avoid branch drift — the branch just stops existing. GitHub, GitLab, and most large projects lean on this heavily for exactly this reason.&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. As a counterpart, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2855</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2855"/>
		<updated>2026-09-01T06:13:15Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Preliminary considerations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Status: PROPOSAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability varies, which means that some development tasks may take time (and the related development branches may remain active for a long time). &lt;br /&gt;
* We are also dependent from other environments: in particular, we deploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This applies to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch. Release points are tags of &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare. A few techniques:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible: rather use feature flags for anything mergeable in pieces. If a big feature can be built incrementally, merge the scaffolding into main early behind a flag (if FEATURE_X_ENABLED:) rather than keeping it all on a branch. This is the single best way to avoid branch drift — the branch just stops existing. GitHub, GitLab, and most large projects lean on this heavily for exactly this reason.&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. As a counterpart, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2854</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2854"/>
		<updated>2026-09-01T06:12:57Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Status: PROPOSAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability varies, which means that some development tasks may take time (and the related development branches may remain active for a long time). &lt;br /&gt;
* We are also dependent from other environments: in particular, wdeploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;i&amp;gt;Trunk-Based Development&amp;lt;/i&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This applies to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch. Release points are tags of &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare. A few techniques:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible: rather use feature flags for anything mergeable in pieces. If a big feature can be built incrementally, merge the scaffolding into main early behind a flag (if FEATURE_X_ENABLED:) rather than keeping it all on a branch. This is the single best way to avoid branch drift — the branch just stops existing. GitHub, GitLab, and most large projects lean on this heavily for exactly this reason.&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. As a counterpart, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2853</id>
		<title>Branching and Version Control</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Branching_and_Version_Control&amp;diff=2853"/>
		<updated>2026-09-01T06:12:42Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this document is to define the rules for branching strategy for LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Status: PROPOSAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Preliminary considerations =&lt;br /&gt;
&lt;br /&gt;
A few considerations should be kept in mind:&lt;br /&gt;
* We are a very small core team. Branch strategy should be light and agile.&lt;br /&gt;
* However, we also want a frame structured enough to avoid git pitfalls (merge conflicts and so on), in which we can welcome occasional contributors and, why not, some other core developers.&lt;br /&gt;
* Our needs vary depending on whether we are in feature development phases or release and stabilization phases.&lt;br /&gt;
* Our availability varies, which means that some development tasks may take time (and the related development branches may remain active for a long time). &lt;br /&gt;
* We are also dependent from other environments: in particular, wdeploy on PyPi, where releases are immutable&lt;br /&gt;
&lt;br /&gt;
= Strategy =&lt;br /&gt;
&lt;br /&gt;
Our strategy is inspired by &amp;lt;b&amp;gt;Trunk-Based Development&amp;lt;/b&amp;gt; (TBD), as described here: https://trunkbaseddevelopment.com/.&lt;br /&gt;
&lt;br /&gt;
We rely on &amp;lt;b&amp;gt;a &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch, always stable, always releasable.&amp;lt;/b&amp;gt; This branch is &amp;quot;the Single Source of Truth&amp;quot; where all development happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main ─────●────●─────────●────●────●──→  (always stable, always releasable)&lt;br /&gt;
            \                   \&lt;br /&gt;
             feature/big-thing   feature/another-thing&lt;br /&gt;
              (lives for weeks,    (short, merges fast)&lt;br /&gt;
               synced regularly)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This applies to all LuxCoreRender repositories, and especially:&lt;br /&gt;
* LuxCoreDeps&lt;br /&gt;
* LuxCore&lt;br /&gt;
* BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
== Main branch ==&lt;br /&gt;
Requirements:&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; is the default branch of the repository&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always be kept &amp;lt;b&amp;gt;stable/releasable:&amp;lt;/b&amp;gt;&lt;br /&gt;
** Linear history is required. No squash, rebase etc.&lt;br /&gt;
** Straight push is discouraged (though not totally forbidden, see below)&lt;br /&gt;
** PRs must ensure a good level of completeness&lt;br /&gt;
* Releases are built from the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch. Release points are tags of &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Releases are immutable (PyPi)&lt;br /&gt;
* Every piece of work gets a dedicated branch: &amp;lt;code&amp;gt;feature/login-form&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix/cart-bug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chore/upgrade-deps&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, two branch lifespans, both fine:&lt;br /&gt;
&lt;br /&gt;
* Short-lived (hours–days): bug fixes, small features — developers required to merge fast.&lt;br /&gt;
* Long-lived (weeks–months): big features — developers required to give extra care to keep them alive, so they don&#039;t rot.&lt;br /&gt;
&lt;br /&gt;
== Short-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Short-lived branches are those which won&#039;t live more than a week. This kind of branch should be preferred whenever possible. Requirements are:&lt;br /&gt;
&lt;br /&gt;
* Create branch systematically, avoid direct push, even for core developers. See below.&lt;br /&gt;
* Delete branches after merge to keep things tidy.&lt;br /&gt;
* Reclassify into long-lived branch if duration exceeds week, and apply long-lived branch rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why should core devs create branches systematically?&lt;br /&gt;
&lt;br /&gt;
In our scheme, &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; must always remain stable/releasable. But with direct push, in case of CI failure, merging will go ahead anyway and &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; will be broken. That&#039;s why &amp;lt;i&amp;gt;direct push is discouraged even for core devs&amp;lt;/i&amp;gt;.&lt;br /&gt;
However, it will not be totally deactivated (for core devs), as it could be needed in emergency situation (hotfix).&lt;br /&gt;
&lt;br /&gt;
Moreover, avoiding direct push and relying on pull request allows minimal cleaning before merging (like squashing), and also comments, review by peer etc.&lt;br /&gt;
&lt;br /&gt;
== Long-lived branches ==&lt;br /&gt;
&lt;br /&gt;
Keeping long-lived branches alive and mergeable is the actual hard problem — a branch that sits for 6 weeks while &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; moves on becomes a merge nightmare. A few techniques:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Avoid long-lived branch&amp;lt;/b&amp;gt; when possible: rather use feature flags for anything mergeable in pieces. If a big feature can be built incrementally, merge the scaffolding into main early behind a flag (if FEATURE_X_ENABLED:) rather than keeping it all on a branch. This is the single best way to avoid branch drift — the branch just stops existing. GitHub, GitLab, and most large projects lean on this heavily for exactly this reason.&lt;br /&gt;
* Regularly merge &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; into the feature branch (at least once a week, and whenever &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; changes meaningfully). Don&#039;t wait until the end to reconcile. Whoever touches the feature branch next does the merge.&lt;br /&gt;
* Open Draft/WIP PRs early, even if the feature won&#039;t land for months. Gives visibility to the other maintainer and any contributors, invites early feedback before you&#039;re deep in a direction, and signals &amp;quot;someone&#039;s working on this&amp;quot; so others don&#039;t duplicate effort.&lt;br /&gt;
&lt;br /&gt;
== Release process ==&lt;br /&gt;
The release process should be made comfortable by the fact that the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch is required to be stable and release-ready at all times.&lt;br /&gt;
Thanks to the CI, we should have some assurance regarding buildability and the absence of regressions for the code in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Therefore, in theory, once we decide to create a release, it should be possible to do so directly from the latest commit in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
That may be the case, for instance, in LuxCoreDeps.&lt;br /&gt;
&lt;br /&gt;
In a more general way, however, there is often a need for release branch, due to bug-fixing.&lt;br /&gt;
&lt;br /&gt;
That&#039;s why release process should be prepared on a &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt; branch, cut from &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. The branch cut itself is a commit in &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The golden rule is that  &amp;lt;b&amp;gt;the release branch “should not receive continued development work”.&amp;lt;/b&amp;gt; Developers should not commit to release branch. Developers only commit to &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. As a counterpart, release process is not blocking and post-release development can go on even if release has not been completed.&lt;br /&gt;
&lt;br /&gt;
In case of bug in release, the best practice is to reproduce the bug on the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, fix it there with a test, watch that be verified by the CI server, then cherry-pick that to the release branch and wait for a CI server focusing on the release branch to verify it there too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details, see here: https://trunkbaseddevelopment.com/branch-for-release/&lt;br /&gt;
&lt;br /&gt;
== Branch naming ==&lt;br /&gt;
Branch names should be formatted as &amp;lt;code&amp;gt;type/short-description&amp;lt;/code&amp;gt;, to keep history scannable.&lt;br /&gt;
&lt;br /&gt;
Available types are:&lt;br /&gt;
* &amp;lt;code&amp;gt;feature/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;refactor/*&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;release/X.Y.Z&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
WIth a stable, releasable &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, continuous integration can be applied at least on two events:&lt;br /&gt;
* In PR (and push): run minimal tests (buildability &amp;amp; simple runtime tests) to ensure stability and releasabiloty are kept.&lt;br /&gt;
* In a weekly build: run extensive tests to ensure non-regression.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
</feed>