From 703797bb9709316e4ca8e783961f8af15bdf5418 Mon Sep 17 00:00:00 2001 From: Laurent Trinques Date: Tue, 12 May 2026 22:08:24 +0200 Subject: [PATCH] Update QElectroTech.wxs --- build-aux/windows/QElectroTech.wxs | 327 ++++++++++++----------------- 1 file changed, 133 insertions(+), 194 deletions(-) diff --git a/build-aux/windows/QElectroTech.wxs b/build-aux/windows/QElectroTech.wxs index cb79b73b7..4200870e3 100644 --- a/build-aux/windows/QElectroTech.wxs +++ b/build-aux/windows/QElectroTech.wxs @@ -1,213 +1,152 @@ -name: Windows MSI (WiX v7) + + + -jobs: - build-msi: - name: Build MSI with WiX v7 - runs-on: windows-latest + - steps: - # ---------------------------------------------------------------- - # 1. Checkout (to retrieve QElectroTech.wxs and sources) - # ---------------------------------------------------------------- - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 + + - # ---------------------------------------------------------------- - # 2. Download the portable artifact from the main build - # Requires windows-build.yml to upload an artifact named - # "qelectrotech-windows-portable" (fixed name) - # ---------------------------------------------------------------- - - name: Download portable artifact - uses: actions/download-artifact@v4 - with: - name: qelectrotech-windows-portable - path: artifact\files - run-id: ${{ github.event.inputs.run_id || github.run_id }} - github-token: ${{ secrets.GITHUB_TOKEN }} - repository: ${{ github.repository }} + + + + - # ---------------------------------------------------------------- - # 3. Extraire la version depuis les sources - # ---------------------------------------------------------------- - - name: Extract version - id: version - shell: pwsh - run: | - # Version from qetversion.cpp (same logic as windows-build.yml) - $src = Get-Content "sources\qetversion.cpp" -Raw -ErrorAction SilentlyContinue - if ($src -match 'return QVersionNumber\{([^}]+)\}') { - $ver = $Matches[1] -replace '\s','' -replace ',','.' - } else { - # Fallback: CMakeLists.txt - $cmake = Get-Content "CMakeLists.txt" -Raw - if ($cmake -match 'project\s*\([^)]*VERSION\s+([\d]+\.[\d]+\.[\d]+)') { - $ver = $Matches[1] - } else { - $ver = "0.0.0" - } - } + + + + - # Numeric MSI version: 4 digits required (e.g. 0.100.1.0) - $verMsi = "$ver.0" + + + + - # Short SHA for the display version - $sha = git rev-parse --short HEAD 2>$null - if (-not $sha) { $sha = "unknown" } + + + + - # Cumulative revision number (same calculation as windows-build.yml) - $count = git rev-list HEAD --count 2>$null - $rev = [int]$count + 473 + + + - $verDisplay = "${ver}-r${rev}-${sha}_x86_64-win64" + + + - echo "VERSION_MSI=$verMsi" >> $env:GITHUB_OUTPUT - echo "VERSION_DISPLAY=$verDisplay" >> $env:GITHUB_OUTPUT - Write-Host "Version MSI : $verMsi" - Write-Host "Version display : $verDisplay" + + + - # ---------------------------------------------------------------- - # 4. Installer WiX v7 via dotnet tool - # ---------------------------------------------------------------- - - name: Install WiX v7 - shell: pwsh - run: | - dotnet tool install --global wix --version 7.0.0 - $toolsPath = [System.IO.Path]::Combine($env:USERPROFILE, '.dotnet', 'tools') - echo $toolsPath >> $env:GITHUB_PATH - Write-Host "WiX v7 installé." + + + - # ---------------------------------------------------------------- - # 5. Accepter la licence OSMF WiX v7 - # Official CI/CD method: writes a sentinel file - # that authorises all subsequent wix commands in the job - # ---------------------------------------------------------------- - - name: Accept WiX EULA - shell: pwsh - run: | - wix eula accept wix7 - Write-Host "EULA WiX v7 acceptée." + + + - # ---------------------------------------------------------------- - # 6. Installer l'extension WixUI - # ---------------------------------------------------------------- - - name: Install WiX UI extension - shell: pwsh - run: | - wix extension add WixToolset.UI.wixext/7.0.0 - Write-Host "Extension UI installée." + + + + + + + + + + + - # ---------------------------------------------------------------- - # 7. Check that the WXS file exists in the repository - # ---------------------------------------------------------------- - - name: Check WXS file - shell: pwsh - run: | - $wxs = "build-aux\windows\QElectroTech.wxs" - if (-not (Test-Path $wxs)) { - Write-Error "Fichier WXS introuvable : $wxs" - Write-Host "Contenu de build-aux\windows\ :" - Get-ChildItem "build-aux\windows\" -ErrorAction SilentlyContinue - exit 1 - } - Write-Host "WXS trouvé : $wxs" + + + + + + + + + - # ---------------------------------------------------------------- - # 8. Check the artifact structure and locate files/ - # ---------------------------------------------------------------- - - name: Check artifact structure - shell: pwsh - run: | - Write-Host "=== Contenu de artifact\files (2 niveaux) ===" - Get-ChildItem -Path "artifact\files" -Depth 2 | - Select-Object FullName | Format-Table -AutoSize + + - # Search for qelectrotech.exe in the artifact - $exe = Get-ChildItem -Path "artifact\files" -Filter "qelectrotech.exe" -Recurse | Select-Object -First 1 - if (-not $exe) { - Write-Error "qelectrotech.exe introuvable dans l'artifact" - exit 1 - } - Write-Host "Executable : $($exe.FullName) ($([math]::Round($exe.Length/1MB,1)) MB)" + + + + + + + + + + + + + - # FilesDir = folder containing bin\ - $binDir = $exe.Directory.FullName - $filesDir = Split-Path $binDir -Parent + + - echo "FILES_DIR=$filesDir" >> $env:GITHUB_ENV - Write-Host "FILES_DIR : $filesDir" + + + + + - # ---------------------------------------------------------------- - # 9. Construire le MSI - # ---------------------------------------------------------------- - - name: Build MSI - shell: pwsh - run: | - $version = "${{ steps.version.outputs.VERSION_MSI }}" - $verDisplay = "${{ steps.version.outputs.VERSION_DISPLAY }}" - $filesDir = $env:FILES_DIR - $wxs = "build-aux\windows\QElectroTech.wxs" - $outputName = "QElectroTech-${verDisplay}.msi" - - New-Item -ItemType Directory -Force -Path "dist" | Out-Null - - Write-Host "=== wix build ===" - Write-Host " WXS : $wxs" - Write-Host " Version : $version" - Write-Host " FilesDir : $filesDir" - Write-Host " Output : dist\$outputName" - - wix build $wxs ` - -arch x64 ` - -d "Version=$version" ` - -d "ProductVersion=$verDisplay" ` - -d "FilesDir=$filesDir" ` - -ext WixToolset.UI.wixext ` - -o "dist\$outputName" - - if (-not (Test-Path "dist\$outputName")) { - Write-Error "MSI non généré : dist\$outputName" - exit 1 - } - - $size = [math]::Round((Get-Item "dist\$outputName").Length / 1MB, 1) - Write-Host "MSI généré : dist\$outputName ($size MB) ✓" - echo "MSI_NAME=$outputName" >> $env:GITHUB_ENV - - # ---------------------------------------------------------------- - # 10. Upload de l'artifact MSI - # ---------------------------------------------------------------- - - name: Upload MSI artifact - uses: actions/upload-artifact@v4 - with: - name: qelectrotech-windows-msi - path: dist\*.msi - retention-days: 14 - if-no-files-found: error - - # ---------------------------------------------------------------- - # 11. Summary - # ---------------------------------------------------------------- - - name: Summary - if: always() - shell: pwsh - run: | - Write-Host "=== Résumé build MSI ===" - Write-Host "Version : ${{ steps.version.outputs.VERSION_DISPLAY }}" - Write-Host "WiX : v7.0.0" - Write-Host "Image runner : ${{ runner.os }} / ${{ runner.arch }}" - if (Test-Path "dist\$env:MSI_NAME") { - $size = [math]::Round((Get-Item "dist\$env:MSI_NAME").Length / 1MB, 1) - Write-Host "MSI : $env:MSI_NAME ($size MB) ✓" - } else { - Write-Host "MSI : ÉCHEC ✗" - } + +