Repository: LuxoriaSoft/Luxoria
Pull request #209: ci: Standard Modules Release
Author: login: qerdinger
Labels: name: Feature
description: New feature or request
name: released
name: released on @develop
name: dependencies
description: Pull requests that update a dependency file
Created: 2025-05-18T10:42:45Z | Merged: 2025-05-19T12:19:07Z

**Name:** `Luxoria - Pull Request`  
**Title:** `[LXX] - (CICD) ci: Bring a building workflow for modules`  
**Assignees:**  @qerdinger 

---

### **Description**

This PR brings a building and releasing workflow for all standard modules such as LuxImport, LuxFilter, LuxEditor and LuxExport

---

### **Checklist**

- [x] My code adheres to the project's coding standards.
- [x] I have performed a self-review of my code.
- [x] I have commented on my code, especially in areas that might be unclear.
- [x] I have added or updated relevant documentation (if applicable).
- [x] I have added tests that prove my fix is effective or that my feature works (if applicable).
- [x] All new and existing tests pass.
- [x] I have checked that my PR targets the `develop` branch.
- [x] My PR title follows the [conventional commits](https://www.conventionalcommits.org/) format.

---

### **Type of Change**

- [ ] Bug fix (non-breaking change that fixes an issue)
- [x] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Refactoring (non-breaking changes to improve code quality)

---

### **Related Issues

no issue related 

---

### **How Has This Been Tested?**

Using xUnit

---

### **Screenshots (If Applicable)**

Attach any screenshots that help illustrate the changes made in this PR.

---

### **Additional Context**

Add any additional information or context about the PR here.

---


Diff:
diff --git a/.github/workflows/release.yml b/.github/workflows/build-upload-lda.yml
similarity index 100%
rename from .github/workflows/release.yml
rename to .github/workflows/build-upload-lda.yml
diff --git a/.github/workflows/build-upload-standard-modules.yml b/.github/workflows/build-upload-standard-modules.yml
new file mode 100644
index 00000000..fe814e14
--- /dev/null
+++ b/.github/workflows/build-upload-standard-modules.yml
@@ -0,0 +1,133 @@
+name: Luxoria Standard Modules Release
+
+on:
+  push:
+  pull_request:
+    types: [opened, synchronize, reopened]
+
+jobs:
+  build-and-upload:
+    runs-on: windows-latest
+
+    strategy:
+      matrix:
+        configuration: [Release]
+        platform: [win-x64, win-x86, win-arm64]
+
+    env:
+      Solution_Name: Luxoria.App.sln
+      Framework_Version: net9.0-windows10.0.26100.0
+
+    steps:
+      # Checkout the repository
+      - name: Checkout code
+        uses: actions/checkout@v3
+
+      # Set up the .NET SDK (version 9.x)
+      - name: Setup .NET SDK
+        uses: actions/setup-dotnet@v3
+        with:
+          dotnet-version: '9.x'
+
+      # Set up MSBuild for Windows build environment
+      - name: Setup MSBuild.exe
+        uses: microsoft/setup-msbuild@v1.0.2
+            
+      # Build the main Luxoria.App solution
+      - name: Build Luxoria.App
+        run: |
+          if ("${{ matrix.platform }}" -eq "win-x86") {
+            $platformTarget = "x86"
+          } elseif ("${{ matrix.platform }}" -eq "win-x64") {
+            $platformTarget = "x64"
+          } elseif ("${{ matrix.platform }}" -eq "win-arm64") {
+            $platformTarget = "ARM64"
+          } else {
+            throw "Unknown platform: ${{ matrix.platform }}"
+          }
+          dotnet build Luxoria.App/Luxoria.App.sln --no-incremental -p:PackOnBuild=false -maxcpucount:1 -c ${{ matrix.configuration }} -r ${{ matrix.platform }} -p:PlatformTarget=$platformTarget
+        shell: pwsh
+
+      # Build, rename, and upload LuxImport module
+      - name: Build LuxImport
+        run: dotnet publish Modules/LuxImport/LuxImport/LuxImport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Rename LuxImport.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxImport/LuxImport/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxImport.dll"
+          $newName = "LuxImport.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+
+      - name: Upload LuxImport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxImport-${{ matrix.platform }}
+          path: Modules/LuxImport/LuxImport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build, rename, and upload LuxFilter module
+      - name: Build LuxFilter
+        run: dotnet publish Modules/LuxFilter/LuxFilter/LuxFilter.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+      
+      - name: Rename LuxFilter.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxFilter/LuxFilter/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxFilter.dll"
+          $newName = "LuxFilter.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+
+      - name: Upload LuxFilter artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxFilter-${{ matrix.platform }}
+          path: Modules/LuxFilter/LuxFilter/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build, rename, and upload LuxEditor module
+      - name: Build LuxEditor
+        run: dotnet publish Modules/LuxEditor/LuxEditor/LuxEditor.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+      
+      - name: Rename LuxEditor.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxEditor/LuxEditor/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxEditor.dll"
+          $newName = "LuxEditor.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+
+      - name: Upload LuxEditor artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxEditor-${{ matrix.platform }}
+          path: Modules/LuxEditor/LuxEditor/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build, rename, and upload LuxExport module
+      - name: Build LuxExport
+        run: dotnet publish Modules/LuxExport/LuxExport/LuxExport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Rename LuxExport.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxExport/LuxExport/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxExport.dll"
+          $newName = "LuxExport.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+      
+      - name: Upload LuxExport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxExport-${{ matrix.platform }}
+          path: Modules/LuxExport/LuxExport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
diff --git a/.github/workflows/build.yml b/.github/workflows/sonar-analysis.yml
similarity index 98%
rename from .github/workflows/build.yml
rename to .github/workflows/sonar-analysis.yml
index aee648d6..59fbda15 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/sonar-analysis.yml
@@ -1,4 +1,4 @@
-name: Scan with SonarCloud
+name: SonarCloud Analysis
 
 on:
   push:
diff --git a/Luxoria.App/Luxoria.SDK/Luxoria.SDK.csproj b/Luxoria.App/Luxoria.SDK/Luxoria.SDK.csproj
index 593e00a7..78f8bc2e 100644
--- a/Luxoria.App/Luxoria.SDK/Luxoria.SDK.csproj
+++ b/Luxoria.App/Luxoria.SDK/Luxoria.SDK.csproj
@@ -10,6 +10,8 @@
 		<Description>Luxoria SDK</Description>
 		<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
 		<RepositoryUrl>https://github.com/LuxoriaSoft/Luxoria</RepositoryUrl>
+
+		<PackOnBuild Condition="'$(PackOnBuild)' == ''">true</PackOnBuild>
 	</PropertyGroup>
 
 	<ItemGroup>
diff --git a/Modules/LuxEditor/LuxEditor/LuxEditor.csproj b/Modules/LuxEditor/LuxEditor/LuxEditor.csproj
index 2f851c17..d247602f 100644
--- a/Modules/LuxEditor/LuxEditor/LuxEditor.csproj
+++ b/Modules/LuxEditor/LuxEditor/LuxEditor.csproj
@@ -23,18 +23,13 @@
     <PackageReference Include="SkiaSharp" Version="3.116.1" />
     <PackageReference Include="SkiaSharp.NativeAssets.Win32" Version="3.116.1" />
     <PackageReference Include="SkiaSharp.Views.WinUI" Version="3.116.1" />
+
+    <PackageReference Include="Luxoria.SDK" Version="1.0.0" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="Luxoria.GModules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.GModules.dll</HintPath>
-    </Reference>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
-    <Reference Include="Luxoria.SDK">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.SDK.dll</HintPath>
-    </Reference>
-  </ItemGroup>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.GModules\Luxoria.GModules.csproj" />
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
+	</ItemGroup>
   <ItemGroup>
     <Page Update="Components\Infos.xaml">
       <Generator>MSBuild:Compile</Generator>
diff --git a/Modules/LuxExport/LuxExport/LuxExport.csproj b/Modules/LuxExport/LuxExport/LuxExport.csproj
index c4d0bbd6..48f1a110 100644
--- a/Modules/LuxExport/LuxExport/LuxExport.csproj
+++ b/Modules/LuxExport/LuxExport/LuxExport.csproj
@@ -17,22 +17,18 @@
 
 
 	<ItemGroup>
-    <PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.1742" />
-    <PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.250228001" />
-    <PackageReference Include="SkiaSharp" Version="3.116.1" />
-  </ItemGroup>
+		<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.1742" />
+		<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.250228001" />
+		<PackageReference Include="SkiaSharp" Version="3.116.1" />
+
+		<PackageReference Include="Luxoria.SDK" Version="1.0.0" />
+  	</ItemGroup>
 
 	<ItemGroup>
-		<Reference Include="Luxoria.GModules">
-			<HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.GModules.dll</HintPath>
-		</Reference>
-		<Reference Include="Luxoria.Modules">
-			<HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.Modules.dll</HintPath>
-		</Reference>
-		<Reference Include="Luxoria.SDK">
-			<HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.SDK.dll</HintPath>
-		</Reference>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.GModules\Luxoria.GModules.csproj" />
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
 	</ItemGroup>
+	
 
 	<ItemGroup>
 	  <Page Update="Export.xaml">
diff --git a/Modules/LuxFilter/LuxFilter.Algorithms/LuxFilter.Algorithms.csproj b/Modules/LuxFilter/LuxFilter.Algorithms/LuxFilter.Algorithms.csproj
index 7d8df59f..fc919aef 100644
--- a/Modules/LuxFilter/LuxFilter.Algorithms/LuxFilter.Algorithms.csproj
+++ b/Modules/LuxFilter/LuxFilter.Algorithms/LuxFilter.Algorithms.csproj
@@ -28,10 +28,8 @@
     <PackageReference Include="SkiaSharp" Version="3.116.1" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.Modules\bin\Debug\net9.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
-  </ItemGroup>
+	<ItemGroup>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
+	</ItemGroup>
 
 </Project>
diff --git a/Modules/LuxFilter/LuxFilter.Benchmark/LuxFilter.Benchmark.csproj b/Modules/LuxFilter/LuxFilter.Benchmark/LuxFilter.Benchmark.csproj
index c0b00dd1..7e10085d 100644
--- a/Modules/LuxFilter/LuxFilter.Benchmark/LuxFilter.Benchmark.csproj
+++ b/Modules/LuxFilter/LuxFilter.Benchmark/LuxFilter.Benchmark.csproj
@@ -19,10 +19,8 @@
     <ProjectReference Include="..\LuxFilter\LuxFilter.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.Modules\bin\Debug\net9.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
-  </ItemGroup>
+	<ItemGroup>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
+	</ItemGroup>
 
 </Project>
diff --git a/Modules/LuxFilter/LuxFilter.TestMain/LuxFilter.TestMain.csproj b/Modules/LuxFilter/LuxFilter.TestMain/LuxFilter.TestMain.csproj
index 1d180cdd..080b47a3 100644
--- a/Modules/LuxFilter/LuxFilter.TestMain/LuxFilter.TestMain.csproj
+++ b/Modules/LuxFilter/LuxFilter.TestMain/LuxFilter.TestMain.csproj
@@ -19,9 +19,7 @@
     <PackageReference Include="Luxoria.SDK" Version="1.0.0" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.Modules\bin\Debug\net9.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
-  </ItemGroup>
+	<ItemGroup>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
+	</ItemGroup>
 </Project>
diff --git a/Modules/LuxFilter/LuxFilter.Tests/LuxFilter.Tests.csproj b/Modules/LuxFilter/LuxFilter.Tests/LuxFilter.Tests.csproj
index 07387401..3e58752e 100644
--- a/Modules/LuxFilter/LuxFilter.Tests/LuxFilter.Tests.csproj
+++ b/Modules/LuxFilter/LuxFilter.Tests/LuxFilter.Tests.csproj
@@ -25,11 +25,9 @@
     <ProjectReference Include="..\LuxFilter\LuxFilter.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.Modules\bin\Debug\net9.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
-  </ItemGroup>
+	<ItemGroup>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
+	</ItemGroup>
 
   <ItemGroup>
     <Using Include="Xunit" />
diff --git a/Modules/LuxFilter/LuxFilter/LuxFilter.csproj b/Modules/LuxFilter/LuxFilter/LuxFilter.csproj
index 0125c346..d071742f 100644
--- a/Modules/LuxFilter/LuxFilter/LuxFilter.csproj
+++ b/Modules/LuxFilter/LuxFilter/LuxFilter.csproj
@@ -34,13 +34,9 @@
   </ItemGroup>
 
   <ItemGroup>
-    <Reference Include="Luxoria.GModules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.GModules.dll</HintPath>
-    </Reference>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
-  </ItemGroup>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.GModules\Luxoria.GModules.csproj" />
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
+	</ItemGroup>
 
   <ItemGroup>
 	<None Remove="Views\FilterView.xaml"></None>	
diff --git a/Modules/LuxImport/LuxImport.Tests/LuxImport.Tests.csproj b/Modules/LuxImport/LuxImport.Tests/LuxImport.Tests.csproj
index 0c1a2597..c64c3b76 100644
--- a/Modules/LuxImport/LuxImport.Tests/LuxImport.Tests.csproj
+++ b/Modules/LuxImport/LuxImport.Tests/LuxImport.Tests.csproj
@@ -15,7 +15,7 @@
     <PackageReference Include="xunit" Version="2.9.2" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
 
-	<PackageReference Include="Luxoria.SDK" Version="1.0.0" />
+	  <PackageReference Include="Luxoria.SDK" Version="1.0.0" />
   </ItemGroup>
 
   <ItemGroup>
@@ -23,9 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.Modules\bin\Debug\net9.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Modules/LuxImport/LuxImport/LuxImport.cs b/Modules/LuxImport/LuxImport/LuxImport.cs
index 42ae27f9..6b30e112 100644
--- a/Modules/LuxImport/LuxImport/LuxImport.cs
+++ b/Modules/LuxImport/LuxImport/LuxImport.cs
@@ -7,7 +7,6 @@
 using Luxoria.Modules.Models.Events;
 using Luxoria.SDK.Interfaces;
 using Luxoria.SDK.Models;
-using Microsoft.UI.Xaml.Controls;
 using System.Diagnostics;
 
 namespace LuxImport;
diff --git a/Modules/LuxImport/LuxImport/LuxImport.csproj b/Modules/LuxImport/LuxImport/LuxImport.csproj
index 57aa4302..5060f10f 100644
--- a/Modules/LuxImport/LuxImport/LuxImport.csproj
+++ b/Modules/LuxImport/LuxImport/LuxImport.csproj
@@ -37,15 +37,10 @@
 		<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.250108002" />
 	</ItemGroup>
 
-
 	<ItemGroup>
-    <Reference Include="Luxoria.GModules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.GModules\bin\Debug\net9.0-windows10.0.26100.0\Luxoria.GModules.dll</HintPath>
-    </Reference>
-    <Reference Include="Luxoria.Modules">
-      <HintPath>..\..\..\Luxoria.App\Luxoria.Modules\bin\Debug\net9.0\Luxoria.Modules.dll</HintPath>
-    </Reference>
-  </ItemGroup>
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.GModules\Luxoria.GModules.csproj" />
+		<ProjectReference Include="..\..\..\Luxoria.App\Luxoria.Modules\Luxoria.Modules.csproj" />
+	</ItemGroup>
 
 
 	<ItemGroup>
diff --git a/Modules/LuxImport/LuxImport/Views/ImportView.xaml.cs b/Modules/LuxImport/LuxImport/Views/ImportView.xaml.cs
index 8d7e78a9..4792d90a 100644
--- a/Modules/LuxImport/LuxImport/Views/ImportView.xaml.cs
+++ b/Modules/LuxImport/LuxImport/Views/ImportView.xaml.cs
@@ -1,5 +1,3 @@
-using LuxImport.Interfaces;
-using LuxImport.Repositories;
 using LuxImport.Services;
 using Luxoria.Modules.Interfaces;
 using Luxoria.Modules.Models.Events;


Reviews:
user: login: github-advanced-security[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-18T10:43:48Z
user: login: github-advanced-security[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-18T12:03:59Z
user: login: github-advanced-security[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-19T07:26:22Z
user: login: Lucas25000
body: work as intended
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-19T12:18:19Z

Review comments:
diff_hunk: @@ -0,0 +1,74 @@
+name: Luxoria Standard Modules Release
+
+on:
+  push:
+
+
+jobs:
+  build-and-upload:
+    runs-on: windows-latest
+
+    strategy:
+      matrix:
+        configuration: [Release]
+        platform: [win-x64]
+    
+    env:
+      Solution_Name: Luxoria.App.sln
+      Framework_Version: net9.0-windows10.0.26100.0
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v3
+
+      - name: Setup .NET SDK
+        uses: actions/setup-dotnet@v3
+        with:
+          dotnet-version: '9.x'
+
+      - name: Setup MSBuild.exe
+        uses: microsoft/setup-msbuild@v1.0.2
+            
+      # Build Luxoria.App
+      - name: Build Luxoria.App
+        run: dotnet build Luxoria.App/Luxoria.App.sln --no-incremental -p:PackOnBuild=false -maxcpucount:1 -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      # Build and upload LuxImport
+      - name: Build LuxImport
+        run: dotnet publish Modules/LuxImport/LuxImport/LuxImport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Upload LuxImport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxImport-${{ matrix.platform }}
+          path: Modules/LuxImport/LuxImport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build and upload LuxFilter
+      - name: Build LuxFilter
+        run: dotnet publish Modules/LuxFilter/LuxFilter/LuxFilter.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Upload LuxFilter artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxFilter-${{ matrix.platform }}
+          path: Modules/LuxFilter/LuxFilter/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build and upload LuxEditor
+      - name: Build LuxEditor
+        run: dotnet publish Modules/LuxEditor/LuxEditor/LuxEditor.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Upload LuxEditor artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxEditor-${{ matrix.platform }}
+          path: Modules/LuxEditor/LuxEditor/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build and upload LuxExport
+      - name: Build LuxExport
+        run: dotnet publish Modules/LuxExport/LuxExport/LuxExport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+      
+      - name: Upload LuxExport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxExport-${{ matrix.platform }}
+          path: Modules/LuxExport/LuxExport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
path: .github/workflows/build-upload-standard-modules.yml
user: login: github-advanced-security[bot]
body: ## Workflow does not contain permissions

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

[Show more details](https://github.com/LuxoriaSoft/Luxoria/security/code-scanning/21)
created_at: 2025-05-18T10:43:48Z
author_association: NONE
diff_hunk: @@ -0,0 +1,74 @@
+name: Luxoria Standard Modules Release
+
+on:
+  push:
+
+
+jobs:
+  build-and-upload:
+    runs-on: windows-latest
+
+    strategy:
+      matrix:
+        configuration: [Release]
+        platform: [win-x64, win-x86, win-arm64]
+    
+    env:
+      Solution_Name: Luxoria.App.sln
+      Framework_Version: net9.0-windows10.0.26100.0
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v3
+
+      - name: Setup .NET SDK
+        uses: actions/setup-dotnet@v3
+        with:
+          dotnet-version: '9.x'
+
+      - name: Setup MSBuild.exe
+        uses: microsoft/setup-msbuild@v1.0.2
+            
+      # Build Luxoria.App
+      - name: Build Luxoria.App
+        run: dotnet build Luxoria.App/Luxoria.App.sln --no-incremental -p:PackOnBuild=false -maxcpucount:1 -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      # Build and upload LuxImport
+      - name: Build LuxImport
+        run: dotnet publish Modules/LuxImport/LuxImport/LuxImport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Upload LuxImport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxImport-${{ matrix.platform }}
+          path: Modules/LuxImport/LuxImport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build and upload LuxFilter
+      - name: Build LuxFilter
+        run: dotnet publish Modules/LuxFilter/LuxFilter/LuxFilter.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Upload LuxFilter artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxFilter-${{ matrix.platform }}
+          path: Modules/LuxFilter/LuxFilter/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build and upload LuxEditor
+      - name: Build LuxEditor
+        run: dotnet publish Modules/LuxEditor/LuxEditor/LuxEditor.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Upload LuxEditor artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxEditor-${{ matrix.platform }}
+          path: Modules/LuxEditor/LuxEditor/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build and upload LuxExport
+      - name: Build LuxExport
+        run: dotnet publish Modules/LuxExport/LuxExport/LuxExport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+      
+      - name: Upload LuxExport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxExport-${{ matrix.platform }}
+          path: Modules/LuxExport/LuxExport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
path: .github/workflows/build-upload-standard-modules.yml
user: login: github-advanced-security[bot]
body: ## Workflow does not contain permissions

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

[Show more details](https://github.com/LuxoriaSoft/Luxoria/security/code-scanning/22)
created_at: 2025-05-18T12:03:59Z
author_association: NONE
diff_hunk: @@ -0,0 +1,133 @@
+name: Luxoria Standard Modules Release
+
+on:
+  push:
+  pull_request:
+    types: [opened, synchronize, reopened]
+
+jobs:
+  build-and-upload:
+    runs-on: windows-latest
+
+    strategy:
+      matrix:
+        configuration: [Release]
+        platform: [win-x64, win-x86, win-arm64]
+
+    env:
+      Solution_Name: Luxoria.App.sln
+      Framework_Version: net9.0-windows10.0.26100.0
+
+    steps:
+      # Checkout the repository
+      - name: Checkout code
+        uses: actions/checkout@v3
+
+      # Set up the .NET SDK (version 9.x)
+      - name: Setup .NET SDK
+        uses: actions/setup-dotnet@v3
+        with:
+          dotnet-version: '9.x'
+
+      # Set up MSBuild for Windows build environment
+      - name: Setup MSBuild.exe
+        uses: microsoft/setup-msbuild@v1.0.2
+            
+      # Build the main Luxoria.App solution
+      - name: Build Luxoria.App
+        run: |
+          if ("${{ matrix.platform }}" -eq "win-x86") {
+            $platformTarget = "x86"
+          } elseif ("${{ matrix.platform }}" -eq "win-x64") {
+            $platformTarget = "x64"
+          } elseif ("${{ matrix.platform }}" -eq "win-arm64") {
+            $platformTarget = "ARM64"
+          } else {
+            throw "Unknown platform: ${{ matrix.platform }}"
+          }
+          dotnet build Luxoria.App/Luxoria.App.sln --no-incremental -p:PackOnBuild=false -maxcpucount:1 -c ${{ matrix.configuration }} -r ${{ matrix.platform }} -p:PlatformTarget=$platformTarget
+        shell: pwsh
+
+      # Build, rename, and upload LuxImport module
+      - name: Build LuxImport
+        run: dotnet publish Modules/LuxImport/LuxImport/LuxImport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Rename LuxImport.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxImport/LuxImport/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxImport.dll"
+          $newName = "LuxImport.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+
+      - name: Upload LuxImport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxImport-${{ matrix.platform }}
+          path: Modules/LuxImport/LuxImport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build, rename, and upload LuxFilter module
+      - name: Build LuxFilter
+        run: dotnet publish Modules/LuxFilter/LuxFilter/LuxFilter.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+      
+      - name: Rename LuxFilter.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxFilter/LuxFilter/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxFilter.dll"
+          $newName = "LuxFilter.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+
+      - name: Upload LuxFilter artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxFilter-${{ matrix.platform }}
+          path: Modules/LuxFilter/LuxFilter/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build, rename, and upload LuxEditor module
+      - name: Build LuxEditor
+        run: dotnet publish Modules/LuxEditor/LuxEditor/LuxEditor.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+      
+      - name: Rename LuxEditor.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxEditor/LuxEditor/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxEditor.dll"
+          $newName = "LuxEditor.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+
+      - name: Upload LuxEditor artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxEditor-${{ matrix.platform }}
+          path: Modules/LuxEditor/LuxEditor/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
+
+      # Build, rename, and upload LuxExport module
+      - name: Build LuxExport
+        run: dotnet publish Modules/LuxExport/LuxExport/LuxExport.csproj -c ${{ matrix.configuration }} -r ${{ matrix.platform }}
+
+      - name: Rename LuxExport.dll
+        run: |
+          $framework = "${{ env.Framework_Version }}"
+          $config = "${{ matrix.configuration }}"
+          $platform = "${{ matrix.platform }}"
+          $publishDir = "Modules/LuxExport/LuxExport/bin/$config/$framework/$platform/publish"
+          $sourcePath = Join-Path $publishDir "LuxExport.dll"
+          $newName = "LuxExport.Lux.dll"
+          Rename-Item -Path $sourcePath -NewName $newName
+        shell: pwsh
+      
+      - name: Upload LuxExport artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: LuxExport-${{ matrix.platform }}
+          path: Modules/LuxExport/LuxExport/bin/${{ matrix.configuration }}/${{ env.Framework_Version }}/${{ matrix.platform }}
path: .github/workflows/build-upload-standard-modules.yml
user: login: github-advanced-security[bot]
body: ## Workflow does not contain permissions

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

[Show more details](https://github.com/LuxoriaSoft/Luxoria/security/code-scanning/23)
created_at: 2025-05-19T07:26:22Z
author_association: NONE

PR comments:
user: login: sonarqubecloud[bot]
created_at: 2025-05-19T07:38:53Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=LuxoriaSoft_Luxoria&pullRequest=209) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=LuxoriaSoft_Luxoria&pullRequest=209&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=LuxoriaSoft_Luxoria&pullRequest=209&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=LuxoriaSoft_Luxoria&pullRequest=209&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=LuxoriaSoft_Luxoria&pullRequest=209&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=LuxoriaSoft_Luxoria&pullRequest=209&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=LuxoriaSoft_Luxoria&pullRequest=209)


author_association: NONE
user: login: LuxoriaAgent
created_at: 2025-05-19T12:19:41Z
body: :tada: This PR is included in version 1.33.1 :tada:

The release is available on [GitHub release](https://github.com/LuxoriaSoft/Luxoria/releases/tag/v1.33.1)

Your **[semantic-release](https://github.com/semantic-release/semantic-release)** bot :package::rocket:
author_association: COLLABORATOR
user: login: LuxoriaAgent
created_at: 2025-05-19T12:26:57Z
body: :tada: This PR is included in version 1.33.1 :tada:

The release is available on [GitHub release](https://github.com/LuxoriaSoft/Luxoria/releases/tag/v1.33.1)

Your **[semantic-release](https://github.com/semantic-release/semantic-release)** bot :package::rocket:
author_association: COLLABORATOR